{"version":3,"sources":["scripts/app.js"],"names":["AuthInterceptor","$inject","ConfigurationService","angular","module","config","cfpLoadingBarProvider","includeBar","spinnerTemplate","factory","constanteRotas","getServiceHost","hostname","API_ENDPOINT","getWebsocketHost","slice","indexOf","lastIndexOf","ComponentSampleController","$state","moment","ComponentDevelopmentService","ComponentStepService","vm","this","isOpen","onDateChange","diff","componentStep","ComponentSample","Date","DaysCount","disabled","Status","CLOSED","Id","REJECT","profile","CanApprove","CanConsult","CanEdit","Component","IN_PROGRESS","ON_HOLD","init","ComponentSampleDirective","bindToController","restrict","scope","title","dateLabel","replace","templateUrl","controllerAs","controller","directive","ComponentApprovalController","participantsChanged","showRequiredMsg","ComponentApproval","Participants","length","BusinessId","ComponentApprovalDirective","parentForm","approvalRequired","TransitTimeChartController","TransitTimeChartDirective","transclude","freightCostList","params","$document","$translate","LogisticsService","ChartConstants","frequencyOptions","getFrequencyOptions","monthList","getMonthOptions","colors","copy","colorIndex","frequency","find","item","Value","Frequency","Year","getFullYear","Project","instant","mapToLabel","frequencyTitle","Label","Array","prototype","groupBy","prop","reduce","groups","val","push","generateSeriesTT","list","map","TT","generateSeriesLT","LT","Chart","defaults","global","elements","line","fill","groupedByFrequency","groupedByTranMode","graphicMonthYearsBar","graphicMonthYearsLine","labels","colorsTranTime","key","aux","tkey","tran","type","label","backgroundColor","borderColor","data","pointRadius","pointHoverRadius","pointStyle","pointBackgroundColor","dataset","concat","transitData","datasets","getElementById","options","tension","display","text","Alternative","fontSize","padding","fontStyle","tooltips","mode","footerFontStyle","responsive","legend","position","TotalLspChargeableChartController","TotalLspChargeableChartDirective","isUndefined","sortArrayOfObjects","arr","sort","a","b","getColor","fillChartDataList","listDataLsp","dataLsp","value","color","chartData","xColors","i","FreightForwarder","accumulated","RateVariations","forEach","element","CHARGEABLE_WEIGHT","toFixed","borderColors","borderWidth","pos","findIndex","barChartData","callbacks","tooltipItem","datasetIndex","percentage","index","scales","xAxes","stacked","gridLines","drawBorder","ticks","yAxes","id","beginAtZero","scaleLabel","labelString","RateVariationChartController","RateVariationChartDirective","rateVariationList","xLabel","series","rateData","rateOptions","point","radius","fillRateVariationList","generateLabels","isDefined","sortByFrequency","from","Set","serie","s","j","rateVariationItem","positionSerie","rateVariations","dataAux","k","rateVariation","textTranslated","positionLabel","RateVariation","getTitleTranslate","titleTranslated","NationalFreightCostRoadOutboundChartController","NationalFreightCostRoadOutboundChartDirective","generateSeriesFreightCost","FreightCost","generateSeriesGrossWeight","GrossWeight","groupSumWeight","items","x","onlyUnique","self","getMonthName","month","Name","getUniqueCarriers","getMonths","temp","filter","getCarrierValues","carrier","includes","Carrier","getCarrierVolumes","Volume","getCarrierName","getTotalGW","totalGW","groupedByCarrierMode","colorsGraph","colorIndexRecord","dataFrequencyTrip","group","yAxisID","borderDash","callback","NationalFreightCostAirInboundChartController","NationalFreightCostAirInboundChartDirective","getFCostValue","NationalFreightCostAirChartController","NationalFreightCostAirChartDirective","ModeSpendChartController","ModeSpendChartDirective","pop","sortByFOBUSD","FOBUSD","getColorByModal","newDataSet","colorTypeModal","bgColors","Records","frequencyFreightCost","records","freightCost","GroupByField","d","totalFOBUSDTranMode","max","stepSize","LspChargeableChartController","LspChargeableChartDirective","LocalTransportFreigthCostChartController","LocalTransportFreigthCostChartDirective","generateSeriesFreight","Freight","generateSeriesTrip","Trip","groupSum","LandedVariationChartController","LandedVariationChartDirective","landedVariationList","landedData","landedOptions","fillLandedVariationList","listLandedVariation","LandedVariation","resultList","yearSerie","dataSerie","LandedPercent","LandedCostChartController","LandedCostChartDirective","sortByFreightUSD","FreightUSD","freightPercentData","FreightPercent","clearencePercentData","ClearancePercent","landedPercentData","freightData","freightDataItems","allPercentData","yAxis0TickMax","Math","apply","yAxis0StepSize","valuesToTick","indexOfValues","splice","freightPercentTickMax","yAxis1StepSize","freightUsdBorderColors","freightPercentColor","freightUSD","ProjectLabel","footer","tooltipItems","InvoicesIssuedConsolidatedChartController","InvoicesIssuedConsolidatedChartDirective","generateSeriesIssued","QtyIssued","generateSeriesConsolidated","QtyConsolidated","generateSeriesTotalConsolidated","TotalConsolidated","GrossWeightLspOutboundRoadChartController","GrossWeightLspOutboundRoadChartDirective","freightWeightRoadList","Modal","groupedByFrequencyRoad","groupedByCarrierModeRoad","graphicMonthYearsRoadBar","dataFrequency","GrossWeightLspOutboundChartController","GrossWeightLspOutboundChartDirective","freightWeightAirList","groupedByFrequencyAir","groupedByCarrierModeAir","graphicMonthYearsAirBar","GrossWeightChartController","GrossWeightChartDirective","sortByChargeableWeight","ChargeableWeight","grossData","grossDataItems","chargeableWeight","FobChartController","FobChartDirective","fobData","fobDataItems","fobUSD","ChargeableWeightChartController","ChargeableWeightChartDirective","chargeableWeightData","chargeableWeightDataItems","ChannelPerformanceChartController","ChannelPerformanceChartDirective","channelData","channelOptions","fillFreightCostList","getColorByChannel","channel","groupedByChannel","channelTotal","channelFreight","search","CargoRatioChartController","CargoRatioChartDirective","totalChargeableWeightTranMode","LessonLearnFormController","$scope","ToastUtil","lessonLearn","Lesson","initView","model","modelDialog","undefined","close","$dismiss","save","validateFields","parentDialog","addLessonLearn","$close","showToastMessage","ToastType","WARN","LessonLearnFormDirective","ControlPlanFormController","$log","controlPlanStatus","name","styleClass","plan","Index","DueDate","DueDateTemp","format","addControlPlan","isActionInvalid","isInValid","Action","isDueDateInvalid","isStatusInvalid","ControlPlanFormDirective","TechnicalVisitPendingController","$filter","$window","VisitService","DashboardService","USER","localStorage","aliasAqms","parseInt","userID","technicalVisitList","goToTechnicalVisit","go","listTechnicalVisitPending","then","response","visits","atual","filterByUser","len","visit","expired","ApproverName","CreatedById","TechnicalVisitPendingDirective","MilestonePendingController","MilestoneService","milestoneList","milestonesOrder","Milestones","SA01","SA02","SA03","goToMilestone","getDateMilestone","milestone","Deadline","CreatedDate","listMilestonePending","milestones","milestoneDescription","Milestone","MilestoneDescription","Title","ApprovedById","MilestonePendingDirective","ComponentPendingReviewController","componentList","goToComponentDevelopment","listComponentPendingReview","ComponentPendingReviewDirective","VendorNotificationTranslate","$translateProvider","translations","vendor.notification.label.notification","vendor.notification.label.role","vendor.notification.label.status","vendor.notification.label.waiting","vendor.notification.label.approved","vendor.notification.label.rejected","vendor.notification.label.processing.date","vendor.notification.label.notified.date","VendorNotificationController","InputListEmailService","AuthService","MAX_EMAIL_LENGHT","newItem","copyList","listEmail","isDisabled","insertNewEmail","form","$valid","userEmail","getEmailObj","Email","Business","getBusinessId","saveEmail","containsEmail","IsGroup","email","VendorNotification","ExternalEmail","ProcessingDate","containsInListEmail","catch","error","log","Message","obj","externalEmailBusinessDTO","Type","ExternalEmailBusiness","CsActive","listAll","delete","contains","mail","VendorNotificationDirective","titleLabel","disableInput","disableDelete","isRequired","changeFn","statusDocument","targetApproved","SearchVendorCodeSapFantasyNameController","$interval","DefaultService","ListModel","itemClicked","selectedEvt","callSelectedEvt","blurEvent","onBlur","itemFound","vendorObj","vendors","watchList","$watch","initListViewModel","containsInListVendors","watchPartId","isTrue","isFilterPart","loadVendors","addVendor","isValidVendor","selectedVendorsContainsVendor","listModelValues","vendorListObj","validateFormInputList","nameStyle","properties","getProperties","actionMenuItems","getActionMenuItem","ActionMenuEnum","DELETE","deleteVendorFromList","actionMenu","getActionMenu","ActionMenuTypeEnum","INLINE","getListModel","isListComponent","formVendor","nameToValidate","$setValidity","isValid","isString","partId","executeLoadVendors","filterVendor","filterOnlyActive","GenericFilterID","setExtraFilters","autoCompleteVendor","onLoadVendorResponse","FantasyName","trim","vendor","CodeSAP","extraFilters","unshift","SearchVendorCodeSapFantasyNameDirective","TemporaryApprovalController","Justification","temporaryApprovalForm","temporaryApprove","TemporaryApprovalDirective","BASE","$injector","$q","APPROVED","Types","IQC","Key","TRAIL_RUN","PILOT","TEST_PLAN","Tabs","ICQ","enabled","closed","rounds","TrailRun","PilotRun","TestPlan","$http","get","deferred","defer","resolve","promise","reject","getById","componentId","url","step","post","update","patch","listStepsByComponentAndType","getStatusById","found","Object","keys","status","getTypeById","getTabByTypeId","resetTabs","ComponentStepController","JsonPatchUtil","$sce","SourcingService","DialogControllerTemplate","stepStatus","_componentApprovalPatch","_componentSamplePatch","componentType","componentStepType","componentStepTypeObject","NOW","editorConfig","sanitize","toolbar","User","TrackingNumber","Quantity","Engineer","CanAdd","CanDelete","CanView","CanExport","ChangeNotice","StepsInComponent","ComponentStepType","Steps","sampleDateLabel","sampleTitleLabel","ComponentPath","approve","saveOrClosed","saveOrUpdate","filterOpened","onStepClicked","stepClicked","Round","loaded","getStepDetail","onConfirmSave","stepCopy","setStatus","Remark","CreatedBy","UpdatedBy","UpdatedDate","allReject","getHTML","trustAsHtml","componentStepForm","showConfirmDialog","validApproval","isParticipantsListValid","validateReceivedDateAndApprovalDate","querySelector","focus","approvalTitle","participantsListValid","receivedDate","approvalDate","isAfter","formatParticipantList","formatListEmail","onSaveSuccess","onSaveError","StepNotifications","Notifications","notification","generateComponentSamplePatch","generateComponentApprovalPatch","original","op","path","onUpdateSuccess","formatStep","updateComponentInformation","SUCCESS","componentSample","componentSamplePatch","generate","ComponentSampleCopy","ComponentSampleObserver","handleFieldDate","p","startsWith","componentApproval","componentApprovalPatch","ComponentApprovalCopy","ComponentApprovalObserver","participant","newPatch","field","modelCopy","filtered","currentPatch","equals","tabsRule","groupByType","tab","Rounds","Closed","initViewModel","steps","getStepsCounts","DateApproval","lastStep","handleStepStatus","initNewComponentStep","$setPristine","closedOrInprogess","detail","setViewModel","formatDateToViewModel","mapUser","observe","user","jsonpatch","unobserve","date","momentDate","year","StatusDescription","setDayCount","NotificationDescription","isRemarkOptional","message","showWithCloseListener","loadProfileComponentDevelopmentModules","msg","toastType","ERROR","TestInspectionTypeController","ortInspectionTemplateType","TestInspectionType","SequenceNumber","OrtInspectionItemTemplates","ortInspectionTemplateTypeList","oldOrtInspectionTemplateType","ort","CurrentOrtInspectionTemplate","OrtInspectionTemplateTypes","addEventListener","evt","stopPropagation","validateDuplicateType","typeAlreadyExist","IdTemp","getMilliseconds","addInspectionType","TestInspectionTypeDirective","TestInspectionSubTypeController","oldObj","templateItem","Description","OrtInspectionTemplateType","ParamType","ValueReference1","ValueReference2","UnitMeasurement","TestInspectionSubType","TestInspectionRule","parentTestInspectionType","isEditAction","undoChanges","canSave","addSubTypeItem","TestInspectionSubTypeDirective","OrtInspectionInspectTranslate","ort.inspection.inspect.title","ort.inspection.inspect.subtype.label","ort.inspection.inspect.samples.label","ort.inspection.inspect.sequence.label","ort.inspection.inspect.value.label","ort.inspection.inspect.remark.label","ort.inspection.inspect.select.value.placeholder","ort.inspection.inspect.save.success","OrtInspectActionController","OrtInspectionService","$stateParams","groupedResult","remarkObj","partAttachments","EParamType","LESSTHAN","BIGGERTHAN","BETWEEN","EQUALTO","OKNOK","OrtStatus","WAITINGAPPROVAL","RESERVATIONS","okNokList","Result","saveItemTemplate","saveInspectionSubtype","reload","goToInspectionEdit","inspectionId","getUSLValue","OrtInspectionItemTemplate","getLSLValue","isResultValid","result","paramType","valueReference1","valueReference2","parseFloat","updateMetrics","metricResult","Sum","Max","Min","Ok","Nok","SampleValues","TotalResult","Calculated","HasAtLeastOneValidResult","TotalInspected","OrtInspectionResults","OKMetric","NOKMetric","TotalOkMetric","TotalNokMetric","addRemark","getTime","OrtInspectionRemarks","isEditRemark","editRemark","OrtInspectionRemarkAttachments","removeRemark","idItemTemplate","InspectionId","loadItemTemplate","loadOrtAttachments","OrtInspectionId","loadOrtAttachmentsByInspection","PartInspectionInspectTranslate","part.inspection.inspect.title","part.inspection.inspect.metric.mean.label","part.inspection.inspect.metric.stdev.label","part.inspection.inspect.metric.range.label","part.inspection.inspect.metric.cp.label","part.inspection.inspect.metric.cpk.label","part.inspection.inspect.metric.qualityyeld.label","part.inspection.inspect.subtype.label","part.inspection.inspect.samples.label","part.inspection.inspect.sequence.label","part.inspection.inspect.value.label","part.inspection.inspect.remark.label","part.inspection.inspect.select.value.placeholder","part.inspection.inspect.save.success","InspectActionController","PartInspectionService","IqcStatus","PartInspectionItemTemplate","PartInspectionRule","PartInspectionResults","MaxMetric","MeanMetric","getMeanValue","MinMetric","RangeMetric","stdevValue","getStdevValue","StdevMetric","CpMetric","getCpValue","CpkMetric","getCpkValue","sigma6","usl","lsl","isFinite","sigma3","mean","cps","cpi","sumMeanPow","valuePow","variance","sqrt","isNaN","PartInspectionRemarks","PartInspectionRemarkAttachments","loadPartAttachments","PartInspectionId","loadPartAttachmentsByInspection","PartParamFormController","requiredFields","validateFormParam","paramObj","paramForm","validateRanger","clearPatrolResultValues","CheckRadioBtResultType","checked","ready","PartParamFormDirective","PartTemplateItemTranslate","part.template.item.inspection.type.label","part.template.item.inspection.subtype.label","part.template.item.inspection.rule","part.template.item.inspection.unit.measurement","part.template.item.inspection.description.label","part.template.item.parameter.label","PartTemplateItemController","PartInspectionTemplateType","PartInspectionTemplateSubType","parentPartInspectionType","PartInspectionType","PartTemplateItemDirective","InspectionTypeFormController","partInspectionTemplateType","PartInspectionItemTemplates","partInspectionTemplateTypeList","oldPartInspectionTemplateType","part","CurrentPartInspectionTemplate","PartInspectionTemplateTypes","InspectionTypeFormDirective","IshikawaItemsPanelController","DialogController","itemDisabled","remove","showConfirm","removeItemFromList","removeItemListener","action","show","IshikawaItemsPanelDirective","IshikawaDivInputController","viewMode","ishikawaTypeObj","ishikawaType","addNewItem","listContainsItem","itemToInsert","IshikawaType","pdcaType","PDCAType","issueModel","Ishikawas","IshikawaDivInputDirective","ContainmentFormController","What","Wheres","Why","How","Whens","containmentStatus","addContainmentPlan","ContainmentFormDirective","$timeout","lowerLimit","upperLimit","ranges","valueUnit","precision","majorGraduationPrecision","onClick","link","ele","attrs","defaultUpperLimit","defaultLowerLimit","initialized","renderTimeout","gaugeAngle","angle","_width","width","view","height","innerRadius","round","outerRadius","majorGraduations","minorGraduations","majorGraduationLength","minorGraduationLength","majorGraduationMarginTop","majorGraduationColor","minorGraduationColor","majorGraduationTextColor","needleColor","valueVerticalOffset","inactiveColor","transitionMs","majorGraduationTextSize","needleValueTextSize","needle","extractData","maxLimit","minLimit","updateInternalData","svg","d3","select","append","attr","renderMajorGraduations","majorGraduationsAngles","centerX","centerY","pValue","cos1Adj","cos","PI","sin1Adj","sin","cos2Adj","sin2Adj","x1","y1","x2","y2","style","renderMinorGraduations","indexMajor","minorGraduationsAngles","minScale","maxScale","scaleRange","scaleValue","indexMinor","getMajorGraduationValues","pMinLimit","pMaxLimit","pPrecision","majorGraduationValues","getMajorGraduationAngles","graduationsAngles","getNewAngle","scale","linear","range","domain","ratio","newAngle","renderMajorGraduationTexts","pValueUnit","textVerticalPadding","textHorizontalPadding","lastGraduationValue","textSize","dummyText","textWidth","node","getBBox","sin1Factor","renderGraduationNeedle","selectAll","centerColor","needleAngle","needleLen","needleRadius","lineData","pointerLine","interpolate","pg","circleRadius","onresize","$apply","innerWidth","render","$watchCollection","clearTimeout","d3DataSource","min","translate","cScale","arc","startAngle","endAngle","enter","onValueChanged","transition","duration","ease","$rootScope","d3service","onScriptLoad","scriptTag","createElement","async","src","onreadystatechange","readyState","onload","getElementsByTagName","appendChild","NextAlertController","AlertService","DefaultState","canEdit","canEditAlertType","canEditEmissionDate","canEditDueDate","State","AlertId","profileSourcing","profileAlert","moduleAlert","moduleSourcing","profileBackup","searchParams","StartCreatedDate","EndCreatedDate","StartDueDate","EndDueDate","SourcingApprove","UserId","getUserID","Page","MaxPerPage","alertList","validateViewOrEditPermission","editAlertDashboard","goToAlert","listNextAlert","alerts","alert","NextAlertDirective","AutoCompleteVendorTranslate","auto.complete.vendor.directive.placeholder","auto.complete.vendor.directive.required","auto.complete.vendor.directive.load.error","auto.complete.vendor.invalid.msg","auto.complete.vendor.duplicated.msg","AutoCompleteVendorController","AutoCompleteVendorDirective","AutoCompleteVariantOrtTranslate","auto.complete.variant.directive.placeholder","auto.complete.variant.directive.required","auto.complete.variant.directive.load.error","AutoCompleteVariantOrtController","variantObj","variants","Code","loadVariantsOrt","filterVariant","containsInListVariant","watchListVariantObj","newValue","AutoCompleteVariantOrtDirective","filterModel","AutoCompleteVariantTranslate","AutoCompleteVariantController","lastSelectedVariant","updateVariantCopy","updateVariantObjWithLatest","isAlwaysSelectOne","loadVariants","loadVariantByModel","filterByModel","AutoCompleteVariantDirective","AutoCompleteTurnTranslate","auto.complete.turn.directive.placeholder","auto.complete.turn.directive.required","auto.complete.turn.directive.load.error","AutoCompleteTurnController","turnObj","turns","loadTurns","filterTurn","loadTurn","containsInListTurn","AutoCompleteTurnDirective","AutoCompleteTestTypeTranslate","auto.complete.testtype.directive.placeholder","auto.complete.testtype.directive.load.error","AutoCompleteTestTypeController","testTypeObj","testTypeList","loadInspectionType","loadTestType","containsInListTestType","AutoCompleteTestTypeDirective","AutoCompleteTestRuleTranslate","auto.complete.testrule.directive.placeholder","auto.complete.testrule.directive.load.error","AutoCompleteTestRuleController","testRuleObj","testRuleList","loadTestRule","listDisabled","IsListFromUnion","listAssociated","containsInListTestRule","AutoCompleteTestRuleDirective","AutoCompleteTestInspecTypeTranslate","auto.complete.testinspectype.directive.placeholder","auto.complete.testinspectype.directive.load.error","AutoCompleteTestInspectionTypeController","inspecTypeObj","inspecTypeList","loadTestInspectionType","containsInListTestInspectionType","AutoCompleteTestInspectionTypeDirective","AutoCompleteTestInspecSubTypeTranslate","auto.complete.subtype.directive.placeholder","auto.complete.subtype.directive.load.error","test.ort.type.table.subtype.label","AutoCompleteTestInspecSubTypeController","lastSelectedSubType","updateSubTypeCopy","subTypeObj","subTypes","updateSubTypeObjWithLatest","loadSubTypes","filterSubType","loadTestInspectionSubType","containsInListSubType","loadSubTypesByInspecType","filterInspecType","filterByInspecType","watchListSubTypeObj","AutoCompleteTestInspecSubTypeDirective","AutoCompleteTasktypeTranslate","auto.complete.tasktype.directive.placeholder","auto.complete.tasktype.directive.required","auto.complete.tasktype.directive.load.error","AutoCompleteTasktypeController","tasktypeObj","tasktypes","loadTasktypes","filterTasktype","loadTypes","containsInListTasktype","AutoCompleteTasktypeDirective","AutoCompleteSynthesisTranslate","auto.complete.synthesis.directive.placeholder","auto.complete.synthesis.directive.load.error","AutoCompleteSynthesisController","isLocaleEn","synthesisObj","synthesisList","NameEn","NamePt","loadSynthesis","containsInListSynthesis","watchLocaleChange","defaultLanguage","AutoCompleteSynthesisDirective","AutoCompleteStationTranslate","auto.complete.station.directive.placeholder","auto.complete.station.directive.required","auto.complete.station.directive.load.error","AutoCompleteStationController","stationObj","stations","loadStations","filterStation","DependencyFilterId","filterSection","containsInListStation","watchStationObj","AutoCompleteStationDirective","AutoCompleteSectionTranslate","auto.complete.section.directive.placeholder","auto.complete.section.directive.required","auto.complete.section.directive.load.error","AutoCompleteSectionController","sections","sectionObj","filterBusiness","loadSections","param","containsInListSection","AutoCompleteSectionDirective","AutoCompleteRequestTypeTranslate","auto.complete.request.directive.placeholder","auto.complete.request.directive.required","auto.complete.request.directive.load.error","AutoCompleteRequestTypeController","requestTypeObj","requestTypes","loadRequestTypes","filterRequestType","orderByTitle","filterCategory","Category","containsInListRequestType","category","filterByCategory","watchListFilterCategory","AutoCompleteRequestTypeDirective","AutoCompleteProjectTranslate","auto.complete.project.directive.placeholder","auto.complete.project.directive.required","auto.complete.project.directive.load.error","AutoCompleteProjectController","lastSelectedProject","atualizarModel","modelIsId","projectObj","projectName","updateProjectCopy","getProjectFromId","projectId","projects","loadProjects","filterProject","filterByCompany","CompanyId","getCompanyId","containsInListProject","isOnlySearch","loadProjectsByClient","filterClient","ClientId","watchClientObj","filterByClient","AutoCompleteProjectDirective","AutoCompletePartInspecTypeTranslate","auto.complete.partinspectype.directive.placeholder","auto.complete.partinspectype.directive.load.error","AutoCompletePartInspectionTypeController","loadPartInspectionType","containsInListInspectionType","AutoCompletePartInspectionTypeDirective","AutoCompletePartTypeTranslate","auto.complete.parttype.directive.placeholder","auto.complete.parttype.directive.load.error","AutoCompletePartTypeController","partTypeObj","partTypeList","loadPartType","AutoCompletePartTypeDirective","AutoCompletePartRuleTranslate","auto.complete.partrule.directive.placeholder","auto.complete.partrule.directive.load.error","AutoCompletePartRuleController","partRuleObj","partRuleList","loadPartRule","containsInListPartRule","AutoCompletePartRuleDirective","AutoCompletePartTranslate","auto.complete.part.directive.placeholder","auto.complete.part.directive.load.error","AutoCompletePartController","partObj","partList","loadParts","loadPart","containsInListPart","AutoCompletePartDirective","AutoCompleteModelTranslate","auto.complete.model.directive.placeholder","auto.complete.model.directive.required","auto.complete.model.directive.load.error","AutoCompleteModelController","modelObj","models","modelVariants","Variants","loadModels","containsInListModel","loadModelByVariant","watchListFilterClient","watchListFilterVariant","watchModelObj","filterByVariant","AutoCompleteModelDirective","AutoCompleteLicenseTypeController","business","licenseObj","licenses","loadLicenses","filterLicense","listAllLicenseTypes","containsInListLicense","AutoCompleteLicenseTypeDirective","AutoCompleteLicenseTypeTranslate","auto.complete.license.type.directive.placeholder","auto.complete.license.type.directive.required","auto.complete.license.type.directive.load.error","AutoCompleteLicenseController","listAllLicenses","code","AutoCompleteLicenseDirective","AutoCompleteLicenseTranslate","auto.complete.license.directive.placeholder","auto.complete.license.directive.required","auto.complete.license.directive.load.error","AutoCompleteDocumentFlowController","DocumentFlowService","documentFlowObj","documents","Subject","containsInListDocumentFlows","loadDocumentFlows","addDocumentFlow","isValidDocumentFlow","selectedDocumentFlowsContainsDocumentFlow","documentFlowListObj","deleteDocumentFlowFromList","formDocumentFlow","executeLoadDocumentFlows","DocumentFlows","filterDocumentFlow","autoCompleteDocumentFlow","onLoadDocumentFlowResponse","documentFlow","AutoCompleteDocumentFlowDirective","AutoCompleteClientTranslate","auto.complete.client.directive.placeholder","auto.complete.client.directive.required","auto.complete.client.directive.load.error","AutoCompleteClientController","lastSelectedClient","clientDefault","updateClientCopy","clientObj","clients","updateClientObjWithLatest","loadClients","loadClientByProject","ProjectId","loadClientByModel","ModelId","watchListFilterModel","filterByProject","AutoCompleteClientDirective","AutoCompleteAreaTranslate","auto.complete.area.directive.placeholder","auto.complete.area.directive.required","auto.complete.area.directive.load.error","AutoCompleteAreaController","areaObj","areas","loadAreas","filterArea","containsInListArea","AutoCompleteAreaDirective","AutoCompleteContractController","contractObj","contracts","containsInListContracts","load","addContract","isValidContract","selectedContractsContainsContract","contractListObj","deleteContractFromList","executeLoad","filterContract","Rescinded","listAllContracts","onLoadResponse","Vendor","dynamicSort","contract","property","sortOrder","substr","localeCompare","AutoCompleteContractDirective","QuotesController","Idle","IndexConstant","QuotesReportService","yearDate","weekOfYear","MonthList","ProjectList","getProjectOptions","FrequencyList","searchParam","Start","End","maxWeekOfYear","quotesPeriod","ordersPeriod","constructor","weeksInYear","setOptions","closedQuotes","content","closedOrders","getQuotesData","use","res","opened","setPeriodLabels","asError","isoWeek","onChangeFrequency","startLessEnd","period","downloadChart","canvasChartId","html2canvas","document","onrendered","canvas","file_name","canvasChartElement","imgChartYear","toDataURL","href","target","download","click","unregister","$on","validateViewPermission","validateEditOrConsultPermission","validateDeletePermission","hasLoad","validateAddPermission","validateApprovePermission","hasApprovePermission","language","AcquisitionApprovalReportController","ApprovalRouteService","AcquisitionReportService","documentStatus","ONGOING","PENDINGAPPROVAL","CANCELED","disableExport","CreatedDateStart","CreatedDateEnd","DeadlineDateStart","DeadlineDateEnd","RequestType","RequestBy","ListPO","UserLoggedId","statusList","buildSearchParam","clearSearchParams","export","exportApproval","newFIle","Blob","fileURL","URL","createObjectURL","body","UsersTelegramListController","AcquisitionRisksService","$templateCache","AcquisitionRiskService","listTelegramUsers","userForm","listUserValues","listUser","deleteUserTelegram","loadListUsersTelegram","HttpStatusUnauthorized","HttpStatusCodeConflict","addUser","isValidUser","selectedUsersContainsUser","Company","saveUserTelegram","users","listUsersTelegram","loadUser","loadInputUsers","updateList","loadProfileModules","TaskItem","taskDirective","approveIcon","delayIcon","priorityIcon","clazz","task","taskLate","actionEdit","getAproveIcon","KanbanStatus","getPriority","Priority","getDelayPath","getLetters","NameLetters","GroupNameLetters","getStatusTask","dataActual","setHours","duoDate","setTime","parse","DuoDate","getDateIcon","dt2","dt1","taskArchivedItem","statusStyle","ETaskStatus","APPROVEPENDING","ACCEPTED","CANCELLED","REJECTED","getStatus","VendorService","VENDOR_BASE","VendorTypeConstant","CadastralSituationConstant","RegistrationStatusConstant","vendorTypeOptions","cadastralSituationOptions","registrationStatusOptions","statusOptions","constantToList","Checked","constant","mapper","listVendors","listVendorsAutocomplete","downloadAll","filtro","responseType","getVendorTypeOptions","getCadastralSituationOptions","getRegistrationStatusOptions","getStatusOptions","VendorListController","FileService","HTTP_STATUS_CONFLICT","canAdd","canDelete","canView","canApprove","canExport","vendorOriginList","registrationStatusList","cadastralSituationList","vendorTypeList","itensPerPageList","before","after","itemPerPage","totalLista","KeyWord","Origin","StartDate","FinalDate","Address","District","City","UF","Site","RegistrationStatus","CadastralSituation","clearSearchFields","shouldShow","changeItemsPerPage","onPageChange","loadVendorType","loadVendorRegistrationStatus","loadCadastralSituationList","loadVendorOrigin","validateExportPermission","page","searchVendors","formatResponse","total","sessionStorage","getItem","JSON","removeItem","create","stringify","setItem","createVendor","edit","editVendor","vendorId","removeVendor","current","openSite","site","open","file","FileName","contractList","componentDevelopmentList","createTechnicalVisit","createMilestone","createMilestones","createAvaliation","exportToExcel","exportVendors","getBusinessName","onResponseError","VendorOrigin_id","listAllVendorOrigin","formatUpdatedRegister","formatRegistrationStatus","formatTypes","formatAttachment","formatVendorNullValues","Attachment_Id","Attachment","Path","Attachment_Path","Attachment_FileName","types","join","UpdatedRegister","ticksToMicrotime","epochMicrotimeDiff","abs","setFullYear","VendorController","canConsult","_patch","DIRECT_TYPE","VendorNotifications","ProductLine","EconomicActivity","Origins","TechnicalVisit","VendorAttachment","Contacts","newOrigin","isTechnicalVisitDisabled","observer","originalAttachment","Contact","ContactUs","Phone","Department","isContactListValid","saveVendor","parseVendor","onSaveVendorError","generatePatch","replaceUser","replaceUserExists","updateVendor","vendorForm","exporting","isVendorOriginListValid","removeOrigin","addOrigin","showOriginDuplicatedMessage","isValidOrigin","findOriginAnyMatch","origin","saveContact","showPhoneDuplicatedMessage","isValidContact","invalid","contact","isEditingContact","updateContact","addNewContact","editContact","ContactIndex","removeContact","clearContactFormFields","onContactChange","onInputPhoneChanged","originsChanged","phonesChanged","onTypeChanged","handleDirectTypeChecked","c","isArray","onCadastralSituationChanged","onRegistrationStatusChanged","isUFInvalid","$submitted","$error","pattern","uf","isEmailInvalid","vendorContactsForm","fieldKey","isCodeSAPInvalid","isInvalidField","isSiteInvalid","onChangeStatus","vendorOrigin","filterContactByName","existsContact","contactus","valid","vendorCopy","mapToContact","Vendor_Id","onlyChecked","mapToId","o","isDirectTypeChecked","getVendorById","validateSavePermission","initOriginList","formatDate","createdDate","setUpdatedBy","setCreatedBy","setVendorTypesViewModel","setCadastralSituationViewModel","setRegistrationStatusViewModel","setStatusViewModel","setContactsViewModel","setVendorOriginsViewModel","setNotificationsViewModel","notifications","option","mapVendorType","setComboValue","tmpContacts","listAllActiveVendorOrigin","serverMsg","errorMsg","TECHNICAL_VISIT_BASE","listVisits","technicalVisit","VisitListController","dateNow","finalStatus","resolveStatusCss","isApproverOrCreator","ApproverId","searchVisits","getStatusDescription","statusId","str","verifyVisitExpired","visitDate","dateVisitTechnical","isBefore","searchVisit","loadProfileTechnicalVisitModules","hasApproveAndViewPermission","createVisit","editVisit","removeVisit","exportVisits","TechnicalVisitController","PENDING_APPROVAL","ON_GOING","technicalVisitId","nextStatus","editing","isCreator","isApprover","Attachments","Accepted","Points","sendApproval","isFieldInvalid","errorKey","array","isAprrover","ApprovedBy","isOnGoing","isPendingApproval","generateVisitToSaveUpdate","approved","createdBy","saveVisit","technicalVisitForm","onEditError","checkCanEdit","setAttachmentViewModel","technicalVisitCopy","attachments","patchIsNotEmpty","onSaveVisitError","RESOURCE_BASE","TEMPORARYWAIVER","listMilestones","listMilestonesByVendor","VendorId","MilestoneListController","loadProfileSupplierApprovalMilestonesModules","editMilestone","searchMilestone","searchMilestones","getMilestoneDescription","removeMilestones","exportMilestones","MilestoneController","states","showApproveButton","showSaveButton","showRejectButton","showTemporaryWaiverApprovalButton","showSendApprovalButton","canEditRemark","showJustification","canEditAttachment","initStates","vendorList","milestoneId","TechnicalVisitApproved","nextMilestone","isRemarkInvalid","justification","deadline","showTemporaryApprovalJustificationDialog","onVendorSelected","setMilestone","clearMilestone","lastMilestone","filterLastMilestone","setNextMilestone","next","showMilestoneToastError","prev","isApproverInvalid","convertMilestone","onSaveMilestoneError","approvedId","creatorId","formatMilestoneToSave","milestoneCopy","approver","milestoneForm","Other","initStateOther","Default","Approver","initStateApprover","Creator","initStateCreator","stateOther","pending","ongoing","temporary","Pending","OnGoing","Temporary","handleCurrentState","creator","LogisticTranslate","sourcing","kpi","import","tabTitle","zmph","fi014","worksheet","SourcingKpiImportService","ACTIVE","INACTIVE","ZMPH","FI014","freightCostWorksheet","profileModule","UserProfileModule","getUserProfileBusiness","ModuleName","loadModules","SourcingKpiImportListController","TypeList","itemList","WorksheetFile","FilePath","Model","importForm","hasFileWorksheet","onCloseImportErrorList","errors","confirmSaveFile","parseImport","Count","Errors","attachment","filePath","fileName","getStatusName","statusTitle","getType","SourcingTranslate","contract.label.area","contract.identification","new.title.contract","title.contract","contract.type.buyandsell","contract.type.lending","contract.type.product","contract.type.rental","contract.type.service","contract.status.current","contract.status.expired","contract.status.rescinded","contract.status.approvalroute","error.contract.search","contract.remove.success","contract.remove.error.conflict","contract.remove.error","label.new.contract","contract.label.id","contract.placeholder.id","contract.label.archivecode","contract.placeholder.archivecode","contract.label.owner","contract.label.type","contract.placeholder.type","contract.label.status","contract.placeholder.status","contract.label.startdate","contract.label.expirationdate","contract.list.notfound","contract.financial.not.found","contract.label.vendor","contract.label.aging","contract.label.department","contract.label.remark","contract.placeholder.vendor","contract.label.start.date","contract.label.end.date","contract.label.expiration.date","contract.label.paymentterms","contract.label.object","contract.actionstatus.identification","contract.label.actionstatus.date","contract.label.actionstatus.description","contract.label.fixed","contract.label.technicalvisit","contract.label.milestone","contract.update.success","contract.save.success","label.edit.contract","contract.remark.title","contract.remark","contract.actionstatus.duplicated","contract.dates.invalid","contract.financial.identification","contract.financial.year","contract.inactive.vendor","auto.complete.contract.directive.placeholder","auto.complete.contract.invalid.msg","auto.complete.contract.duplicated.msg","contract.change.view.list.label","contract.change.view.graphic.year.label","contract.change.view.graphic.year.title","contract.change.view.graphic.month.label","contract.change.view.graphic.month.title","contract.label.start.year","contract.label.end.year","contract.placeholder.year","contract.required.msg","contract.view.graphic.years.invalid","contract.view.graphic.years.many","contract.month.jan","contract.month.fev","contract.month.mar","contract.month.apr","contract.month.may","contract.month.jun","contract.month.jul","contract.month.aug","contract.month.sep","contract.month.oct","contract.month.nov","contract.month.dec","","ContractService","BUY_AND_SELL","LENDING","PRODUCT","RENTAL","SERVICE","CURRENT","EXPIRED","RESCINDED","APPROVAL_ROUTE","ContractRoute","$stateProvider","state","views","signin-view","main-view","menuName","authorize","ContractController","MessageUtil","contractId","canEditVendor","ContractNotifications","ActionStatus","addActionStatus","actionStatusExists","ActionStatusIndex","actionStatus","Contract","deleteActionStatus","editActionStatus","isEditingActionStatus","onConfirmUpdate","remark","onSaveContractError","vendorHasTechnicalVisit","vendorSituation","HasMilestoneApproved","HasTechnicalVisitApproved","onContractDateChanged","fillContractValueGrid","$broadcast","some","ac","isDateEqual","date1","date2","isSame","Consult","initConsultState","consult","notes","contractForm","validateStartDateAndExpirationDate","startDate","expirationDate","ExpirationDate","Values","contractValue","onSaveContractSuccess","formatContractToUpdate","updated","Owner","ContractCopy","typeList","initContractViewModel","hintMsg","loadProfileContractModules","getContract","ArchiveCode","Area","Fixed","PaymentTerms","ContractValueGridRecords","removeHtmlTags","contractValues","textHtml","div","innerHTML","textContent","innerText","ContractValueController","ContractValueDirective","ContractValueMonthLength","ContractValueMonths","contractValueGridRecords","calculateYTD","event","args","financialEditing","setFinancialEditing","contractValueForm","$invalid","onContractValueChanged","gridRecord","el","YTD","ytd","startYear","endYear","include","exclude","sortByYear","findContractValueGridRecordByYear","setContractValue","financial","elementMonth","getMonth","values","createContractValues","setContractValueDisabled","Disabled","isContractValueDisabled","contractStartDate","startOf","contractExpirationDate","endDate","endOf","toDate","add","ContractListController","intervalEvent","dataRefreshInterval","OwnerId","AreaId","View","StartYear","EndYear","FilterByCodeSAPOrTitle","lineOptions","GraphicMonthYears","currentSlide","searchContract","setViewModelGraphicYear","setViewModelGraphicMonth","editContract","createContract","exportContract","viewAsGraphicYear","viewAsGraphicMonth","viewAsList","resetIntervalEvent","cancel","setIntervalEvent","today","TypeDescription","generateCharDataYear","chart_area","scrollToElementAnimated","generateCharDataMonth","unwatch","setDataRequestInterval","generateSeries","intersect","grouppedByYear","graphicMonthYear","dataValues","vendorData","suggestedMin","HEADER","getDefaultLanguage","watch","ComponentRemarkController","ComponentRemarkDirective","remarkInvalid","getSize","parentDialogSize","isConfirmDisabled","confirm","onRemarkChanged","component.development.identification","new.title.component.development","title.component.development","component.development.approved.error","component.development.approved.supplierApprovalSheet.error","component.development.id.label","component.development.id","component.development.partnumber","component.development.current.step","component.development.spent.days","component.development.department","component.development.department.area","component.development.requester","component.development.sourcing.responsible","component.development.vendor","component.development.project","component.development.status","component.development.status.inprogress","component.development.status.onhold","component.development.status.approved","component.development.status.reject","component.development.status.completed","component.development.status.canceled","component.development.step.status.approved","component.development.step.status.inprogress","component.development.step.status.closed","component.development.step.status.reject","component.development.placehoder.name","component.development.placehoder.part.number","component.development.placehoder.id","error.component.development.search","component.development.remove.success","component.development.remove.error.conflict","component.development.remove.error","label.new.component.development","component.development.placeholder.id","component.development.placeholder.status","component.development.list.notfound","component.development.placeholder.vendor","component.development.update.success","component.development.save.success","label.edit.component.development","component.development.meterial.description","component.development.price.kpcs","component.development.vendorprice.duplicated","component.development.vendor.price","component.development.values.empty","component.development.okNok","component.development.remark","component.development.labtest.ecr.mco.title","component.development.labtest","component.development.labtest.information","component.development.ecr","component.development.eco","component.development.ecr.information","component.development.number","component.development.open.date","component.development.open.by","component.development.mco","component.development.openingdate.error","component.development.remark.title","component.development.vendorprice.vendor.required","component.development.vendorprice.price.required","component.tab.identification","component.tab.iqc","component.tab.trail.run","component.tab.pilot","component.tab.test.plan","component.sample.title","component.sample.date.label","component.approval.iqc.title","component.approval.trail.run.title","component.approval.pilot.title","component.approval.test.plan.title","component.approval.date.label","component.approval.participants.label","component.step.status.inprogress","component.step.status.rejected","component.step.status.approved","component.step.reject.button.label","component.step.close.button.label","component.step.approve.button.label","component.sample.quantity","component.sample.trackingnumber","component.sample.componentengineer","component.sample.sourcingengineer","component.sample.receiver","component.sample.report.received.label","component.step.update.success","component.step.save.success","component.step.closed.success","component.step.remark.dialog.title","component.step.closed.remark","component.step.closed.remark.show","component.step.reject.last","componentstep.type.unavailable","error.component.step","component.step.participants.required","component.approval.testplan.senddate.label","component.approval.testplan.sampleDateLabel.label","component.approval.testplan.deadline.label","component.step.approval.user.required","component.sample.testplan.title","component.development.dueDate","component.development.sd","component.development.sd.hint","component.development.priority","component.development.priority.low","component.development.priority.medium","component.development.priority.high","component.development.supplierapprovalsheet","component.development.reviewed","component.development.pending","component.development.commodity","component.development.typematerial","component.development.developmentreason","component.development.report","component.step.dates.invalid","component.step.dates.test_plan.invalid","iqc.approved.by","component.step.required.fields","component.send.email","component.label.no","component.label.yes","component.placeholder.supplierapprovalsheet","component.export.label","btn","xls","pdf","idenfication","all","summary","partNumber","updatedBy","updatedDate","dueDate","sd","priority","commodity","review","typeMaterial","developmentReason","department","requester","sourcingResponsible","project","materialDescription","vendorAndPrice","labTests","ecr","mco","eco","stage","qtyDaysInPhase","receiptDate","qtySample","trackingNumber","globalComp","globalSourc","deliveredTo","stageApproval","approvedBy","participants","qty","ComponentDevelopmentStatus","exportPDF","getLastStepApproved","component","goToComponentDevelopmentList","setComponentDevelopmentStatus","getComponentDevelopmentStatus","ComponentDevelopmentRoute","ComponentDevelopmentListController","$uibModal","components","PartNumber","Requester","Responsible","DevelopmentReason","searchComponents","editComponentDevelopment","createComponentDevelopment","serialize","prefix","hasOwnProperty","v","exportPdf","fields","assign","exportXls","openToExport","modalInstance","animation","size","ariaLabelledBy","ariaDescribedBy","resolveStatus","StatusClass","ClassCss","Supplierapprovalsheet","ComponentDevelopmentExportModalController","$uibModalInstance","allSelected","exportAll","exportSummary","identification","developmentStatus","price","phaseStatus","globalCompEng","globalSourcEng","approvalBy","trackingNumberApproval","globalCompEngExclusive","optionsInitialData","dismiss","toggleAll","toggleSection","toggleSummary","sectionOptionClicked","section","checkToggleSection","checkToggleAll","forAll","optionSelected","ComponentDevelopmentEditController","MessageError","Price","onAreaSelected","area","onProjectSelected","addValue","ValueExists","deleteValue","canSaveForm","changeReview","validateOpenDate","openDate","ECR","OpeningDate","MCO","ECO","vp","SD","onSaveComponentDevelopmentSuccess","onSaveComponentDevelopmentError","formatComponentToUpdate","responseSteps","Updater","OpenedBy","Number","ComponentCopy","getComponentDevelopment","initComponentDevelopmentViewModel","CreationDate","UpdateDate","MaterialDescription","LabTest","LabTestRemark","SupplierApprovalSheet","Commodity","TypeMaterial","AttachmentsLabTests","mapArea","mapProject","AvaliationService","avaliation","listAvaliations","listAvaliationByVendor","AvaliationListController","ViewBy","CategoryList","avaliations","chartAvaliations","Keyword","frequencyList","getDescriptionToDelete","openChartAvaliation","viewAsGraphic","searchAvaliation","validStartYearEndYear","searchAvaliations","generateCharData","editAvaliation","removeAvaliation","getFrequencyName","getFrequency","frequencys","record","viewType","ticksMax","groupedByVendor","vendorAvaliations","toLowerCase","avals","aval","loadProfileSupplierEvaluationModules","AvaliationController","avaliationId","WithMilestoneApproved","Avaliation","Scores","Month","Quality","Logistics","Technology","Total","ScoreEdit","setScoreEditing","avaliationForm","maxCheck","object","maxLength","isNumeric","theEvent","keyCode","which","String","fromCharCode","regex","test","returnValue","preventDefault","convertAvaliation","onSaveAvaliationError","formatAvaliationToSave","AvaliationCopy","removePatchOperation","scoreValid","score","existAvaliationScores","Editing","initEditingState","editingState","created","EnvironmentalService","Protocols","validateEditOrViewPermission","getProtocols","moduleSgi","editEnvironmental","internal","environmental","indirect","licenseId","EnvironmentalListController","licenseTypes","Internal","LicenseTypeId","Protocol","EmissionStart","EmissionEnd","ExpirationStart","ExpirationEnd","environmentalList","totalList","goToEnvironmental","goToInternalEnvironmental","downloadFile","licenseDueDateColor","ProtocolActive","getFilesName","contacsVendor","contacs","EnvironmentalEditController","LicenseService","environmentalId","Environmental","Licenses","LicenseDirect","setViewModelLicenseDirect","LicenseIndirect","setViewModelLicenseIndirect","formIndirectSubmit","formDirectSubmit","EditLicenseDirect","EditLicenseIndirect","goToList","getTitlePage","buttonSaveClick","addLicense","Indirect","License","license","licenseValidForm","validateEmissionDateAndExpirationDate","EmissionDate","editItem","updateItem","onVendorLicenseSelected","isRequiredVendor","isRequiredLicenseType","LicenseType","isRequiredNumber","isRequiredEmissionDate","isRequiredExpirationDate","licenseEmissionDate","licenseExpirationDate","emissionDate","newLicense","environmentalCopy","TestOrtTypeTranslate","title.test.ort.type","test.ort.type.name.id.label","test.ort.type.name.id.placeholder","test.ort.type.table.testinspection.label","test.ort.type.table.business.label","test.ort.type.delete.success","test.ort.type.delete.error","test.ort.type.new.label","test.ort.type.edit.label","test.ort.type.select.business.label","test.ort.type.identification.label","test.ort.type.subtype.identification.label","test.ort.type.save.success","test.ort.type.save.error","test.ort.type.load.error","test.ort.type.validation.company","test.ort.type.search.error","test.ort.type.subtype.label","test.ort.type.subtype.placeholder.label","test.ort.type.subtype.duplicated.error.msg","test.ort.type.deleted.failed","test.sub.type.settings.deleted.failed","TestOrtTypeService","testOrtType","loadById","TestOrtTypeRouter","TestOrtTypeListController","testOrtTypeList","IdOrName","clearFields","setFoucusElement","searchTestOrtType","keyEvent","idStyle","getCsActiveLabel","getCsActiveCss","EDIT","deleteIqcType","csActive","statusKey","input","TestOrtTypeEditController","ShiftTranslate","settings.shift.page.name.label","settings.shift.name.label","settings.shift.table.company.label","settings.shift.status.label","settings.shift.search.hint.status.label","settings.shift.btn.new.label","settings.shift.edit.label","settings.shift.search.name.hint.msg","settings.shift.placeholder.name","settings.shift.list.error","shift.same.name.error","settings.shift.edit.name.required.msg","settings.shift.edit.area.acordion.title","settings.shift.edit.identification.acordion.title","settings.shift.edit.save.error.msg","settings.shift.edit.save.success.msg","settings.shift.delete.success.msg","settings.shift.delete.error.msg","settings.shift.deleted.failed","settings.shift.starting.time.label","settings.shift.time.interval.label","settings.shift.final.time.label","settings.shift.placeholder.starting.time","settings.shift.placeholder.time.interval","settings.shift.placeholder.final.time","ShiftService","listAllShift","shift","ShiftRouter","ShiftListController","shiftList","searchShift","setStatusInSearchParams","statusModel","getStatusLabel","ShiftEditController","idToEdit","StartingTime","TimeInterval","FinalTime","saveShift","validateTimeInterval","setValidity","isBetween","finalTime","startingTime","timeInterval","shiftForm","SettingsTranslate","label.new.project","label.edit.project","title.project","project.placeholder.name.id","label.clear.button","placeholder.search.button","project.label.active","project.label.inactive","label.address","project.not.found","project.identification","project.label.name","project.label.name.id","project.label.business","project.label.status","project.label.logo","project.label.client","project.placeholder.name","project.placeholder.address","project.placeholder.contact","project.save.success","error.project.search","project.deleted.success","project.deleted.failed","project.save.failed","client.acordion.title","label.business","project.placeholder.company","project.placeholder.business","project.validation.company.required","project.validation.business.required","ProjectService","deleteAssociation","IdProject","IdClient","ProjectRouter","ProjectController","ModelService","BusinessService","businesss","BusinessComboBox","ProjectClients","Clients","loadBusiness","listByCompany","ProjectListController","$location","$anchorScroll","projectList","searchProject","validateSys","isSysAdmin","label.new.production.line","label.edit.production.line","label.name.id","title.production.line","production.line.placeholder.name.id","production.line.label.active","production.line.label.inactive","production.line.not.found","production.line.label.business","input.station.directive.placeholder","input.station.label","production.line.section.acordion.title","production.line.label.section","production.line.label.status","production.line.label.limited","production.line.identification","production.line.placeholder.section","production.line.placeholder.business","production.line.validation.section.required","production.line.validation.business.required","production.line.validation.section.business","production.line.save.success","error.production.line.search","production.line.deleted.success","input.station.directive.station.alread.inlist.warn","production.line.deleted.failed","production.line.station.deleted.failed","ProductionLineService","productionLine","validateStationAssociation","ProductionLineRouter","ProductionLineController","Section","Stations","setBusinessToEdit","loadBussiness","validate","promisseProductionLine","ProductionLineListController","PartIqcTypeTranslate","title.part.iqc.type","part.iqc.type.name.id.label","part.iqc.type.name.id.placeholder","part.iqc.type.table.partinspection.label","part.iqc.type.table.business.label","part.iqc.type.delete.success","part.iqc.type.delete.error","part.iqc.type.new.label","part.iqc.type.edit.label","part.iqc.type.select.business.label","part.iqc.type.identification.label","part.iqc.type.subtype.identification.label","part.iqc.type.save.success","part.iqc.type.save.error","part.iqc.type.load.error","part.iqc.type.validation.company","part.iqc.type.search.error","part.iqc.type.subtype.label","part.iqc.type.subtype.placeholder.label","part.iqc.type.subtype.duplicated.error.msg","part.type.settings.deleted.failed","part.sub.type.settings.deleted.failed","PartIqcTypeService","partIqcType","PartIqcTypeRouter","PartIqcTypeListController","partIqcTypeList","searchPartIqcType","PartIqcTypeEditController","ModelTranslate","title.model.and.variant","title.model.new","title.model.edit","title.model.modelVariantIdentification","title.model.variant","placeholder.model.name.id","placeholder.model.title","placeholder.model.variant","label.clean.button","label.search.button","label.new.model.button","label.active.button","label.variant","label.csActive","label.csInactive","label.model.title","label.model.title.id","label.model.variant.code","msg.error.models.search","msg.error.model.search","msg.error.model.save","msg.error.model.delete","msg.error.model.already.updated","msg.error.model.delete.has.associations","msg.error.variant.delete.has.associations","msg.error.variant.delete","msg.validation.model.title.required","msg.validation.model.variants.required","msg.validation.model.variant.must.have.one","msg.validation.model.variant.already.exist","msg.validation.model.delete.has.associations","msg.success.model.save","msg.success.model.edit","msg.success.model.deleted","msg.model.not.found","msg.validation.variant.associated.another.model","listModelsWithNoClients","listModelsWithoutClients","saveModel","listAllModels","getModelById","deleteModel","deleteVariant","sameNameVariant","ModelRouter","company-view","ModelController","showAddbt","showEditbt","VariantTemp","saving","addVariant","variant","variantTemp","variantAlreadyExist","variantAlreadyExistBack","editVariant","initEditVariant","$$hashKey","alreadyExist","deleteVariantFromList","validateTitle","ModelListController","modelList","searchModel","setFocusElement","concatVariantsNames","variantsNames","VariantNames","getDeleteCustomDescription","Client","label.new.company","label.edit.company","title.company","company.placeholder.name.id","placeholder.clean.button","company.label.active","company.label.inactive","company.not.found","company.identification","company.label.name","company.label.address","company.label.contact","company.label.status","company.label.logo","company.placeholder.name","company.placeholder.address","company.placeholder.contact","company.save.success","error.company.search","company.deleted.success","company.deleted.failed","company.save.failed","company.validation.address.required","company.validation.contact.required","company.save.fail.duplicate","company.identification.business","company.identification.admin","company.label.login","company.label.email","company.label.reenviar.senha","company.label.name.area","company.label.name.business","company.placeholder.login","company.placeholder.email","company.placeholder.name.area","company.placeholder.name.business","company.resend.password.error","company.user.notfound.error","company.resend.password.success","validation.email.invalid","hint.settings.company.help.business","hint.settings.company.help.area","CompanyService","company","resendPassword","CompanyRouter","CompanyController","toggleTooltip","logo","Login","FileBlob","Size","CompanyListController","companyList","searchCompany","phoneFormat","phone","formato","RegExp","tamanho","substring","ClientTranslate","settings.client.page.name.label","settings.client.table.name.label","settings.client.table.status.label","settings.client.table.model.name.label","settings.client.search.hint.status.label","settings.client.btn.new.label","settings.client.edit.label","settings.client.search.name.hint.msg","settings.client.list.error","settings.client.placeholder.name","settings.client.edit.name.required.msg","settings.client.edit.name.model.variant.acordion.title","settings.client.edit.identification.acordion.title","settings.client.edit.save.error.msg","settings.client.edit.save.success.msg","settings.client.delete.success.msg","settings.client.delete.error.msg","msg.error.client.delete.has.associations","settings.client.table.description.label","settings.client.table.initDate.label","settings.client.table.finalDate.label","settings.client.search.description.hint.msg","ClientService","listAllClients","headers","Authorization","aqmsToken","getClientById","saveClient","client","listClients","ClientRouter","ClientListController","clientList","IdOrTitle","Version","searchClients","TotalItems","modelSelectedEvent","ClientEditController","isModelAssociationDisabled","canSaveBusiness","Models","loadClientToEdit","CalendarTranslate","settings.language","calendar.not.found","settings.calendar.page.name.label","settings.business.table.name.label","settings.business.table.company.label","settings.business.table.status.label","settings.calendar.description","settings.label.type","settings.label.specific","settings.label.fixed","settings.label.date","settings.label.startdate","settings.label.enddate","settings.label.month","settings.label.day","settings.calendar.btn.new.label","settings.calendar.edit.label","settings.calendar.search.type.placeholder","settings.calendar.search.description.placeholder","settings.calendar.description.placeholder","settings.calendar.search.month.placeholder","settings.calendar.search.day.placeholder","settings.calendar.type.placeholder","msg.error.calendar.search","calendar.same.date.error","settings.business.edit.name.required.msg","settings.business.edit.area.acordion.title","settings.calendar.edit.identification.acordion.title","settings.business.edit.save.error.msg","settings.calendar.edit.save.success.msg","settings.calendar.delete.success.msg","settings.business.delete.error.msg","settings.business.deleted.failed","settings.calendar.name.validation.minlength","settings.business.search.hint.status.label","settings.calendar.edit.save.error.msg","settings.calendar.delete.error.msg","settings.calendar.deleted.failed","CalendarService","listAllCalendars","getCalendarById","saveCalendar","getLeadTimeByPeriod","dtFinal","dtInitial","CalendarRouter","CalendarListController","listaDeObjetos","calendarList","EndDate","searchCalendar","searchParamsCopy","day","Day","MonthDayEn","MonthDayPt","currentLocale","console","getTypeLabel","typeKey","CalendarEditController","Months","Days","calendarDayOff","canSaveCalendar","SpecificDate","pushDays","days","getDays","monthChosed","daysInMonth","months","loadCalendarToEdit","_d","toString","BusinessTranslate","settings.business.page.name.label","settings.business.btn.new.label","settings.business.edit.label","settings.business.search.name.hint.msg","settings.business.placeholder.name","settings.business.list.error","business.same.name.error","settings.business.edit.identification.acordion.title","settings.business.edit.save.success.msg","settings.business.delete.success.msg","settings.business.name.validation.minlength","listAllBusiness","getBusinessById","saveBusiness","BusinessRouter","BusinessListController","profileList","searchBusiness","Businesses","BusinessEditController","areaList","selectedAreas","Areas","areaChange","Selected","isCheckAreaRequired","setStatusInBusinessObj","loadBusinessToEdit","setStatusToEdit","setAreasToEdit","persisted","ApprovalRouteTranslate","settings.approval_route.page.name.label","settings.approval_route.delete.success.msg","settings.approval_route.delete.error.msg","settings.approval_route.table.label.name","settings.approval_route.table.label.route","settings.approval_route.btn.new.label","settings.approval_route.edit.save.success.msg","settings.approval_route.edit.save.error.msg","settings.approval_route.edit.label","settings.approval_route.edit.identification.acordion.title","settings.approval_route.edit.name.list.cordion.title","settings.approval_route.table.approver.name.label","load.all.approval_route.error","error.approval_route.search","msg.error.approval_route.delete.has.associations","listApprovalRoutes","ApprovalRoute","ApprovalRouteListController","itemsList","searchApprovalRoutes","put","ApprovalRouteEditController","approvalRoute","approvalRouteCopy","loadApprovalRouteToEdit","ViewScrapFormController","productionPlanScrap","Station","Reason","IsNew","IsNewRegister","CreatedByDRI","IdScrap","ViewScrapFormDirective","ScrapFormController","addScrapPlan","validateDRI","ScrapFormDirective","ViewOccurrenceFormController","EffectTypeService","TasktypeService","isEdit","hourMinutes","StatusId","statusProcessId","PROCESSUNAVAILABLE","PROCESSWITHRESTRICTIONS","PROCESSNORMALLY","statusProcess","productionPlanOccurrence","Synthesis","EffectTypes","Process","Hour","Minutes","HourInitial","DurationTime","Countermeasure","effects","effectSelecteds","reuse","process","station","description","checkedClose","loadStatusProcessEdit","IdOccurrence","IsEmail","loadDate","loadEffects","checkedCloseOccurrence","loadEffectsEdit","persistedValue","isItemInative","ViewOccurrenceFormDirective","OccurrenceFormController","isShowReuse","isShowCheckReuse","previousState","ReuseOccurrences","reuseOccurrences","checkedReuseOccurrence","checkedReuse","occurrenceForm","getSelectedEffectTypes","indexSelected","effIndex","SendEmail","addOccurrencePlan","saveReuse","copyOccurrence","Session","canSaveReuse","setStatusProcess","OccurrenceFormDirective","ProductionPlanEmailGroupController","profilePermission","emailToNotifyList","moduleProductionPlan","listEmails","listAllProductionPlanEmails","UserTranslate","dri.title","dri.title.dris","dri.group.title","dri.label","dri.label.new.user","dri.label.edit.user","error.user.action.denied","label.user.name","label.group.new","label.user.email","label.user.isTeamLeader","label.user.userName","label.user.password","label.user.confirm.password","label.user.telegram","label.user.role","label.dri.login","label.user.group.name","label.user.area","label.area","label.identification.user","label.identification.user.system","label.identification.group","label.identification.users.group","dri.label.group","dri.label.dri.name","dri.label.group.name","dri.label.dri.leader","dri.label.dri.role","dri.label.dri.email","dri.label.dri.active","dri.btn.new","dri.btn.new.group","dri.btn.edit.group","dri.placeholder.search","dri.group.placeholder.search","dri.placeholder.search.bygroup","dri.placeholder.search.byrole","placeholder.group.name","placeholder.user.name","placeholder.user.telegram","placeholder.user.email","placeholder.user.isTeamLeader","placeholder.user.isTeamLeaderNo","placeholder.user.isTeamLeaderYes","placeholder.user.userName","placeholder.user.password","placeholder.user.confirm.password","placeholder.user.role","dri.load.all.notFound","dri.group.load.all.notFound","dri.error.load.dris","dri.label.yes.teamLeader","dri.label.no.teamLeader","dri.label.yes.active","dri.label.no.active","msg.group.save.success","msg.user.save.success","msg.group.save.fail","msg.user.save.fail","hint.user.group.association","error.user.duplicate","error.user.leader.duplicate","validation.group.user.required","validation.email.required","validation.email.pattern.required","validation.isTeamLeader.required","validation.userName.required","validation.name.required","validation.fullname.required","validation.userName.pattern.required","validation.password.required","validation.password.notequal.required","validation.role.required","validation.password.length.required","msg.group.search.fail","msg.user.search.fail","group.deleted.success","group.deleted.fail","user.deleted.success","user.deleted.fail","user.active.success","user.active.fail","user.disable.success","user.disable.fail","user.delete.task.association.error","group.delete.task.association.error","msg.role","label.quantity.user","validation.team.leader.required","msg.user.duplicate.save.fail","msg.business.select","msg.area.select","msg.profile.select","validation.business.required","validation.profile.required","label.user.business","label.user.profile","identification.not.found","msg.user.add.erro.profile","msg.user.add.erro.area","msg.user.no.area","label.user.sysAdmin","msg.error.unique.sysadmin","msg.user.telegram.duplicate.save.fail","warn.user.password.length","user.desactive.success","user.desactive.fail","UserService","loadGroup","loadUsers","loadUsersGroup","loadLoggedDRI","saveGroup","saveUser","validateUser","activeUser","deleteUser","register","deleteGroup","loadUserArea","UserRouter","UserListController","DRIs","totalDRIList","_init","_edit","_delete","_loadUsers","_clearSearchParams","resolveActive","_resolveActive","resolveActiveCss","_getCsActiveCss","changeStatus","_changeStatus","idUserLogged","UserEditController","oldLogin","oldSysAdmin","Password","TelegramUsername","isTeamLeader","CsAdmin","areasToAdd","profileManager","_canSave","_save","validateFullName","_validateFullName","validateEmail","_validateEmail","validateLogin","_validateLogin","validateRole","_validateRole","validatePassword","_validatePassword","validateConfirmPassword","_validateConfirmPassword","validatePasswords","_validatePasswords","showRequiredInSystemUserPanel","addProfile","manager","Profile","showToastMessageTime","constants","getTime2","validateAdd","validateAreaAdd","addArea","t","deleteArea","split","_validateAreas","isLogout","Permissions","LastBusiness","getLastBusiness","logout","location","_loadUser","ConfirmPassword","listBusiness","loadProfile","listProfiles","validateBusiness","validateProfile","permission.profile.name","permission.profile.company","permission.profile.status","permission.profile.btn.new.label","permission.profile.btn.edit.label","permission.profile.identification.title","permission.profile.module.permission.title","permission.profile.edit.name.required.msg","permission.profile.load.module.error.msg","permission.profile.load.profile.error.msg","permission.profile.load.all.profile.error.msg","permission.profile.delete.profile.error.msg","permission.profile.delete.profile.success.msg","permission.profile.column.module.label","permission.profile.column.create.label","permission.profile.column.view.label","permission.profile.column.edit.label","permission.profile.column.delete.label","permission.profile.column.export.label","permission.profile.column.approve.label","permission.profile.column.consult.label","permission.profile.column.select.all.label","permission.profile.option.all.label","permission.profile.option.none.label","permission.profile.save.profile.success.msg","permission.profile.save.profile.error.msg","title.permission","title.settings","title.preferences","permission.profile.page.title","profile.same.name.error","profile.placeholder.name","profile.deleted.failed","permission.profile.not.found","ProfileService","listAllProfiles","getProfileById","saveProfile","listAllModules","ProfileRouter","ProfileListController","searchProfiles","Profiles","ProfileEditController","moduleList","canSaveProfile","validateCheckModule","setStatusInProfileObj","profileModuleListToEdit","setCompany","selectAllChanged","SelectAll","setCheckStatus","canShowCheckBox","canShow","Module","canShowCheckBoxDelete","canShowCheckBoxConsult","moduleNames","moduleComponentDevelopment","moduleContract","moduleFinancial","moduleAcquisition","handleSelectAllCheck","isAllOptionsChecked","showRequiredInDivInput","pfToEdit","promisseCompany","loadUserCompany","promisseModule","loadProfileToEdit","loadUserCompanyById","setProfileModuleToEdit","ProfileModules","isSelectAllChecked","isChecked","handleModuleList","isAllChecked","Sequence","GroupTranslate","group.validation.business.required","group.placeholder.business","group.same.name.error","GroupService","GroupRouter","GroupListController","DRIsGroup","totalDRIGroupList","_loadUsersGroup","_clearSearchParameters","GroupEditController","editBusiness","Group","Users","TempDRI","showRequiredMenssageOnAssociations","TeamLeader","_loadGroup","PDCAEditPlanController","PDCAService","HowHappened","WhyNotWasDetected","pdca","Problem","GoalTarget","HowWhy1","WhyNot1","HowCause","WhyNotCause","EvaluationCycle","isIshikawaCauseRequired","ishikawaTypes","listHowHappened","isIshikawaWhyRequired","listWhyNot","modulePdca","loadIshikawaTypes","isSaving","canShowCauseAnalysis","listAllIshikawaType","loadPDCA","fillIshikawas","ishikawa","disableDoTab","disable","disableCheckActTab","existTaskForCurrentCycle","ContainmentPlan","Tasks","taskTypes","CounterMeasure","Cycle","disableProblemField","disablePDCAEditing","newFile","backToPdcaList","PdcaTaskTranslate","pdca.task.directive.task.label","pdca.task.directive.deadline.label","pdca.task.directive.status.label","pdca.task.directive.cycle.label","pdca.task.directive.attachment.label","pdca.task.directive.open.label","PdcaTaskController","OPEN","isEditingTask","taskObj","TaskAttachments","changeDRI","DRI","addTask","taskList","DeadlineTemp","pdcaCycle","taskType","oldTaskDeleted","editTask","removeTask","accordionTitle","accordionIsOpen","getFormatedDate","dateFormated","utc","PdcaTaskDirective","formObj","itemRequired","PDCAEditIdentificationController","Act","setWeek","getDateFromString","DateTemp","dtString","formatter","goBack","Week","disablePlanTab","disableCheckTab","PDCAEditDoController","TasksTemp","validatePlanTab","disableCheckActTabs","PDCAEditCheckActController","statusEfficacyId","OK","NOTGOOD","statusEfficacyList","disableTasks","pdcaResults","GoalAccomplished","GoalNotAccomplished","pdcaEfficacys","NeedConfirmation","DontNeedConfirmation","Checks","ResultTemp","Efficacy","loadCurrentUser","StartDateTemp","validateConfirmedResult","validateCheckFields","isConfirmed","setResulStatus","confirmResult","actionConfirmResultDialog","confirmEfficacy","ConfirmationStatusTemp","actionConfirmEfficacyDialog","confirmSave","Status30DaysTemp","Status60DaysTemp","Status90DaysTemp","actionConfirmSave","isConfirmedEfficacy","startingNewCycleByGoalNotAccomplished","ConfirmationStatus","ReviewBy30Days","ReviewBy30DaysTemp","fillEfficacyBeforeSave","startingNewCycleByEfficacy","verifyNotGoodEfficacyResult","validateDisableTaskAct","fillEfficacyAfterLoad","Status30Days","Status60Days","Status90Days","fillCheck","fillResult","check","getCycleTranslate","cycle","validateShowAvaliations","disableBeforeField","disableResult","disableAfterField","Before","After","disableConfirmBtResult","disableEfficacy","confirmEfficacyDisable","disableEfficacy30DaysStatus","NextRevision30DaysDate","revisionDate","nextRevision","disableEfficacy60DaysStatus","NextRevision60DaysDate","disableEfficacy90DaysStatus","NextRevision90DaysDate","disableEfficacyDontNeedConfirmation","disableEfficacyNeedConfirmation","currentUser","getCurrentUser","initEfficacyDontNeedConfirmation","currentDate","NextRevisionDateTemp","NextRevision30DaysDateTemp","initEfficacyNeedConfirmation","currentDateMoment","ReviewBy60DaysTemp","ReviewBy930DaysTemp","NextRevision60DaysDateTemp","NextRevision90DaysDateTemp","NextRevisionDate","ReviewBy60Days","ReviewBy90Days","ReviewBy90DaysTemp","nextReview","setUserReview30days","setUserReview60days","setUserReview90days","validateShowEfficacyFields","TestTypeService","listTestTypes","testType","TestInspectionTypeService","listTestInspectionTypes","TestInspectionSubTypeService","listTestInspectionSubTypes","TestInspectionRuleService","listTestInspectionRules","OrtTranslate","title.ort","title.ort.complete","title.ort.template","title.ort.inspection","ort.new.label","ort.edit.label","ort.label.test.type","ort.delete.success.msg","ort.delete.error.msg","ort.vendor.label","ort.drawing.spec.label","ort.identification.label","ort.add.inspection.type.label","ort.template.label","ort.template.version.label","ort.add.inspection.sub.type.label","ort.template.new.item.modal.title","ort.param.header.sequence.label","ort.param.header.subtype.label","ort.param.header.rule.label","ort.param.header.unit.measurement.label","ort.param.header.inspection.description.label","ort.template.item.inspection.type.label","ort.template.item.inspection.subtype.label","ort.template.item.inspection.rule","ort.template.item.inspection.unit.measurement","ort.template.item.inspection.description.label","ort.template.item.parameter.label","ort.load.error.msg","ort.save.success.msg","ort.save.error.msg","ort.update.version.remark.title","ort.update.version.remark.sub.title","msg.error.ort.delete.has.associations","ort.msg.same.variant.error","ort.msg.error.list","ort.must.add.at.least.one","OrtService","listWithParams","filterParams","OrtRouter","OrtListController","Variant","TestType","VariantId","TestTypeId","ortListModel","searchOrts","initTabConfig","itemSelected","OrtEditController","confirmSaveNewVersion","modal","IsUpdateRemakInserted","RemarkUpdate","executeSaveAction","HasInspection","openAddType","inspecType","isFirst","itemAlreadyInList","getNextSequenceIndexFromTypeList","editInspectionType","deleteInspectionType","sequenceToRemove","updateInspectionTypeSequence","openAddSubtypes","templateType","editSubType","orderedItems","getNextSequenceIndexFromSubTypeList","nextSequence","biggestSequence","valueArray","valuesFromSequence","isFirstItem","isAccordionOpened","deleteSubType","updateSubtypeSequences","valueArrayToRemove","valueToRemove","updatedSequence","getOrtToEdit","OrtInspectionTranslate","ort.inspection.new.label","ort.inspection.edit.label","panel.inspection.identification","panel.inspection.lot.traceability","panel.inspection.filter.type","label.inspection.ort.number","ort.label.inspection.date.input","label.inspection.date","ort.label.inspection.entry.date","label.inspection.ort.number-list","label.inspection.vendor","label.inspection.created.by","label.inspection.approved.by","label.inspection.batch","label.inspection.batch.date","label.inspection.batch.quantity","label.inspection.sampling.quantity","label.inspection.invoice","label.inspection.code","ort.label.inspection.drawing.spec","label.inspection.type","label.inspection.subtypes","label.inspection.subtype","label.inspection.samples","label.inspection.select.type","label.inspection.select.sub.type","label.inspection.add.remark","label.inspection.update.remark","label.inspection.attachment","label.inspection.approve","label.inspection.approve.with.restrictions","label.inspection.reject","label.inspection.status","label.inspection.export","label.inspection.approved","label.inspection.rejected","label.inspection.pending","label.inspection.full.report","label.inspection.summary.report","label.inspection.waiting.approval","label.inspection.none","label.inspection.status.approved","label.inspection.status.approved.restrictions","label.inspection.status.rejected","label.inspection.delete.status.error","ort.inspection.delete.error.msg","ort.inspection.delete.success.msg","ort.inspection.metric.mean.label","ort.inspection.metric.stdev.label","ort.inspection.metric.range.label","ort.inspection.metric.cp.label","ort.inspection.metric.cpk.label","ort.inspection.metric.qualityyeld.label","ort.inspection.inspect.label","ort.inspection.inspect","ort.inspection.findings.label","ort.inspection.reference.label","ort.inspection.load.ort.error.msg","ort.inspection.vendor.hint.msg","ort.inspection.lot.traceability.duplicated.msg","ort.inspection.lot.traceability.empty.msg","ort.inspection.itemtemplate.load.error.msg","ort.inspection.load.combo.subtype.error","ort.inspection.save.success.msg","ort.inspection.save.error.msg","ort.status.search.placeholder","ort.label.inspection.date.output","ort.inspection.samples.label","ort.inspection.conclusion.label","ort.inspection.msg.error.list","ort.number.search.placeholder","ort.inspection.not.have.template","label.inspection.ort.description","loadOrt","saveOrtinspection","ortInspection","exportXlsReport","iqcReport","OrtInspectionRouter","OrtInspectionListController","RESTRICTIONS","OrtNumber","EntryDate","listModel","searchInspection","isShowExportButton","isShow","exportExcel","xlsReport","getCompanyName","OrtInspectionEditController","emailList","inspection","Ort","OrtInspectionLotTraceabilities","OrtInspectionNotifies","OrtInspectionGroupedResults","OutputDate","lotTraceability","comboSubtypeList","loadOrtNumber","metricObj","OrtInspectionGroupedResult","itemTemp","Metric","addLotTraceability","itemAlreadyExistsInLotTraceability","isLotTraceAbilityEdit","editLotTraceability","lotDate","removeLotTraceability","inspectItem","MetricType","INSPECT","SAMPLES","CONCLUSION","NOK","getMetricValue","merticType","groupResu","getConclusion","valueReturn","conclusion","idTemp","exists","lot","watchOrt","updateInspectionOrt","sendOrtToApproval","isSendApprovalButtonDisabled","isOrtFinished","getTotalSubtypes","lastStatus","redirectToList","handleInspectionObjBeforeSave","goToInspectionList","finished","BatchDate","BatchDateTemp","CreatedDateTemp","OutputDateTemp","StatusTemp","ortInspectionNotify","handleInspectionObjToEdit","outputDate","loadOrtInspectionToEdit","dateChange","DivInputListOqcObaController","showMsgDuplicateItens","Serial","listType","OqcObaInspectionResult","valueToShow","valueToModel","removedListener","getRemoveDescription","isContain","DivInputListOqcObaDirective","showHint","hintText","modelToFilter","NotificationButtonController","NotificationsService","amMoment","hasUnread","connection","animate","loadNotifications","NotRead","connect","WebSocket","receivedMsg","err","markAsRead","sendMsg","send","updateLocale","locale","changeLocale","localeChangeEvent","NotificationButtonDirective","ModalChangeBusinessController","undoBusinessChange","doBusinessChange","reason","ModalChangeBusinessDirective","LogisticsKPIService","LOGISTICS_BASE","listRateVariation","listChannelPerformance","listTransitTime","listFreightCost","listFreightCostGrouped","listLocalTransportFreigthCost","listInvoicesIssuedConsolidated","listNationalFreightCostAir","listGrossWeightLspOutbound","LogisticsKpiListController","productiveChartData","FreightCostList","Params","unproductiveChartData","accumulatedChartData","transitTimeChartData","grossChartData","localTransportFreightCostChartData","nationalFreightCostAirChartData","invoicesIssuedConsolidatedChartData","grossWeightLspsOutboundChartData","grossWeightLspsOutboundRoadChartData","nationalFreightCostAirInboundChartData","nationalFreightCostRoadOutboundChartData","landedChartData","LandedVariationList","rateChartData","RateVariationList","channelChartData","autoIntervalModel","formFreightCost","FrequencyTypeHeader","FrequencyType","carouselList","carouselListTemp","dataRefreshIntervalList","dataRefreshIntervalModel","topOccurrences","PRODUCTIVE_LANDED_COST","UNPRODUCTIVE_LANDED_COST","LANDED_VARIATION","RATE_VARIATION","MODE_SPEND","CARGO_RATIO","TOTAL_FOB","TOTAL_CHARGEABLE_WEIGHT","TOTAL_LSP_CHARGEABLE_WEIGHT","GROSS_CHARGEABLE_WEIGHT","LSP_CHARGEABLE_WEIGHT","CHANNEL_PERFORMANCE","TRANSIT_TIME","LOCAL_TRANSPORT_FREIGHT_COST","NATIONAL_FREIGHT_COST","GROSS_WEIGHT_LSP_OUTBOUND","GROSS_WEIGHT_LSP_OUTBOUND_ROAD","NATIONAL_FREIGHT_COST_INBOUND","NATIONAL_FREIGHT_COST_ROAD_OUT","INVOICES_ISSUED_CONSOLIDATED","_productiveChartTypes","_accumulatedChartTypes","ChartTypes","TYPE","TITLE","SHOW","MONTH","WEEK","ChartTypesList","chartBarStyle","getChartTypes","onChangeYear","gotToImport","getMaxStartMonth","getMinEndWeek","initGraphics","validadeStartInputMin","minErrosStart","inputStartWeek","validadeEndInputMin","minErrosEnd","inputEndWeek","validadeStartInputMax","maxErrosStart","validadeEndInputMax","maxErrosEnd","getMsgHintMaxWeek","validateEndMonth","validateInputWeek","$parent","divInputForm","validateMinInputWeek","loadDataToChart","dataRefreshIntervalChanged","resetDataRequestInterval","searchEvent","Accumulated","$name","localeChange","fullScreenEvent","fullScreenEventListener","isFullScreen","searchLandedVariation","removeItemsFromCarousel","getCarouselItem","searchRateVariation","chartTypeItemValue","rateChartType","Supplier","PortOrigin","TranMode","searcChannelPerformance","channelChartType","channelList","updateChart","ctrl","productiveLandedCost","searchLandedCost","unproductiveLandedCost","promisseLandedVariation","promisseRateVariation","promisseFob","searchLandedCostAccumulated","promisseChargeableWeight","promisseTotalLSPChargeableWeight","promisseGrossWeight","searchProductiveGrossWeight","promisseLSPChargeableWeight","promisseChannelPerformance","promisseTransitTime","searchTransitTime","promisseLocalTransportFreightCost","searchLocalTransportFreightCost","promisseNationalFreightCostAir","searchNationalFreightCostAir","promisseInvoicesIssuedConsolidated","searchInvoicesIssuedConsolidated","promisseGrossWeightLspOutbound","searchGrossWeightLspOutbound","promisseGrossWeightLspOutboundRoad","searchGrossWeightLspRoadOutbound","promisseNationalFreightCostAirInbound","searchNationalAirFreightCostInboud","promisseNationalFreightCostRoadOutbound","searchNationalFreightCostRoadOutbound","isProductiveChartType","isAccumulatedChartType","setLandedCostResponseData","setTransitTimeResponseData","searchAccumulatedLandedCost","accumulatedChartTypes","chartType","searchProductiveLandedCost","productiveChartTypes","grossChartType","GroupedBy","searchUnproductiveLandedCost","landedCostChartType","transitTimeChartType","GroupedByPortOfOrigin","localTransportFreightCostChartType","nationalFreightCostChartType","typeLocal","grossWeightLspOutboundChartType","grossWeightLspOutboundRoadChartType","nationalFreightCostRoadChartType","charttype","dataObj","active","typeToRemove","translateKey","LogisticsImportService","FREIGHT_COST","LOCAL_TRANSPORT_COST","INVOICES","listFileFreightCost","LogisticsImportListController","goToKpi","searchFileFreightCost","createFreightCostWorksheet","ImportErrorController","ImportErrorDirective","PartTypeService","listPartTypes","partType","PartInspectionTypeService","listPartInspectionTypes","PartInspectionTranslate","title.part.inspection","part.inspection.new.label","part.inspection.edit.label","label.inspection.iqc.number","label.inspection.created.date","label.inspection.entry.date","label.inspection.closed.date","label.inspection.iqc.number-list","label.inspection.batch.quantity.placeholder","label.inspection.sampling.quantity.placeholder","label.inspection.part.description","label.inspection.drawing.spec","label.inspection.approve.with.reservation","label.inspection.part.number","label.inspection.status.approved.reservations","part.inspection.delete.error.msg","part.inspection.delete.success.msg","part.inspection.metric.mean.label","part.inspection.metric.stdev.label","part.inspection.metric.range.label","part.inspection.metric.cp.label","part.inspection.metric.cpk.label","part.inspection.metric.qualityyeld.label","part.inspection.inspect.label","part.inspection.findings.label","part.inspection.reference.label","part.inspection.load.part.error.msg","part.inspection.vendor.hint.msg","part.inspection.lot.traceability.duplicated.msg","part.inspection.lot.traceability.empty.msg","part.inspection.itemtemplate.load.error.msg","part.inspection.load.combo.subtype.error","part.inspection.save.success.msg","part.inspection.save.error.msg","part.inspection.entrydate.hint.msg","part.iqc.number.search.placeholder","part.inspection.not.have.template","savePartinspection","partInspection","PartInspectionRouter","PartInspectionListController","IqcNumber","iqcpart","PartInspectionEditController","Part","PartInspectionLotTraceabilities","PartInspectionNotifies","PartInspectionGroupedResults","loadPartNumber","PartId","ActualDPMMetric","PotencialDPMMetric","QualityYieldMetric","PartInspectionGroupedResult","indexToRemove","watchPart","updateInspectionPart","sendIqcToApproval","isIqcFinished","isAllResultFilled","isAllFilled","resu","partInspectionNotify","loadPartInspectionToEdit","PartInspectionSubTypeService","listPartInspectionSubTypes","PartInspectionRuleService","listPartInspectionRules","PartTranslate","title.iqc","title.iqc.complete","title.part","part.new.label","part.edit.label","part.number.label","part.number.delete.success.msg","part.number.search.placeholder","part.status.search.placeholder","part.identification.label","part.type.label","part.type.description.label","part.type.vendor.label","part.drawing.spec.label","part.template.label","part.template.version.label","part.template.new.item.label","part.template.new.item.modal.title","part.add.inspection.type.label","part.add.inspection.sub.type.label","part.param.header.sequence.label","part.param.header.subtype.label","part.param.header.rule.label","part.param.header.unit.measurement.label","part.param.header.inspection.description.label","error.iqc.part.search","part.number.not.found","part.number.delete.error.msg","part.load.error.msg","part.save.success.msg","part.save.error.msg","part.update.version.remark.title","part.update.version.remark.sub.title","msg.error.part.delete.has.associations","part.safety.component.label","part.must.add.at.least.one","PartService","PartRouter","PartListController","PartType","partListModel","searchParts","searchButton","PartTypeId","PartEditController","Vendors","getPartToEdit","FiscalMainController","FiscalService","approvals","templateList","getTemplate","checkBoxBillet","checkBoxApproved","statusApprovalList","statusTarget","ApprovalId","ServiceDescription","EmissedStart","EmissedDue","DeadLineStart","DeadLineDue","NF","Billet","StatusApproval","Template","getStatusItem","fiscal","searchFiscal","getListPendingValidation","goToDocumentFlow","IdApproval","listTargetsApprovedRejected","listTargets","DocumentFlowTargets","OrderTarget","returnApproval","canReturn","confirmReturnRemark","dontReturn","order","orderTarget","ReceiveDate","ParallelApproval","TargetNotification","returnTo","invoiceValidation","editFiscal","viewPresentation","openSolicitation","solicitacion","openSolicitationApproval","getHtmlSolicitation","html","ServiceInvoiceController","Solicitation","DeadLineTemp","DeadLine","DeadLinePurchaseTemp","DeadLinePurchase","Visibility","DocumentFlowAttachments","DocumentFlowNotifications","SolicitationApproval","SolicitationFiscal","RequestByUserArea","getValuePO","canRegisterSap","listChecked","canSaveButton","SolicitationServices","SolicitationCustomsExpenses","registerSap","RecordSap","changeTotal","getTotal","ValueTotal","toSave","buildSolicitationFiscalToSave","saveApproval","solicitationToSave","ValidatedBy","ValidatedDate","ValidatedDateTemp","fillSolicitationFiscal","documentTemp","SolicitationService","PO","Item","TemplateFiscal","concatVendor","VendorConcat","EmissionDateTemp","SolicitationExpense","SolicitationCustomsExpense","NrProcess","TemplateFiscal2","concatVendor2","loadDocumentFlowToEdit","getDocumentFlowById","copyDocument","moduleFiscal","FinancialUploadTranslate","file.upload.attach","file.saved.sucess","file.size.twenty.megabytes.overflow","file.size.twenty.list.ten.megabytes.overflow","file.size.ten.megabytes.overflow","file.size.fifty.megabytes.overflow","file.size.ten.list.ten.megabytes.overflow","file.size.list.fifty.megabytes.overflow","file.erro.save","file.same.name","file.type.image","file.type.pdf","file.change.image","file.type.not.accepted","FinancialUploadDirective","financialUploadDirective","buttonIcon","buttonLabel","multipleFile","onlyImages","onlyPdf","uploadSize","showOnlyListItem","showUrlFile","statusValue","showCameraOption","statusAtt","fileManagerComponentId","FileUploader","deviceDetector","FileUploadService","WebcamService","FinancialService","categoryAttachment","getCategoryAttachment","maximunSize","showCameraOptions","closeDialogListener","webcam","isTurnOn","turnOff","isShowCameraOptions","isMobile","os","fileManagerListener","uploader","filters","fn","itemSize","validateSizeFilesOnList","validateFileTypesAccepted","sumSize","getAttachmentsList","sizeNewItem","validateFileSize","removeFile","keyStatus","getAttachmentNameOrUrl","itemsPath","getCategory","cat","elm","queue","removeFromQueue","onWhenAddingFileFailed","onSuccessItem","fileItem","AttachTo","sizeTotal","onErrorItem","onAfterAddingFile","uploadAll","FinancialSolicitationController","FinancialSolicitationDirective","FinancialRemarkController","FinancialRemarkDirective","isOptional","optional","EditProblemController","FacaService","ListUtil","facaId","issueId","containmentDetails","editingControlPlan","controlPlan","errorMsgArray","faca","issue","pageMap","showContainmentDetails","selectedPage","updateTabActive","goToPage","selectedSubTab","effectList","containmentPlanList","showAddContainmentPlanDialog","ContainmentPlans","removeContainmentPlan","editContainmentPlan","editCorrectiveAction","saveCorrectiveAction","loadIshiKawaTypes","persistedIshikawa","valueType","valuesPoints","editActPlan","setEditableActionPlan","isEditable","saveActionPlan","beforeImages","afterImages","setFakeIdToControlPlans","ControlPlans","showAddControlPlanDialog","removeControlPlan","editControlPlan","dueDt","showAddLessonLearnDialog","lesson","LessonLearns","removeLessonLearn","editLessonLearn","limparActionPlan","ishi","VitalFew","IssueAttachments","montarListaEfeitos","facaEffectForm","markEffectsToEdit","moduleFaca","problemId","getIssueById","loadInitialInfo","isAllFieldDisabled","FacaLevel","facaTitle","startDt","WhoGroup","WhoUser","DRIID","UserName","saveIssue","exportReportFACA","calcularScore","Severity","Probability","Detectability","Score","ProblemAddController","problem","Deffects","Production","Dppm","addProblem","validateDefects","validateProduction","calculateDPPM","defects","production","calculo","ProblemAddDirective","DocumentFlowTargetTranslate","document.flow.target.label.approver","document.flow.target.label.consent","document.flow.target.role.placeholder","document.flow.target.route.placeholder","document.flow.target.title.approver.consent","document.flow.target.label.role","document.flow.target.label.status","document.flow.target.label.pending.approval","document.flow.target.label.approved","document.flow.target.label.rejected","document.flow.target.label.receive.date","document.flow.target.label.processing.date","document.flow.target.label.lead.time","document.flow.target.label.parallel.approval","document.flow.target.error.logged_in_approver_list.title","document.flow.target.error.logged_in_approver_list.description","document.flow.target.error.not_empty.title","document.flow.target.error.not_empty.description","DocumentFlowTargetController","PreferencesService","listTargetCopy","qtdGroup","Role","Route","targetRequired","roleRequired","targetSelected","targetAtualizado","noReservation","roleConst","APPROVER","CONSENT","statusConst","roleList","getTitleRole","role","getTitleStatus","confirmReservation","reservation","Reservation","setTargetSelect","searchReservation","userSelected","approveSearch","ApproveId","ApproveDate","getReservationByApproveAndDate","approveReservation","setTarget","updateModel","checkIfLoggedUserInList","listTarget","removeLoggedUserFromTargetList","checkIfAlreadyHasMemberInListBeforeAddRoute","cleanApproverList","Promise","radioValue","newTarget","ApprovalRouteList","sortTarget","moveItem","down","dragstart","orderedList","indexTarget","withinTheGroup","targetUpApproval","disabledParallel","getGroup","DocumentFlowTargetDirective","isEnabledApproved","routesList","DocumentFlowRemarkController","DocumentFlowRemarkDirective","DocumentFlowNotificationTranslate","document.flow.notification.label.notification","document.flow.notification.label.role","document.flow.notification.label.status","document.flow.notification.label.waiting","document.flow.notification.label.approved","document.flow.notification.label.rejected","document.flow.notification.label.processing.date","DocumentFlowNotificationController","NOTIFICATION","documentFlowNotification","DocumentFlowNotificationDirective","ProdPlanChartLineController","plannedColor","realizedColor","delayColor","occurrenceColor","HOURLY","showLabels","showTooltips","chartStyle","chartObj","legends","HOUR_HOUR_PROODUCTION_CHART_TITLE_KEY","HOUR_UPH_PROODUCTION_CHART_TITLE_KEY","getTitle","sectionName","prodPlanModel","turnName","Turn","modelName","variantCode","chartName","ChartType","parseDateFromString","dateParam","getHourlyData","getUphData","watchChartstyle","accelerateChartRender","getId","lineCurveType","waitForHeightAndWidth","xAxisMaxTicks","isAnimate","mouseover","mouseout","clickChartEvent","chartClickFn","chartId","ProductionPlanControls","control","isRealizedNumber","Realized","y","Planned","Delay","Occurrences","getLegendStyle","legendCss","ProdPlanChartLineDirective","titleTextKey","subTitleTextKey","USER_EMAIL_BASE","EmailTypeEnum","prodPlanUrl","mainReportUrl","defaultSaveUrl","ProductionPlan","MainReport","removeProductionPlan","listAllMainReportEmails","uploadBase64Image","imageBase64","BotService","sendMessage","patData","_video","_stream","patOpts","w","h","webcamError","getVideoData","hiddenCanvas","ctx","getContext","drawImage","getImageData","sendSnapshotToServer","imgBase64","snapshotData","makeSnapshot","patCanvas","ctxPat","idata","putImageData","success","onSuccess","video","onStream","stream","activeStream","downloadSnapshot","dataURL","window","onError","getVideoTracks","checker","stop","service","PopoverErrorController","PopoverErrorDirective","mensage","NotificationEmailTranslate","notifications.email","notification.email.label.target","notification.email.label.notification","notification.email.label.role","notification.email.label.status","notification.email.label.waiting","notification.email.label.approved","notification.email.label.rejected","notification.email.label.processing.date","notification.email.label.notified.date","notification.email.label.notified","NotificationEmailController","NotificationEmail","NotificationEmailDirective","notifiedEmails","ModalAccountController","userAlias","getAliasName","userLogin","getLoginName","userInitiais","photoLoggedUser","photoAqms","changePassword","changePasswordModel","getUserProfileName","getProfileName","authenticated","showChangePassword","clear","NewPassword1","NewPassword2","ModalAccountDirective","CheckboxModelTranslate","auto.complete.model.directive.load.empty","CheckboxModelController","onChangeEvent","modelListObj","isCheckBoxRequired","CheckModelsToEdit","containsInList","itemChecked","CheckboxModelDirective","ButtonSearchChartController","searchObj","clearAction","openChart","chartAction","ButtonSearchChartDirective","isDisabledChart","BtnUseThisController","strstate","BtnUseThisDirective","BtnSaveController","formIsValid","$setSubmitted","focusField","required","getElementsByClassName","BtnSaveDirective","BtnReturnController","return","actionDisabled","BtnReturnDirective","BtnPlusController","BtnPlusDirective","BtnExportController","BtnExportDirective","BtnEditController","BtnEditDirective","BtnDialogSaveController","BtnDialogSaveDirective","BtnDialogConfirmController","BtnDialogConfirmDirective","BtnDialogCloseController","BtnDialogCloseDirective","BtnDialogCancelController","BtnDialogCancelDirective","BtnDeleteController","customDescription","desc","BtnDeleteDirective","BtnCreateController","BtnCreateDirective","BtnCopyController","BtnCopyDirective","BtnCloseController","clickAction","BtnCloseDirective","buttonText","iconClass","BtnBasicController","BtnBasicDirective","BtnBackController","back","useAction","history","BtnBackDirective","BtnAddController","formAdd","resetForm","$setUntouched","BtnAddDirective","ButtonSearchController","ButtonSearchDirective","ProcessFormController","checklistTemplateProcessList","oldProcess","checklist","ChecklistTemplateProcesses","validateDuplicateTitle","titleAlreadyExist","addProcess","ProcessFormDirective","ControlParamFormController","parameters","Inspection","Specification","PatrolResultType","EPatrolResultType","oldParameter","fillParameters","controlParamForm","addParameters","PatrolResult","ControlParamFormDirective","BlockMaterialEmailGroupController","BlockedMaterialService","blockedMaterialRowMaterial","blockedMaterialFinishGood","emailToNotifyGoodList","emailToNotifyRowList","userIsBlockedMaterialApprover","checkUserIsApprover","listBlockedMaterialEmails","listAllBlockedMaterialEmails","userIsApprover","isBlockedMaterialApprover","BlockedMaterialVendorController","listVendor","loadBlockedMaterial","showValidation","BlockedMaterialVendorDirective","BlockedMaterialCodeController","listBlockedMaterial","confirmListener","blockedMaterial","BlockedMaterialCodeDirective","BasicVendorOriginService","BasicEventConstant","VendorOriginService","Scope","unregister1","saveVendorOrigin","saveVendorOriginListener","unregister2","listVendorOrigin","listVendorOriginListener","unregister3","getByIdVendorOrigin","getVendorOriginByIdListener","unregister4","removeVendorOrigin","deleteVendorOriginListener","updateBasicListItems","updateItemToEdit","BasicTypesService","saveType","saveTypeListener","listTypesListener","getByIdType","getTypeByIdListener","removeType","deleteTypeListener","listTypes","deleteType","BasicTestTypeService","saveTestType","saveTestTypeListener","listTestType","listTestTypesListener","getByIdTestType","getTestTypeByIdListener","removeTestType","deleteTestTypeListener","BasicTestInspectionTypeService","saveTestInspectionType","saveTestInspecTypeListener","listTestInspectionType","listTestInspecTypesListener","getByIdTestInspectionType","getTestInspecTypeByIdListener","removeTestInspectionType","deleteTestInspecTypeListener","testInspecType","BasicTestInspectionSubTypeService","saveTestInspectionSubType","saveTestInspecSubTypeListener","listTestInspectionSubType","listTestInspecSubTypesListener","getByIdTestInspectionSubType","getTestInspecSubTypeByIdListener","removeTestInspectionSubType","deleteTestInspecSubTypeListener","testInspecSubType","BasicTestInspectionRuleService","saveTestInspectionRule","saveTestInspecRuleListener","listTestInspectionRule","listTestInspecRulesListener","getByIdTestInspectionRule","getTestInspecRuleByIdListener","removeTestInspectionRule","deleteTestInspecRuleListener","testInspecRule","BasicSynthesisService","SynthesisService","saveSynthesis","saveSynthesisListener","listSynthesis","listSynthesisListener","getByIdSynthesis","getSynthesisByIdListener","removeSynthesis","deleteSynthesisListener","BasicStationService","StationService","saveStation","saveStationListener","listStation","listStationsListener","getByIdStation","getStationByIdListener","removeStation","deleteStationListener","BasicSectionService","SectionService","saveSection","saveSectionListener","listSection","listSectionsListener","getByIdSection","getSectionByIdListener","removeSection","deleteSectionListener","BasicRequestTypeService","RequestTypeService","saveRequestType","saveRequestTypeListener","listRequestType","listRequestTypesListener","getByIdRequestType","getRequestTypeByIdListener","removeRequestType","deleteRequestTypeListener","listRequestTypes","BasicPartTypeService","savePartType","savePartTypeListener","listPartType","listPartTypesListener","getByIdPartType","getPartTypeByIdListener","removePartType","deletePartTypeListener","BasicPartInspectionTypeService","savePartInspectionType","savePartInspecTypeListener","listPartInspectionType","listPartInspecTypesListener","getByIdPartInspectionType","getPartInspecTypeByIdListener","removePartInspectionType","deletePartInspecTypeListener","partInspecType","BasicPartInspectionSubTypeService","savePartInspectionSubType","savePartInspecSubTypeListener","listPartInspectionSubType","listPartInspecSubTypesListener","getByIdPartInspectionSubType","getPartInspecSubTypeByIdListener","removePartInspectionSubType","deletePartInspecSubTypeListener","partInspecSubType","BasicPartInspectionRuleService","savePartInspectionRule","savePartInspecRuleListener","listPartInspectionRule","listPartInspecRulesListener","getByIdPartInspectionRule","getPartInspecRuleByIdListener","removePartInspectionRule","deletePartInspecRuleListener","partInspecRule","BasicLicenseTypeService","LicenseTypeService","saveLicenseType","saveLicenseTypeListener","listLicenseType","listLicenseTypeListener","getByIdLicenseType","getLicenseTypeByIdListener","removeLicenseType","deleteLicenseTypeListener","defect","listLicenseTypes","BasicEffectTypeService","saveEffectType","saveEffectTypeListener","listEffectType","listEffectTypesListener","getByIdEffectType","getEffectTypeByIdListener","removeEffectType","deleteEffectTypeListener","effectType","BasicDefectService","DefectsService","saveDefect","saveDefectListener","listDefect","listDefectsListener","getByIdDefect","getDefectByIdListener","removeDefect","deleteDefectdListener","listDefects","getDefectById","deleteDefect","BasicDefectTypeService","saveDefectType","listDefectType","getByIdDefectType","removeDefectType","listDefectsTypes","getDefectTypeById","deleteDefectType","BasicDefectRootCauseService","saveRootCause","saveRootCauseListener","listRootCause","listRootCauseListener","getByIdRootCause","getRootCauseByIdListener","removeRootCause","deleteRootCauseListener","saveDefectRootCause","listDefectRootCauses","getDefectRootCauseById","deleteDefectRootCause","BasicDefectOccurrenceService","saveDefectOccurrence","saveDefectOccurrenceListener","listDefectOccurrence","listDefectOccurrenceListener","getByIdDefectOccurrence","getDefectOccurrenceByIdListener","removeDefectOccurrence","deleteDefectOccurrenceListener","listDefectOccurrences","getDefectOccurrenceById","deleteDefectOccurrence","BasicDefectActionService","saveDefectAction","listDefectAction","getByIdDefectAction","removeDefectAction","listDefectsActions","getDefectActionById","deleteDefectAction","BasicAreaService","AreaService","saveArea","saveAreaListener","listArea","listAreasListener","getByIdArea","getAreaByIdListener","removeArea","deleteAreaListener","listAreas","AlertEmailNotificationTranslate","alert.email.label.target","alert.email.notification.label.notification","alert.email.notification.label.role","alert.email.notification.label.status","alert.email.notification.label.waiting","alert.email.notification.label.approved","alert.email.notification.label.rejected","alert.email.notification.label.processing.date","AlertEmailNotificationController","alertEmailNotification","AlertEmailNotificationDirective","AcquisitionTranslate","acquisition","report","approval","subject","createdStartDate","createdEndDate","requestBy","deadlineStartDate","exportPO","deadlineEndDate","generateReport","quotes","graphic","graphicQuoteOpen","graphicOrderClosed","graphicQuoteOpenMonthly","graphicOrderClosedMonthly","quoteOpen","quoteClosed","orderOpen","orderClosed","nothingFound","AcquisitionReport","AcquisitionRisksTranslate","risks","settings","telegram","newUserTelegram","editUserTelegram","listUsers","getRisks","saveRisks","AcquisitionRisks","AcquisitionRisksController","risk","acquisitionRisk","new","nonAlpha","mro","alpha","equipment","material","requestId","purchaseOrder","buyer","imported","national","local","supplier","stock","reorderPoint","openOrderBalance","stockAverage","actualStock","missingAmountCurrentWeek","missingAmountNextWeek","invoice","etdStart","etaEnd","etafStart","etdEnd","etaStart","etafEnd","etd","eta","etaf","filterByInvoice","no","yes","high","medium","low","norisk","resolved","noresolved","addAcquisitionRisk","unitMeasure","quantity","filterRiskLevel","riskLevel","addComment","btnResolve","filter_status","noDataFound","toCreateANewOne","noCommentsFound","nolevel","savesuccess","saveerror","invoiceAlreadyExist","saveUserTelegramSuccess","deleteUserTelegramSuccess","UserAlreadyExist","saveUserTelegramError","deleteUserTelegramError","LevelRisk","createAcquisitionRisk","createUserTelegram","getOrigin","getLevelRisk","AcquisitionRisk","AcquisitionRiskListController","hideDone","acquisitionRiskList","High","Medium","Low","NoRisk","NoResolved","Resolved","DescriptionHigh","DescriptionMedium","DescriptionLow","DescriptionNoRisk","categoryList","originList","levelRiskList","levelRiskStatus","NORISK","LOW","MEDIUM","HIGH","BuyerId","Invoice","EtdStart","EtdEnd","EtaStart","EtaEnd","EtafStart","EtafEnd","ids","BuyerTemp","searchAcquisitionRisk","fillComments","resolveLevelRiskCss","resolveCategoryName","setDecimalValue","getProjectValue","getClassLevel","levelRisk","Comments","commentItem","EtdDateTemp","EtdDate","EtaDateTemp","EtaDate","EtafDateTemp","EtafDate","fillDescriptionRisks","loadRisks","goToNewAcquisitionRisk","AcquisitionRiskEditController","Risk","DisableBasicFields","Material","Buyer","RequestId","ReorderPoint","PurchaseOrder","UnitMeasure","ActualStock","StockCoverage","unitMeasureList","getUnitMeasureList","CommentsList","Comment","getUnitMeasure","canResolveButton","ChangeLevel","level","resolveAcquisitionRisk","buildAcquisitionRiskToSave","selectedInvoice","comment","toRemove","newComment","Photo","acquisitionToSave","fillAcquisitionRisk","acquisitionRiskTemp","TemplateRisk","unit","getBuyer","loadAcquisitionRiskToEdit","copyAcquisitionRisk","tag","removeIndex","EFFECT_TYPE_BASE","effect","TaskControlTranslate","title.taskControl","title.newTask","title.edit","label.titleId","label.taskTitle","label.taskSetDates","label.taskStart","label.taskWeek","label.taskDueDate","label.taskDRI","label.taskProject","label.taskClient","label.taskStatus","label.Priority","label.veryHigh","label.high","label.medium","label.low","label.model","label.session","label.station","label.type","label.issue","label.action","task.label.remark","label.information","label.identification.task","label.action.result.task","label.cancel.task","label.reject.task","label.accept.task","label.button.back","label.button.save","placeholder.title","placeholder.dri","placeholder.search-name","placeholder.search-id","placeholder.search-date","placeholder.search-DRI","placeholder.search-status","placeholder.issue.subject","placeholder.nameId","placeholder.search-project","select.default.section","select.default.station","select.default.tasktype","validation.title.required","validation.startdate.required","validation.duedate.required","validation.dri.required","validation.priority.required","validation.model.required","validation.station.required","validation.type.required","validation.session.more.than.zero","task.save.sucess","task.save.fail","validation.issueSubject.required","task.file.deleted.success","toDO","onGoing","canceled","VeryHigh","archived","notFoundTask","notFoundTaskDelay","task.edit.load.fail","task.edit.load.unauthorized","task.list.loading.erro","cancelarTask","rejeitarTask","aceitarFechar","aceitar","items.per.page.title","filter.text.title","filter.text.place.holder","placeholder.search.name-id","titleReject","task.report.noData","task.report.filename","task.report.erro","task.title.late","task.dialog.confirmation.general.report.title","task.dialog.confirmation.general.report.subtitle","msg.success.send.email.task.general","taskRouterConfig","TaskListController","TaskService","toastr","taskToDo","taskOnGoing","taskClosed","toDoFilteredList","onGoingFilteredList","closedFilteredList","arquivedList","arquivedFilteredList","todoCurrentPage","defaultTodoPageSize","onGoingCurrentPage","defaultOnGoingPageSize","closedCurrentPage","defaultClosedPageSize","taskToDoTotalLista","taskOnGoingTotalLista","taskClosedTotalLista","itemPerPageToDo","itemPerPageOnGoing","itemPerPageClosed","ToDoSearchParam","OnGoingSearchParam","ClosedSearchParam","DRITemp","DRIId","listAllPendingTasks","listAllOnGoingTasks","listAllClosedTasks","getArchivedTasksTotal","shouldShowToDo","changeItemsPerPageToDo","shouldShowOnGoing","changeItemsPerPageOnGoing","shouldShowClosed","changeItemsPerPageClosed","searchTasks","taskArchivedTotal","random","closeButton","preventDuplicates","validateEditPermission","transitionTo","moduleTaskControl","goToNewTask","confirmSendReportGeneral","actionConfirmNotificationGeneralReport","getTaskReportGeneral","TaskArchivedController","taskArchived","dateTime","dateTimeFinal","activeTasksCount","ETaskStatusArchived","GroupId","getArchivedTasks","getActiveTasksCount","filterByStatus","newTask","getTaskById","taskId","TaskController","persistedAttachments","CompanyName","BusinessName","chbxRemark","chbxAction","onGoingCss","closedCss","archivedCss","KanBanStatus","approvalSelectedValue","approvalValuesEnum","CANCEL","ACCEPT","ACCEPT_CLOSE","ETaskKanbanStatus","PENDING","ARCHIVED","ETaskAttachmentType","Issue","BulletCssClasses","RED_BULLET","GREEN_BULLET","GRAY_BULLET","IsBoss","DisableResponseFields","getTask","AttachmentType","DuoDt","RemarkChkBox","ActionSubject","filterPermissions","disableAcceptAllRadio","chbxRemarkValue","getToDoStepClass","statusKanban","cssClass","getOnGoingStepClass","taskStatus","getClosedStepClass","getArchivedStepClass","clearCloseTask","fillTypeAreaToEdit","isSStationInative","CopyTask","otherTask","other","taskToSave","setApprovalStatus","UserLogged","SetWeek","SectionChange","selectedSession","Sections","currentSession","ModelChange","Init","selectedModels","loadTaskTypes","InitPageValidatePermissions","ValidateStartDate","ValidateDuoDate","ValidateStation","ValidateArea","ValidateType","ValidateProjectClientModel","ValidatePriority","ValidateDRI","ValidateIssue","IssueSubject","e","ok","hash","lastCancelRadioValue","changeCancelRadio","lastRejectRadioValue","lastAcceptRadioValue","lastAcceptAndCloseRadioValue","lastAcceptAndCloseDisableRadioValue","disableRadioButtonsById","changeRejectRadio","changeAcceptRadio","changeAcceptAndCloseRadio","changeAcceptAndCloseDisableRadio","synthesis","title.sourcing","new.title.sourcing","title.vendor","vendor.list.notfound","visit.list.notfound","label.new.vendor","label.edit.vendor","vendor.label.id","vendor.label.productline","vendor.label.economicactivity","vendor.label.origin","vendor.label.fantasyname","vendor.label.address","vendor.label.district","vendor.label.city","vendor.label.uf","vendor.label.site","vendor.placeholder.site.page","vendor.label.registrationstatus","vendor.label.cadastralsituation","vendor.label.type","vendor.label.companyname","vendor.label.contactus","vendor.label.phone","vendor.label.lastupdate","vendor.label.cicafregistration","vendor.placeholder.id","vendor.placeholder.productline","vendor.placeholder.economicactivity","vendor.placeholder.origin","vendor.placeholder.fantasyname","vendor.placeholder.address","vendor.placeholder.district","vendor.placeholder.city","vendor.placeholder.uf","vendor.placeholder.site","vendor.placeholder.registrationstatus","vendor.placeholder.cadastralsituation","vendor.placeholder.select.registrationstatus","vendor.placeholder.select.cadastralsituation","vendor.placeholder.codesap","vendor.registrationstatus.bank","vendor.registrationstatus.approved","vendor.registrationstatus.suspended","vendor.registrationstatus.deaccredited","vendor.registrationstatus.notapplicable","vendor.cadastralsituation.registered","vendor.cadastralsituation.notregistered","vendor.vendortype.product","vendor.vendortype.service","vendor.vendortype.direct","vendor.vendortype.indirect","vendor.title.identification","vendor.label.createdby","milestone.label.createdby","vendor.label.email","vendor.label.codesap","vendor.label.status","vendor.placeholder.status","vendor.status.active","vendor.status.inactive","vendor.label.createddate","error.vendor.search","vendor.placeholder.select.origin","vendor.label.phones","vendor.label.technicalvisit","vendor.phone.mask","vendor.save.success","milestone.save.success","vendor.save.error","milestone.save.error","vendor.load.all.error","vendor.load.byid.error","vendor.remove.success","vendor.remove.error","vendor.placeholder.select.type","validation.vendor.origins.required","validation.vendor.phones.required","validation.vendor.origins.duplicated","validation.vendor.phone.duplicated","error.vendor.listprofilemodules.error","validation.vendor.uf.invalid","vendor.remove.error.conflict","validation.vendor.site.invalid","vendor.phone","vendor.label.attachment","vendor.update.success","milestone.update.success","vendor.label.remark","milestone.label.remark","validation.vendor.codesap.invalid","vendor.label.phones.mask","vendor.contacts","vendor.contact.contactus.required","vendor.contact.email.required","vendor.contact.phone.required","validation.vendor.contact.required","vendor.label.notified","vendor.label.target","vendor.notifications","vendor.visit.tab.label","vendor.milestone.tab.label","label.new.visit","label.new.milestone","vendor.label.accepted","vendor.label.points","vendor.label.visit.date","vendor.label.approver","milestone.label.approver","error.visit.search","error.visit.edit","visit.remove.success","visit.remove.error","visit.remove.error.conflict","visit.label.status.waiting.approval","visit.label.status.approved","visit.label.status.rejected","label.edit.visit","visit.sendapproval","milestone.sendapproval","visit.title.identification","milestone.title.identification","visit.label.date","milestone.label.date","milestone.label.milestone","visit.label.approver","visit.save.success","visit.save.error","visit.remove.warning.not.creator.appover","visit.remove.warning.unauthorized","visit.approved.error","milestone.approved.error","visit.label.attachment","milestone.label.attachment","visit.label.accepted","visit.label.points","visit.reject","visit.approve","visit.update.success","visit.remark.required","visit.report.name","milestone.remark.required","visit.hint.vendor","label.milestone.status.temporarywaiver","error.milestones.search","milestones.tab.label","milestones.remove.success","milestones.remove.error","milestones.remove.error.conflict","milestones.remove.warning.unauthorized","milestones.hint.vendor","milestones.report.name","label.milestone","milestone.deleted.failed","error.milestone.duplicated","label.edit.milestone","milestone.temporaryApprove","vendor.report.name","vendor.label.department","title.temporary.approval.justification","milestone.label.justification","milestone.label.deadline","error.avaliations.search","avaliations.remove.success","avaliations.remove.warning.unauthorized","label.new.avaliation","vendor.avaliation.tab.label","avaliations.label.id","avaliations.label.id.avaliation","avaliations.remove.error","avaliations.remove.error.conflict","avaliations.hint.keyword","avaliations.label.start.year","avaliations.label.end.year","avaliations.label.frequency","avaliations.label.month","avaliations.label.quarter","avaliations.label.semester","avaliations.label.year","avaliations.label.price","avaliations.label.quality","avaliations.label.logistics","avaliations.label.technology","avaliations.label.total","avaliations.label.remark","avaliations.placeholder.keyword","avaliations.placeholder.quartile","avaliations.placeholder.start.year","avaliations.placeholder.year","avaliations.list.notfound","avaliations.placeholder.end.year","avaliations.start.year.less.end.year","avaliation.title.identification","avaliation.title.score","avaliation.label.year","avaliation.label.createdby","avaliation.label.updatedby","avaliation.label.createddate","avaliation.label.updateddate","error.avaliation.score.empty","label.edit.avaliation","avaliation.update.success","error.avaliation.duplicated","avaliation.hint.vendor","avaliation.add.score.already.exist","avaliation.save.success","avaliation.remove.confirm","avaliation.placeholder.chart.button","avaliation.placeholder.select.category","avaliations.label.btn.grafico","avaliations.change.view.graphic.label","avaliations.change.view.list.label","avaliations.chart.label.viewby.total","avaliations.chart.label.viewby.category","avaliations.vendor.by.price","avaliations.vendor.by.logistics","avaliations.vendor.by.quality","avaliations.vendor.by.technology","avaliations.vendor.by.total","avaliation.chart.generate.message.alert","avaliations.chart.labelx","avaliations.score.error","avaliation.report.name","visit.label.id","visit.placeholder.id","contract.report.name","vendor.save.same.sap.error","validateApproveViewPermission","validateApproveDeletePermission","validateApproveAddPermission","validateApproveEditPermission","createComponent","moduleTechnicalVisit","moduleSupplierApprovalMilestones","moduleSupplierEvaluation","visitId","updateVisit","getVisitById","MilestoneId","Quartile","SourcingRouter","SgiTranslate","title.sgi","sgi.title.internal.license","sgi.label.internal.license.edit","sgi.label.internal.license.new","sgi.label.internal.license.identification","sgi.label.internal.license.direct.identification","sgi.title.license","sgi.label.license.edit","sgi.label.license.new","sgi.label.license.identification","sgi.label.license.direct.identification","sgi.label.license.indirect.identification","sgi.label.license.id.service","sgi.label.license.vendor","sgi.label.license.license.type","sgi.label.license.license.type.all","sgi.label.license.has.protocol","sgi.label.license.has.protocol.all","sgi.label.license.has.protocol.yes","sgi.label.license.has.protocol.no","sgi.label.license.initial.emission","sgi.label.license.end.emission","sgi.label.license.initial.expiration","sgi.label.license.end.expiration","sgi.label.license.id","sgi.label.license.contact","sgi.label.license.last.update","sgi.label.license.area","sgi.label.createdby","sgi.label.created.date","sgi.label.updatedby","sgi.label.updated.date","sgi.label.license.direct.vendor","sgi.label.license.indirect.vendor","sgi.label.license.department","sgi.label.license.service.description","sgi.label.license.type","sgi.label.license.number","sgi.label.license.emission.date","sgi.label.license.expiration.date","sgi.label.license.remark","sgi.label.license.protocol","sgi.label.license.status","sgi.label.license.status.all","sgi.label.license.status.active","sgi.label.license.status.inactive","sgi.label.button.attachments","sgi.placeholder.vendor","sgi.vendor.error.license.duplicated","sgi.vendor.error.license.indirect","sgi.vendor.error.license.direct.required","sgi.vendor.error.license.number.exists","sgi.environmental.save.success","sgi.environmental.dates.invalid","sgi.environmental.error.search","sgi.environmental.remove.success","sgi.environmental.remove.error","sgi.environmental.remove.error.conflict","sgi.environmental.save.error.vendor.license.active","SgiRouter","RoleService","MainReportTranslate","title.main.report","title.email.group","title.button.main.report","title.button.config","title.button.email.group","title.export-report","title.import.report","title.emails.send.report","title.select.date.report","title.click.import.report","placeholder.main.report.email.group.filterby.email","label.main.report.email.group","label.main.report.email.group.description","label.attachment","label.main.report.search.email","label.main.report.add.email","msg.main.report.error.load.group.email","msg.main.report.success.send.email","msg.main.report.error.send.email","msg.main.report.invalid.attachments","msg.main.report.invalid.emails","msg.main.report.not.authorized","title.all.in.one.report.name","MainReportService","sendEmail","ReportRouter","MainReportController","exportMainReport","getMainReport","origStartDate","isApproverRole","ProductionPlanTranslate","title.production.plan","title.production.plan.email.group","production.plan.email.group.description","label.new.production.plan","label.edit.production.plan","label.planned","label.status","production.plan.allmodels","placeholder.clean.plan.button","placeholder.search.plan.button","production.plan.ongoing","production.plan.close","production.plan.search.allstatus","error.production.plan.search","production.plan.not.found","production.plan.placeholder.id","production.plan.search.allTurns","production.plan.search.allSections","msg.error.listSections","label.section","label.production.plan.variant","label.turn","label.hour","label.realized","label.occurrence","production.plan.identification","production.plan.daily","production.plan.default.model","production.plan.default.turn","production.plan.default.sections","production.plan.default.status","production.plan.validation.planned.required","production.plan.search.save.failed","production.plan.description","production.plan.title.newOccurrence","production.plan.title.editOccurrence","production.plan.title.newScrap","production.plan.title.editScrap","production.plan.save.success","production.plan.quantity.label","production.plan.validation.quantity.required","production.plan.reason","production.plan.reason.scrap","production.plan.deleted.success","production.plan.countermeasure","production.plan.close.occurrence","production.plan.save.hour.alert","production.plan.scrap.add.success","production.plan.occurrence.add.success","production.plan.scrap.add.failed","production.plan.occurrence.add.failed","production.plan.scrap.remove.success","production.plan.occurrence.remove.success","production.plan.scrap.remove.failed","production.plan.occurrence.remove.failed","production.plan.scrap.edit.success","production.plan.occurrence.edit.success","production.plan.scrap.edit.failed","production.plan.occurrence.edit.failed","production.plan.realized.quantity.alert","production.plan.hour","production.plan.occurrence.elapsed","production.plan.occurrence.minutes","production.plan.occurrence.minute","production.plan.occurrence.resolved","production.plan.occurrence.process.normally","production.plan.occurrence.process.restrictions","production.plan.occurrence.process.unavailable","production.plan.occurrence.not.resolved","label.process","select.default.process","label.synthesis","select.default.synthesis","production.plan.occurrence.reuse","select.default.reuse.occurrence","production.plan.is.exists","production.plan.occurrence.load","production.plan.model.samename","production.plan.button.close.plan","production.plan.view","production.plan.view.occurrence","production.plan.view.scrap","production.plan.model.two.sections","production.plan.no.effect.found","ProductionPlanService","checkAlreadyExists","ProductionPlanRouter","ProductionPlanListController","pagePermission","productionList","validatePagePermission","turn","setStatusType","searchPlan","buildSearchParams","TurnId","SectionId","paramsPlan","createGroup","ProductionPlanEditController","oldTurn","selectedIndex","sectionLine","responseStatus","ISEXISTS","MODELSAMENAME","TWOSECTIONS","SAVE","accordionIdentification","accordionDaily","dailyDisabled","SCRAP","OCCURRENCE","modificationsType","ADD","REMOVE","productionPlan","ReasonClose","loadProductionPlanById","replanningPlannedSave","planned","plannedDiv","addDife","Active","replanningPlanned","endDailyProductionPlan","confirmEndProductionPlanDaily","productionPlanDaily","realizedEndProductionPlan","validateSave","saveIdentification","saveHour","pendingOccurrences","verifyRealizedQuantity","validateRealized","validateStatusProductionPlan","saveService","saveModifications","Scraps","viewOccurrence","parentIndex","occurrence","viewScrap","scrap","addOccurrence","resetSendEmailOccurrences","addScrap","removeItemOccurrence","removeItemScrap","editItemOccurrence","editItemScrap","canEditItem","canEditPlanned","validateReplanningPlanned","validateSaveHour","IsNumeric","validateActionRemove","validateActionsView","validateActionAdd","getProductionPlanDate","isCanConsult","disabledConsult","modifications","LinkProductionPlan","findFeedbackMessageSuccess","findFeedbackMessageFailed","findProductionPlanActive","indexHourActive","isGoEdit","checkReuseOccurrences","checkIdsScraps","getTime1","allStatusClosed","hourInit","hourInterval","hourFinal","dateInit","dateFinal","setDate","getDate","next_day_hour","dateSequence","difference","dayHour","getHours","validateRealizedEdit","isActive","isOccurrence","productionPlanControl","CreatedByGroup","CreatedByUser","title.dashboard","preferences.label.no","preferences.label.order","preferences.label.card","preferences.label.show","preferences.error.search","preferences.dashboard.save.success.msg","preferences.dashboard.save.error.msg","approval.reservation.title","approval.reservation.startdate","approval.reservation.enddate","approval.reservation.reservation","approval.reservation.placeholder.reservation","approvat.reservation.target","approval.reservation.role","approval.reservation.status","approval.reservation.processingdate","approval.reservation.parallel","approval.reservation.approver.consent","approval.reservation.date.format","approval.reservation.message.confirm","approval.reservation.save.error.msg","preferences.approve.reservation.startdate.required","preferences.approve.reservation.enddate.required","preferences.approve.reservation.user.required","preferences.approve.reservation.enddate.lessthen.startdate","preferences.approve.reservation.user.different","listPreferenceDashboard","preferences","PreferencesEditController","preferencesOrigin","listDashboardCopy","dashboard","listDashboard","dashboardRequired","preferencesToSave","ListDashboard","ApproveReservation","sortDashboard","orderedDashboard","OrderDashboard","disabledShowDashboard","clearReservationFields","searchPreferences","ReservationId","ReservationName","Dashboards","validateApproveReservationForm","messageValidation","updatePreferencesDashboard","validaViewModalConfirm","now","compareDates","data1","data2","createListDashboardToUpdate","listDashboardToUpdate","dashboardToUpdate","DashboardId","Company_Id","User_Id","PDCATranslate","title.pdca","title.pdca.complete","label.new.pdca","label.edit.pdca","label.pdca.status.ongoing","label.pdca.status.closed","label.pdca.status","label.pdca.cycle","label.pdca.Date","label.pdca.Week","label.pdca.identification","label.pdca.plan","label.pdca.do","label.pdca.checkAct","label.pdca.check","label.pdca.load.all.notFound","label.pdca.btn.new","label.pdca.allStatus","label.pdca.name","label.pdca.date","label.pdca.title","label.pdca.problem","label.pdca.goaltarget","label.pdca.containmentplan","label.pdca.whys","label.pdca.ishikawa.title","label.pdca.causeanalysis.title","label.pdca.howhappened.title","label.pdca.whynotwasdetected.title","label.pdca.causehowhappened.title","label.pdca.causewhynotwasdetected.title","label.pdca.countermeasure","label.pdca.act","label.pdca.cycle.title","label.pdca.before","label.pdca.after","label.pdca.result","label.pdca.goalaccomplished","label.pdca.goalnotaccomplished","label.pdca.efficacy","label.pdca.needconfirmation","label.pdca.dontneedconfirmation","label.pdca.startdate","label.pdca.nextrevisionexpected","label.pdca.30days","label.pdca.60days","label.pdca.90days","label.pdca.reviewby","label.pdca.reviewdate","label.pdca.efficacy.select.status","label.pdca.efficacy.ok.status","label.pdca.efficacy.notgood.status","label.pdca.status.evaluationcycle","title.confirmgoal","placeholder.clean.pdca.button","placeholder.search.pdca.button","placeholder.title.pdca","placeholder.search.pdca","msg.pdca.save.success","msg.pdca.save.error","msg.pdca.delete.success","msg.pdca.checkfields.invalid","msg.pdca.dialog.confirmation.title","msg.pdca.dialog.efficiency.confirmation.title","msg.pdca.dialog.result.goal.accomplished","msg.pdca.dialog.result.goal.not.accomplished","msg.pdca.dialog.efficacy.need.confirmation","msg.pdca.dialog.efficacy.dont.need.confirmation","msg.pdca.dialog.save.not.good.status","msg.pdca.dialog.save.confirmation.title","msg.pdca.dialog.save.day90","msg.error.pdca.delete.has.associations","msg.error.pdca.already.updated","msg.error.pdca.task.already.updated","loadPlan","PDCARouter","PDCAListController","searchPDCA","validateSearchParams","pdcas","setStatusId","addPdca","getStatusIconClass","disablePDCADelete","OqcObaTranslate","title.oqc.oba","title.oqc.oba.complete","title.oqc.oba.new","title.oqc.oba.edit","label.lotId","label.new.oqc.oba","oqc.oba.status.ongoing.title","oqc.oba.status.accepted.title","oqc.oba.status.rejected.title","load.all.oqcoba.error","delete.oqcoba.success","delete.oqcoba.error","load.all.oqcoba.notFound","new.oqcoba.panel.identification","new.oqcoba.title.label","new.oqcoba.title.placeholder","new.oqcoba.date.label","new.oqcoba.week.label","new.oqcoba.createdbydri.label","new.oqcoba.approvedbydri.label","new.oqcoba.project.label","new.oqcoba.client.label","new.oqcoba.model.label","new.oqcoba.variant.label","new.oqcoba.cmb.model.hint","new.oqcoba.lot.quantity.label","new.oqcoba.inspection.quantity.label","new.oqcoba.serial.label","new.oqcoba.inspectiontype.label","new.oqcoba.obafunctional.label","new.oqcoba.oqccosmetic.label","new.oqcoba.inspectresult.label","new.oqcoba.inspectresult.type.label","new.oqcoba.inspectresult.oba.label","new.oqcoba.inspectresult.oqc.label","new.oqcoba.inspectresult.quantity.label","new.oqcoba.inspectresult.description.label","new.oqcoba.inspectresult.picture.label","new.oqcoba.inspectresult.attachments.label","new.oqcoba.action.label","new.oqcoba.inspectresult.add.warn","new.oqcoba.inspectresult.add.duplicated.warn","new.oqcoba.acceptlot.label","new.oqcoba.rejectlot.label","new.oqcoba.rejectlot.remark.label","new.oqcoba.rejected.status.label","new.oqcoba.inspections.attachments.label","oqc.oba.status.label","oqc.oba.reinspect.label","oqc.oba.stopline.label","oqc.oba.notify.label","save.oqcoba.success","save.oqcoba.error","oqcoba.remove.inspection.alert","oqcoba.required.message.title","oqcoba.required.message.date","oqcoba.required.message.model","oqcoba.required.message.lotqty","oqcoba.required.message.remark","oqcoba.search.allstatus.label","oqcoba.placeholder.search.week","oqcoba.placeholder.search.year","oqcoba.placeholder.rejectedreinspect.directive","oqcoba.rejectedreinspect.directive.required.message","oqcoba.load.edit.error.message","oqcoba.delete.exists.reference.error.message","new.oqcoba.filter.oba.serial.placeholder","new.oqcoba.filter.oqc.serial.placeholder","last.id.oqcoba.error","load.rejected.oqcoba.error","error.oqcoba.search","oqcoba.save.failed","error.oqcoba.not.found","placeholder.search.lotId","update.old.oqc.oba.lot.success","update.old.oqc.oba.lot.error","help.lot.hint.format","OqcObaService","OQC_OBA_BASE","oqcOba","listAllRejectedReinspect","businessId","getLastId","updateOldOqcObaLot","searchReport","OqcObaRouter","OqcObaListController","oqcObaList","SectionTemp","StationTemp","getInspectResultText","getOqcObaCss","getStatusText","getStatusClass","EXPORTXLS","deleteOqcOba","searchOqcObas","originalStartDateFormat","originalEndDateFormat","getLotDescription","lotes","lote","InspectResult","txt","isInspectResult","css","isDisableDatePeriodFilter","moduleOqcOba","OqcObaEditController","OqcObaType","OQC","OBA","reinspection","inspectResultList","inspectResult","idTitle","filterObaModel","filterOqcModel","isAcceptOqcOba","getOqcObaToEdit","initNewOqcOba","OqcObaReinspected","getCurrentDri","OqcObaInspections","OqcObaAttachments","TempIdTitle","setRadioStatus","fillInspectResultList","sendOqcOba","saveOqcOba","sendToApproval","handleOqcObaObjToSave","inspec","OqcObaInspectionResults","mergeInspectResultList","Emails","existInspecResultInOba","existInspecResultInOqc","inspectionContainsResult","InspectResultOba","InspectResultOqc","reinspectObjChanged","reinspect","ModelName","ProjectName","ClientName","VariantName","reinspectionCheckChange","addInspectResult","canAddInspectResult","isInspectResultNotDuplicated","deleteInspectresultItem","positionToRemove","removeInspectResultFromOqcObj","removedInspectionListener","getInspectResultTypeLabel","serial","isNotDuplicated","isAddInspectResultDisabled","showActionPanel","canSaveOqcOba","isModelValid","isLotQtyValid","isSendButtonDisabled","LotQuantity","empty","showAll","limit","NotificationsListController","ModalTranslate","info.modal.title.delete","info.modal.message.delete","info.modal.title.back","info.modal.message.back","info.modal.description","button.delete","button.cancel","button.yes","button.no","ModalInfoController","title.logistics","logistic.month","logistic.confirm.dialog.message","logistic.title.import","logistic.title.kpi","logistic.import.select.title","logistic.import.model.title","logistic.title.model","logistic.title.year","logistic.title.imported.by","logistic.title.processing.date","logistic.title.file.uploaded","logistic.title.status","logistc.freight.cost.worksheet.notfound","error.logistc.freight.cost.search","logistics.import.status.active","logistics.import.status.inactive","logistics.import.select.file","logistics.import.buton","logistics.import.file.upload.label","logistics.import.success","logistics.import.error","import.freightcost.error.required.field","logistics.import.errors.title","logistics.import.errors.label","import.error.dialog.row","import.error.dialog.column","import.error.dialog.message","import.freightcost.error.datetime.field","import.freightcost.error.year.field","import.freightcost.error.decimal.field","import.freightcost.error.range","import.freightcost.error.numeric.long.field","import.freightcost.error.integer.field","import.freight.cost.worksheet.invalid","logistic.label.frequency","logistic.label.frequency.monthly.alternative","logistic.label.frequency.weekly.alternative","logistic.label.frequency.weekly","logistic.label.week","logistic.label.month","logistic.label.frequency.monthly","logistic.label.frequency.month","logistic.label.start.month","logistic.label.end.month","logistic.label.start.week","logistic.label.end.week","logistic.label.frequency.weekly.monthly","logistic.label.fob.usd","logistic.label.freight.usd","logistic.label.freight.perc","logistic.label.clearance.usd","logistic.label.clearance.perc","logistic.label.landed.usd","logistic.label.landed.perc","logistic.label.accumulated","logistic.kpi.list.notfound","logistic.month.jan","logistic.month.fev","logistic.month.mar","logistic.month.abr","logistic.month.mai","logistic.month.jun","logistic.month.jul","logistic.month.ago","logistic.month.set","logistic.month.out","logistic.month.nov","logistic.month.dez","logistic.month.label.jan","logistic.month.label.fev","logistic.month.label.mar","logistic.month.label.abr","logistic.month.label.mai","logistic.month.label.jun","logistic.month.label.jul","logistic.month.label.ago","logistic.month.label.set","logistic.month.label.out","logistic.month.label.nov","logistic.month.label.dez","logistics.error.endmonth.greather.startmonth","logistics.error.endweek.greather.startweek","logistics.error.startweek.endweek.invalid","logistics.error.startweek.endweek.min.invalid","logistics.hint.startweek.endweek.max","logistics.error.form","error.logistcs.freight.cost.list","logistics.kpi.graphics.local.transport.freight.cost","logistics.kpi.graphics.local.transport.freight.cost.title","logistics.kpi.graphics.national.freight.cost.air","logistics.kpi.graphics.national.freight.cost.air.title","logistics.kpi.graphics.national.freight.cost.air.inbound.title","logistics.kpi.graphics.national.freight.cost.road.outbound.title","logistics.kpi.graphics.national.freight.cost.road.outbound","logistics.kpi.graphics.national.freight.cost.air.inbound","logistics.kpi.graphics.air.national.inbound.time.accumulated","logistics.kpi.graphics.gross.weight.lsp.outbound","logistics.kpi.graphics.gross.weight.lsp.outbound.air.title","logistics.kpi.graphics.gross.weight.lsp.outbound.road.title","logistics.kpi.graphics.gross.weight.lsp.outbound.road","logistics.kpi.graphics.productive.landed.cost","logistics.kpi.graphics.productive.landed.cost.title","logistics.kpi.graphics.unproductive.landed.cost","logistics.kpi.graphics.unproductive.landed.cost.title","logistics.kpi.graphics.landed.variation","logistics.kpi.graphics.landed.variation.title","logistics.kpi.graphics.total.fob","logistics.kpi.graphics.total.fob.title","logistics.kpi.graphics.total.lsp.chargeable","logistics.kpi.graphics.total.lsp.chargeable.title","logistics.kpi.graphics.lsp.chargeable","logistics.kpi.graphics.lsp.chargeable.title","logistics.kpi.graphics.transit.time","logistics.kpi.graphics.transit.time.title","logistics.kpi.graphics.transit.time.accumulated","logistics.kpi.graphics.channel.performance","logistics.kpi.graphics.channel.performance.title","logistics.kpi.graphics.gross.chargeable","logistics.kpi.graphics.gross.chargeable.title","logistics.kpi.graphics.total.chargeable","logistics.kpi.graphics.total.chargeable.title","logistics.kpi.graphics.rate.variation","logistics.kpi.graphics.rate.variation.title","logistics.error.graphic.freight.cost.search","logistic.label.project","logistics.project.productive","logistics.project.unproductive","logistics.kpi.graphics.invoices.Issued.consolidated","logistics.kpi.graphics.invoices.Issued.consolidated.title","logistics.kpi.graphics.invoices.Issued.consolidated.scale.y","logistics.kpi.graphics.invoices.Issued.consolidated.scale.x","logistics.kpi.graphics.invoices.Issued.consolidated.qtd.of.invoice.issued","logistics.kpi.graphics.invoices.Issued.consolidated.qty.of.invoice.consolidated","logistics.kpi.graphics.invoices.Issued.consolidated.total invoice consolidated","error.landed.variation.search","logistics.percentage","logistics.kpi.graphics.landed.cost.title","logistics.kpi.graphics.landed.cost.thousands","logistics.kpi.graphics.local.transport.freigth.cost.thousands","logistics.kpi.graphics.local.transport.freigth.cost.trips","logistics.kpi.graphics.national.freight.cost.air.value","logistics.kpi.graphics.national.weight.gross.air","logistics.kpi.graphics.mode.spend","logistics.kpi.graphics.mode.spend.title","logistics.kpi.graphics.cargo.ratio.title","logistics.kpi.graphics.cargo.ratio","logistics.import.freight_cost","logistics.import.local_transport_cost","logistics.import.invoices","logistics.import.national_freight_cost","logistics.kpi.graphics.national.freight.cost.road.total.gw","logistics.kpi.graphics.national.freight.cost.road.qty","projectOptions","monthOptions","createFileFreightCost","freightcost","moduleLogistics","LogisticsRouter","autoComplete","AREA_BASE","KpiTranslate","title.kpi","title.registration","title.kpi.complete","kpi.new.label","kpi.edit.label","kpi.title.label","kpi.createdby.label","kpi.updatedby.label","kpi.created.date.label","kpi.created.date.start.label","kpi.created.date.end.label","kpi.updated.date.label","kpi.updated.date.start.label","kpi.updated.date.end.label","kpi.identification.label","kpi.docs.label","kpi.remove.success","kpi.remove.error","kpi.save.success","kpi.save.error","kpi.load.error","kpi.search.title.placeholder","kpi.presentation.label","kpi.section.label","kpi.station.label","kpi.not.found.msg","kpi.attachments.label","KpiService","getKpiToPresentation","KpiRouter","KpiListController","CreatedDateStartTemp","CreatedDateEndTemp","UpdatedDateStart","UpdatedDateStartTemp","UpdatedDateEnd","UpdatedDateEndTemp","CreatedByTemp","UpdatedByTemp","kpiList","sectionSelectedEvent","stationSelectedEvent","StationId","searchKpis","handleSearchParams","PLAY","goToKpiPresentation","KpiEditController","KpiAttachments","goToKpiDoc","initKpiDates","handleKpiBeforeSave","goToKpiList","currentDatePromisse","loadCurrentServerDate","getKpiToEdit","UpdatedDateTemp","forceUpdatedDate","KpiDocController","EDirection","PREVIOUS","NEXT","selectedKpiPosition","mozilaPdfApi","userCanEditKpi","openDocument","paths","changeDocument","direction","isPreviousDisabled","isNextDisabled","fullScreen","elem","mozRequestFullScreen","webkitRequestFullscreen","msRequestFullscreen","exitFullScreen","mozCancelFullScreen","webkitExitFullscreen","msExitFullscreen","HelpTranslate","title.create.task","title.approval.task","title.close.task","title.cancel.reject.task","title.create.approve.checklist","title.create.template.checklist","title.create.approve.iqc","title.create.template.iqc","title.create.approve.ort","title.create.template.ort","title.create.blocked.material","title.close.group.email.blocked.material","title.create.profile","title.create.user.group","title.change.photo","title.change.password","title.create.sourcing","title.create.visit","sourcing.avaliation.label","title.create.alert","title.create.logistics","title.create.sgi","title.create.financial","helpRouterConfig","HelpController","isLoginHelp","isDashboard","isTaskHelp","isChecklist","isFaca","isPdca","isDefect","isOqc","isOrt","isIqc","isApproval","isKpi","isSettings","isPermission","isBasicType","isProfile","isSourcing","isAlert","isLogistics","isSGI","isPreferences","isFinancial","isDash","isLogin","isTask","isChecklistHelp","isFacaHelp","isPdcaHelp","isOrtHelp","isIqcHelp","isApprovalHelp","isKpiHelp","isSettingsHelp","isPermissionHelp","isBasicTypeHelp","isDefectHelp","isOqcHelp","isProductionPlan","isProductionPlanHelp","isBlockedMaterial","isBlockedMaterialHelp","isUsers","isUsersHelp","isProfileHelp","isAccount","isAccountHelp","isSourcingHelp","isAlertHelp","isLogisticsHelp","isSGIHelp","isFinancialHelp","isDashboardHelp","isPreferencesHelp","finishedWizard","checkMenuActive","idMenu","FiscalTranslate","title.fiscal","fiscal.inValidation","fiscal.approval","fiscal.emissedDate","fiscal.emissedDate.due","fiscal.dueDate","fiscal.dueDate.due","fiscal.nf","fiscal.codSap","fiscal.searchService","fiscal.hideAppovalsInProgress","fiscal.table.approvalID","fiscal.table.approvalDescription","fiscal.table.createdDate","fiscal.table.deadline","fiscal.table.status","fiscal.table.status.approval","fiscal.table.status.peding","fiscal.table.status.registeredSap","fiscal.table.template.service","fiscal.table.template","fiscal.table.template.customsExpenses","fiscal.invoice.title","fiscal.invoice.bt.return","fiscal.invoice.bt.registerSap","fiscal.invoice.approvalSub","fiscal.invoice.provider","fiscal.invoice.nf","fiscal.invoice.approvalResquestBy","fiscal.invoice.approvalCreatedDate","fiscal.invoice.dateIssue","fiscal.invoice.serviceCod","fiscal.invoice.dueDate","fiscal.invoice.validateBy","fiscal.invoice.validateDate","fiscal.invoice.sap","fiscal.invoice.table.serviceDescription","fiscal.invoice.table.value","fiscal.invoice.table.po","fiscal.invoice.table.itemPo","fiscal.invoice.table.checked","fiscal.invoice.totalCheck","fiscal.invoice.attachment","fiscal.invoice.fileName","fiscal.checkbox.billet","fiscal.checkbox.approved","fiscal.list.notfound","error.fiscal.search","fiscal.tab.label","solicitation.label.total.checked","fiscal.msg.save.success","fiscal.msg.disable.return","document.flow.label.request.by","document.flow.predecessor","document.flow.predecessor.placeholder","document.flow.return.sub.title","document.flow.return.success","document.flow.return.error","fiscal.register.sap.required","fiscal.msg.status.registered","acquisition.label.status.approval","Templates","FiscalRouter","DialogReturnApprovalController","targets","targetId","DialogReturnApprovalDirective","FinancialTranslate","title.financial","title.financial.new","title.financial.edit","placeholder.search.financial","placeholder.search.financial.id.approval","financial.label.created","financial.label.updated","financial.label.peyment","financial.label.lastupdated","financial.label.id.approval","financial.label.start.created.date","financial.label.final.created.date","financial.label.start.updated.date","financial.label.final.updated.date","financial.label.createdby","financial.label.updatedby","financial.label.status","financial.label.note","financial.placeholder.all","financial.list.notfound","error.financial.search","financial.remove.success","financial.remove.error.conflict","financial.remove.error","financial.label.status.archiving.pending","financial.label.status.pending.document","financial.label.status.archived","label.newArchiving","financial.title.identification","financial.title.approval.dateApproval","financial.title.approval","financial.title.approval.subject","financial.title.approval.type","financial.title.approval.requestby","financial.title.approval.deadline","financial.title.approval.solicitation","financial.title.approval.amount","financial.title.approval.attachments","financial.title.additional.attachment","financial.title.category","financial.title.attachment","financial.category.transfer.border","financial.category.border.ticket","financial.category.payment","financial.category.refund","financial.category.advance.travel","financial.category.advance.payment","financial.category.payment.sheet","financial.category.bank.statement","financial.category.bank.others","financial.placeholder.category.attachment","financial.update.success","financial.archiving.attachments.error","financial.save.success","placeholder.search.financial.vendor","placeholder.search.financial.vendor.codesap","documentFlow.label.yes","documentFlow.label.no","financial.presentation.label","financial.archiving","financial.payments","financial.pending","financial.pending.expirationInitial","financial.pending.expirationEnd","financial.pending.paymentInitial","financial.pending.paymentEnd","financial.title.hide.pending","financial.search.ids.error","CategoryAttachment","createFinancial","editFinancial","viewPendingPayments","listDocumentsFlows","FinancialRouter","FinancialPendingPaymentsController","checkall","Approvals","approvalAttachments","getTemplateList","DocumentFlowId","FinancialId","PaymentDateExpirationInitial","PaymentDateExpirationEnd","PaymentDateInitial","PaymentDateEnd","Solicitacion","checkButton","financialId","checkUncheckAll","DocumentFlowClicked","searchFinancial","NotAcceptable","markDocumentFlow","DocumentFlow","filterAttachs","FinancialListController","financials","CreatedStartDate","CreatedFinalDate","UpdatedStartDate","UpdatedFinalDate","FinancialEditController","typeExpenseList","hidePending","Financial","PaymentDate","Note","fillFinancialAttachments","onSaveFinancialError","formatFinancialToSave","FinancialCopy","hasAtt","att","financialForm","fillDocumentsFlows","listTypeExpenses","getTypeExpenses","doc","docs","filterHidePending","getFinancialToEdit","Consulting","AttachmentsPresentacion","paymentDate","disableButton","FinancialDocController","selectedPosition","goToFinancial","getFinancial","FacaTranslate","faca.no.effect.found","title.faca","title.newFaca","title.editFaca","title.faca.problem.new","title.faca.problem.edit","title.effect","title.containment","title.containment.details","title.newContainment","title.editContainment","title.newControlPlan","title.editControlPlan","title.rootcause","title.risk","title.action.plan","title.problem","title.action","title.dri","title.dueDate","title.status","title.improvement","title.before","title.after","title.whys","title.ishikawa","title.correctiveAction","title.correctiveActionNumber","title.controlPlan","title.lessonLearn","title.newLessonLearn","title.editLessonLearn","placeholder.lessonLearn","subtitle.causeConclusion","subtitle.man","subtitle.method","subtitle.machine","subtitle.measure","subtitle.material","subtitle.environment","subtitle.what","subtitle.where","subtitle.why","subtitle.how","subtitle.who_dri","subtitle.who","subtitle.when","subtitle.problem","editFaca.header.faca","editFaca.header.problem","label.lotRejectedBlocked","label.reworkReinspection","button.save","button.export","button.add","label.addFaca","button.addContainmentPlan","button.addControlPlan","button.addLessonLearn","button.detailContainmentPlan","addFaca","notFoundFaca","problem.identification","label.id","label.level","label.date","label.week","placeholder.search.faca","label.add.problem_issue","label.notfound.problem_issue","label.defects","label.production","label.dppm","placeholder.problem.title","title.add.problem","title.edit.problem","validation.facaStartDate.required","label.cause","label.description","label.serevity","label.probality","label.detectability","label.score","label.vitalfew","problem.validation.title.required","problem.validation.defects.required","problem.validation.production.required","error.effects","faca.saved.success","faca.saved.fail","faca.deleted.success","faca.deleted.fail","sucess.level","error.level","label.search","option.onGoing","option.late","option.closed","validation.what.required","validation.when.required","faca.placeholder.title","risk.not.found","corrective.not.found","controlPlan.not.found","controlPlan.required.msg.action","controlPlan.required.msg.dri","controlPlan.required.msg.dueDate","controlPlan.required.msg.status","lesson.not.found","faca.problem.item.analyze","faca.issue.saved.success","faca.issue.saved.fail","faca.issue.deleted.success","faca.issue.deleted.fail","actionplan.not.found","duplicated.item.warn","remove.ishikawa.warn","validation.lesson","header.problem.issue","label.notfound.containment.plan","hint.containment.plan.what","hint.containment.plan.where","hint.containment.plan.why","hint.containment.plan.how","hint.containment.plan.who","hint.containment.plan.when","save.faca.eror.msg","level.a","level.b","level.c","level.d","containment.plan.label.view.card","containment.plan.label.view.detail","faca.information.add.problem","faca.empty.export","domainIshikawa","deleteIssue","changeLevel","itemListDTO","getFacaById","FacaRouter","FacaListController","levelList","facaList","facaListFilter","isRemoveDisabled","Level","changeFacaLevel","filtrar","searchFaca","FacaEditController","problems","issueBeforeSave","Issues","createdByDri","editProblem","editProblemIssue","actionSave","validateAddProblem","toListPage","openAddProblem","removeProblem","REQUEST_TYPE_BASE","DocumentFlowTranslate","document.flow.title","label.poList.placeholder","document.flow.label.document","document.flow.label.target.individual","document.flow.label.target.route","document.flow.label.deadline","document.flow.label.deadline.purchase","document.flow.label.deadline.start","document.flow.label.deadline.due","document.flow.label.new","document.flow.status.search.placeholder","document.flow.label.ongoing","document.flow.label.pending.approval","document.flow.label.approved","document.flow.label.status.canceled","document.flow.label.status.rejected","document.flow.panel.identification","document.flow.label.subject","document.flow.label.IdOrSubject","document.flow.label.solicitation","document.flow.label.documents","document.flow.label.target","document.flow.label.edit","document.flow.label.futureApprovals","document.flow.msg.save.success","document.flow.msg.save.error","document.flow.msg.load.error","document.flow.label.approver","document.flow.label.consent","document.flow.label.notification","document.flow.label.request.type","document.flow.label.created.date","document.flow.label.pending.by","document.flow.placeholder.visibility","document.flow.label.visibility","document.flow.label.confidential","document.flow.label.public","document.flow.label.done","document.flow.msg.error.min.paymentdate","document.flow.msg.error.min.deadline","document.flow.label.button.cancel","document.flow.label.button.reject","document.flow.label.button.return","document.flow.label.button.approver","document.flow.cancel.title","document.flow.cancel.sub.title","document.flow.reject.title","document.flow.return.title","document.flow.reject.sub.title","document.flow.approved.title","document.flow.approved.sub.title","document.flow.export.status.validation.msg","document.flow.edit.status.validation.msg","document.flow.export.validation.msg","document.flow.delete.error.msg","document.flow.delete.success.msg","placeholder.flow.search.IdOrTitle","placeholder.flow.search.requestby","placeholder.flow.search.pendingby","document.flow.report.name","document.flow.approval.reservation.message.confirm","document.flow.confirmation.title","document.flow.placeholder.search.category","placeholder.category","checklist.label.solicitation.template","solicitation.label.template.cash","solicitation.label.template.refund","solicitation.label.template.mileage","solicitation.label.num.order","solicitation.label.expiration","solicitation.label.paymentdate","solicitation.label.ccost","solicitation.label.caccounting","solicitation.label.advance","solicitation.label.head.office","solicitation.label.filial","solicitation.label.moeda","solicitation.label.value","solicitation.label.model","solicitation.label.finalValue","solicitation.label.vendor","solicitation.label.poList","solicitation.label.invoice","solicitation.label.type.payment","solicitation.label.bank.transfer","solicitation.label.ticket","solicitation.label.money","solicitation.label.outsider","solicitation.label.codesap","solicitation.label.bank.data","solicitation.label.name","solicitation.label.bank.name","solicitation.label.agency","solicitation.label.account","solicitation.label.note","solicitation.placeholder.select.template","solicitation.label.real","solicitation.label.usd","solicitation.label.euro","solicitation.label.yene","solicitation.label.pound","solicitation.placeholder.select.moeda","solicitation.error.type.payment","document.flow.references","document.flow.references.placeholder","solicitation.label.bank.bradesco","document.flow.reference.notfound","solicitation.label.others","solicitation.label.ncapex","solicitation.label.asset","solicitation.label.quotation.request","solicitation.label.po","solicitation.label.contracts","solicitation.label.nature","solicitation.label.capex","solicitation.label.lm","solicitation.label.safety.equipament","solicitation.label.cleaning.material","solicitation.label.maintenance.material","solicitation.label.temporary.works","solicitation.label.freight.storage","solicitation.label.documentation","solicitation.label.memorial.spec","solicitation.label.no.documentation","solicitation.placeholder.select.nature","document.flow.reference.add","solicitation.placeholder.select.documentation","solicitation.label.registration","solicitation.label.types.expenses","solicitation.label.quantity","solicitation.label.sub.total","solicitation.label.advance.expenses","solicitation.label.total.receivable","expense.validation.quantity.msg","expense.validation.value.msg","solicitation.placeholder.type.expense","solicitation.error.type.expense","solicitation.label.date.time","solicitation.label.date.start","solicitation.label.time","solicitation.label.from","solicitation.label.to","solicitation.label.start.mileage","solicitation.label.end.mileage","solicitation.checkbox.billet","solicitation.label.reason","document.flow.solicitationPo.error","solicitation.label.total","solicitation.label.total.km","solicitation.label.brl.km","solicitation.label.total.brl","solicitation.error.hour.required","solicitation.error.date.required","solicitation.error.from.required","solicitation.error.to.required","solicitation.error.start.km.required","solicitation.error.end.km.required","solicitation.error.start.end.km.required","solicitation.error.reason.required","solicitation.error.po.required","solicitation.error.description.required","solicitation.error.item.required","solicitation.error.nrprocess.required","solicitation.error.value.required","solicitation.alert.payment.day","solicitation.label.expenses","document.flow.label.request.by.user.area","document.flow.placeholder.request.by.user.area","solicitation.label.qutotation","solicitation.label.material","solicitation.label.material.quantity","solicitation.label.material.measure.unit","comment.title","comment.label","comment.button","comment.previous","solicitation.label.nro","document.flow.comments.mentioned","acquisition.label.status.inprogress","acquisition.label.status.done","acquisition.label.protocolId","acquisition.label.protocol.status","solicitation.label.template.service","solicitation.label.template.customsExpenses","solicitation.label.template.fiscal.nf","solicitation.label.template.fiscal.emission.date","solicitation.label.template.fiscal.due.date","solicitation.label.template.fiscal.service.code","solicitation.label.template.fiscal.po","solicitation.label.template.fiscal.po.identification","solicitation.label.template.fiscal.service.description","solicitation.label.template.fiscal.customsExpenses.description","solicitation.label.template.fiscal.customsExpenses.nrPro","solicitation.label.template.fiscal.item.po","solicitation.label.template.fiscal.value.po","solicitation.label.template.customsExpenses.value.po","solicitation.error.fiscal.service","solicitation.error.fiscal.service.attachments.notfound","solicitation.error.po.item.exist","document.flow.contract.reference.add","document.flow.contract.references","document.flow.contract.reference.notfound","document.flow.contract.reference.load.error","TemplateList","TemplateFiscalList","MoedaList","AcquisitionList","NatureList","DocumentationList","UnitMeasureList","Integer","getTemplateFiscalList","getAcquisitionList","getMoedaList","getNatureList","getDocumentationList","getRefence","getContractReference","approvalBrlKm","approvalParallel","findSolicitationApproval","saveComment","getComments","DocumentFlowRouter","DocumentFlowListController","categoryOptions","PendingBy","PendingByObject","FutureApprovals","documentVisibility","CONFIDENTIAL","PUBLIC","visibilityList","documentFlowList","resolveVisibilityCss","visibility","resolveCategory","searchDocumentFlows","loadUserInputDirective","userLoggedId","RequestById","Targets","NotificationUsers","moduleDocumentFlow","exportNew","exportAntigo","RequestTypeId","DocumentFlowEditController","AcquisitionService","listaPO","AdvanceExpense","SubTotalQtd","SubTotal","RouteOptions","RadioRoute","TotalExpense","TypeExpense","ChatId","SolicitationQuotation","usersCommentsList","userComment","Reference","ReferenceId","UsersToMention","templateFiscalList","acquisitionList","moedaList","natureList","documentationList","UserAreaList","approvalParallelEnabled","showDeadlinePurchase","Summary","DocumentFlowUsersComment","botMessage","statusProtocolList","contractReferenceId","ContractReference","onRequestTypeSelected","onCategoryOptionChanged","isDeadlinePurchase","Bank","BankName","onTemplateChange","fillSolicitationApproval","onTemplateOptionChanged","onBankNameChange","sendDocumentFlowToApproval","requesterCanSendApprovel","canSendApprovel","requesterCanCancel","canCancel","requesterEdit","TargetApproved","requesterCanSave","requesterCanSavePOList","SolicitationApprovalPOs","requesterCanSavePONote","requesterFileUploadCanSave","addFiles","requesterCanChange","targetCanApproveReject","canApproveReject","fillSolicitationApprovalPOList","sendDocumentFlowCancel","confirmCancel","saveApproveReject","confirmRemark","confirmRemarkApprover","itemUserLogged","isApprovalParallelEnabled","addReference","referenceId","validateDeadline","validadeSolicitation","validSolicitation","Transfer","Ticket","Money","Outsider","validatePaymentDate","SolicitationExpenses","SolicitationMileages","documentFlowForm","deadlineDate","deleteReference","deleteContractReference","changeAdvance","Advance","NumOrder","changeTransfer","Agency","Account","loadComments","checkValues","letters","cont","removeChars","parseCommentText","comments","author","checkSpecialChars","sendTelegramMessages","userNames","firstName","secondName","commentsArray","addInstance","replaceString","persons","fillPOList","poValues","DisabledParallel","LeadTime","getDaysOff","processingDay","receiveDay","processingMoment","receiveMoment","daysOff","weekNumProcessing","week","weekNumReceove","DaysWeekends","subtract","diference","leadTime","asHours","SolicitationApprovalTemplate1","CAccounting","CCost","Expiration","Filial","HeadOffice","Moeda","setDateViewModel","SolicitationApprovalTemplate2","Registration","calculateTotal","SolicitationMileage","SolicitationDate","SolicitationHour","Destiny","StartKm","EndKm","SolicitationApprovalTemplate3","calculateTotalMileage","TemplateQuotation","Nature","Documentation","SolicitationQuotations","TemplatePO","Asset","Capex","FinalValue","cleanForm","loadBrlKm","getTypeExpense","validAddMileage","validAddServiceCustomsExpenses","validAddServicePo","existPOItem","existItens","calculeDiference","addMileage","expense","solMileage","addPoService","servicePo","solServicePO","addPoCustomsExpenses","customsExpensesPo","solcustomsExpensesPO","addQuotation","solicitationQuotation","getProtocol","QuotationProtocolItems","QuotationProtocol","getStatusProtocol","statusProtocol","addExpense","solExpense","getTypeExpenseCmb","deleteExpense","deleteQuotation","deleteMileage","deletePO","deleteCustomsExpenses","editExpense","editService","searchPerson","term","userList","toUpperCase","getPersonTextRaw","names","resultsArray","loadRoutes","addContractReference","DialogReturnDocumentFlowController","DialogReturnDocumentFlowDirective","FileUploadTranslate","FileUpload","uploadDirective","disabledSalvedFile","disabledSalved","capturedPhotoListener","photo","photoContentType","PhotoBase64","ContentType","openDisabledSalvedFile","fileUploadUserPhoto","userUpload","urlDir","isPhotoValid","DialogCloseDefectsController","defectListFilter","listAllDefectAnalysis","saveCloseAll","DialogCloseDefectsDirective","DefectsTranslate","title.defects","title.defect.new","title.defect.edit","title.defect.copy","title.defectIdentification","title.rootCauseAction","title.picture","label.defect","label.project","label.newDefect","label.step","label.defect.type","label.type.daily","label.type.buffer","label.type.rework","label.type.analysis","label.type.real","label.type.ndf","label.quantity","label.serial","label.rootCause","label.defect.origin","label.defect.position","label.client","label.notify","label.start.date","label.duo.date","label.year","defect.label.remark","placeholder.search.defect","placeholder.search.serial","placeholder.search.section","placeholder.search.model","placeholder.search.area","placeholder.search.type","placeholder.search.status","placeholder.search.station","placeholder.search.week","placeholder.search.year","placeholder.search.defect.button","placeholder.clean.defect.button","placeholder.remark","placeholder.search.project","select.default.project","select.default.client","checkbox.safety","select.default.defect","select.default.model","select.default.rootCause","warning.type1.required","warning.type2.required","warning.date.required","warning.serial.required","service.load.error","defect.title.field.placeholder","defect.save.error","defect.save.error.duplicated.serial","defect.save.success","defect.deleted.success","defect.deleted.error","error.defects.search","notFoundDefect","validation.defect.station.required","validation.defect.section.required","validation.defect.quantity.required","validation.defect.serial.required","validation.defect.required","validation.defect.remark.required","validation.defect.date.greater.today","validation.project.required","validation.client.required","report.name","defect.serial.hint","defect.type.hint","defect.webcam.notfound","defect.serial.duplicate","defect.hint.safety","defect.status.ongoing","defect.status.close","defect.button.close.all","defect.button.close","select.placeholder.step","getDefectAnalysisById","deffectAnalysisDomain","saveDefectAnalysis","deffectAnalysis","defect_analysis_domain","defect_domain","deffectDomain","defectRootCause","deffectOccurenceDomain","defectQuantitySave","ignoreLoadingBar","DefectsRouter","DefectsListController","defectTypeList","sessionList","stationList","loadDefectType","searchDefects","itemsPerPage","listAllDefectsType","copyDefects","onDefectQuantityValueChanged","defectQuantity","dialogCloseDefects","moduleDefects","DefectsEditController","deffectOccurrences","deffectTypes","rootCauseList","actionsList","disableWhenEditing","Position","DefectOccurrence","EmailsToNotify","DefectActions","DefectType","Step","isPictureAccordionOpen","isRootCauseAccordionOpen","isSaveDisabled","setModelId","handleAccordions","DefectAttachments","DefectRootCause","markDeffectOccurrence","fillDefect","Defect","fillRootCause","markDefectAction","persistedAction","DefectSerials","copyActionButton","languageEmail","setDefectActions","validateDefect","validateDefectType","validateQuantity","validateSection","validateArea","validateModel","validateVariant","validateStation","serialListChanged","validateProject","validateClient","validateTurn","isInvalid","NotifyChecked","actionChange","disabledStatus","getDefectToEdit","markDeffectType","loadDefectOccurrence","listAllDefectOccurrence","loadAllDefectType","loadDefects","listAllDefect","loadRootCauseList","listAllDefectRootCause","loadActionsList","listAllDefectsAction","itemToRemove","ProductionController","ChartMultiBarHorizontalUtil","ChartGaugeUtil","ChartBarUtil","LINE_PRODUCTION_PLAN","MULTI_BAR_DEFECT","BAR_OCCURRENCE","GAUGE_PASS_YELD","DAILY_OCCURRENCE","chartProductionLine","chartMultiBarStyle","chartGaugeStyle","chartScrapGaugeStyle","fillTopOccurrenceList","getTopDefectTitle","setProjectId","setClientId","setVariantId","setTurnId","setSectionId","handleStartDateBeforeRequest","promisseProductionPlan","searchProductionPlans","promisseDailyOccurrence","getDailyOccurrenceToCarousel","promisseDefect","promissePassYield","getFirstAndFinalPassToChart","promisseTopOccurrence","searchTopOccurrences","listDefectAnalysisToChart","copyResponse","scrapValues","defectValues","DefectDescription","getSerieValueObj","TotalSum","scrapSerie","getSerieObj","defectSerie","listAllProductionPlanToChart","prod","firstPassYeldRange","getFirstPassYeldRange","firstPassYeldLowerLimit","firstPassYeldUpperLimit","finalPassYeldRange","getFinalPassYeldRange","finalPassYeldLowerLimit","finalPassYeldUpperLimit","scrapRatedRange","getScrapRateRange","scrapRateLowerLimit","scrapRateUpperLimit","getPassYeldSlideTitle","getDateLocalized","getDailyOccurrenceStatus","getDailyOccurrenceTitle","listTopOccurrence","occurrenceBarChartList","chartList","BuildGraphic","qtd","Qtd","DatePt","DateEn","getBarChartObj","DescriptionPt","DescriptionEn","getTopOccurrencesTitle","title.header.dashboard","dashboard.panel.task.title","dashboard.panel.task.delay.title","dashboard.panel.pending","dashboard.panel.ongoing","dashboard.panel.closed","dashboard.panel.checklist.title","dashboard.panel.faca.title","dashboard.panel.faca.levelc","dashboard.panel.faca.leveld","dashboard.task.pending.label","dashboard.task.ongoing.label","dashboard.task.closed.label","dashboart.task.chart.title","dashboart.task.chart.sub.title","dashboart.task.bar.chart.title","dashboart.task.bar.chart.y.title","dashboart.task.bar.chart.late.title","dashboart.checklist.chart.title","dashboart.checklist.chart.sub.title","dashboart.faca.chart.title","dashboart.faca.chart.sub.title","dashboart.label.panel.user","dashboart.label.panel.production","dashboard.production.swipe.title","dashboard.production.hour.chart.title","dashboard.production.uph.chart.title","dashboard.production.hour.chart.planned.legend.title","dashboard.production.hour.chart.accomplished.legend.title","dashboard.production.hour.chart.delay.legend.title","dashboard.production.hour.chart.occurrence.legend.title","dashboard.production.hour.chart.data.not.found.msg","dashboard.production.top.occurrence.chart.title","dashboard.production.defect.chart.scrap.title","dashboard.production.defect.chart.defect.title","dashboard.production.defect.chart.load.error","dashboard.production.defect.chart.title","error.occurrence.plan.search","dashboard.production.top.occurrence.label.x","carousel.directive.lock.slide.label","carousel.directive.lock.slide.info.msg","dashboard.button.fullscreen","dashboard.production.autointerval.slide.label","dashboard.production.autointerval.data.refresh.label","dashboard.production.firstpassyeld.chart.label","dashboard.production.finalpassyeld.chart.label","dashboard.production.scraprate.chart.label","dashboard.production.passyeld.slide.title","dashboard.production.passyeld.get.error","dashboard.production.daily.occurrence.title","dashboard.production.daily.occurrence.header.hour","dashboard.production.daily.occurrence.header.turn","dashboard.production.daily.occurrence.header.session","dashboard.production.daily.occurrence.header.model","dashboard.production.daily.occurrence.header.variant","dashboard.production.daily.occurrence.header.occurrence","dashboard.production.daily.occurrence.header.status","dashboard.production.daily.occurrence.header.status.open","dashboard.production.daily.occurrence.header.status.closed","dashboard.document.pending.approval.not.found.msg","dashboard.panel.document.pending.title","dashboard.panel.future.approvals","dashboard.project.client.required.error","dashboard.panel.pdca.pending.title","dashboard.pdca.pending.not.found.msg","dashboard.panel.technicalvisit.pending.deadline","dashboard.panel.technicalvisit.pending.title","dashboard.milestone.pending.not.found.msg","dashboard.technicalvisit.pending.not.found.msg","dashboard.panel.milestone.pending.title","dashboard.panel.milestone.pending.deadline","dashboard.notfound","dashboard.panel.alerts","dashboard.panel.alert.next","dashboard.alert.next.not.found.msg","dashboard.component.development.pending.review.not.found.msg","dashboard.panel.component.development.pending.review.title","preferences.dashboard.error.msg","getTasksCount","getChecklistCount","getFacaCount","listDocumentPending","listDocumentFutureApprovals","listPDCAPending","userId","dashRouterConfig","DashboardController","ChecklistService","ChartPieUtil","DashboardItemService","myChartObject","RequestTypeFutureApprovals","tasksCount","PendingTasksCount","OngoingTasksCount","ClosedTasksCount","taskPieChartList","taskBarChartList","checklistCount","PendingCount","OngoingCount","checklistPieChartList","facaCount","FacaLDCount","FacaLCCount","facaPieChartList","PDCAStatusId","PDCAstatusList","setUpDashboardItemCallback","loadDashboard","getDocumentToApprovalByType","onRequestFutureApprovalsTypeSelected","getDocumentFutureApprovalsByType","newApproval","BasicTypeParamDTO","GenericFilterId","DocumentsToExpire","listDsb","existsUserDashboard","dashboardItem","valueOf","alias","dashboardItems","autoload","TaskControlDelay","TaskControl","loadTasksCount","Checklist","loadChecklistCount","FACA","loadFacaCount","PendingApprovalDocuments","loadDocumentPending","FutureApprovalsDocuments","loadDocumentFutureApprovals","PDCAPendingActivities","loadPDCAPending","fillTaskPieChart","fillChecklistPieChart","listPdcaPending","fillFacaPieChart","getPieChartObj","TotalDelayed","goToTaskControl","menuClicked","goToPDCA","goToFaca","goToChecklist","SourcingPendingTechnicalVisit","SourcingPendingMilestone","NextAlert","SourcingPendingReviewComponent","setFavoriteBusinessUser","favoriteBusiness","profileName","ProfileName","idBusiness","deleteInspectionSubType","loadModelByClient","loadAreasByCompany","loadPartInspectionSubType","listViewPermissionsByUserProfileBusinessId","userProfileBusinessId","loadDRIs","listAllChecklistsTemplate","deleteTestInspectionSubType","UploadOptionsController","isShowCamPanel","showWebCam","showMessageErro","takePicture","showCamPanel","turnOffWebCam","fileSystemClick","image","confirmAndUploadImage","UploadOptionsDirective","SubHeaderController","SubHeaderDirective","useBackAction","backAction","NumbersOnly","require","ngModelCtrl","fromUser","transformedInput","$setViewValue","$render","$parsers","NgNumeric","$attr","acceptDot","shiftKey","leftArrowKey","rightArrowKey","bind","NgMaxlength","ngMaxlength","ngMax","currentTarget","actionbt","keyDown","activeElement","NgEnterDirective","ngEnter","enterSubmit","ListViewController","EXPORT","CONTEXT_MENU","header","rowAttr","isHighlight","valueFn","cssClassFn","ngInclude","menuType","identificationKey","descriptionKey","actionFn","menu","menuItems","ActionMenu","pageSize","totalItemsPagination","currentPage","getRowAttrValue","valueIsObject","handleValueObject","getItemClass","itemClass","goToEdit","menuItem","complex","isVisible","ListViewDirective","pageChangeFn","LiDeleteController","LiDeleteDirective","LiButtonController","LiButtonDirective","buttonClass","InputUserController","initListViewUser","deleteModelFromList","addIndexToUsers","getValueToVariants","variantsValue","Order","InputUserDirective","InputUserTelegramController","telegramStyle","InputUserTelegramDirective","InputStationController","stationForm","listStationValues","addStation","selectedModelsContainsModel","loadListStations","initListViewStation","canRemove","deleteValidationAction","deleteValidation","InputStationDirective","InputOqcObaReinspectController","showMsgValidation","InputOqcObaReinspectDirective","InputModelController","modelForm","addModel","isValidModel","loadModel","variantsStyle","InputModelDirective","InputListTestInspecSubTypeController","subtypes","listSubtypeValues","httpStatusCodeConflict","subtypeObj","listSubtype","addSubtype","watchFilterType","loadListSubtypes","initListViewSubtype","InputListInspecSubTypeDirective","InputListPartInspecSubTypeController","InputListEmailController","BlockedMaterial","BlockedMaterialGoodList","showVerticalList","isEmailBlockedMaterial","isEmailBlockedMaterialGoodList","isEmailProductionPlan","isEmailMainReport","getEmailTypeToSave","addEmailToGroup","isEmailFromGroup","removeFromItemToSave","checkIsEmailAlreadInGroup","ExternalB","isInGroup","isFromAnyGroup","InputListEmailDirective","InputListDRIController","hideTeamLeader","checkedTeamLeader","InputListDRIDirective","idDirective","InputDriController","driModel","getDriFromId","fieldDisabled","fieldRequired","driShowValidation","IsSysAdmin","driId","InputDriDirective","InputDateController","fieldId","placeHolder","dateFormat","initNoDate","popup","dateOptions","formatYear","maxDate","minDate","startingDay","dateChangeEvent","callParentDateChange","inlineOptions","customClass","getDayClass","showWeeks","toggleMin","dayToCheck","events","currentDay","InputDateDirective","InputClientController","clientForm","listClientValues","listClient","addClient","loadListClients","initListViewClient","idProject","InputClientDirective","DivInputController","showHintInline","warningHint","requiredLabel","requiredSymbol","getFormData","DivInputDirective","msgToHint","DivInputListController","isEmail","re","DivInputListDirective","DivAccordionController","oneAtATime","getInformationHint","information","DivAccordionDirective","headerParam","DivAccordionCrudController","editIsDisabled","DivAccordionCrudDirective","idComponent","isOpened","editAction","deleteAction","addAction","addBtnLabel","deleteBtnLabel","DivAccordionCheckController","DivAccordionCheckDirective","isCheck","subtitle","showWithModel","closeListener","cancelListener","modalTemplate","template","DialogConfirmController","DialogConfirmDirective","CheckItemController","selecteds","toggle","idx","CheckItemDirective","ChartPieController","transitionDuration","showLegend","showValueInLabel","geLocalizedText","api","refresh","chart","labelThreshold","labelSunbeamLayout","labelType","valueFormat","margin","top","right","bottom","left","pie","dispatch","elementClick","ChartPieDirective","ChartMultiBarHorizontalController","showControls","showValues","yAxisLabel","tickValues","watchSlide","activeFlag","xAxis","showMaxMin","yAxis","axisLabel","axisLabelDistance","tickFormat","multibar","on","ChartMultiBarHorizontalDirective","ChartGaugeController","red","orange","blue","green","getRangeItem","currentValue","upLimit","loLimit","getchartLowerLimit","chartTempLowerLimit","getchartUpperLimit","chartMajorGraduations","chartMajorGraduationPrecision","chartMajorGraduationTextSize","chartNeedleValueTextSize","chartAngle","boolIsTrue","getLegendText","getParentLegendStyle","isSHow","showChart","ChartGaugeDirective","ChartBarController","labelEn","xAxisLabel","labelX","marginTopTitle","fontSizeTitle","rotateAngleXAxisLabel","bottomChartMargin","showDistY","bars","forceY","rotateLabels","discretebar","ChartBarDirective","CarouselController","CarouselUtil","getAutoIntervalListItem","valueInMinutes","isMouseOver","isLockSlide","animateClass","carouselId","infiniteList","autoSwipeIntervalList","showAutoSwipeControl","listSize","showLockOption","enableLockOnMouseOver","nextSlide","updateListSize","newPosition","isInfiniteList","slideEndFn","prevSlide","newLength","callSwipeListener","carouselClicked","clickFn","resetAnimation","swipeListenerFn","autoSwipe","itemBool","CarouselDirective","controls","titleKey","CarouselMultipleController","listChartTypes","moveChart","getClassActive","changeChart","loadCarousel","CarouselMultipleDirective","CarouselMultipleContractController","CarouselMultipleContractDirective","CarouselItemController","mouseOverIn","mouseOverOut","watchCurrentValue","watchListParent","watchSwipeInterval","CarouselItemDirective","clearable","clearableModel","addOrRemoveClass","toggleClass","addClass","hasClass","offsetWidth","clientX","getBoundingClientRect","removeClass","$digest","PhoneNumberFilter","number","formattedNumber","country","frontSize","front","end","RemarkChecklistVersionController","RemarkChecklistVersionDirective","RemarkChecklistTemplateVersionController","confirmVersion","confirmAlterationRemark","RemarkChecklistTemplateVersionDirective","CopyTemplateController","oldTitle","ChangeVersionRemark","validateNewTitle","loadCopyChecklist","CopyTemplateDirective","ChecklistsTemplatesListController","checklistList","disableChecklistTemplate","useChecklist","addTemplate","deleteTemplate","inactivateChecklistTemplate","searchCheckTemplates","moduleChecklist","ChecklistsTemplatesEditController","Checklists","ParamTypeId","saveNewVersion","notify","removeProcessesUnchecked","loadChecklistTemplate","checklistId","getChecklistTemplateById","injectCheckboxValues","copyTemplate","saveChecklistTemplate","validateProcessParameters","validateTemplateAssociated","cancelSaveNewVersion","validateTemplateSameTitle","ChecklistTemplateParameters","validateAddProcess","openAddProcess","existInList","editProcess","deleteProcess","openAddParameters","sProcess","sParameters","editParameters","deleteParameters","indexParameter","statusChanged","getParamTypeReference","referenceValue1","referenceValue2","paramTypeId","reference","ChecklistsListController","SENT","searchCheckList","listAllChecklists","deleteChecklist","getStatusTextClass","addChecklist","ChecklistsEditController","selectedChecklistTemplateProcesses","SaveNewVersion","checkListTotal","ocorrence","processPendent","processComplete","checkOcorrencias","PatrolResultOptions","templateOptions","isTemplateCmbDisabled","shouldNotEdit","shouldNotEditProcess","ProcessIsActiveTemp","submitForm","getNewVersion","CheckListResults","sendChecklist","lastStatusChecklist","approveChecklist","clearProcessValues","canSendChecklist","canSend","CheckListTemplate","ParamResultTemp","getSelectedModels","selectedModel","isCmbTemplateDisabled","checklistTemplateParameters","isAnyResultFilled","parameter","ParamRemarkTemp","disableEnableAllParameters","checklistTemplateProcesses","ProcessIsActiveInChecklist","disableEnableParameter","templateProcesses","showSaveNewVersionButton","validateTemplate","patrolResultOcorrenceCount","isResultOk","patrolResultCount","getTotalCheckLists","item2","filterOcorrences","ValueReference","paramResult","isOk","loadProcessesById","escape","ChecklistsResultAttachments","ChecklistsResultAttachmentsTemp","currentVersion","saveChecklist","loadChecklistById","getChecklistById","setTemplateToEdit","isTemplateInactive","initNewChecklist","loadAllChecklistTemplate","ChecklistTranslate","checklist.title","checklist.title.new","checklist.title.edit","checklist.title.template","checklist.title.template.edit","checklist.title.checklists","checklist.title.templates","checklist.title.process","checklist.title.processTitle","checklist.title.controlParametersTitle","checklist.title.inspection","checklist.title.frequency","checklist.title.specification","checklist.title.patrolResult","checklist.title.remarkDetail","checklist.title.evidence","checklist.title.copyTemplate","checklist.identification","checklist.template.identification","checklist.use.item","checklist.copyTemplate.title","checklist.button.takePicture","checklist.button.copy","checklist.button.create.template","checklist.button.send","checklist.button.approve","checklist.label.copyTemplate","checklist.label.checklistTitle","checklist.label.templateTitle","checklist.label.templateVersion","checklist.label.checklist.name","checklist.label.checklist.startdate","checklist.label.checklist.occurrence","checklist.label.template.name","checklist.label.model","checklist.label.startDate","checklist.label.project","checklist.label.client","checklist.label.turn","checklist.label.week","checklist.label.version","checklist.label.status","checklist.label.ongoing","checklist.label.approved","checklist.label.sent","checklist.label.newTemplate","checklist.label.approvedBy","checklist.label.createdBy","checklist.label.addProcess","checklist.label.editProcess","checklist.label.addParameters","checklist.label.newParameters","checklist.label.editParameters","checklist.label.lessThan","checklist.label.greaterThan","checklist.label.range","checklist.label.equalTo","checklist.label.okNok","checklist.placeholder.copyTemplate","checklist.placeholder.search.checklists","checklist.placeholder.search.templates","checklist.placeholder.edit.title","checklist.placeholder.process.title","checklist.placeholder.controlParam.title","checklist.placeholder.controlParam.inspection","checklist.placeholder.controlParam.specification","checklist.placeholder.controlParam.frequency","checklist.validation.checklistStartDate.required","checklist.validation.title.required","checklist.validation.ValueReference2.invalid","checklist.validation.title.exist","checklist.validation.inspection.required","checklist.validation.specification.required","checklist.validation.frequency.required","checklist.validation.double","checklist.not.found.process","dialog.title.patrolResult","dialog.confirm.patrolResult","checklist.notFoundTemplates","checklist.deleted.success","checklist.deleted.error","error.checklist.search","error.checklist.search.template","checklist.template.save.error","checklist.template.save.success","checklist.btn.new","new.checklist.cmb.template","button.copy","checklist.template.new.version","checklist.modal.new.version","checklist.template.save.title.failed","checklist.template.deleted.failed","checklist.template.statusEnable","checklist.template.statusDisable","checklist.template.allStatus","checklist.template.allmodels","checklist.template.search.version","checklist.template.list.activate","checklist.template.list.inactivate","checklist.template.list.active","checklist.template.list.inactive","new.checklist.cmb.template.hint","new.checklist.cmb.model.hint","new.checklist.save.success","new.checklist.save.error","checklist.copy.dialog.title","newchecklist.validation.template.required","newchecklist.validation.startdate.required","newchecklist.validation.model.required","newchecklist.validation.reference1","newchecklist.reference.value","load.all.checklist.error","load.all.checklist.notFound","checklist.delete.error","checklist.delete.success","error.msg.checklist.send.approval","error.msg.template.process.parameters.invalid","checklist.label.filter.ocorrences","checklist.label.total.processes","checklist.label.total.complete","checklist.label.total.occurrences","checklist.label.total.pendent","load.all.occurrences.notFound","checklist.report","CHECKLIST_TEMPLATE_BASE","CHECKLIST_BASE","templateId","templateTitle","TemplateId","TemplateTitle","ChecklistRouter","BlockMaterialTranslate","blockedmaterial.type.finishGood.label","blockedmaterial.type.rowMaterial.label","blockedmaterial.type.material","title.block.material","label.new.block.material","label.edit.block.material","new.block.material.panel.identification","label.code","label.material.description","label.entry.date","label.vendor","blockedmaterial.vendor.directive.placeholder","blockedmaterial.search.status.placeholder","label.stock.placeholder","label.defect.placeholder","label.sap.placeholder","label.material.description.placeholder","label.unit.value.placeholder","label.stock","label.sloc","label.claim","label.batch.materia","label.location.bin","label.unit.value","label.total.value","label.batch","label.days.after.sent","label.material.totalvalue","label.bin","search.list.description.label","search.list.code.label","search.list.bin.label","search.list.vendor.label","search.list.sloc.label","search.list.clean.btn.label","search.list.search.btn.label","blockedmaterial.list.error","blockedmaterial.list.notfound","blockedmaterial.code.directive.placeholder","blockedmaterial.code.directive.required.msg","blockedmaterial.code.confirm.dialog.title","blockedmaterial.code.confirm.dialog.message","blockedmaterial.stock.informations.label","blockedmaterial.stock.quantity.label","blockedmaterial.stock.unitvalue.label","blockedmaterial.stock.currency.select.placeholder","blockedmaterial.stock.currency.label","blockedmaterial.stock.batch.label","blockedmaterial.stock.defect.label","blockedmaterial.stock.edit.update.label","blockedmaterial.stock.status.label","blockedmaterial.stock.status.active.label","blockedmaterial.stock.status.open.label","blockedmaterial.stock.status.inactive.label","blockedmaterial.stock.status.close.label","blockedmaterial.save.success.msg","blockedmaterial.save.error.msg","blockedmaterial.load.byid.error.msg","blockedmaterial.delete.error.msg","blockedmaterial.delete.success.msg","blockedmaterial.edit.description.required.msg","blockedmaterial.edit.sloc.required.msg","blockedmaterial.edit.bin.required.msg","blockedmaterial.edit.quantity.required.msg","blockedmaterial.edit.unityvalue.required.msg","blockedmaterial.edit.currence.required.msg","blockedmaterial.edit.batch.required.msg","blockedmaterial.edit.entrydate.required.msg","blockedmaterial.edit.vendor.required.msg","blockedmaterial.edit.defect.required.msg","blockedmaterial.edit.d8.required.msg","blockedmaterial.report.name","blockedmaterial.email.group.tab.label","blockedmaterial.email.group.description.label.finish.good","blockedmaterial.email.group.description.label.row.material","blockedmaterial.email.group.filterby.email.placeholder","blockedmaterial.email.group.email.label","blockedmaterial.load.group.email.error.msg","blockedmaterial.remove.email.group.error.msg","blockedmaterial.stock.attachments.label","blockedmaterial.list.total.items.label","blockedmaterial.list.total.amount.label","blockedmaterial.list.change.status.modal.title.label","blockedmaterial.list.change.status.modal.msg.label","blockedmaterial.label.remark","blockedmaterial.stock.closed.date.label","msg.same.code.description.error","blockedmaterial.search.type.material.placeholder","BLOCKED_MATERIAL_BASE","BlockMaterialRouter","BlockMaterialListController","IdOrDescription","SLOC","Bin","EntryDateEnd","blockedMaterialList","totalValue","itemToChangeStatus","searchBlockedMaterials","moduleBlockedMaterial","originalEntryDate","originalEntryDateEnd","BlockedMaterials","TotalValue","confirmChangeStatus","ClosedBy","getInverseCsActive","ClosedDate","getTypeMaterialDescription","getRemarkToHint","closedBy","ClosedByName","closedDate","blockMaterialList","BlockMaterialEditController","rowMaterial","stockObj","isEditStockObj","BlockedMaterialStocks","cleanStockObj","getBlockedMaterialToEdit","statusChange","isObject","addStock","handleStockBeforeAdd","blockedMaterialForm","editStock","copyOfItem","updateStockEdited","removeStockItem","codeSelectedEvent","getClosedDate","isCodeValid","isDescriptionValid","ValidateModels","isSlocValid","isBinValid","isQuantityValid","isUnityValueValid","UnityValue","isBatchValid","Batch","isEntryDateValid","isD8Valid","D8","isDefectValid","isVendorValid","canAddStockItem","BasicTranslate","title.basic","title.create.item","title.update.item","title.edit.item","placeholder.type.name","placeholder.type.value","basic.placeholder.search.name","label.new","label.name","label.value","label.select.type","item.not.found","basic.header.status.label","basic.header.status.active.label","basic.header.status.inactive.label","basic.defect.save.success","basic.defect.save.error","basic.defect.load.all.error","basic.defect.load.byid.error","basic.defect.remove.success","basic.defect.remove.error","basic.save.same.name.error","basic.save.same.code.error","basic.defect.action.save.success","basic.defect.action.save.error","basic.defect.action.load.all.error","basic.defect.action.load.byid.error","basic.defect.action.remove.success","basic.defect.action.remove.error","basic.defect.type.save.success","basic.defect.type.save.error","basic.defect.type.load.all.error","basic.defect.type.load.byid.error","basic.defect.type.remove.success","basic.defect.type.remove.error","basic.defect.root.cause.save.success","basic.defect.root.cause.save.error","basic.defect.root.cause.load.all.error","basic.defect.root.cause.load.byid.error","basic.defect.root.cause.remove.success","basic.defect.root.cause.remove.error","basic.defect.occurrence.save.success","basic.defect.occurrence.save.error","basic.defect.occurrence.load.all.error","basic.defect.occurrence.load.byid.error","basic.defect.occurrence.remove.success","basic.defect.occurrence.remove.error","basic.model.save.success","basic.model.save.error","basic.model.load.all.error","basic.model.load.byid.error","basic.model.remove.success","basic.model.remove.error","basic.type.save.success","basic.type.save.error","basic.type.load.all.error","basic.type.load.byid.error","basic.type.remove.success","basic.type.remove.error","basic.area.save.success","basic.area.save.error","basic.area.load.all.error","basic.area.load.byid.error","basic.area.remove.success","basic.area.remove.error","basic.licensetype.save.success","basic.licensetype.save.error","basic.licensetype.load.all.error","basic.licensetype.load.byid.error","basic.licensetype.remove.success","basic.licensetype.remove.error","basic.licensetype.deleted.failed","basic.effect.type.save.success","basic.effect.type.save.error","basic.effect.type.load.all.error","basic.effect.type.load.byid.error","basic.effect.type.remove.success","basic.effect.type.remove.error","basic.section.save.success","basic.section.save.error","basic.section.load.all.error","basic.section.load.byid.error","basic.section.remove.success","basic.section.remove.error","placeholder.section.Code","basic.station.save.success","basic.station.save.error","basic.station.load.all.error","basic.station.load.byid.error","basic.station.remove.success","basic.station.remove.error","basic.synthesis.save.success","basic.synthesis.save.error","basic.synthesis.load.all.error","basic.synthesis.load.byid.error","basic.synthesis.remove.success","basic.synthesis.remove.error","basic.vendor.save.success","basic.vendor.save.error","basic.vendor.load.all.error","basic.vendor.load.byid.error","basic.vendor.remove.success","basic.vendor.remove.error","basic.request.type.save.success","basic.request.type.save.error","basic.request.type.load.all.error","basic.request.type.load.byid.error","basic.request.type.remove.success","basic.request.type.remove.error","basic.parttype.save.success","basic.parttype.save.error","basic.parttype.load.all.error","basic.parttype.load.byid.error","basic.parttype.remove.success","basic.parttype.remove.error","basic.part.inspection.type.save.success","basic.part.inspection.type.save.error","basic.part.inspection.type.load.all.error","basic.part.inspection.type.load.byid.error","basic.part.inspection.type.remove.success","basic.part.inspection.type.remove.error","basic.part.inspection.type.deleted.failed","basic.part.inspection.sub.type.save.success","basic.part.inspection.sub.type.save.error","basic.part.inspection.sub.type.load.all.error","basic.part.inspection.sub.type.load.byid.error","basic.part.inspection.sub.type.remove.success","basic.part.inspection.sub.type.remove.error","basic.part.inspection.sub.type.deleted.failed","basic.part.inspection.rule.save.success","basic.part.inspection.rule.save.error","basic.part.inspection.rule.load.all.error","basic.part.inspection.rule.load.byid.error","basic.part.inspection.rule.remove.success","basic.part.inspection.rule.remove.error","basic.part.inspection.rule.deleted.failed","basic.testtype.save.success","basic.testtype.save.error","basic.testtype.load.all.error","basic.testtype.load.byid.error","basic.testtype.remove.success","basic.testtype.remove.error","basic.test.inspection.type.save.success","basic.test.inspection.type.save.error","basic.test.inspection.type.load.all.error","basic.test.inspection.type.load.byid.error","basic.test.inspection.type.remove.success","basic.test.inspection.type.remove.error","basic.test.inspection.type.deleted.failed","basic.test.inspection.sub.type.save.success","basic.test.inspection.sub.type.save.error","basic.test.inspection.sub.type.load.all.error","basic.test.inspection.sub.type.load.byid.error","basic.test.inspection.sub.type.remove.success","basic.test.inspection.sub.type.remove.error","basic.test.inspection.sub.type.deleted.failed","basic.test.inspection.rule.save.success","basic.test.inspection.rule.save.error","basic.test.inspection.rule.load.all.error","basic.test.inspection.rule.load.byid.error","basic.test.inspection.rule.remove.success","basic.test.inspection.rule.remove.error","basic.inspection.rule.deleted.failed","defect.deleted.failed","defect.type.deleted.failed","defect.action.deleted.failed","root.cause.deleted.failed","basic.area.deleted.failed","effect.type.deleted.failed","basic.section.deleted.failed","basic.station.deleted.failed","basic.synthesis.deleted.failed","basic.vendor.deleted.failed","basic.request.type.deleted.failed","basic.part.type.deleted.failed","basic.test.type.deleted.failed","basic.task.type.deleted.failed","basic.defect","basic.vendor","basic.request.type","basic.defect.type","basic.defect.action","basic.defect.root.cause","basic.defect.occurrence","basic.model","basic.type","basic.area","basic.effect.type","basic.section","basic.station","basic.synthesis","basic.parttype","basic.part.inspection.type","basic.part.inspection.sub.type","basic.part.inspection.rule","basic.testtype","basic.test.inspection.type","basic.test.inspection.sub.type","basic.test.inspection.rule","basic.synthesis.name.pt.label","basic.synthesis.name.en.label","basic.defect.group.label","basic.task.group.label","basic.part.group.label","basic.test.group.label","basic.sgi.group.label","basic.sgi.license.type","basic.other.group.label","basic.vendor.origin","basic.vendor.origin.save.success","basic.vendor.origin.remove.success","error.section.code.can.not.be.changed","basic.category","basic.category.financial","basic.category.fiscal","basic.category.it","basic.category.acquisition","basic.category.hr","basic.category.sourcing","basic.category.others","BasicRouter","BasicListController","setSelectedType","editItemEvent","typeDefect","typeDefectType","typeDefectAction","typeDefectRootCause","typeDefectOccurrence","typeType","typeArea","typeEffectType","typeSection","typeStation","typeSynthesis","typePartType","typePartInspectionType","typePartInspectionSubType","typePartInspectionRule","typeTestType","typeTestInspectionType","typeTestInspectionSubType","typeTestInspectionRule","typeRequestType","typeVendorOrigin","typeLicenseType","GroupName","SaveEvent","RemoveEvent","ListEvent","GetByIdEvent","basicItemList","originalBasicList","orderById","resetPageParams","doFilter","selectedType","filterSynthesis","titleFilter","setScopeInServices","updateBasicListItemsEvent","typeId","typeChanged","getListToSynthesis","getListToPartInspectionRule","getListToSection","getListToRequestType","getListToBasicType","sendSelectedTypeBroadcast","resetFocus","executeResetFocus","idToFocus","searchBasicTypes","BasicEditController","synthesisType","partInspectionRuleType","testInspectionRuleType","sectionType","requestType","changeCategory","resetFields","itemId","ExpireFormController","ExpireFormDirective","AuthTranslate","title.signin","title.signout","title.signup","title.forgot","label.userID","label.password","label.signin","label.signup","label.forgot","label.keepAuth","label.forgotPassword","label.newAccount","label.fullName","label.email","label.confirmPasswd","label.haveAccount","msg.error.signin","msg.error.signin.active","changepwd.error.pwd.not.match","changepwd.error.new.pwd.not.match","changepwd.success.msg","changepwd.user.label","changepwd.login.label","changepwd.profile.label","changepwd.changepassword.label","changepwd.password.label","forgotpwd.success","forgotpwd.error.email.notfound","forgotpwd.error.email.company.notfound","forgotpwd.error.generic","label.expire","label.logged","label.seconds","label.company","msg.error.company","msg.not.authorized","label.go.dashboard","label.slogan","forgotpwd.invalid.email","getToken","getBusinessMenu","businessMenu","companyName","companyId","lastBusiness","businessName","userProfileBusiness","isBasicTypes","loginAqms","setToken","token","setUserId","signIn","UserInitials","BusinessMenu","UserProfileBusiness","IsSettings","IsPreferences","IsPermission","IsBasicTypes","forgotPassword","loadCompanys","signUp","currentLang","getUserProfileBusinessByUserAndBusiness","authRouterConfig","$httpProvider","interceptors","request","responseError","AuthController","$cookies","companys","FullName","ConfirmPasswod","doLogin","ApiKey","createUser","loadAllNamesCompanys","AlertTranslate","title.alert","new.title.alert","label.alert.type","label.alert.title","label.alert.next","label.alert.createdby","label.alert.status","label.alert.createddate","alert.status.search.placeholder","label.alert.start.createddate","label.alert.end.createddate","label.alert.start.duedate","label.alert.end.duedate","label.alert.duedate","label.alert.daysToAlert","label.alert.day","label.alert.hour","label.alert.alertHour","label.alert.notes","alert.deleted.failed","error.alert.not.found","error.alert.calendar.empty","error.alert.target.empty","alert.type.label.environmental.license","alert.type.label.general","alert.type.label.anatel","alert.type.label.contract","alert.start.createdDate.less.end.createdDate","alert.start.duedate.less.end.duedate","error.alerts.search","alert.remove.success","alert.remove.error","alert.remove.error.conflict","placeholder.search.alert","alert.list.notfound","alert.status.active.label","alert.status.inactive.label","alert.select.type","alert.type.common","alert.type.anatel","alert.type.environmental.license","alert.type.contract","alert.duedate","alert.identification","alert.daystoalert","alert.alertdescription","alert.alertday","alert.hour","alert.target","alert.datealerthouralert","alert.target.name","alert.notes","alert.save.success","alert.save.error.duplicated","target.add.error.duplicated","alert.error.duedate","alert.error.days.to.alert","alert.error.days.to.alert.anatel","alert.error.hour.to.alert.required","alert.update.success","label.edit.alert","alert.remark.title","alert.remark","alert.change.duedate.confirm.dialog.title","alert.change.duedate.confirm.dialog.text","alert.enddate","alert.error.createdby.target","label.alert.emissiondate","alert.error.emissiondate","alert.error.enddate","alert.calendar.duplicated","alert.alertdate.invalid","alert.remark.required","alert.creator.remove.error","alert.anatel.select.alertday","alert.anatel.safetytest","alert.anatel.eletricaltest","alert.anatel.requestsamples","alert.anatel.assemblesamples","alert.anatel.sendsamples","alert.anatel.error","alert.days.identification","alert.target.identification","alert.anatel.identification","alert.anatel.model","alert.anatel.variant","alert.anatel.business","alert.anatel.partnumber","alert.anatel.partnumber.name","select.anatel.model","select.anatel.variant","select.anatel.business","alert.select.alerttype","alert.select.contrac","label.alert.last.remark","alert.contract.object","alert.contract.contains","alert.license.contains","auto.complete.contract.directive.load.error","alert.error.description.to.alert.anatel","COMMON","ANATEL","ENVIRONMENTAL_LICENSE","CONTRACT","typeOptions","anatelDaysToAlertOptions","deleteAlert","searchAlerts","searchCountAlerts","createAlert","searchAlertsToTimeline","getAlertTypeOptions","sourcingCanApprove","sgiCanApprove","getAnatelDaysToAlertOptions","editAlert","removeAlert","alertId","hasViewPermission","hasViewOrEditPermission","AlertRouter","AlertController","businessList","variantList","profileSGI","AlertServiceTypes","ContractEditCopy","Alert","onSaveAlertError","onAlertTypeOptionChanged","AlertCalendar","initAlertCalendar","AnatelInformation","initAnatelInformationModel","initModelList","initBusinessList","confirmSelectType","onLicenseSelected","LicenseId","addAlertDay","isEmissionDateValid","alertCalendar","AlertCalendars","calendar","AlertDate","isAlertDateValid","isEndDateValid","alertCalendarExists","setAlertDate","setAlertDateAfterDueDateChanged","disableAlertIdentificationEditing","deleteAlertDay","deleteTarget","AlertTargets","addTarget","AlertTarget","targetExists","newAlert","onDueDateChanged","resetAlertDate","isAnatelFieldRequired","isPartNumberRequired","Parts","addPartNumber","parts","deletePartNumber","onSelectModel","onSelectVariant","onContractSelected","ContractId","isNotesInvalid","Notes","CSActive","m","alertIdentificationDisabled","Anatel","initAnatelState","anatel","isAnatel","alertForm","isDueDateValid","onSaveAlertSuccess","formatAlertToUpdate","dueDateChanged","hasReplaceDueDateOperation","dueDateValid","alertCopy","patchAnatelInformation","generatePatchArray","operations","alertDate","due","emission","daysToAlert","hours","minutes","seconds","newAlertCalendar","AnatelDaysToAlert","alertTypeOptions","initAlertViewModel","getAlert","AlertEmailNotification","convertAlertCalendar","convertAlertTarget","setReadOnlyViewModel","setAlertAnatelViewModel","setAlertContractViewModel","setAnatelState","anatelInformation","mapAnatelInformation","anatelState","alertTarget","hour","AlertRemarkController","AlertRemarkDirective","AlertListController","AlertTypeList","AlertType","SGIApprove","searchTimelineAlert","validStartCreatedDateEndCreatedDate","validStartDueDateEndDueDate","generateTimelineData","headersFormats","column","fromEmissionDate","childrens","listChildrens","child","DaysToAlert","to","start","nameChild","varChild","parent","tasks","classes","currentDateValue","daily","showSide","fromDate","columnWidth","allowSideResizing","columnMagnet","autoExpand","maxHeight","searchFullAlert","searchAlert","getTypeDescription","typeDescription","acquisition.tab.label","title.acquisition","acquisition.label.quotes","acquisition.label.quotes.selected","acquisition.label.quotation.protocol","acquisition.label.protocol","acquisition.label.quotation.id","acquisition.label.protocol.id","acquisition.label.approval.id","acquisition.label.approval.requestby","acquisition.label.created","acquisition.label.created.initial","acquisition.label.created.final","acquisition.label.deadline.initial","acquisition.label.deadline.final","acquisition.label.deadline","acquisition.placeholder.material","acquisition.label.hide.quotation.approved","acquisition.label.approval.description","acquisition.label.created.approval","acquisition.label.deadline.approval","acquisition.label.item.completeness","acquisition.label.approval.solicitation","acquisition.label.quotationby","acquisition.label.status","acquisition.label.updatedby","acquisition.label.material","acquisition.label.quotation.quantity","acquisition.label.quotation.measure.unit","acquisition.label.quotation.number","acquisition.label.hide.quotation.done","acquisition.label.quotation.processing.date","acquisition.label.btn.done","acquisition.label.btn.save","acquisition.label.btn.copy.selected.to.clipboard","acquisition.label.copied","error.acquisition.search","acquisition.remove.success","acquisition.remove.error.conflict","acquisition.remove.error","acquisition.msg.save.success","acquisition.msg.save.error","acquisition.msg.load.error","acquisition.label.new","acquisition.label.edit","error.protocol.not.found","acquisition.lavel.deadline.payment","acquisition.lavel.deadline.delivery","acquisition.list.notfound","acquisition.pending.list.notfound","acquisition.select.item.to.done","acquisition.update.success","acquisition.report.labels.filename","createAcquisition","lista","editProtocol","approvalIds","getProtocolById","approvalsId","getByLisIdApproval","listProtocol","AcquisitionRouter","AcquisitionProtocolListController","protocols","QuotationProtocolId","ProtocolCreatedDateInitial","ProtocolCreatedDateEnd","StatusProtocol","searchProtocol","protocol","lenj","ApprovalIds","viewPendingApproval","ApprovalCreatedDateInitial","ApprovalCreatedDateEnd","AcquisitionProtocolEditController","totalSelected","acquisitions","Quotations","ApprovalsId","Items","setViewItemModel","Select","ProtocolCopy","containsObjectItem","idSolicitationQuotation","idProtocol","idVendor","IdItem","IdProtocol","IdSolicitationQuotation","IdDocumentFlow","IdVendor","UnitValue","DeadLinePayment","DeadLineDelivery","addNewVendor","VendorName","vendorSelected","itemVendor","checkQuotation","ApprovalClicked","addItemSelected","removeItemSelected","countTotalSelected","isAllSelected","itensSelected","itemProtocol","aLen","bLen","SolicitationApprovalId","addVendorItemProtocol","quotationIndex","getClassVendor","copyToClipboard","listener","clipboardData","setData","execCommand","removeEventListener","unitValue","deadLinePayment","deadLineDelivery","selected","containsObject","selectVendorValue","onChangeValueVendor","deleteVendor","filterMenorValorUnitario","onChangeLowCostClass","menorValor","CalcValueTotalItem","viewQuotationPending","loadApprovalsByListId","ListApprovals","getProtocolToEdit","getProtocoloById","protocolId","isAddVendorDisable","saveProtocol","loadProtocolItens","doneProtocol","validDone","selectedOk","deadlineOk","deadlines","listProtocolItemVendor","toAdd","protocolItem","indexProtocolo","exist","AcquisitionPendingApprovalController","hideApprove","ApprovalDeadLineDateInitial","ApprovalDeadLineDateEnd","getLabelBtn","searchAcquisition","viewQuotationProtocol","TotalItemSolicitation","TotalItemQuotation","listParams","time","timeOut","warning","duplicatedErrorMessage","dtAux","deleteHashKeyProperties","deleteArrayOperations","originalLength","kept","intersection","removed","added","applyRemoveOperation","applyAddOperation","endsWith","r","itemA","itemB","IndexTranslate","title.iqcpart","generic.error.msg","msg.error.generic","msg.error.delete.generic","msg.error.list.generic","msg.error.login.unauthorized","msg.error.access.unauthorized","error.unauthorized.rote","msg.error.generic.remove.email.group.error.msg","validation.area.required","label.continue","label.add","label.play","label.createdby","label.updatedby","label.closedby","label.status.header","label.active","label.inactive","label.main","label.admin","label.help","label.user.account","label.user.preferences","label.user.logout","label.dashboard","label.task.control","label.checklist","label.reports","label.faca","label.basic","label.permission","label.oqc.oba","label.notifications","label.users","label.title","label.translate.portuguese","label.translate.english","toast.info.title","toast.info.function.not.implemented","label.save","label.edit","label.update","label.delete","label.cancel","title.remove","label.confirm","label.close","label.clear","label.remark","label.ongoing","msg.confirm.remove","msg.confirm.remove.item","item.edit","item.delete","uploadoptions.label.camera","uploadoptions.dialog.title","uploadoptions.label.file.manager","uploadoptions.label.back","uploadoptions.label.take.picture","uploadoptions.label.picture.discard","uploadoptions.label.picture.confirm","uploadoptions.save.image.fail","label.footer.development","label.footer.allrights","label.footer.version","placeholder.current.password","placeholder.NewPassword1.password","placeholder.NewPassword2.password","validation.password.field","validation.password.equal","validation.password.notequal","validation.password.min","label.search.filter","input.email.directive.placeholder","input.email.directive.invalidmail","input.email.directive.duplicatedmail","input.email.directive.toolongemail","input.email.directive.error.remove.msg","record.has.already.been.updated","msg.error.datetime.get.fail","msg.error.listTurns","msg.error.listAreas","msg.error.listSynthesis","msg.error.listModels","msg.error.listTaskTypes","msg.error.listSession","select.default.area","production.plan.email.failed","synthesis.section.meeting","synthesis.general.meeting","synthesis.cleaning.and.5s","synthesis.machine.initialization","synthesis.machine.finishing","synthesis.labor.gymnastics","synthesis.preventive.maintenance","synthesis.predictive.maintenance.cpk","synthesis.daily.maintenance","synthesis.waiting.for.previous.sector","synthesis.program.adjustment.in.process","synthesis.shortage.material","synthesis.waiting.component.preparation","synthesis.waiting.component.materials","synthesis.corrective.maintenance","synthesis.production.order.divergence","synthesis.engineering.divergence","synthesis.waiting.for.batch.distribution.materials","synthesis.power.andor.compressed.air.falling","synthesis.lack.of.tray.carrie","synthesis.lack.of.manpower","synthesis.route.delay","synthesis.waiting.for.documentation","synthesis.component.exchange","synthesis.other.causes.specify.reason","synthesis.total.model.change","synthesis.partial.model.exchange","synthesis.total.model.change.quantity","synthesis.partial.model.exchange.quantity","synthesis.profile.of.oven","synthesis.npi.development","synthesis.without.planning","task.back.error","label.minutes","label.thousands","label.tonne","fullscreen.error","listview.directive.no.items.found","label.settings","input.model.directive.placeholder","input.model.directive.model.required.msg","input.model.directive.model.variants.title","input.model.directive.model.alread.inlist.warn","input.model.directive.table.header.model","input.model.directive.model.load.error","input.model.directive.model.invalid.error","input.model.directive.table.header.variant","title.business","input.client.directive.client.alread.inlist.warn","project.input.client.label","input.client.directive.placeholder","input.datetime.start","input.datetime.final","msg.same.name.error","msg.error.delete.register","msg.error.delete.user.association","msg.error.attachment.file.not.found","msg.change.business.warn.dialog","modal.change.business.dialog.title","title.shift","project.association.deleted.failed","label.created.date","label.updated.date","label.itemsPerPage","with_month_day","with_date","with_date_acquisition","error.dashboardUser.not.found","label.keyword","label.quality","label.technology","label.price","label.logistics","label.total","date_format_options","with_date_time","label.inprogress","search.hint.status.label","search.name.hint.msg","label.order","placeholder.add.user.name","input.user.directive.invalid.error","input.user.directive.alread.inlist.warn","label.all","run","runBlock","routeCallBack","toState","$evalAsync","routerConfig","$urlRouterProvider","otherwise","IndexController","$uibModalStack","SYSTEM_VERSION","isSettingsCollapsed","accesscontrol","version","EDateTime","HOUR","HOURMINUTES","DAY","DATE","showTopButton","currentLoginAqms","showMenu","moduleUser","moduleBasicTypes","moduleDashboard","moduleMainReport","modulePermission","moduleSettings","modulePreferences","moduleSupplierRegistration","toParams","lastAccessedMenu","getNotAuthorizedPage","findUserFavoriteBusiness","loadViewPermissions","permissions","permission","isCreateOrEditUrl","isEditOrCreate","setBusiness","showChangeBusinessConfirmationDialog","UserProfileBusinessId","isState","goToDashboard","getYear","isStateArray","stateName","updateLanguageWithLocalStorage","toggleValue","changeLanguage","logoutIdle","goToBasicList","goToHelp","goToPreferences","goToPermission","goToReport","goToDefect","goToSgi","goToAcquisition","goToOqcOba","goToBlockMaterial","goToIqc","goToOrt","goToProductionPlan","goToSettings","goToForgot","goToSignIn","goToVendor","goToLogisticsImport","goToFiscal","showAccountModalDialog","displayMessageFunctionNotImplemented","info","pageYOffset","goTop","scrollTopAnimated","isMenuAdmin","dismissAll","windowClass","idElement","exitHandler","isFullScreenMode","webkitIsFullScreen","mozFullScreen","msFullscreenElement","fullscreenElement","mozFullScreenElement","webkitFullscreenElement","broadcastFullScreenEvent","hideMenu","$logProvider","toastrConfig","KeepaliveProvider","IdleProvider","debugEnabled","Legend","afterFit","plugins","afterDatasetsDraw","meta","getDatasetMeta","hidden","_model","textY","fillStyle","fontFamily","font","helpers","fontString","dataString","textAlign","textBaseline","rotate","fillText","tooltipPosition","restore","allowHtml","positionClass","maxOpened","updateTimerOnDuplicates","progressBar","idle","interval","timeout","useSanitizeValueStrategy","preferredLanguage"],"mappings":"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","file":"scripts/app-af9bea48e5.js","sourcesContent":["(function () {\n 'use strict';\n\n angular.module('aqmsFrontend', ['ngCookies', 'ngTouch', 'ngSanitize', 'ngMessages', 'ngResource', 'ui.router', 'ui.bootstrap',\n 'ui.utils', 'toastr', 'pascalprecht.translate', 'angularFileUpload', 'angular-loading-bar', 'angularMoment',\n 'monospaced.elastic', 'googlechart', 'ngAvatar', 'angularUtils.directives.dirPagination', 'ui.toggle', 'ngIdle',\n 'ab-base64', 'ng.deviceDetector', 'webcam', 'angular.filter', 'ui.utils.masks', 'duScroll', 'nvd3', 'mgo-angular-wizard',\n 'angularCharts', 'ngRadialGauge', 'ngWYSIWYG', 'dndLists', 'ngMask','server.config', 'chart.js',\n 'gantt', 'gantt.sortable', 'gantt.tooltips', 'gantt.bounds', 'gantt.table', 'gantt.tree', 'gantt.groups',\n 'gantt.overlap', 'ui.select', 'mentio'\n ])\n .config(['cfpLoadingBarProvider', function (cfpLoadingBarProvider) {\n cfpLoadingBarProvider.includeBar = false;\n cfpLoadingBarProvider.spinnerTemplate = '
';\n }])\n .factory('ConfigurationService', ConfigurationService);\n\n /** @ngInject */\n function ConfigurationService(constanteRotas) {\n function getServiceHost() {\n var hostname = constanteRotas.API_ENDPOINT;\n return hostname;\n }\n\n function getWebsocketHost() {\n var hostname = constanteRotas.API_ENDPOINT;\n return 'wss' + hostname.slice(hostname.indexOf(':'), hostname.lastIndexOf(':')) + ':7589';\n }\n\n return {\n getServiceHost: getServiceHost,\n getWebsocketHost: getWebsocketHost\n };\n }\n})();\n\n(function () {\n 'use strict';\n\n function ComponentSampleController($state, moment, ComponentDevelopmentService, ComponentStepService) {\n\n var vm = this;\n\n vm.isOpen = true;\n\n vm.onDateChange = function () {\n var diff = moment().diff(vm.componentStep.ComponentSample.Date, 'days');\n if (diff < 0) {\n diff = 0;\n }\n vm.componentStep.DaysCount = diff;\n }\n\n vm.disabled = function() {\n\n if(vm.componentStep.Status === ComponentStepService.Status.CLOSED.Id || vm.componentStep.Status === ComponentStepService.Status.REJECT.Id)\n return true;\n\n if(vm.profile.CanApprove)\n {\n return false;\n }\n\n if(vm.profile.CanConsult && !vm.profile.CanEdit)\n {\n return true;\n }\n if(vm.componentStep.Component.Status === ComponentDevelopmentService.Status.IN_PROGRESS.Id || vm.componentStep.Component.Status === ComponentDevelopmentService.Status.ON_HOLD.Id)\n {\n return false;\n }\n else\n {\n return true;\n }\n }; \n\n function init() {\n\n }\n\n init();\n }\n\n function ComponentSampleDirective() {\n return {\n bindToController: true,\n restrict: 'E',\n scope: {\n title: '@',\n dateLabel: '@',\n componentStep: '=',\n profile: '='\n },\n replace: true,\n templateUrl: \"app/sourcing/component_development/steps/sample/component-sample.html\",\n controllerAs: 'ctrl',\n controller: 'ComponentSampleController'\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('ComponentSampleController', ComponentSampleController)\n .directive('componentSample', ComponentSampleDirective);\n})();\n\n(function () {\n 'use strict';\n\n function ComponentApprovalController(ComponentDevelopmentService, ComponentStepService) {\n\n var vm = this;\n\n vm.isOpen = true;\n\n vm.participantsChanged = function () {\n var showRequiredMsg = false;\n if (vm.componentStep.ComponentApproval.Participants.length == 0) {\n showRequiredMsg = true;\n }\n return showRequiredMsg;\n }\n\n vm.disabled = function() {\n if(vm.componentStep.Status === ComponentStepService.Status.CLOSED.Id || vm.componentStep.Status === ComponentStepService.Status.REJECT.Id)\n return true;\n\n if(vm.profile.CanApprove)\n {\n return false;\n }\n\n if(vm.profile.CanConsult && !vm.profile.CanEdit)\n {\n return true;\n }\n if(vm.componentStep.Component.Status === ComponentDevelopmentService.Status.IN_PROGRESS.Id || vm.componentStep.Component.Status === ComponentDevelopmentService.Status.ON_HOLD.Id)\n {\n return false;\n }\n else\n {\n return true;\n }\n }; \n \n function init() {\n vm.BusinessId = null;\n }\n \n init();\n }\n\n function ComponentApprovalDirective() {\n return {\n bindToController: true,\n restrict: 'E',\n scope: {\n title: '@',\n dateLabel: '@',\n componentStep: '=',\n parentForm: '=?',\n profile: '=',\n approvalRequired: '='\n },\n replace: true,\n templateUrl: \"app/sourcing/component_development/steps/approval/component-approval.html\",\n controllerAs: 'ctrl',\n controller: 'ComponentApprovalController'\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('ComponentApprovalController', ComponentApprovalController)\n .directive('componentApproval', ComponentApprovalDirective);\n})();\n\n/*eslint no-undef: 0*/\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('TransitTimeChartController', TransitTimeChartController)\n .directive('transitTimeChart', TransitTimeChartDirective);\n\n function TransitTimeChartDirective() {\n var directive = {\n bindToController: true,\n controller: \"TransitTimeChartController\",\n controllerAs: 'ctrl',\n transclude: true,\n replace: true,\n restrict: 'E',\n templateUrl: \"app/logistics/kpi/graphics/directive/transit-time-chart.html\",\n scope: {\n freightCostList: '=',\n params: '='\n }\n };\n return directive;\n\n }\n\n /* @ngInject */\n function TransitTimeChartController($document, $translate, LogisticsService, ChartConstants) {\n\n var vm = this, frequencyOptions = LogisticsService.getFrequencyOptions(),\n monthList = LogisticsService.getMonthOptions(),\n colors = angular.copy(ChartConstants.colors), colorIndex = 0,\n frequency = frequencyOptions.find(function (item) {\n return item.Value === vm.params.Frequency;\n });\n\n var freightCostList = angular.copy(vm.freightCostList) || [];\n\n vm.params = vm.params || {\n Year: new Date().getFullYear(),\n Project: $translate.instant('logistics.project.productive'),\n Frequency: frequencyOptions[0].Value\n };\n\n function mapToLabel(item) {\n var frequencyTitle = $translate.instant(frequency.Label);\n if (frequency.Value == 1) {\n return $translate.instant(monthList[item - 1].Label);\n }\n return frequencyTitle + \" \" + item;\n }\n\n Array.prototype.groupBy = function (prop) {\n return this.reduce(function (groups, item) {\n var val = item[prop];\n groups[val] = groups[val] || [];\n groups[val].push(item);\n return groups;\n }, {});\n };\n\n function generateSeriesTT(list) {\n return list.map(function (item) {\n return item.TT;\n })\n }\n\n function generateSeriesLT(list) {\n return list.map(function (item) {\n return item.LT;\n })\n }\n\n function init() {\n\n Chart.defaults.global.elements.line.fill = false;\n\n var groupedByFrequency = freightCostList.groupBy('Frequency');\n var groupedByTranMode = freightCostList.groupBy('TranMode');\n var graphicMonthYearsBar = [];\n var graphicMonthYearsLine = [];\n var labels = [];\n var colorsTranTime = [\n 'rgb(80, 129, 188)', // Blue\n 'rgb(156, 186, 86)', // Green\n 'rgb(193, 82, 75)', // Red\n 'rgb(131, 118, 144)', // Wine\n 'rgb(255, 166, 77)', // Orange,\n 'rgb(134, 177, 186)', // Ciano\n ];\n\n for (var key in groupedByFrequency) {\n if(key === \"13\") {\n labels.push($translate.instant(\"logistics.kpi.graphics.transit.time.accumulated\"));\n } else {\n var aux = mapToLabel(key);\n labels.push(angular.copy(aux));\n }\n }\n\n /* T/T */\n for (var tkey in groupedByTranMode) {\n var tran = groupedByTranMode[tkey].groupBy('TranMode');\n graphicMonthYearsBar.push({\n type: 'bar',\n label: angular.copy(tkey + ' T/T'),\n backgroundColor: colorsTranTime[colorIndex],\n borderColor: colorsTranTime[colorIndex],\n data: generateSeriesTT(tran[tkey]),\n });\n colorIndex++;\n }\n\n /* LT */\n for (var tkey in groupedByTranMode) {\n var tran = groupedByTranMode[tkey].groupBy('TranMode');\n\n graphicMonthYearsLine.push({\n type: 'line',\n label: angular.copy(tkey + ' L/T'),\n backgroundColor: colorsTranTime[colorIndex],\n borderColor: colorsTranTime[colorIndex],\n pointRadius: 5,\n pointHoverRadius: 6,\n pointStyle: 'circle',\n pointBackgroundColor: colorsTranTime[colorIndex],\n data: generateSeriesLT(tran[tkey]),\n });\n colorIndex++;\n }\n\n var dataset = graphicMonthYearsLine.concat(graphicMonthYearsBar);\n var transitData = {\n labels: labels,\n datasets: dataset\n };\n\n new Chart($document[0].getElementById(\"transitTimeChart\"), {\n type: 'bar',\n data: transitData,\n options: {\n elements: {line: {tension: 0}},\n title: {\n display: true,\n text: $translate.instant('logistics.kpi.graphics.transit.time.title').replace(\"#Year\", vm.params.Year).replace(\"#Frequency\", $translate.instant(frequency.Alternative)),\n fontSize: 18,\n padding: 50,\n fontStyle: 'bold'\n },\n tooltips: {\n mode: 'label',\n footerFontStyle: 'normal'\n },\n responsive: true,\n legend: {\n position: 'bottom',\n display: true\n }\n }\n });\n\n }\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('TotalLspChargeableChartController', TotalLspChargeableChartController)\n .directive('totalLspChargeableChart', TotalLspChargeableChartDirective);\n\n function TotalLspChargeableChartDirective() {\n var directive = {\n bindToController: true,\n controller: \"TotalLspChargeableChartController\",\n controllerAs: 'ctrl',\n transclude: true,\n replace: true,\n restrict: 'E',\n templateUrl: \"app/logistics/kpi/graphics/directive/total-lsp-chargeable-chart.html\",\n scope: {\n freightCostList: '=',\n params: '='\n }\n };\n return directive;\n\n }\n /* @ngInject */\n function TotalLspChargeableChartController($document, $translate, LogisticsService, ChartConstants) {\n var vm = this, frequencyOptions = LogisticsService.getFrequencyOptions(), \n colors = angular.copy(ChartConstants.colors);\n\n var freightCostList = angular.copy(vm.freightCostList) || [];\n\n if (angular.isUndefined(vm.params)) {\n vm.params = {\n Year: new Date().getFullYear(),\n Project: $translate.instant('logistics.project.productive'),\n Frequency: frequencyOptions[0].Value\n }\n }\n function sortArrayOfObjects(arr, key) {\n return arr.sort(function(a, b) {\n return b[key] - a[key];\n });\n }\n\n var colorIndex = 0;\n function getColor() {\n if (colorIndex >= colors.length) {\n colorIndex = 0;\n }\n return colors[colorIndex++];\n }\n\n function init() {\n fillChartDataList();\n }\n\n function fillChartDataList() {\n var listDataLsp = [];\n var dataLsp = {\n label: null,\n value: 0,\n color: null\n };\n vm.chartData = new Array(freightCostList.length).fill(null);\n vm.labels = new Array(freightCostList.length).fill(null);\n vm.xColors = Array(freightCostList.length).fill(null);\n for( var i=0; i < freightCostList.length; i++ ) {\n dataLsp = {\n label: freightCostList[i].FreightForwarder,\n value: 0,\n color: null\n }\n var accumulated = 0;\n freightCostList[i].RateVariations.forEach(function(element){\n accumulated += element.CHARGEABLE_WEIGHT;\n });\n dataLsp.value = (accumulated / 1000).toFixed(2);\n dataLsp.color = getColor();\n listDataLsp.push(angular.copy(dataLsp)); \n }\n sortArrayOfObjects(listDataLsp, \"value\");\n\n var datasets = [];\n var borderColors = Array(vm.labels.length).fill(\"rgba(220,220,220,0)\");\n \n for ( i=0; i 0) {\n var frequencyTitle = $translate.instant(frequency.Label);\n var labels = generateLabels(vm.rateVariationList);\n for (var i = 0; i < vm.rateVariationList.length; i++) {\n var serie = vm.series.find(function (s) {\n s === vm.rateVariationList[i].FreightForwarder\n });\n if (angular.isUndefined(serie)) {\n vm.series.push(vm.rateVariationList[i].FreightForwarder);\n }\n }\n var rateData = new Array(vm.series.length).fill(null);\n for (var j = 0; j < vm.rateVariationList.length; j++) {\n var rateVariationItem = vm.rateVariationList[j];\n var positionSerie = vm.series.indexOf(rateVariationItem.FreightForwarder);\n var rateVariations = rateVariationItem.RateVariations;\n var dataAux = new Array(vm.series.length).fill(null);\n\n for (var k = 0; k < rateVariations.length; k++) {\n var rateVariation = rateVariations[k];\n var text = \"\";\n if ( frequency.Value == 1 ) {\n frequencyTitle = $translate.instant(monthList[rateVariation.Frequency - 1].Label);\n text = frequencyTitle;\n } else {\n frequencyTitle = $translate.instant(frequency.Label);\n text = frequencyTitle + \" \" + rateVariation.Frequency;\n }\n var textTranslated = $translate.instant(text);\n var positionLabel = labels.findIndex(function (element) {\n return element === textTranslated\n });\n dataAux[positionLabel] = rateVariation.RateVariation;\n\n }\n rateData[positionSerie] = dataAux;\n }\n\n vm.xLabel = labels;\n vm.rateData = rateData;\n\n vm.rateOptions.title.text = getTitleTranslate('logistics.kpi.graphics.rate.variation.title');\n }\n }\n\n function sortByFrequency(a, b) {\n if (a.Frequency > b.Frequency) {\n return 1;\n }\n if (a.Frequency < b.Frequency) {\n return -1;\n }\n return 0;\n }\n\n function getTitleTranslate(title) {\n var titleTranslated = $translate.instant(title);\n if (titleTranslated.indexOf(\"#Year\") >= 0) {\n return titleTranslated.replace(\"#Year\", (vm.params.Year))\n }\n return titleTranslated;\n }\n\n init();\n }\n})();\n/*eslint no-undef: 0*/\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('NationalFreightCostRoadOutboundChartController', NationalFreightCostRoadOutboundChartController)\n .directive('nationalFreightCostRoadOutboundChart', NationalFreightCostRoadOutboundChartDirective);\n\n function NationalFreightCostRoadOutboundChartDirective() {\n var directive = {\n bindToController: true,\n controller: \"NationalFreightCostRoadOutboundChartController\",\n controllerAs: 'ctrl',\n transclude: true,\n replace: true,\n restrict: 'E',\n templateUrl: \"app/logistics/kpi/graphics/directive/national-freight-cost-road-outbound-chart.html\",\n scope: {\n freightCostList: '=',\n params: '='\n }\n };\n return directive;\n\n }\n\n /* @ngInject */\n function NationalFreightCostRoadOutboundChartController($document, $translate, LogisticsService, ChartConstants) {\n\n var vm = this, frequencyOptions = LogisticsService.getFrequencyOptions(),\n monthList = LogisticsService.getMonthOptions(),\n colors = angular.copy(ChartConstants.colors), colorIndex = 0,\n frequency = frequencyOptions.find(function (item) {\n return item.Value === vm.params.Frequency;\n });\n\n var freightCostList = angular.copy(vm.freightCostList) || [];\n\n vm.params = vm.params || {\n Year: new Date().getFullYear(),\n Project: $translate.instant('logistics.project.productive'),\n Frequency: frequencyOptions[0].Value\n };\n\n function mapToLabel(item) {\n var frequencyTitle = $translate.instant(frequency.Label);\n if (frequency.Value == 1) {\n return $translate.instant(monthList[item - 1].Label);\n }\n return frequencyTitle + \" \" + item;\n }\n\n Array.prototype.groupBy = function (prop) {\n return this.reduce(function (groups, item) {\n var val = item[prop];\n groups[val] = groups[val] || [];\n groups[val].push(item);\n return groups;\n }, {});\n };\n\n function generateSeriesFreightCost(list) {\n return list.map(function (item) {\n return (item.FreightCost/1000).toFixed(2);\n })\n }\n\n\n function generateSeriesGrossWeight(list) {\n return list.map(function (item) {\n return (item.GrossWeight/1000).toFixed(2);\n })\n }\n\n function groupSumWeight(items) {\n if (items.length > 1) {\n return items\n .map(function (x) {\n return (x.GrossWeight);\n })\n .reduce(function (a, b) {\n return ((a + b)/1000).toFixed(2);\n });\n }\n return items\n .map(function (x) {\n return (x.GrossWeight/1000).toFixed(2);\n });\n }\n function onlyUnique(value, index, self) {\n return self.indexOf(value) === index;\n }\n\n\n vm.getMonthName = function (month) {\n if (month === 13) {\n return 'Total'\n } else {\n return $translate.instant(monthList.find(function (item) { return item.Value == month }).Name);\n }\n };\n\n vm.getUniqueCarriers = function () {\n var labels = [];\n\n // do not change to one for loop onlyx, because sort matters\n for (var tkey in freightCostList.groupBy('Carrier')) {\n labels.push(angular.copy(tkey + ' FreightCost'));\n }\n return labels;\n };\n\n vm.getMonths = function () {\n var temp = freightCostList.map( function (item) { return item.Frequency});\n return temp.filter(onlyUnique);\n };\n\n vm.getCarrierValues = function (carrier, month) {\n if (carrier.includes('FreightCost')) {\n var temp = freightCostList.find( function (item) { return carrier.includes(item.Carrier) && item.Frequency == month});\n return temp ? 'R$ '.concat(temp.FreightCost.toFixed(2)) : '-';\n }\n };\n\n vm.getCarrierVolumes = function (carrier, month) {\n var temp = freightCostList.find( function (item) { return carrier.includes(item.Carrier) && item.Frequency == month});\n return temp ? temp.Volume : '-';\n };\n\n vm.getCarrierName = function (carrier) {\n for (var tkey in freightCostList.groupBy('Carrier')) {\n if (carrier.includes(tkey)) {\n return tkey;\n }\n }\n };\n vm.getTotalGW = function (month) {\n var temp = freightCostList.filter( function (item) { return item.Frequency == month});\n var totalGW = temp.map(function (x) {\n return x.GrossWeight;\n }).reduce(function (a, b) {\n return ((a + b)).toFixed(2);\n });\n return totalGW ? totalGW : '-';\n };\n\n function init() {\n\n Chart.defaults.global.elements.line.fill = false;\n\n var groupedByFrequency = freightCostList.groupBy('Frequency');\n var groupedByCarrierMode = freightCostList.groupBy('Carrier');\n var graphicMonthYearsBar = [];\n var graphicMonthYearsLine = [];\n var labels = [];\n var colorsTranTime = [\n 'rgb(80, 129, 188)', // Blue\n 'rgb(156, 186, 86)', // Green\n 'rgb(193, 82, 75)', // Red\n 'rgb(131, 118, 144)', // Wine\n 'rgb(255, 166, 77)', // Orange,\n 'rgb(134, 177, 186)', // Ciano\n ];\n\n vm.colorsGraph = angular.copy(colorsTranTime);\n var colorIndexRecord = [];\n\n var i = 0;\n var dataFrequencyTrip = [];\n for (var key in groupedByFrequency) {\n if (key === \"13\") {\n labels.push($translate.instant(\"logistics.kpi.graphics.air.national.inbound.time.accumulated\"));\n dataFrequencyTrip[i] = (groupSumWeight(groupedByFrequency[key]));\n } else {\n var aux = mapToLabel(key);\n dataFrequencyTrip[i] = (groupSumWeight(groupedByFrequency[key]));\n labels.push(angular.copy(aux));\n i++;\n }\n }\n\n for (var tkey in groupedByCarrierMode) {\n var group = groupedByCarrierMode[tkey].groupBy('Carrier');\n graphicMonthYearsBar.push({\n type: 'bar',\n label: angular.copy(tkey + ' FreightCost'),\n backgroundColor: colorsTranTime[colorIndex],\n yAxisID: \"y-axis-1\",\n borderColor: colorsTranTime[colorIndex],\n data: generateSeriesFreightCost(group[tkey]),\n });\n colorIndex++;\n colorIndexRecord.push(colorIndex);\n }\n\n graphicMonthYearsLine.push({\n type: 'line',\n label: angular.copy('Total GW'),\n backgroundColor: colorsTranTime[colorIndex],\n yAxisID: \"y-axis-0\",\n borderColor: colorsTranTime[colorIndex],\n pointRadius: 5,\n pointHoverRadius: 6,\n pointStyle: 'circle',\n borderDash:[5, 5],\n pointBackgroundColor: colorsTranTime[colorIndex],\n data: dataFrequencyTrip,\n });\n colorIndex++;\n colorIndexRecord.push(colorIndex);\n\n\n var dataset = graphicMonthYearsLine.concat(graphicMonthYearsBar);\n var transitData = {\n labels: labels,\n datasets: dataset\n };\n\n new Chart($document[0].getElementById(\"nationalFreightCostRoadOutbound\"), {\n type: 'bar',\n data: transitData,\n options: {\n elements: {line: {tension: 0}},\n title: {\n display: true,\n text: $translate.instant('logistics.kpi.graphics.national.freight.cost.road.outbound.title').replace(\"#Year\", vm.params.Year),\n fontSize: 18,\n padding: 50,\n fontStyle: 'bold'\n },\n tooltips: {\n mode: 'label',\n footerFontStyle: 'normal'\n },\n responsive: true,\n scales: {\n xAxes: [{\n stacked: false,\n gridLines: {\n display: false,\n drawBorder: false\n },\n\n }],\n yAxes: [{\n stacked: false,\n position: \"right\",\n id: \"y-axis-0\",\n ticks: {\n beginAtZero: true,\n callback: function (label) {\n return label.toFixed(2);\n }\n },\n gridLines: {\n display: true,\n drawBorder: false\n },\n scaleLabel: {\n display: true,\n labelString: $translate.instant('logistics.kpi.graphics.national.weight.gross.air')\n }\n }, {\n stacked: false,\n position: \"left\",\n id: \"y-axis-1\",\n ticks: {\n beginAtZero: true,\n callback: function (label) {\n return 'R$ ' + label.toFixed(2);\n }\n },\n gridLines: {\n display: false,\n drawBorder: false\n },\n scaleLabel: {\n display: true,\n labelString: $translate.instant('logistics.kpi.graphics.national.freight.cost.air.value')\n }\n }]\n },\n legend: {\n position: 'bottom',\n display: true\n }\n }\n });\n\n }\n\n init();\n }\n})\n();\n\n/*eslint no-undef: 0*/\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('NationalFreightCostAirInboundChartController', NationalFreightCostAirInboundChartController)\n .directive('nationalFreightCostAirInboundChart', NationalFreightCostAirInboundChartDirective);\n\n function NationalFreightCostAirInboundChartDirective() {\n var directive = {\n bindToController: true,\n controller: \"NationalFreightCostAirInboundChartController\",\n controllerAs: 'ctrl',\n transclude: true,\n replace: true,\n restrict: 'E',\n templateUrl: \"app/logistics/kpi/graphics/directive/national-freight-cost-air-inbound-chart.html\",\n scope: {\n freightCostList: '=',\n params: '='\n }\n };\n return directive;\n\n }\n\n /* @ngInject */\n function NationalFreightCostAirInboundChartController($document, $translate, LogisticsService, ChartConstants) {\n\n var vm = this, frequencyOptions = LogisticsService.getFrequencyOptions(),\n monthList = LogisticsService.getMonthOptions(),\n colors = angular.copy(ChartConstants.colors), colorIndex = 0,\n frequency = frequencyOptions.find(function (item) {\n return item.Value === vm.params.Frequency;\n });\n\n var freightCostList = angular.copy(vm.freightCostList) || [];\n vm.params = vm.params || {\n Year: new Date().getFullYear(),\n Project: $translate.instant('logistics.project.productive'),\n Frequency: frequencyOptions[0].Value\n };\n\n function mapToLabel(item) {\n var frequencyTitle = $translate.instant(frequency.Label);\n if (frequency.Value == 1) {\n return $translate.instant(monthList[item - 1].Label);\n }\n return frequencyTitle + \" \" + item;\n }\n\n Array.prototype.groupBy = function (prop) {\n return this.reduce(function (groups, item) {\n var val = item[prop];\n groups[val] = groups[val] || [];\n groups[val].push(item);\n return groups;\n }, {});\n };\n\n function generateSeriesFreightCost(list) {\n return list.map(function (item) {\n return (item.FreightCost/1000).toFixed(2);\n })\n }\n\n function groupSumWeight(items) {\n if (items.length > 1) {\n return items\n .map(function (x) {\n return (x.GrossWeight);\n })\n .reduce(function (a, b) {\n return ((a + b)/1000).toFixed(2);\n });\n }\n return items\n .map(function (x) {\n return (x.GrossWeight/1000).toFixed(2);\n });\n }\n\n function onlyUnique(value, index, self) {\n return self.indexOf(value) === index;\n }\n\n vm.getUniqueCarriers = function () {\n var temp = freightCostList.map( function (item) { return item.Carrier});\n return temp.filter(onlyUnique);\n };\n\n vm.getMonths = function () {\n var temp = freightCostList.map( function (item) { return item.Frequency});\n return temp.filter(onlyUnique).sort(function(a, b){return a-b});\n };\n\n vm.getFCostValue = function (carrier, month) {\n var temp = freightCostList.find( function (item) { return item.Carrier == carrier && item.Frequency == month});\n return temp ? 'R$ '.concat(temp.FreightCost.toFixed(2)) : '-';\n };\n\n vm.getMonthName = function (month) {\n if (month === 13) {\n return 'Total'\n } else {\n return $translate.instant(monthList.find(function (item) { return item.Value == month }).Name);\n }\n };\n\n vm.getTotalGW = function (month) {\n var temp = freightCostList.filter( function (item) { return item.Frequency == month});\n var totalGW = temp.map(function (x) {\n return x.GrossWeight;\n }).reduce(function (a, b) {\n return ((a + b)).toFixed(2);\n });\n return totalGW ? totalGW : '-';\n };\n\n\n function init() {\n\n Chart.defaults.global.elements.line.fill = false;\n\n var groupedByFrequency = freightCostList.groupBy('Frequency');\n var groupedByCarrierMode = freightCostList.groupBy('Carrier');\n var graphicMonthYearsBar = [];\n var graphicMonthYearsLine = [];\n var labels = [];\n var colorsTranTime = [\n 'rgb(156, 186, 86)', // Green\n 'rgb(80, 129, 188)', // Blue\n 'rgb(193, 82, 75)', // Red\n 'rgb(131, 118, 144)', // Wine\n 'rgb(255, 166, 77)', // Orange,\n 'rgb(134, 177, 186)', // Ciano\n ];\n\n vm.colorsGraph = angular.copy(colorsTranTime);\n\n var i = 0;\n var dataFrequencyTrip = [];\n for (var key in groupedByFrequency) {\n if (key === \"13\") {\n labels.push($translate.instant(\"logistics.kpi.graphics.air.national.inbound.time.accumulated\"));\n dataFrequencyTrip[i] = (groupSumWeight(groupedByFrequency[key]));\n } else {\n var aux = mapToLabel(key);\n dataFrequencyTrip[i] = (groupSumWeight(groupedByFrequency[key]));\n labels.push(angular.copy(aux));\n i++;\n }\n }\n\n for (var tkey in groupedByCarrierMode) {\n var group = groupedByCarrierMode[tkey].groupBy('Carrier');\n graphicMonthYearsBar.push({\n type: 'bar',\n label: angular.copy(tkey + ' FreightCost'),\n backgroundColor: colorsTranTime[colorIndex],\n yAxisID: \"y-axis-1\",\n borderColor: colorsTranTime[colorIndex],\n data: generateSeriesFreightCost(group[tkey]),\n });\n colorIndex++;\n }\n\n graphicMonthYearsLine.push({\n type: 'line',\n label: angular.copy('Total GW'),\n backgroundColor: colorsTranTime[colorIndex],\n yAxisID: \"y-axis-0\",\n borderColor: colorsTranTime[colorIndex],\n pointRadius: 5,\n pointHoverRadius: 6,\n pointStyle: 'circle',\n borderDash:[5, 5],\n pointBackgroundColor: colorsTranTime[colorIndex],\n data: dataFrequencyTrip,\n });\n\n var dataset = graphicMonthYearsLine.concat(graphicMonthYearsBar);\n var transitData = {\n labels: labels,\n datasets: dataset\n };\n\n new Chart($document[0].getElementById(\"nationalFreightCostAirInbound\"), {\n type: 'bar',\n data: transitData,\n options: {\n elements: {line: {tension: 0}},\n title: {\n display: true,\n text: $translate.instant('logistics.kpi.graphics.national.freight.cost.air.inbound.title').replace(\"#Year\", vm.params.Year).replace(\"#Frequency\", $translate.instant(frequency.Alternative)),\n fontSize: 18,\n padding: 50,\n fontStyle: 'bold'\n },\n tooltips: {\n mode: 'label',\n footerFontStyle: 'normal'\n },\n responsive: true,\n scales: {\n xAxes: [{\n stacked: false,\n gridLines: {\n display: false,\n drawBorder: false\n },\n\n }],\n yAxes: [{\n stacked: false,\n position: \"right\",\n id: \"y-axis-0\",\n ticks: {\n beginAtZero: true,\n callback: function (label) {\n return label.toFixed(2);\n }\n },\n gridLines: {\n display: true,\n drawBorder: false\n },\n scaleLabel: {\n display: true,\n labelString: $translate.instant('logistics.kpi.graphics.national.weight.gross.air')\n }\n }, {\n stacked: false,\n position: \"left\",\n id: \"y-axis-1\",\n ticks: {\n beginAtZero: true,\n callback: function (label) {\n return 'R$ ' + label.toFixed(2);\n }\n },\n gridLines: {\n display: false,\n drawBorder: false\n },\n scaleLabel: {\n display: true,\n labelString: $translate.instant('logistics.kpi.graphics.national.freight.cost.air.value')\n }\n }]\n },\n legend: {\n position: 'bottom',\n display: true\n }\n }\n });\n\n }\n\n init();\n }\n})\n();\n\n/*eslint no-undef: 0*/\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('NationalFreightCostAirChartController', NationalFreightCostAirChartController)\n .directive('nationalFreightCostAirChart', NationalFreightCostAirChartDirective);\n\n function NationalFreightCostAirChartDirective() {\n var directive = {\n bindToController: true,\n controller: \"NationalFreightCostAirChartController\",\n controllerAs: 'ctrl',\n transclude: true,\n replace: true,\n restrict: 'E',\n templateUrl: \"app/logistics/kpi/graphics/directive/national-freight-cost-air-chart.html\",\n scope: {\n freightCostList: '=',\n params: '='\n }\n };\n return directive;\n\n }\n\n /* @ngInject */\n function NationalFreightCostAirChartController($document, $translate, LogisticsService, ChartConstants) {\n\n var vm = this, frequencyOptions = LogisticsService.getFrequencyOptions(),\n monthList = LogisticsService.getMonthOptions(),\n colors = angular.copy(ChartConstants.colors), colorIndex = 0,\n frequency = frequencyOptions.find(function (item) {\n return item.Value === vm.params.Frequency;\n });\n\n var freightCostList = angular.copy(vm.freightCostList) || [];\n\n vm.params = vm.params || {\n Year: new Date().getFullYear(),\n Project: $translate.instant('logistics.project.productive'),\n Frequency: frequencyOptions[0].Value\n };\n\n function mapToLabel(item) {\n var frequencyTitle = $translate.instant(frequency.Label);\n if (frequency.Value == 1) {\n return $translate.instant(monthList[item - 1].Label);\n }\n return frequencyTitle + \" \" + item;\n }\n\n Array.prototype.groupBy = function (prop) {\n return this.reduce(function (groups, item) {\n var val = item[prop];\n groups[val] = groups[val] || [];\n groups[val].push(item);\n return groups;\n }, {});\n };\n\n function generateSeriesFreightCost(list) {\n return list.map(function (item) {\n return (item.FreightCost/1000).toFixed(2);\n })\n }\n\n\n function generateSeriesGrossWeight(list) {\n return list.map(function (item) {\n return (item.GrossWeight/1000).toFixed(2);\n })\n }\n\n function groupSumWeight(items) {\n if (items.length > 1) {\n return items\n .map(function (x) {\n return (x.GrossWeight);\n })\n .reduce(function (a, b) {\n return ((a + b)/1000).toFixed(2);\n });\n }\n return items\n .map(function (x) {\n return (x.GrossWeight/1000).toFixed(2);\n });\n }\n\n function onlyUnique(value, index, self) {\n return self.indexOf(value) === index;\n }\n\n vm.getMonthName = function (month) {\n if (month === 13) {\n return 'Total'\n } else {\n return $translate.instant(monthList.find(function (item) { return item.Value == month }).Name);\n }\n };\n\n vm.getUniqueCarriers = function () {\n var labels = [];\n\n // do not change to one for loop onlyx, because sort matters\n for (var tkey in freightCostList.groupBy('Carrier')) {\n labels.push(angular.copy(tkey + ' FreightCost'));\n }\n for (var tkey in freightCostList.groupBy('Carrier')) {\n labels.push(angular.copy(tkey + ' GrossWeight'));\n }\n return labels;\n };\n\n vm.getMonths = function () {\n var temp = freightCostList.map( function (item) { return item.Frequency});\n return temp.filter(onlyUnique);\n };\n\n vm.getCarrierValues = function (carrier, month) {\n if (carrier.includes('FreightCost')) {\n var temp = freightCostList.find( function (item) { return carrier.includes(item.Carrier) && item.Frequency == month});\n return temp ? 'R$ '.concat(temp.FreightCost.toFixed(2)) : '-';\n } else if (carrier.includes('GrossWeight')){\n var temp = freightCostList.find( function (item) { return carrier.includes(item.Carrier) && item.Frequency == month});\n return temp ? temp.GrossWeight.toFixed(2) : '-';\n }\n };\n\n vm.getTotalGW = function (month) {\n var temp = freightCostList.filter( function (item) { return item.Frequency == month});\n var totalGW = temp.map(function (x) {\n return x.GrossWeight;\n }).reduce(function (a, b) {\n return ((a + b)).toFixed(2);\n });\n return totalGW ? totalGW : '-';\n };\n\n function init() {\n\n Chart.defaults.global.elements.line.fill = false;\n\n var groupedByFrequency = freightCostList.groupBy('Frequency');\n var groupedByCarrierMode = freightCostList.groupBy('Carrier');\n var graphicMonthYearsBar = [];\n var graphicMonthYearsLine = [];\n var labels = [];\n var colorsTranTime = [\n 'rgb(80, 129, 188)', // Blue\n 'rgb(156, 186, 86)', // Green\n 'rgb(193, 82, 75)', // Red\n 'rgb(131, 118, 144)', // Wine\n 'rgb(255, 166, 77)', // Orange,\n 'rgb(134, 177, 186)', // Ciano\n ];\n\n vm.colorsGraph = angular.copy(colorsTranTime);\n var colorIndexRecord = [];\n\n var i = 0;\n var dataFrequencyTrip = [];\n for (var key in groupedByFrequency) {\n if (key === \"13\") {\n labels.push($translate.instant(\"logistics.kpi.graphics.air.national.inbound.time.accumulated\"));\n dataFrequencyTrip[i] = (groupSumWeight(groupedByFrequency[key]));\n } else {\n var aux = mapToLabel(key);\n dataFrequencyTrip[i] = (groupSumWeight(groupedByFrequency[key]));\n labels.push(angular.copy(aux));\n i++;\n }\n }\n\n for (var tkey in groupedByCarrierMode) {\n var group = groupedByCarrierMode[tkey].groupBy('Carrier');\n graphicMonthYearsBar.push({\n type: 'bar',\n label: angular.copy(tkey + ' FreightCost'),\n backgroundColor: colorsTranTime[colorIndex],\n yAxisID: \"y-axis-1\",\n borderColor: colorsTranTime[colorIndex],\n data: generateSeriesFreightCost(group[tkey]),\n });\n colorIndex++;\n colorIndexRecord.push(colorIndex);\n }\n\n for (var tkey in groupedByCarrierMode) {\n var group = groupedByCarrierMode[tkey].groupBy('Carrier');\n graphicMonthYearsLine.push({\n type: 'line',\n label: angular.copy(tkey + ' GrossWeight'),\n backgroundColor: colorsTranTime[colorIndex],\n yAxisID: \"y-axis-0\",\n borderColor: colorsTranTime[colorIndex],\n pointRadius: 5,\n pointHoverRadius: 6,\n pointStyle: 'circle',\n pointBackgroundColor: colorsTranTime[colorIndex],\n data: generateSeriesGrossWeight(group[tkey]),\n });\n colorIndex++;\n colorIndexRecord.push(colorIndex);\n }\n\n graphicMonthYearsLine.push({\n type: 'line',\n label: angular.copy('Total GW'),\n backgroundColor: colorsTranTime[colorIndex],\n yAxisID: \"y-axis-0\",\n borderColor: colorsTranTime[colorIndex],\n pointRadius: 5,\n pointHoverRadius: 6,\n pointStyle: 'circle',\n pointBackgroundColor: colorsTranTime[colorIndex],\n data: dataFrequencyTrip,\n });\n colorIndex++;\n colorIndexRecord.push(colorIndex);\n\n var dataset = graphicMonthYearsLine.concat(graphicMonthYearsBar);\n var transitData = {\n labels: labels,\n datasets: dataset\n };\n\n new Chart($document[0].getElementById(\"nationalFreightCostAir\"), {\n type: 'bar',\n data: transitData,\n options: {\n elements: {line: {tension: 0}},\n title: {\n display: true,\n text: $translate.instant('logistics.kpi.graphics.national.freight.cost.air.title').replace(\"#Year\", vm.params.Year).replace(\"#Frequency\", $translate.instant(frequency.Alternative)),\n fontSize: 18,\n padding: 50,\n fontStyle: 'bold'\n },\n tooltips: {\n mode: 'label',\n footerFontStyle: 'normal'\n },\n responsive: true,\n scales: {\n xAxes: [{\n stacked: false,\n gridLines: {\n display: false,\n drawBorder: false\n },\n\n }],\n yAxes: [{\n stacked: false,\n position: \"right\",\n id: \"y-axis-0\",\n ticks: {\n beginAtZero: true,\n callback: function (label) {\n return label.toFixed(2);\n }\n },\n gridLines: {\n display: true,\n drawBorder: false\n },\n scaleLabel: {\n display: true,\n labelString: $translate.instant('logistics.kpi.graphics.national.weight.gross.air')\n }\n }, {\n stacked: false,\n position: \"left\",\n id: \"y-axis-1\",\n ticks: {\n beginAtZero: true,\n callback: function (label) {\n return 'R$ ' + label.toFixed(2);\n }\n },\n gridLines: {\n display: false,\n drawBorder: false\n },\n scaleLabel: {\n display: true,\n labelString: $translate.instant('logistics.kpi.graphics.national.freight.cost.air.value')\n }\n }]\n },\n legend: {\n position: 'bottom',\n display: true\n }\n }\n });\n\n }\n\n init();\n }\n})\n();\n\n/*eslint no-undef: 0*/\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('ModeSpendChartController', ModeSpendChartController)\n .directive('modeSpendChart', ModeSpendChartDirective);\n\n function ModeSpendChartDirective() {\n var directive = {\n bindToController: true,\n controller: \"ModeSpendChartController\",\n controllerAs: 'ctrl',\n transclude: true,\n replace: true,\n restrict: 'E',\n templateUrl: \"app/logistics/kpi/graphics/directive/mode-spend-chart.html\",\n scope: {\n freightCostList: '=',\n params: '='\n }\n };\n return directive;\n\n }\n /* @ngInject */\n function ModeSpendChartController($document, $translate, LogisticsService, ChartConstants) {\n\n var vm = this, frequencyOptions = LogisticsService.getFrequencyOptions(), monthList = LogisticsService.getMonthOptions(), colors = angular.copy(ChartConstants.colors), colorIndex = 0,\n frequency = frequencyOptions.find(function (item) {\n return item.Value === vm.params.Frequency;\n });\n\n var freightCostList = angular.copy(vm.freightCostList) || [];\n\n freightCostList.pop();\n\n vm.params = vm.params || {\n Year: new Date().getFullYear(),\n Project: $translate.instant('logistics.project.productive'),\n Frequency: frequencyOptions[0].Value\n }\n\n function generateLabels(freightCostList) {\n return Array.from(new Set(freightCostList.map(mapToLabel)));\n }\n\n function mapToLabel(item) {\n var frequencyTitle = $translate.instant(frequency.Label);\n if ( frequency.Value == 1 ) {\n return $translate.instant(monthList[item.Frequency - 1].Label);\n }\n return frequencyTitle + \" \" + item.Frequency;\n }\n\n function sortByFOBUSD(a, b) {\n if (a.FOBUSD > b.FOBUSD) {\n return 1;\n }\n if (a.FOBUSD < b.FOBUSD) {\n return -1;\n }\n return 0;\n }\n\n function getColor() {\n if (colorIndex >= colors.length) {\n colorIndex = 0;\n }\n return colors[colorIndex++];\n }\n\n function getColorByModal(type) {\n if ( type == \"AIR\" ) {\n return \"rgb(193, 82, 75)\";\n } else if ( type == \"SEA/AIR\" ) {\n return \"rgb(80, 129, 188)\";\n } else if ( type == \"SEA\" ) {\n return \"rgb(156, 186, 86)\";\n } else {\n return getColor();\n }\n }\n\n function newDataSet(label, datasets, labels) { \n var colorTypeModal = getColorByModal(label);\n var bgColors = Array(labels.length).fill(colorTypeModal);\n var borderColors = Array(labels.length).fill(\"rgba(220,220,220,0)\");\n\n var dataset = {\n type: 'bar',\n label: label,\n yAxisID: \"y-axis-0\",\n backgroundColor: bgColors,\n borderColor: borderColors,\n data: Array(labels.length).fill(0)\n };\n\n datasets.push(dataset);\n\n return dataset;\n }\n\n function init() {\n\n Chart.defaults.global.elements.line.fill = false;\n\n var labels = generateLabels(freightCostList), datasets = [];\n\n freightCostList.filter(function (item) {\n return angular.isDefined(item.Records);\n }).forEach(function (frequencyFreightCost) {\n\n var records = frequencyFreightCost.Records;\n records.sort(sortByFOBUSD);\n\n records.forEach(function (freightCost) {\n var label = freightCost.GroupByField;\n \n var dataset = datasets.find(function (d) {\n return d.label === label;\n });\n\n var totalFOBUSDTranMode = frequencyFreightCost.FOBUSD > 0 ? ((freightCost.FOBUSD / frequencyFreightCost.FOBUSD) * 100).toFixed(2) : 0;\n\n dataset = dataset || newDataSet(label, datasets, labels);\n\n var pos = freightCostList.findIndex(function (item) {\n return item.Frequency === frequencyFreightCost.Frequency;\n });\n\n dataset.data[pos] = totalFOBUSDTranMode;\n\n });\n\n });\n\n new Chart($document[0].getElementById(\"modeSpendChart\"), {\n type: 'bar',\n data: {\n labels: labels,\n datasets: datasets\n },\n options: {\n elements: { line: { tension: 0 } },\n title: {\n display: true,\n text: $translate.instant('logistics.kpi.graphics.mode.spend.title').replace(\"#Year\", vm.params.Year),\n fontSize: 18,\n padding: 50,\n fontStyle: 'bold'\n },\n tooltips: {\n mode: 'label',\n footerFontStyle: 'normal'\n },\n responsive: true,\n scales: {\n xAxes: [{\n stacked: true,\n gridLines: {\n display: false,\n drawBorder: false\n }\n }],\n yAxes: [{\n stacked: true,\n position: \"left\",\n id: \"y-axis-0\",\n ticks: {\n beginAtZero: true,\n max: 100,\n stepSize: 20,\n callback: function (label) {\n return label.toFixed(2) + '%';\n }\n },\n gridLines: {\n display: true,\n drawBorder: false\n }\n }]\n },\n legend: {\n position: 'bottom',\n display: true\n }\n }\n });\n\n }\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('LspChargeableChartController', LspChargeableChartController)\n .directive('lspChargeableChart', LspChargeableChartDirective);\n\n function LspChargeableChartDirective() {\n var directive = {\n bindToController: true,\n controller: \"LspChargeableChartController\",\n controllerAs: 'ctrl',\n transclude: true,\n replace: true,\n restrict: 'E',\n templateUrl: \"app/logistics/kpi/graphics/directive/lsp-chargeable-chart.html\",\n scope: {\n rateVariationList: '=?',\n params: '=?'\n }\n };\n return directive;\n\n }\n /* @ngInject */\n function LspChargeableChartController($translate, LogisticsService) {\n var vm = this, frequencyOptions = LogisticsService.getFrequencyOptions(), monthList = LogisticsService.getMonthOptions();\n\n if (angular.isUndefined(vm.rateVariationList)) {\n vm.rateVariationList = [];\n }\n\n if (angular.isUndefined(vm.params)) {\n vm.params = {\n Year: new Date().getFullYear(),\n Project: $translate.instant('logistics.project.productive'),\n Frequency: frequencyOptions[0].Value\n }\n }\n\n var frequency = frequencyOptions.find(function (item) {\n return item.Value === vm.params.Frequency;\n });\n\n function init() {\n vm.xLabel = [];\n vm.series = [];\n vm.rateData = [];\n vm.rateOptions = {\n elements: { line: { tension: 0, fill: false, borderWidth: 4 }, point: { radius: 7 } },\n scales: {\n yAxes: [{\n stacked: false,\n ticks: {\n beginAtZero: true,\n fontSize: 16\n },\n gridLines: {\n display: true,\n drawBorder: false\n },\n scaleLabel: {\n display: true,\n labelString: $translate.instant('label.tonne')\n }\n }],\n xAxes: [{\n stacked: false,\n gridLines: {\n display: false,\n drawBorder: false\n }\n }]\n },\n title: {\n display: true,\n text: 'Title',\n padding: 50,\n fontSize: 18\n },\n tooltips: {\n callbacks: {\n label: function (tooltipItem, data) {\n //get the concerned dataset\n var dataset = data.datasets[tooltipItem.datasetIndex];\n //get the current items value\n var percentage = dataset.data[tooltipItem.index];\n\n return percentage;\n }\n }\n },\n legend: {\n position: 'bottom',\n display: true\n }\n };\n fillRateVariationList();\n }\n\n function generateLabels(rateVariationList) {\n\n var list = rateVariationList.reduce(function (list, item) {\n if (angular.isDefined(item.RateVariations)) {\n list = list.concat(item.RateVariations);\n }\n return list;\n }, []).sort(sortByFrequency);\n\n return Array.from(new Set(list.map(mapToLabel)));\n }\n\n function mapToLabel(item) {\n var frequencyTitle = $translate.instant(frequency.Label);\n if ( frequency.Value == 1 ) {\n return $translate.instant(monthList[item.Frequency - 1].Label);\n }\n return frequencyTitle + \" \" + item.Frequency;\n }\n\n function fillRateVariationList() {\n if (vm.rateVariationList.length > 0) {\n var frequencyTitle = $translate.instant(frequency.Label);\n var labels = generateLabels(vm.rateVariationList);\n for (var i = 0; i < vm.rateVariationList.length; i++) {\n var serie = vm.series.find(function (s) {\n s === vm.rateVariationList[i].FreightForwarder\n });\n if (angular.isUndefined(serie)) {\n vm.series.push(vm.rateVariationList[i].FreightForwarder);\n }\n }\n var rateData = new Array(vm.series.length).fill(null);\n for (var j = 0; j < vm.rateVariationList.length; j++) {\n var rateVariationItem = vm.rateVariationList[j];\n var positionSerie = vm.series.indexOf(rateVariationItem.FreightForwarder);\n var rateVariations = rateVariationItem.RateVariations;\n var dataAux = new Array(vm.series.length).fill(null);\n\n for (var k = 0; k < rateVariations.length; k++) {\n var rateVariation = rateVariations[k];\n var text = \"\";\n if ( frequency.Value == 1 ) {\n frequencyTitle = $translate.instant(monthList[rateVariation.Frequency - 1].Label);\n text = frequencyTitle;\n } else {\n frequencyTitle = $translate.instant(frequency.Label);\n text = frequencyTitle + \" \" + rateVariation.Frequency;\n }\n var textTranslated = $translate.instant(text);\n var positionLabel = labels.findIndex(function (element) {\n return element === textTranslated\n });\n dataAux[positionLabel] = (rateVariation.CHARGEABLE_WEIGHT / 1000).toFixed(2);\n\n }\n rateData[positionSerie] = dataAux;\n }\n\n vm.xLabel = labels;\n vm.rateData = rateData;\n\n vm.rateOptions.title.text = getTitleTranslate('logistics.kpi.graphics.lsp.chargeable.title');\n }\n }\n\n function sortByFrequency(a, b) {\n if (a.Frequency > b.Frequency) {\n return 1;\n }\n if (a.Frequency < b.Frequency) {\n return -1;\n }\n return 0;\n }\n\n function getTitleTranslate(title) {\n var titleTranslated = $translate.instant(title);\n if (titleTranslated.indexOf(\"#Year\") >= 0) {\n return titleTranslated.replace(\"#Year\", (vm.params.Year))\n }\n return titleTranslated;\n }\n\n init();\n }\n})();\n/*eslint no-undef: 0*/\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('LocalTransportFreigthCostChartController', LocalTransportFreigthCostChartController)\n .directive('localTransportFreigthCostChart', LocalTransportFreigthCostChartDirective);\n\n function LocalTransportFreigthCostChartDirective() {\n var directive = {\n bindToController: true,\n controller: \"LocalTransportFreigthCostChartController\",\n controllerAs: 'ctrl',\n transclude: true,\n replace: true,\n restrict: 'E',\n templateUrl: \"app/logistics/kpi/graphics/directive/local-transport-freigth-cost-chart.html\",\n scope: {\n freightCostList: '=',\n params: '='\n }\n };\n return directive;\n\n }\n\n /* @ngInject */\n function LocalTransportFreigthCostChartController($document, $translate, LogisticsService, ChartConstants) {\n\n var vm = this, frequencyOptions = LogisticsService.getFrequencyOptions(),\n monthList = LogisticsService.getMonthOptions(),\n colors = angular.copy(ChartConstants.colors), colorIndex = 0,\n frequency = frequencyOptions.find(function (item) {\n return item.Value === vm.params.Frequency;\n });\n\n var freightCostList = angular.copy(vm.freightCostList) || [];\n\n vm.params = vm.params || {\n Year: new Date().getFullYear(),\n Project: $translate.instant('logistics.project.productive'),\n Frequency: frequencyOptions[0].Value\n };\n\n function mapToLabel(item) {\n var frequencyTitle = $translate.instant(frequency.Label);\n if (frequency.Value == 1) {\n return $translate.instant(monthList[item - 1].Label);\n }\n return frequencyTitle + \" \" + item;\n }\n\n Array.prototype.groupBy = function (prop) {\n return this.reduce(function (groups, item) {\n var val = item[prop];\n groups[val] = groups[val] || [];\n groups[val].push(item);\n return groups;\n }, {});\n };\n\n function generateSeriesFreight(list) {\n return list.map(function (item) {\n return (item.Freight/1000).toFixed(2);\n })\n }\n\n function generateSeriesTrip(list) {\n return list.map(function (item) {\n return item.Trip;\n })\n }\n\n function groupSum(items) {\n return items\n .map(function (x) {\n return x.Freight;\n })\n .reduce(function (a, b) {\n return ((a + b)/1000).toFixed(2);\n });\n };\n\n\n function init() {\n\n Chart.defaults.global.elements.line.fill = false;\n\n var groupedByFrequency = freightCostList.groupBy('Frequency');\n var groupedByTranMode = freightCostList.groupBy('Company');\n var graphicMonthYearsBar = [];\n var graphicMonthYearsLine = [];\n var labels = [];\n var colorsTranTime = [\n 'rgb(80, 129, 188)',\n 'rgb(237, 125, 49)',\n 'rgb(128, 100, 162)',\n 'rgb(0, 0, 0)',\n 'rgb(180, 204, 131)',\n 'rgb(134, 177, 186)',\n ];\n\n var i = 0;\n var dataFrequencyTrip = [];\n for (var key in groupedByFrequency) {\n if (key === \"13\") {\n labels.push($translate.instant(\"logistics.kpi.graphics.transit.time.accumulated\"));\n } else {\n var aux = mapToLabel(key);\n dataFrequencyTrip[i] = groupSum(groupedByFrequency[key]);\n labels.push(angular.copy(aux));\n i++;\n }\n }\n\n for (var tkey in groupedByTranMode) {\n var group = groupedByTranMode[tkey].groupBy('Company');\n graphicMonthYearsBar.push({\n type: 'bar',\n label: angular.copy(tkey + ' Freight'),\n backgroundColor: colorsTranTime[colorIndex],\n yAxisID: \"y-axis-1\",\n borderColor: colorsTranTime[colorIndex],\n data: generateSeriesFreight(group[tkey]),\n });\n colorIndex++;\n }\n\n for (var tkey in groupedByTranMode) {\n var group = groupedByTranMode[tkey].groupBy('Company');\n graphicMonthYearsLine.push({\n type: 'line',\n label: angular.copy(tkey + ' Trip'),\n backgroundColor: colorsTranTime[colorIndex],\n yAxisID: \"y-axis-0\",\n borderColor: colorsTranTime[colorIndex],\n borderDash: [5, 5],\n data: generateSeriesTrip(group[tkey]),\n });\n colorIndex++;\n }\n\n graphicMonthYearsLine.push({\n type: 'line',\n label: 'Total ' +$translate.instant('logistic.month') + ' R$',\n backgroundColor: colorsTranTime[colorIndex],\n yAxisID: \"y-axis-0\",\n borderColor: colorsTranTime[colorIndex],\n pointRadius: 5,\n pointHoverRadius: 6,\n pointStyle: 'circle',\n pointBackgroundColor: colorsTranTime[colorIndex],\n data: dataFrequencyTrip,\n });\n\n var dataset = graphicMonthYearsLine.concat(graphicMonthYearsBar);\n var transitData = {\n labels: labels,\n datasets: dataset\n };\n\n new Chart($document[0].getElementById(\"localTransportFreigthCost\"), {\n type: 'bar',\n data: transitData,\n options: {\n elements: {line: {tension: 0}},\n title: {\n display: true,\n text: $translate.instant('logistics.kpi.graphics.local.transport.freight.cost.title').replace(\"#Year\", vm.params.Year).replace(\"#Frequency\", $translate.instant(frequency.Alternative)),\n fontSize: 18,\n padding: 50,\n fontStyle: 'bold'\n },\n tooltips: {\n mode: 'label',\n footerFontStyle: 'normal'\n },\n responsive: true,\n scales: {\n xAxes: [{\n stacked: false,\n gridLines: {\n display: false,\n drawBorder: false\n }\n }],\n yAxes: [{\n stacked: false,\n position: \"right\",\n id: \"y-axis-0\",\n ticks: {\n beginAtZero: true,\n callback: function (label) {\n return label.toFixed(2);\n }\n },\n gridLines: {\n display: true,\n drawBorder: false\n },\n scaleLabel: {\n display: true,\n labelString: $translate.instant('logistics.kpi.graphics.local.transport.freigth.cost.trips')\n }\n }, {\n stacked: false,\n position: \"left\",\n id: \"y-axis-1\",\n ticks: {\n beginAtZero: true,\n callback: function (label) {\n return label.toFixed(0);\n }\n },\n gridLines: {\n display: false,\n drawBorder: false\n },\n scaleLabel: {\n display: true,\n labelString: $translate.instant('logistics.kpi.graphics.local.transport.freigth.cost.thousands')\n }\n }]\n },\n legend: {\n position: 'bottom',\n display: true\n }\n }\n });\n\n }\n\n init();\n }\n})\n();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('LandedVariationChartController', LandedVariationChartController)\n .directive('landedVariationChart', LandedVariationChartDirective);\n\n function LandedVariationChartDirective() {\n var directive = {\n bindToController: true,\n controller: \"LandedVariationChartController\",\n controllerAs: 'ctrl',\n transclude: true,\n replace: true,\n restrict: 'E',\n templateUrl: \"app/logistics/kpi/graphics/directive/landed-variation-chart.html\",\n scope: {\n landedVariationList: '=?',\n params: '=?'\n }\n };\n return directive;\n\n }\n /* @ngInject */\n function LandedVariationChartController($translate, LogisticsService) {\n var vm = this, frequencyOptions = LogisticsService.getFrequencyOptions(), monthList = LogisticsService.getMonthOptions();\n\n if (angular.isUndefined(vm.landedVariationList)) {\n vm.landedVariationList = [];\n }\n\n if (angular.isUndefined(vm.params)) {\n vm.params = {\n Year: new Date().getFullYear(),\n Project: $translate.instant('logistics.project.productive'),\n Frequency: frequencyOptions[0].Value\n }\n }\n\n var frequency = frequencyOptions.find(function (item) {\n return item.Value === vm.params.Frequency;\n });\n\n function init() {\n vm.xLabel = [];\n vm.series = [];\n vm.colors = [];\n vm.landedData = [];\n vm.landedOptions = {\n elements: {line: {tension: 0, fill: false, borderWidth: 4}, point: {radius: 7}},\n scales: {\n yAxes: [{\n ticks: {\n beginAtZero: true,\n fontSize: 16,\n padding: 15,\n callback: function ( value ) {\n return value + '%';\n }\n },\n scaleLabel: {\n display: true,\n labelString: 'Total',\n fontSize: 18\n },\n gridLines: {\n display: true,\n drawBorder: false\n }\n }],\n xAxes: [{\n ticks: {\n fontSize: 16,\n padding: 15,\n display: true\n },\n scaleLabel: {\n display: true,\n fontSize: 18\n },\n stacked: false,\n gridLines: {\n display: false,\n drawBorder: false\n }\n }]\n },\n title: {\n display: true,\n text: 'Title',\n fontSize: 18,\n padding: 50\n },\n tooltips: {\n callbacks: {\n label: function(tooltipItem, data) {\n //get the concerned dataset\n var dataset = data.datasets[tooltipItem.datasetIndex];\n //get the current items value\n var percentage = dataset.data[tooltipItem.index];\n\n return percentage + \"%\";\n }\n }\n },\n legend: {\n position: 'bottom',\n display: true\n }\n };\n fillLandedVariationList();\n }\n\n function fillLandedVariationList() {\n if (vm.landedVariationList.length > 0) {\n var frequencyTitle = $translate.instant(frequency.Label);\n\n for( var i=0; i < vm.landedVariationList.length; i++) {\n var listLandedVariation = vm.landedVariationList[i].LandedVariation.resultList;\n var yearSerie = 'Landed % ' + vm.landedVariationList[i].Year;\n vm.series.push(angular.copy(yearSerie));\n var dataSerie = [];\n var label = [];\n for ( var j = 0; j < listLandedVariation.length; j++ ) {\n var text = \"\";\n if ( frequency.Value == 1 ) {\n frequencyTitle = $translate.instant(monthList[listLandedVariation[j].Frequency - 1].Label);\n text = frequencyTitle;\n } else {\n frequencyTitle = $translate.instant(frequency.Label);\n text = frequencyTitle + \" \" + listLandedVariation[j].Frequency;\n }\n label.push($translate.instant(text));\n dataSerie.push(listLandedVariation[j].LandedPercent);\n }\n vm.landedData.push(dataSerie);\n vm.xLabel = label;\n }\n\n vm.colors = ['#990033','#0088cc'];\n\n vm.landedOptions.title.text = getTitleTranslate('logistics.kpi.graphics.landed.variation.title');\n vm.landedOptions.scales.yAxes[0].scaleLabel.labelString = $translate.instant('logistics.percentage');\n\n }\n }\n\n function getTitleTranslate (title) {\n var titleTranslated = $translate.instant(title);\n if (titleTranslated.indexOf(\"#FromYear\") >= 0) {\n return titleTranslated.replace(\"#FromYear\", (vm.params.Year - 1)).replace(\"#ToYear\", vm.params.Year)\n }\n return titleTranslated;\n }\n\n init();\n }\n})();\n\n/*eslint no-undef: 0*/\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('LandedCostChartController', LandedCostChartController)\n .directive('landedCostChart', LandedCostChartDirective);\n\n function LandedCostChartDirective() {\n var directive = {\n bindToController: true,\n controller: \"LandedCostChartController\",\n controllerAs: 'ctrl',\n transclude: true,\n replace: true,\n restrict: 'E',\n templateUrl: \"app/logistics/kpi/graphics/directive/landed-cost-chart.html\",\n scope: {\n freightCostList: '=',\n params: '='\n }\n };\n return directive;\n\n }\n /* @ngInject */\n function LandedCostChartController($document, $translate, LogisticsService, ChartConstants) {\n var vm = this, frequencyOptions = LogisticsService.getFrequencyOptions(), monthList = LogisticsService.getMonthOptions();\n\n var colors = angular.copy(ChartConstants.colors);\n\n if (angular.isUndefined(vm.freightCostList)) {\n vm.freightCostList = [];\n }\n\n if (angular.isUndefined(vm.params)) {\n vm.params = {\n Year: new Date().getFullYear(),\n Project: $translate.instant('logistics.project.productive'),\n Frequency: frequencyOptions[0].Value\n }\n }\n\n var frequency = frequencyOptions.find(function (item) {\n return item.Value === vm.params.Frequency;\n });\n\n function generateLabels(freightCostList) {\n return Array.from(new Set(freightCostList.map(mapToLabel)));\n }\n\n function mapToLabel(item) {\n var frequencyTitle = $translate.instant(frequency.Label);\n\n if (item.Frequency === 0) {\n return $translate.instant('logistic.label.accumulated');\n }\n if ( frequency.Value == 1 ) {\n return $translate.instant(monthList[item.Frequency - 1].Label);\n }\n return frequencyTitle + \" \" + item.Frequency;\n }\n\n function sortByFreightUSD(a, b) {\n if (a.FreightUSD > b.FreightUSD) {\n return 1;\n }\n if (a.FreightUSD < b.FreightUSD) {\n return -1;\n }\n return 0;\n }\n\n Array.prototype.groupBy = function (prop) {\n return this.reduce(function (groups, item) {\n var val = item[prop];\n groups[val] = groups[val] || [];\n groups[val].push(item);\n return groups;\n }, {});\n };\n\n var colorIndex = 0;\n\n function getColor() {\n if (colorIndex >= colors.length) {\n colorIndex = 0;\n }\n return colors[colorIndex++];\n }\n\n function getColorByModal(type) {\n if ( type == \"AIR\" ) {\n return \"rgb(193, 82, 75)\";\n } else if ( type == \"SEA/AIR\" ) {\n return \"rgb(80, 129, 188)\";\n } else if ( type == \"SEA\" ) {\n return \"rgb(156, 186, 86)\";\n } else {\n return getColor();\n }\n }\n\n function init() {\n\n Chart.defaults.global.elements.line.fill = false;\n\n var labels = generateLabels(vm.freightCostList);\n\n var freightPercentData = vm.freightCostList.map(function (item) {\n return item.FreightPercent;\n });\n\n var clearencePercentData = vm.freightCostList.map(function (item) {\n return item.ClearancePercent;\n });\n\n var landedPercentData = vm.freightCostList.map(function (item) {\n return item.LandedPercent;\n });\n\n var freightData = vm.freightCostList.filter(function (item) {\n return item.Frequency > 0;\n }).map(function (item) {\n return (item.FreightUSD / 1000).toFixed(2);\n });\n\n var freightDataItems = [];\n\n vm.freightCostList.forEach(function (item) {\n freightDataItems.push((item.FreightUSD / 1000).toFixed(2));\n });\n\n var allPercentData = freightPercentData.concat(clearencePercentData).concat(landedPercentData);\n\n var yAxis0TickMax = Math.max.apply(Math, allPercentData);\n var yAxis0StepSize = yAxis0TickMax / 8;\n yAxis0TickMax += yAxis0StepSize;\n var valuesToTick = angular.copy(freightData);\n\n if (valuesToTick.length > 1) {\n var val = vm.freightCostList.find(function (item) {\n return item.Frequency === 0;\n }).FreightUSD;\n\n var indexOfValues = valuesToTick.indexOf(val);\n\n if (indexOfValues != -1) {\n valuesToTick.splice(indexOfValues, 1);\n }\n }\n\n var freightPercentTickMax = Math.max.apply(Math, valuesToTick);\n var yAxis1StepSize = freightPercentTickMax / 4;\n freightPercentTickMax += yAxis1StepSize;\n\n var freightUsdBorderColors = Array(labels.length).fill(\"rgba(220,220,220,0)\");\n\n var freightPercentColor = getColor();\n\n var datasets = [{\n type: 'line',\n label: 'Freight %',\n yAxisID: \"y-axis-0\",\n backgroundColor: freightPercentColor,\n data: freightPercentData,\n pointRadius: 5,\n pointHoverRadius: 6,\n pointStyle: 'circle',\n pointBackgroundColor: freightPercentColor,\n borderColor: freightPercentColor\n }, {\n type: 'line',\n label: 'Clearence %',\n yAxisID: \"y-axis-0\",\n pointRadius: 0,\n backgroundColor: \"rgba(0,0,0)\",\n borderColor: \"rgba(0,0,0)\",\n data: clearencePercentData\n }, {\n type: 'line',\n label: 'Landed %',\n yAxisID: \"y-axis-0\",\n data: landedPercentData,\n borderDash: [5, 5],\n borderColor: \"rgba(35,142,35)\", //getColor(),\n pointRadius: 0,\n fill: false\n }];\n\n vm.freightCostList.filter(function (item) {\n return angular.isDefined(item.Records);\n }).forEach(function (frequencyFreightCost) {\n\n var records = frequencyFreightCost.Records;\n records.sort(sortByFreightUSD);\n\n records.forEach(function (freightCost) {\n var label = 'Freight ' + freightCost.GroupByField, freightUSD = (freightCost.FreightUSD / 1000).toFixed(2);\n var colorTypeModal = getColorByModal(freightCost.GroupByField);\n var dataset = datasets.find(function (d) {\n return d.label === label;\n });\n\n if (angular.isUndefined(dataset)) {\n var bgColors = Array(labels.length - 1).fill(colorTypeModal);\n bgColors.push(\"rgba(220,220,220,0)\");\n\n dataset = {\n type: 'bar',\n label: label,\n yAxisID: \"y-axis-1\",\n backgroundColor: bgColors,\n borderColor: freightUsdBorderColors,\n data: Array(labels.length).fill(0)\n };\n datasets.push(dataset);\n }\n\n var pos = vm.freightCostList.findIndex(function (item) {\n return item.Frequency === frequencyFreightCost.Frequency;\n });\n\n dataset.data[pos] = freightUSD;\n\n });\n\n });\n\n var barChartData = {\n labels: labels,\n datasets: datasets\n };\n\n new Chart($document[0].getElementById(\"landedCostChart\"), {\n type: 'bar',\n data: barChartData,\n options: {\n elements: { line: { tension: 0 } },\n title: {\n display: true,\n text: $translate.instant('logistics.kpi.graphics.landed.cost.title').replace(\"#Project\", $translate.instant(vm.params.ProjectLabel)).replace(\"#Year\", vm.params.Year),\n fontSize: 18,\n padding: 50,\n fontStyle: 'bold'\n },\n tooltips: {\n mode: 'label',\n callbacks: {\n footer: function (tooltipItems) {\n var index = tooltipItems[0].index;\n return 'Total Freight USD: ' + freightDataItems[index];\n }\n },\n footerFontStyle: 'normal'\n },\n responsive: true,\n scales: {\n xAxes: [{\n stacked: true,\n gridLines: {\n display: false,\n drawBorder: false\n }\n }],\n yAxes: [{\n stacked: false,\n position: \"left\",\n id: \"y-axis-0\",\n ticks: {\n beginAtZero: true,\n max: yAxis0TickMax,\n stepSize: yAxis0StepSize,\n callback: function (label) {\n return label.toFixed(2) + '%';\n }\n },\n gridLines: {\n display: true,\n drawBorder: false\n }\n }, {\n stacked: true,\n position: \"right\",\n id: \"y-axis-1\",\n ticks: {\n beginAtZero: true,\n max: freightPercentTickMax,\n stepSize: yAxis1StepSize,\n callback: function (label) {\n if (label === 0) {\n return \"-\";\n }\n return label.toFixed(2);\n }\n },\n gridLines: {\n display: false,\n drawBorder: false\n },\n scaleLabel: {\n display: true,\n labelString: $translate.instant('logistics.kpi.graphics.landed.cost.thousands')\n }\n }]\n },\n legend: {\n position: 'bottom',\n display: true\n }\n }\n });\n\n }\n\n init();\n }\n})();\n\n/*eslint no-undef: 0*/\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('InvoicesIssuedConsolidatedChartController', InvoicesIssuedConsolidatedChartController)\n .directive('invoicesIssuedConsolidatedChart', InvoicesIssuedConsolidatedChartDirective);\n\n function InvoicesIssuedConsolidatedChartDirective() {\n var directive = {\n bindToController: true,\n controller: \"InvoicesIssuedConsolidatedChartController\",\n controllerAs: 'ctrl',\n transclude: true,\n replace: true,\n restrict: 'E',\n templateUrl: \"app/logistics/kpi/graphics/directive/invoices-issued-consolidated-chart.html\",\n scope: {\n freightCostList: '=',\n params: '='\n }\n };\n return directive;\n\n }\n\n /* @ngInject */\n function InvoicesIssuedConsolidatedChartController($document, $translate, LogisticsService, ChartConstants) {\n\n var vm = this, frequencyOptions = LogisticsService.getFrequencyOptions(),\n monthList = LogisticsService.getMonthOptions(),\n colors = angular.copy(ChartConstants.colors), colorIndex = 0,\n frequency = frequencyOptions.find(function (item) {\n return item.Value === vm.params.Frequency;\n });\n\n var freightCostList = angular.copy(vm.freightCostList) || [];\n\n vm.params = vm.params || {\n Year: new Date().getFullYear(),\n Project: $translate.instant('logistics.project.productive'),\n Frequency: frequencyOptions[0].Value\n };\n\n function mapToLabel(item) {\n var frequencyTitle = $translate.instant(frequency.Label);\n if (frequency.Value == 1) {\n return $translate.instant(monthList[item - 1].Label);\n }\n return frequencyTitle + \" \" + item;\n }\n\n Array.prototype.groupBy = function (prop) {\n return this.reduce(function (groups, item) {\n var val = item[prop];\n groups[val] = groups[val] || [];\n groups[val].push(item);\n return groups;\n }, {});\n };\n\n function generateSeriesIssued(list) {\n return list.map(function (item) {\n return item.QtyIssued;\n })\n }\n\n function generateSeriesConsolidated(list) {\n return list.map(function (item) {\n return item.QtyConsolidated;\n })\n }\n\n function generateSeriesTotalConsolidated(list) {\n return list.map(function (item) {\n return item.TotalConsolidated;\n })\n }\n\n function init() {\n\n Chart.defaults.global.elements.line.fill = false;\n\n var groupedByFrequency = freightCostList.groupBy('Frequency');\n var graphicMonthYearsBar = [];\n var graphicMonthYearsLine = [];\n var labels = [];\n\n for (var key in groupedByFrequency) {\n if (key === \"13\") {\n labels.push($translate.instant(\"logistics.kpi.graphics.transit.time.accumulated\"));\n } else {\n var aux = mapToLabel(key);\n labels.push(angular.copy(aux));\n }\n }\n\n graphicMonthYearsBar.push({\n type: 'bar',\n label: $translate.instant('logistics.kpi.graphics.invoices.Issued.consolidated.qtd.of.invoice.issued'),\n backgroundColor: 'rgb(91, 155, 213)',\n yAxisID: \"y-axis-1\",\n borderColor: 'rgb(91, 155, 213)',\n data: generateSeriesIssued(freightCostList),\n });\n\n graphicMonthYearsBar.push({\n type: 'bar',\n label: $translate.instant('logistics.kpi.graphics.invoices.Issued.consolidated.qty.of.invoice.consolidated'),\n backgroundColor: 'rgb(237, 125, 49)',\n yAxisID: \"y-axis-1\",\n borderColor: 'rgb(237, 125, 49)',\n data: generateSeriesConsolidated(freightCostList),\n });\n\n graphicMonthYearsLine.push({\n type: 'line',\n label: $translate.instant('logistics.kpi.graphics.invoices.Issued.consolidated.total invoice consolidated'),\n backgroundColor: 'rgb(0, 0, 255)',\n yAxisID: \"y-axis-0\",\n borderColor: 'rgb(0, 0, 255)',\n pointRadius: 5,\n pointHoverRadius: 6,\n pointStyle: 'circle',\n pointBackgroundColor: 'rgb(0, 0, 255)',\n data: generateSeriesTotalConsolidated(freightCostList),\n });\n\n var dataset = graphicMonthYearsLine.concat(graphicMonthYearsBar);\n var transitData = {\n labels: labels,\n datasets: dataset\n };\n\n new Chart($document[0].getElementById(\"invoicesIssuedConsolidatedChart\"), {\n type: 'bar',\n data: transitData,\n options: {\n elements: {line: {tension: 0}},\n title: {\n display: true,\n text: $translate.instant('logistics.kpi.graphics.invoices.Issued.consolidated.title').replace(\"#Year\", vm.params.Year).replace(\"#Frequency\", $translate.instant(frequency.Alternative)),\n fontSize: 18,\n padding: 50,\n fontStyle: 'bold'\n },\n tooltips: {\n mode: 'label',\n footerFontStyle: 'normal'\n },\n responsive: true,\n scales: {\n xAxes: [{\n stacked: false,\n gridLines: {\n display: false,\n drawBorder: false\n }\n }],\n yAxes: [{\n stacked: false,\n position: \"right\",\n id: \"y-axis-0\",\n ticks: {\n beginAtZero: true,\n callback: function (label) {\n return label.toFixed(2) + '%';\n }\n },\n gridLines: {\n display: true,\n drawBorder: false\n },\n scaleLabel: {\n display: true,\n labelString: $translate.instant('logistics.kpi.graphics.invoices.Issued.consolidated.scale.x')\n }\n }, {\n stacked: false,\n position: \"left\",\n id: \"y-axis-1\",\n ticks: {\n beginAtZero: true,\n callback: function (label) {\n return label.toFixed(2);\n }\n },\n gridLines: {\n display: false,\n drawBorder: false\n },\n scaleLabel: {\n display: true,\n labelString: $translate.instant('logistics.kpi.graphics.invoices.Issued.consolidated.scale.y')\n }\n }]\n },\n legend: {\n position: 'bottom',\n display: true\n }\n }\n });\n\n }\n\n init();\n }\n})\n();\n\n/*eslint no-undef: 0*/\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('GrossWeightLspOutboundRoadChartController', GrossWeightLspOutboundRoadChartController)\n .directive('grossWeightLspOutboundRoadChart', GrossWeightLspOutboundRoadChartDirective);\n\n function GrossWeightLspOutboundRoadChartDirective() {\n var directive = {\n bindToController: true,\n controller: \"GrossWeightLspOutboundRoadChartController\",\n controllerAs: 'ctrl',\n transclude: true,\n replace: true,\n restrict: 'E',\n templateUrl: \"app/logistics/kpi/graphics/directive/gross-weight-lsp-outbound-road-chart.html\",\n scope: {\n freightCostList: '=',\n params: '='\n }\n };\n return directive;\n\n }\n\n /* @ngInject */\n function GrossWeightLspOutboundRoadChartController($document, $translate, LogisticsService, ChartConstants) {\n var vm = this, frequencyOptions = LogisticsService.getFrequencyOptions(),\n monthList = LogisticsService.getMonthOptions(),\n colors = angular.copy(ChartConstants.colors), colorIndex = 0,\n frequency = frequencyOptions.find(function (item) {\n return item.Value === vm.params.Frequency;\n });\n\n var freightWeightRoadList = angular.copy(vm.freightCostList.filter(function(item) {return item.Modal === 'RODO'})) || [];\n\n vm.params = vm.params || {\n Year: new Date().getFullYear(),\n Project: $translate.instant('logistics.project.productive'),\n Frequency: frequencyOptions[0].Value\n };\n\n function mapToLabel(item) {\n var frequencyTitle = $translate.instant(frequency.Label);\n if (frequency.Value == 1) {\n return $translate.instant(monthList[item - 1].Label);\n }\n return frequencyTitle + \" \" + item;\n }\n\n Array.prototype.groupBy = function (prop) {\n return this.reduce(function (groups, item) {\n var val = item[prop];\n groups[val] = groups[val] || [];\n groups[val].push(item);\n return groups;\n }, {});\n };\n\n function generateSeriesGrossWeight(list) {\n return list.map(function (item) {\n return (item.GrossWeight/1000).toFixed(2);\n })\n }\n\n function groupSumWeight(items) {\n if (items.length > 1) {\n return items\n .map(function (x) {\n return (x.GrossWeight);\n })\n .reduce(function (a, b) {\n return ((a + b)/1000).toFixed(2);\n });\n }\n return items\n .map(function (x) {\n return (x.GrossWeight/1000).toFixed(2);\n });\n }\n\n function init() {\n\n Chart.defaults.global.elements.line.fill = false;\n\n var groupedByFrequencyRoad = freightWeightRoadList.groupBy('Frequency');\n var groupedByCarrierModeRoad = freightWeightRoadList.groupBy('Carrier');\n var graphicMonthYearsRoadBar = [];\n var labels = [];\n var colorsTranTime = [\n 'rgb(80, 129, 188)', // Blue\n 'rgb(156, 186, 86)', // Green\n 'rgb(193, 82, 75)', // Red\n 'rgb(131, 118, 144)', // Wine\n 'rgb(255, 166, 77)', // Orange,\n 'rgb(134, 177, 186)', // Ciano\n ];\n\n var i = 0;\n var dataFrequency = [];\n for (var key in groupedByFrequencyRoad) {\n if (key === \"13\") {\n labels.push($translate.instant(\"logistics.kpi.graphics.transit.time.accumulated\"));\n } else {\n var aux = mapToLabel(key);\n dataFrequency[i] = (groupSumWeight(groupedByFrequencyRoad[key]));\n labels.push(angular.copy(aux));\n i++;\n }\n }\n\n for (var tkey in groupedByCarrierModeRoad) {\n var group = groupedByCarrierModeRoad[tkey].groupBy('Carrier');\n graphicMonthYearsRoadBar.push({\n type: 'bar',\n label: angular.copy(tkey + ' Gross Weight'),\n backgroundColor: colorsTranTime[colorIndex],\n yAxisID: \"y-axis-0\",\n borderColor: colorsTranTime[colorIndex],\n data: generateSeriesGrossWeight(group[tkey]),\n });\n colorIndex++;\n }\n\n var dataset = graphicMonthYearsRoadBar;\n var transitData = {\n labels: labels,\n datasets: dataset\n };\n\n new Chart($document[0].getElementById(\"grossWeightLspOutboundRoad\"), {\n type: 'bar',\n data: transitData,\n options: {\n elements: {line: {tension: 0}},\n title: {\n display: true,\n text: $translate.instant('logistics.kpi.graphics.gross.weight.lsp.outbound.road.title').replace(\"#Year\", vm.params.Year).replace(\"#Frequency\", $translate.instant(frequency.Alternative)),\n fontSize: 18,\n padding: 50,\n fontStyle: 'bold'\n },\n tooltips: {\n mode: 'label',\n footerFontStyle: 'normal'\n },\n responsive: true,\n scales: {\n xAxes: [{\n stacked: false,\n gridLines: {\n display: false,\n drawBorder: false\n },\n\n }],\n yAxes: [{\n stacked: false,\n position: \"left\",\n id: \"y-axis-0\",\n ticks: {\n beginAtZero: true,\n callback: function (label) {\n return label.toFixed(2);\n }\n },\n gridLines: {\n display: true,\n drawBorder: false\n },\n scaleLabel: {\n display: true,\n labelString: $translate.instant('logistics.kpi.graphics.national.weight.gross.road')\n }\n }]\n },\n legend: {\n position: 'bottom',\n display: true\n }\n }\n });\n }\n\n init();\n }\n})\n();\n\n/*eslint no-undef: 0*/\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('GrossWeightLspOutboundChartController', GrossWeightLspOutboundChartController)\n .directive('grossWeightLspOutboundChart', GrossWeightLspOutboundChartDirective);\n\n function GrossWeightLspOutboundChartDirective() {\n var directive = {\n bindToController: true,\n controller: \"GrossWeightLspOutboundChartController\",\n controllerAs: 'ctrl',\n transclude: true,\n replace: true,\n restrict: 'E',\n templateUrl: \"app/logistics/kpi/graphics/directive/gross-weight-lsp-outbound-chart.html\",\n scope: {\n freightCostList: '=',\n params: '='\n }\n };\n return directive;\n\n }\n\n /* @ngInject */\n function GrossWeightLspOutboundChartController($document, $translate, LogisticsService, ChartConstants) {\n var vm = this, frequencyOptions = LogisticsService.getFrequencyOptions(),\n monthList = LogisticsService.getMonthOptions(),\n colors = angular.copy(ChartConstants.colors), colorIndex = 0,\n frequency = frequencyOptions.find(function (item) {\n return item.Value === vm.params.Frequency;\n });\n\n var freightWeightAirList = angular.copy(vm.freightCostList.filter(function(item) { return item.Modal === 'AÉREO'})) || [];\n\n vm.params = vm.params || {\n Year: new Date().getFullYear(),\n Project: $translate.instant('logistics.project.productive'),\n Frequency: frequencyOptions[0].Value\n };\n\n function mapToLabel(item) {\n var frequencyTitle = $translate.instant(frequency.Label);\n if (frequency.Value == 1) {\n return $translate.instant(monthList[item - 1].Label);\n }\n return frequencyTitle + \" \" + item;\n }\n\n Array.prototype.groupBy = function (prop) {\n return this.reduce(function (groups, item) {\n var val = item[prop];\n groups[val] = groups[val] || [];\n groups[val].push(item);\n return groups;\n }, {});\n };\n\n function generateSeriesGrossWeight(list) {\n return list.map(function (item) {\n return (item.GrossWeight/1000).toFixed(2);\n })\n }\n\n function groupSumWeight(items) {\n if (items.length > 1) {\n return items\n .map(function (x) {\n return (x.GrossWeight);\n })\n .reduce(function (a, b) {\n return ((a + b)/1000).toFixed(2);\n });\n }\n return items\n .map(function (x) {\n return (x.GrossWeight/1000).toFixed(2);\n });\n }\n\n function init() {\n\n Chart.defaults.global.elements.line.fill = false;\n\n var groupedByFrequencyAir = freightWeightAirList.groupBy('Frequency');\n var groupedByCarrierModeAir = freightWeightAirList.groupBy('Carrier');\n var graphicMonthYearsAirBar = [];\n var labels = [];\n var colorsTranTime = [\n 'rgb(80, 129, 188)', // Blue\n 'rgb(156, 186, 86)', // Green\n 'rgb(193, 82, 75)', // Red\n 'rgb(131, 118, 144)', // Wine\n 'rgb(255, 166, 77)', // Orange,\n 'rgb(134, 177, 186)', // Ciano\n ];\n\n var i = 0;\n var dataFrequency = [];\n for (var key in groupedByFrequencyAir) {\n if (key === \"13\") {\n labels.push($translate.instant(\"logistics.kpi.graphics.transit.time.accumulated\"));\n } else {\n var aux = mapToLabel(key);\n dataFrequency[i] = (groupSumWeight(groupedByFrequencyAir[key]));\n labels.push(angular.copy(aux));\n i++;\n }\n }\n\n for (var tkey in groupedByCarrierModeAir) {\n var group = groupedByCarrierModeAir[tkey].groupBy('Carrier');\n graphicMonthYearsAirBar.push({\n type: 'bar',\n label: angular.copy(tkey + ' Gross Weight'),\n backgroundColor: colorsTranTime[colorIndex],\n yAxisID: \"y-axis-0\",\n borderColor: colorsTranTime[colorIndex],\n data: generateSeriesGrossWeight(group[tkey]),\n });\n colorIndex++;\n }\n\n colorIndex++;\n\n\n var dataset = graphicMonthYearsAirBar;\n var transitData = {\n labels: labels,\n datasets: dataset\n };\n\n new Chart($document[0].getElementById(\"grossWeightLspOutboundAir\"), {\n type: 'bar',\n data: transitData,\n options: {\n elements: {line: {tension: 0}},\n title: {\n display: true,\n text: $translate.instant('logistics.kpi.graphics.gross.weight.lsp.outbound.air.title').replace(\"#Year\", vm.params.Year).replace(\"#Frequency\", $translate.instant(frequency.Alternative)),\n fontSize: 18,\n padding: 50,\n fontStyle: 'bold'\n },\n tooltips: {\n mode: 'label',\n footerFontStyle: 'normal'\n },\n responsive: true,\n scales: {\n xAxes: [{\n stacked: false,\n gridLines: {\n display: false,\n drawBorder: false\n },\n\n }],\n yAxes: [{\n stacked: false,\n position: \"left\",\n id: \"y-axis-0\",\n ticks: {\n beginAtZero: true,\n callback: function (label) {\n return label.toFixed(2);\n }\n },\n gridLines: {\n display: true,\n drawBorder: false\n },\n scaleLabel: {\n display: true,\n labelString: $translate.instant('logistics.kpi.graphics.national.weight.gross.air')\n }\n }]\n },\n legend: {\n position: 'bottom',\n display: true\n }\n }\n });\n }\n\n init();\n }\n})\n();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('GrossWeightChartController', GrossWeightChartController)\n .directive('grossWeightChart', GrossWeightChartDirective);\n\n function GrossWeightChartDirective() {\n var directive = {\n bindToController: true,\n controller: \"GrossWeightChartController\",\n controllerAs: 'ctrl',\n transclude: true,\n replace: true,\n restrict: 'E',\n templateUrl: \"app/logistics/kpi/graphics/directive/gross-weight-chart.html\",\n scope: {\n freightCostList: '=',\n params: '='\n }\n };\n return directive;\n\n }\n /* @ngInject */\n function GrossWeightChartController($document, $translate, LogisticsService, ChartConstants) {\n var vm = this, frequencyOptions = LogisticsService.getFrequencyOptions(), \n monthList = LogisticsService.getMonthOptions(), colors = angular.copy(ChartConstants.colors);\n\n var freightCostList = angular.copy(vm.freightCostList) || [];\n\n freightCostList.pop();\n\n if (angular.isUndefined(vm.params)) {\n vm.params = {\n Year: new Date().getFullYear(),\n Project: $translate.instant('logistics.project.productive'),\n Frequency: frequencyOptions[0].Value\n }\n }\n\n var frequency = frequencyOptions.find(function (item) {\n return item.Value === vm.params.Frequency;\n });\n\n function generateLabels(freightCostList) {\n return Array.from(new Set(freightCostList.map(mapToLabel)));\n }\n\n function mapToLabel(item) {\n var frequencyTitle = $translate.instant(frequency.Label);\n if ( frequency.Value == 1 ) {\n return $translate.instant(monthList[item.Frequency - 1].Label);\n }\n return frequencyTitle + \" \" + item.Frequency;\n }\n\n function sortByChargeableWeight(a, b) {\n if (a.ChargeableWeight > b.ChargeableWeight) {\n return 1;\n }\n if (a.ChargeableWeight < b.ChargeableWeight) {\n return -1;\n }\n return 0;\n }\n\n Array.prototype.groupBy = function (prop) {\n return this.reduce(function (groups, item) {\n var val = item[prop];\n groups[val] = groups[val] || [];\n groups[val].push(item);\n return groups;\n }, {});\n };\n\n var colorIndex = 0;\n function getColor() {\n if (colorIndex >= colors.length) {\n colorIndex = 0;\n }\n return colors[colorIndex++];\n }\n\n function init() {\n var labels = generateLabels(freightCostList);\n\n var grossData = freightCostList.filter(function(item){\n return item.Frequency > 0;\n }).map(function (item) {\n return (item.ChargeableWeight / 1000).toFixed(2);\n });\n\n var grossDataItems = [];\n\n freightCostList.forEach(function (item) {\n grossDataItems.push((item.ChargeableWeight / 1000).toFixed(2));\n });\n\n var valuesToTick = angular.copy(grossData);\n valuesToTick.pop();\n \n var datasets = [];\n \n freightCostList.filter(function(item){\n return angular.isDefined(item.Records);\n }).forEach(function(frequencyFreightCost){\n\n var records = frequencyFreightCost.Records;\n records.sort(sortByChargeableWeight);\n\n records.forEach(function(freightCost){\n var label = freightCost.GroupByField, chargeableWeight = (freightCost.ChargeableWeight / 1000).toFixed(2);\n var dataset = datasets.find(function(d){\n return d.label === label;\n });\n\n var position = labels.indexOf(mapToLabel(freightCost));\n\n if(angular.isUndefined(dataset)){\n var color = getColor();\n var bgColors = Array(labels.length).fill(color);\n var borderColors = Array(labels.length).fill(\"rgba(220,220,220,0)\");\n \n dataset = {\n type: 'bar',\n label: label,\n yAxisID: \"y-axis-1\",\n backgroundColor: bgColors,\n borderColor: borderColors,\n data: Array(labels.length).fill(0)\n };\n datasets.push(dataset);\n }\n\n dataset.data[position] = chargeableWeight;\n });\n\n });\n\n var barChartData = {\n labels: labels,\n datasets: datasets\n };\n\n new Chart ($document[0].getElementById(\"grossWeightChart\"), {\n type: 'bar',\n data: barChartData,\n options: {\n elements: { line: { tension: 0 } },\n title: {\n display: true,\n text: $translate.instant('logistics.kpi.graphics.gross.chargeable.title').replace(\"#Year\", vm.params.Year),\n fontSize: 18,\n padding: 50,\n fontStyle: 'bold'\n },\n tooltips: {\n mode: 'label'\n },\n responsive: true,\n scales: {\n xAxes: [{\n stacked: true,\n gridLines: {\n display: false,\n drawBorder: false\n }\n }],\n yAxes: [{\n stacked: true,\n position: \"left\",\n id: \"y-axis-1\",\n ticks: {\n beginAtZero: true,\n callback: function (label) {\n if (label === 0) {\n return \"-\";\n }\n return label.toFixed(2);\n }\n },\n gridLines: {\n display: true,\n drawBorder: false\n },\n scaleLabel: {\n display: true,\n labelString: $translate.instant('logistics.kpi.graphics.landed.cost.thousands')\n }\n }]\n },\n legend: {\n position: 'bottom',\n display: false\n }\n }\n });\n\n }\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('FobChartController', FobChartController)\n .directive('fobChart', FobChartDirective);\n\n function FobChartDirective() {\n var directive = {\n bindToController: true,\n controller: \"FobChartController\",\n controllerAs: 'ctrl',\n transclude: true,\n replace: true,\n restrict: 'E',\n templateUrl: \"app/logistics/kpi/graphics/directive/fob-chart.html\",\n scope: {\n freightCostList: '=',\n params: '='\n }\n };\n return directive;\n\n }\n /* @ngInject */\n function FobChartController($document, $translate, LogisticsService, ChartConstants) {\n var vm = this, frequencyOptions = LogisticsService.getFrequencyOptions(), \n monthList = LogisticsService.getMonthOptions(), colors = angular.copy(ChartConstants.colors);\n\n var freightCostList = angular.copy(vm.freightCostList) || [];\n\n freightCostList.pop();\n\n if (angular.isUndefined(vm.params)) {\n vm.params = {\n Year: new Date().getFullYear(),\n Project: $translate.instant('logistics.project.productive'),\n Frequency: frequencyOptions[0].Value\n }\n }\n\n var frequency = frequencyOptions.find(function (item) {\n return item.Value === vm.params.Frequency;\n });\n\n function generateLabels(freightCostList) {\n return Array.from(new Set(freightCostList.map(mapToLabel)));\n }\n\n function mapToLabel(item) {\n var frequencyTitle = $translate.instant(frequency.Label);\n if ( frequency.Value == 1 ) {\n return $translate.instant(monthList[item.Frequency - 1].Label);\n }\n return frequencyTitle + \" \" + item.Frequency;\n }\n\n function sortByFOBUSD(a, b) {\n if (a.FOBUSD > b.FOBUSD) {\n return 1;\n }\n if (a.FOBUSD < b.FOBUSD) {\n return -1;\n }\n return 0;\n }\n\n Array.prototype.groupBy = function (prop) {\n return this.reduce(function (groups, item) {\n var val = item[prop];\n groups[val] = groups[val] || [];\n groups[val].push(item);\n return groups;\n }, {});\n };\n\n function getColorByModal(type) {\n if ( type == \"AIR\" ) {\n return \"rgb(193, 82, 75)\";\n } else if ( type == \"SEA/AIR\" ) {\n return \"rgb(80, 129, 188)\";\n } else if ( type == \"SEA\" ) {\n return \"rgb(156, 186, 86)\";\n } else {\n return colors[0];\n }\n }\n\n function init() {\n\n var labels = generateLabels(freightCostList);\n\n var fobData = freightCostList.filter(function(item){\n return item.Frequency > 0;\n }).map(function (item) {\n return (item.FOBUSD / 1000).toFixed(2);\n });\n\n var fobDataItems = [];\n\n freightCostList.forEach(function (item) {\n fobDataItems.push((item.FOBUSD / 1000).toFixed(2));\n });\n\n var valuesToTick = angular.copy(fobData);\n valuesToTick.pop();\n \n var datasets = [];\n \n freightCostList.filter(function(item){\n return angular.isDefined(item.Records);\n }).forEach(function(frequencyFreightCost){\n\n var records = frequencyFreightCost.Records;\n records.sort(sortByFOBUSD);\n\n records.forEach(function(freightCost){\n var label = freightCost.GroupByField, fobUSD = (freightCost.FOBUSD / 1000).toFixed(2);\n var dataset = datasets.find(function(d){\n return d.label === label;\n });\n\n var position = labels.indexOf(mapToLabel(freightCost));\n\n if(angular.isUndefined(dataset)){\n var color = getColorByModal(label);\n var bgColors = Array(labels.length).fill(color);\n var borderColors = Array(labels.length).fill(\"rgba(220,220,220,0)\");\n \n dataset = {\n type: 'bar',\n label: label,\n yAxisID: \"y-axis-1\",\n backgroundColor: bgColors,\n borderColor: borderColors,\n data: Array(labels.length).fill(0)\n };\n datasets.push(dataset);\n }\n\n dataset.data[position] = fobUSD;\n });\n\n });\n\n var barChartData = {\n labels: labels,\n datasets: datasets\n };\n\n new Chart ($document[0].getElementById(\"fobChart\"), {\n type: 'bar',\n data: barChartData,\n options: {\n elements: { line: { tension: 0 } },\n title: {\n display: true,\n text: $translate.instant('logistics.kpi.graphics.total.fob.title').replace(\"#Year\", vm.params.Year),\n fontSize: 18,\n padding: 50,\n fontStyle: 'bold'\n },\n tooltips: {\n mode: 'label',\n callbacks: {\n footer: function (tooltipItems) {\n var index = tooltipItems[0].index;\n return 'Total FOB USD: ' + fobDataItems[index];\n }\n },\n footerFontStyle: 'normal'\n },\n responsive: true,\n scales: {\n xAxes: [{\n stacked: true,\n gridLines: {\n display: false,\n drawBorder: false\n }\n }],\n yAxes: [{\n stacked: true,\n position: \"left\",\n id: \"y-axis-1\",\n ticks: {\n beginAtZero: true,\n callback: function (label) {\n if (label === 0) {\n return \"-\";\n }\n return label.toFixed(2);\n }\n },\n gridLines: {\n display: true,\n drawBorder: false\n },\n scaleLabel: {\n display: true,\n labelString: $translate.instant('logistics.kpi.graphics.landed.cost.thousands')\n }\n }]\n },\n legend: {\n position: 'bottom',\n display: true\n }\n }\n });\n\n }\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('ChargeableWeightChartController', ChargeableWeightChartController)\n .directive('chargeableWeightChart', ChargeableWeightChartDirective);\n\n function ChargeableWeightChartDirective() {\n var directive = {\n bindToController: true,\n controller: \"ChargeableWeightChartController\",\n controllerAs: 'ctrl',\n transclude: true,\n replace: true,\n restrict: 'E',\n templateUrl: \"app/logistics/kpi/graphics/directive/chargeable-weight-chart.html\",\n scope: {\n freightCostList: '=',\n params: '='\n }\n };\n return directive;\n\n }\n /* @ngInject */\n function ChargeableWeightChartController($document, $translate, LogisticsService, ChartConstants) {\n var vm = this, frequencyOptions = LogisticsService.getFrequencyOptions(), colors = angular.copy(ChartConstants.colors), monthList = LogisticsService.getMonthOptions();\n\n var freightCostList = angular.copy(vm.freightCostList) || [];\n\n freightCostList.pop();\n\n if (angular.isUndefined(vm.params)) {\n vm.params = {\n Year: new Date().getFullYear(),\n Project: $translate.instant('logistics.project.productive'),\n Frequency: frequencyOptions[0].Value\n }\n }\n\n var frequency = frequencyOptions.find(function (item) {\n return item.Value === vm.params.Frequency;\n });\n\n function generateLabels(freightCostList) {\n return Array.from(new Set(freightCostList.map(mapToLabel)));\n }\n\n function mapToLabel(item) {\n var frequencyTitle = $translate.instant(frequency.Label);\n if ( frequency.Value == 1 ) {\n return $translate.instant(monthList[item.Frequency - 1].Label);\n }\n return frequencyTitle + \" \" + item.Frequency;\n }\n\n function sortByChargeableWeight(a, b) {\n if (a.ChargeableWeight > b.ChargeableWeight) {\n return 1;\n }\n if (a.ChargeableWeight < b.ChargeableWeight) {\n return -1;\n }\n return 0;\n }\n\n Array.prototype.groupBy = function (prop) {\n return this.reduce(function (groups, item) {\n var val = item[prop];\n groups[val] = groups[val] || [];\n groups[val].push(item);\n return groups;\n }, {});\n };\n\n function getColorByModal(type) {\n if ( type == \"AIR\" ) {\n return \"rgb(193, 82, 75)\";\n } else if ( type == \"SEA/AIR\" ) {\n return \"rgb(80, 129, 188)\";\n } else if ( type == \"SEA\" ) {\n return \"rgb(156, 186, 86)\";\n } else {\n return colors[0];\n }\n }\n\n function init() {\n Chart.defaults.global.elements.line.fill = false;\n\n var labels = generateLabels(freightCostList);\n\n var chargeableWeightData = freightCostList.filter(function(item){\n return item.Frequency > 0;\n }).map(function (item) {\n return (item.ChargeableWeight / 1000).toFixed(2);\n });\n\n var chargeableWeightDataItems = [];\n\n freightCostList.forEach(function (item) {\n chargeableWeightDataItems.push((item.ChargeableWeight / 1000).toFixed(2));\n });\n\n var valuesToTick = angular.copy(chargeableWeightData);\n valuesToTick.pop();\n\n var datasets = [];\n \n freightCostList.filter(function(item){\n return angular.isDefined(item.Records);\n }).forEach(function(frequencyFreightCost){\n\n var records = frequencyFreightCost.Records;\n records.sort(sortByChargeableWeight);\n\n records.forEach(function(freightCost){\n var label = freightCost.GroupByField, chargeableWeight = (freightCost.ChargeableWeight / 1000).toFixed(2);\n var dataset = datasets.find(function(d){\n return d.label === label;\n });\n\n var position = labels.indexOf(mapToLabel(freightCost));\n\n if(angular.isUndefined(dataset)){\n var color = getColorByModal(label);\n var bgColors = Array(labels.length).fill(color);\n var borderColors = Array(labels.length).fill(\"rgba(220,220,220,0)\");\n \n dataset = {\n type: 'bar',\n label: label,\n yAxisID: \"y-axis-1\",\n backgroundColor: bgColors,\n borderColor: borderColors,\n data: Array(labels.length).fill(0)\n };\n datasets.push(dataset);\n }\n\n dataset.data[position] = chargeableWeight;\n });\n\n });\n\n var barChartData = {\n labels: labels,\n datasets: datasets\n };\n\n new Chart ($document[0].getElementById(\"chargeableWeightChart\"), {\n type: 'bar',\n data: barChartData,\n options: {\n elements: { line: { tension: 0 } },\n title: {\n display: true,\n text: $translate.instant('logistics.kpi.graphics.total.chargeable.title').replace(\"#Year\", vm.params.Year),\n fontSize: 18,\n padding: 50,\n fontStyle: 'bold'\n },\n tooltips: {\n mode: 'label',\n callbacks: {\n footer: function (tooltipItems) {\n var index = tooltipItems[0].index;\n return 'Total Chargeable Weight: ' + chargeableWeightDataItems[index];\n }\n },\n footerFontStyle: 'normal'\n },\n responsive: true,\n scales: {\n xAxes: [{\n stacked: true,\n gridLines: {\n display: false,\n drawBorder: false\n }\n }],\n yAxes: [{\n stacked: true,\n position: \"left\",\n id: \"y-axis-1\",\n ticks: {\n beginAtZero: true,\n callback: function (label) {\n if (label === 0) {\n return \"-\";\n }\n return label.toFixed(2);\n }\n },\n gridLines: {\n display: true,\n drawBorder: false\n },\n scaleLabel: {\n display: true,\n labelString: $translate.instant('logistics.kpi.graphics.landed.cost.thousands')\n }\n }]\n },\n legend: {\n position: 'bottom',\n display: true\n }\n }\n });\n\n }\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('ChannelPerformanceChartController', ChannelPerformanceChartController)\n .directive('channelPerformanceChart', ChannelPerformanceChartDirective);\n\n function ChannelPerformanceChartDirective() {\n var directive = {\n bindToController: true,\n controller: \"ChannelPerformanceChartController\",\n controllerAs: 'ctrl',\n transclude: true,\n replace: true,\n restrict: 'E',\n templateUrl: \"app/logistics/kpi/graphics/directive/channel-performance-chart.html\",\n scope: {\n freightCostList: '=?',\n params: '=?'\n }\n };\n return directive;\n\n }\n /* @ngInject */\n function ChannelPerformanceChartController($document, $translate, LogisticsService, ChartConstants) {\n var vm = this, frequencyOptions = LogisticsService.getFrequencyOptions(), monthList = LogisticsService.getMonthOptions(), colors = angular.copy(ChartConstants.colors);\n\n if (angular.isUndefined(vm.freightCostList)) {\n vm.freightCostList = [];\n }\n\n if (angular.isUndefined(vm.params)) {\n vm.params = {\n Year: new Date().getFullYear(),\n Project: $translate.instant('logistics.project.productive'),\n Frequency: frequencyOptions[0].Value\n }\n }\n\n var frequency = frequencyOptions.find(function (item) {\n return item.Value === vm.params.Frequency;\n });\n\n function init() {\n vm.xLabel = [];\n vm.series = [];\n vm.colors = [];\n vm.channelData = [];\n vm.channelOptions = {\n elements: { line: { \n tension: 0, \n fill: false, \n borderWidth: 4 \n }, \n point: { radius: 7 } \n },\n scales: {\n yAxes: [{\n\n stacked: false,\n ticks: {\n beginAtZero: true,\n fontSize: 16\n },\n gridLines: {\n display: true,\n drawBorder: false\n }\n }],\n xAxes: [{\n stacked: false,\n gridLines: {\n display: false,\n drawBorder: false\n }\n }]\n },\n title: {\n display: true,\n text: 'Title',\n padding: 50,\n fontSize: 18\n },\n backgroundColor: [],\n tooltips: {\n callbacks: {\n label: function (tooltipItem, data) {\n //get the concerned dataset\n var dataset = data.datasets[tooltipItem.datasetIndex];\n //get the current items value\n var percentage = dataset.data[tooltipItem.index];\n\n return percentage;\n }\n }\n },\n legend: {\n position: 'bottom',\n display: true\n }\n };\n fillFreightCostList();\n }\n\n Array.prototype.groupBy = function (prop) {\n return this.reduce(function (groups, item) {\n var val = item[prop];\n groups[val] = groups[val] || [];\n groups[val].push(item);\n return groups;\n }, {});\n };\n\n function getColorByChannel(channel) {\n if (channel == 'GREEN' || channel == 'green' || channel == 'Green') {\n return '#3CB371';\n } else if (channel == 'YELLOW' || channel == 'yellow' || channel == 'Yellow') {\n return '#ffff00';\n } else if (channel == 'RED' || channel == 'red' || channel == 'Red') {\n return '#990033';\n } else {\n return colors[0];\n }\n }\n\n function generateLabels(freightCostList) {\n\n var list = freightCostList.sort(sortByFrequency);\n\n return Array.from(new Set(list.map(mapToLabel)));\n }\n\n function mapToLabel(item) {\n var frequencyTitle = $translate.instant(frequency.Label);\n if ( frequency.Value == 1 ) {\n return $translate.instant(monthList[item.Frequency - 1].Label);\n }\n return frequencyTitle + \" \" + item.Frequency;\n }\n\n function fillFreightCostList() {\n if (vm.freightCostList.length > 0) {\n var datasets = [],\n labels = generateLabels(vm.freightCostList);\n var groupedByChannel = vm.freightCostList.groupBy('Channel');\n var channelTotal = Array(labels.length).fill(0);\n for (var key in groupedByChannel) {\n var dataset = datasets.find(function(d){\n return d.label === key;\n });\n var channelData = Array(labels.length).fill(null),\n channelFreight = groupedByChannel[key];\n channelFreight.forEach(function (channel) {\n var search = mapToLabel(channel), index = labels.indexOf(search);\n channelData[index] = channel['TotalFrequency'];\n channelTotal[index] = channelTotal[index] + channelData[index];\n \n if(angular.isUndefined(dataset)){\n var color = getColorByChannel(key);\n var bgColors = Array(labels.length).fill(color);\n var borderColors = Array(labels.length).fill(\"rgba(220,220,220,0)\");\n \n dataset = {\n type: 'bar',\n label: key,\n yAxisID: \"y-axis-1\",\n backgroundColor: bgColors,\n borderColor: borderColors,\n data: Array(labels.length).fill(0)\n };\n datasets.push(dataset);\n }\n \n dataset.data[index] = channelData[index];\n });\n }\n\n for( var i=0; i b.Frequency) {\n return 1;\n }\n if (a.Frequency < b.Frequency) {\n return -1;\n }\n return 0;\n }\n\n function getTitleTranslate(title) {\n var titleTranslated = $translate.instant(title);\n if (titleTranslated.indexOf(\"#Year\") >= 0) {\n return titleTranslated.replace(\"#Year\", (vm.params.Year))\n }\n return titleTranslated;\n }\n\n init();\n }\n})();\n/*eslint no-undef: 0*/\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('CargoRatioChartController', CargoRatioChartController)\n .directive('cargoRatioChart', CargoRatioChartDirective);\n\n function CargoRatioChartDirective() {\n var directive = {\n bindToController: true,\n controller: \"CargoRatioChartController\",\n controllerAs: 'ctrl',\n transclude: true,\n replace: true,\n restrict: 'E',\n templateUrl: \"app/logistics/kpi/graphics/directive/cargo-ratio-chart.html\",\n scope: {\n freightCostList: '=',\n params: '='\n }\n };\n return directive;\n\n }\n /* @ngInject */\n function CargoRatioChartController($document, $translate, LogisticsService, ChartConstants) {\n\n var vm = this, frequencyOptions = LogisticsService.getFrequencyOptions(), \n colors = angular.copy(ChartConstants.colors), colorIndex = 0,\n monthList = LogisticsService.getMonthOptions(),\n frequency = frequencyOptions.find(function (item) {\n return item.Value === vm.params.Frequency;\n });\n\n var freightCostList = angular.copy(vm.freightCostList) || [];\n\n freightCostList.pop();\n\n vm.params = vm.params || {\n Year: new Date().getFullYear(),\n Project: $translate.instant('logistics.project.productive'),\n Frequency: frequencyOptions[0].Value\n }\n\n function generateLabels(freightCostList) {\n return Array.from(new Set(freightCostList.map(mapToLabel)));\n }\n\n function mapToLabel(item) {\n var frequencyTitle = $translate.instant(frequency.Label);\n if ( frequency.Value == 1 ) {\n return $translate.instant(monthList[item.Frequency - 1].Label);\n }\n return frequencyTitle + \" \" + item.Frequency;\n }\n\n function sortByChargeableWeight(a, b) {\n if (a.ChargeableWeight > b.ChargeableWeight) {\n return 1;\n }\n if (a.ChargeableWeight < b.ChargeableWeight) {\n return -1;\n }\n return 0;\n }\n\n function getColor() {\n if (colorIndex >= colors.length) {\n colorIndex = 0;\n }\n return colors[colorIndex++];\n }\n\n function getColorByModal(type) {\n if ( type == \"AIR\" ) {\n return \"rgb(193, 82, 75)\";\n } else if ( type == \"SEA/AIR\" ) {\n return \"rgb(80, 129, 188)\";\n } else if ( type == \"SEA\" ) {\n return \"rgb(156, 186, 86)\";\n } else {\n return getColor();\n }\n }\n\n function newDataSet(label, datasets, labels) {\n var colorTypeModal = getColorByModal(label);\n var bgColors = Array(labels.length).fill(colorTypeModal);\n var borderColors = Array(labels.length).fill(\"rgba(220,220,220,0)\");\n\n var dataset = {\n type: 'bar',\n label: label,\n yAxisID: \"y-axis-0\",\n backgroundColor: bgColors,\n borderColor: borderColors,\n data: Array(labels.length).fill(0)\n };\n\n datasets.push(dataset);\n\n return dataset;\n }\n\n function init() {\n\n Chart.defaults.global.elements.line.fill = false;\n\n var labels = generateLabels(freightCostList), datasets = [];\n\n freightCostList.filter(function (item) {\n return angular.isDefined(item.Records);\n }).forEach(function (frequencyFreightCost) {\n\n var records = frequencyFreightCost.Records;\n records.sort(sortByChargeableWeight);\n\n records.forEach(function (freightCost) {\n var label = freightCost.GroupByField;\n var dataset = datasets.find(function (d) {\n return d.label === label;\n });\n\n var totalChargeableWeightTranMode = frequencyFreightCost.ChargeableWeight > 0 ? ((freightCost.ChargeableWeight / frequencyFreightCost.ChargeableWeight) * 100).toFixed(2) : 0;\n\n dataset = dataset || newDataSet(label, datasets, labels);\n\n var pos = freightCostList.findIndex(function (item) {\n return item.Frequency === frequencyFreightCost.Frequency;\n });\n\n dataset.data[pos] = totalChargeableWeightTranMode;\n\n });\n\n });\n\n new Chart($document[0].getElementById(\"cargoRatioChart\"), {\n type: 'bar',\n data: {\n labels: labels,\n datasets: datasets\n },\n options: {\n elements: { line: { tension: 0 } },\n title: {\n display: true,\n text: $translate.instant('logistics.kpi.graphics.cargo.ratio.title').replace(\"#Year\", vm.params.Year),\n fontSize: 18,\n padding: 50,\n fontStyle: 'bold'\n },\n tooltips: {\n mode: 'label',\n footerFontStyle: 'normal'\n },\n responsive: true,\n scales: {\n xAxes: [{\n stacked: true,\n gridLines: {\n display: false,\n drawBorder: false\n }\n }],\n yAxes: [{\n stacked: true,\n position: \"left\",\n id: \"y-axis-0\",\n ticks: {\n beginAtZero: true,\n max: 100,\n stepSize: 20,\n callback: function (label) {\n return label.toFixed(2) + '%';\n }\n },\n gridLines: {\n display: true,\n drawBorder: false\n }\n }]\n },\n legend: {\n position: 'bottom',\n display: true\n }\n }\n });\n\n }\n\n init();\n }\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *\n */\n function LessonLearnFormController($scope, ToastUtil, $translate) {\n\n var vm = this;\n var scope = $scope;\n\n vm.lessonLearn = {\n Lesson: ''\n };\n\n function initView() {\n var model = $scope.modelDialog;\n if (model != undefined) {\n vm.lessonLearn = angular.copy(model);\n }\n }\n\n vm.close = function () {\n scope.$dismiss('cancel');\n };\n\n vm.save = function () {\n if (vm.validateFields()) {\n $scope.parentDialog.addLessonLearn(vm.lessonLearn);\n scope.$close('ok');\n }\n };\n\n vm.validateFields = function () {\n if (vm.lessonLearn.Lesson == '') {\n ToastUtil.showToastMessage($translate.instant(\"validation.lesson\"), ToastUtil.ToastType.WARN);\n return false;\n }\n return true;\n }\n\n initView();\n }\n\n function LessonLearnFormDirective() {\n return {\n restrict: 'E',\n replace: true,\n templateUrl: \"app/faca/problem/root-cause/corrective-action/lesson-learn-form.html\",\n controllerAs: 'ctrl',\n controller: 'LessonLearnFormController'\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('LessonLearnFormController', LessonLearnFormController)\n .directive('lessonLearnForm', LessonLearnFormDirective);\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *\n */\n function ControlPlanFormController($scope, $log, $translate, moment) {\n\n var vm = this;\n var scope = $scope;\n\n vm.controlPlanStatus = [{\n id: 0,\n name: 'option.onGoing',\n styleClass: 'status-ongoing'\n },\n {\n id: 1,\n name: 'option.late',\n styleClass: 'status-late'\n },\n {\n id: 2,\n name: 'option.closed',\n styleClass: 'status-closed'\n }\n ];\n\n vm.plan = {};\n\n function initView() {\n var model = $scope.modelDialog;\n if (model != undefined) {\n vm.plan = angular.copy(model);\n }\n }\n\n vm.close = function () {\n scope.$dismiss('cancel');\n };\n\n vm.save = function () {\n if (vm.plan.Index == undefined) {\n vm.plan.Index = new Date() + 1;\n }\n vm.plan.DueDate = moment(vm.plan.DueDateTemp).format(\"DD/MM/YYYY\");\n $scope.parentDialog.addControlPlan(vm.plan);\n scope.$close('ok');\n };\n\n vm.isActionInvalid = function () {\n var isInValid = true;\n if (vm.plan.Action != undefined && vm.plan.Action != \"\") {\n isInValid = false;\n }\n return isInValid;\n };\n\n vm.isDueDateInvalid = function () {\n var isInValid = true;\n if (vm.plan.DueDateTemp != undefined && vm.plan.DueDateTemp != \"\") {\n isInValid = false;\n }\n return isInValid;\n };\n\n vm.isStatusInvalid = function () {\n var isInValid = true;\n if (vm.plan.Status != undefined) {\n isInValid = false;\n }\n return isInValid;\n };\n\n initView();\n }\n\n function ControlPlanFormDirective() {\n return {\n restrict: 'E',\n replace: true,\n templateUrl: \"app/faca/problem/root-cause/corrective-action/control-plan-form.html\",\n controllerAs: 'ctrl',\n controller: 'ControlPlanFormController'\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('ControlPlanFormController', ControlPlanFormController)\n .directive('controlPlanForm', ControlPlanFormDirective);\n})();\n\n(function () {\n\n 'use strict';\n function TechnicalVisitPendingController($state, $filter, $window, moment, VisitService, DashboardService) {\n\n var vm = this;\n\n var USER = {\n Name: $window.localStorage.aliasAqms,\n Id: parseInt($window.localStorage.userID)\n };\n\n vm.technicalVisitList = [];\n\n vm.goToTechnicalVisit = function (id) {\n $state.go('visit-edit', {\n Id: id\n });\n }\n\n function init() {\n DashboardService.listTechnicalVisitPending()\n .then(function (response) {\n var visits = response, atual = moment(moment().format('YYYY-MM-DD'));\n if (visits && visits.length > 0) {\n visits = $filter('filter')(visits, filterByUser());\n for (var i = 0, len = visits.length; i < len; i++) {\n var visit = visits[i];\n if (moment(visit.Date).diff(atual, 'days') <= 7) {\n visit.expired = true;\n }\n }\n vm.technicalVisitList = visits;\n }\n });\n }\n\n init();\n\n function filterByUser() {\n return function (visit) {\n return visit.ApproverName === USER.Name || visit.CreatedById === USER.Id;\n };\n }\n }\n\n function TechnicalVisitPendingDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'TechnicalVisitPendingController',\n transclude: true,\n templateUrl: \"app/dashboard/directive/sourcing/technical-visit/technical-visit-pending.html\",\n bindToController: false,\n scope: {\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('TechnicalVisitPendingController', TechnicalVisitPendingController)\n .directive('technicalVisitPending', TechnicalVisitPendingDirective)\n})();\n\n(function () {\n\n 'use strict';\n function MilestonePendingController($state, $filter, $window, moment, MilestoneService, DashboardService) {\n\n var vm = this;\n\n var USER = {\n Name: $window.localStorage.aliasAqms,\n Id: parseInt($window.localStorage.userID)\n };\n\n vm.milestoneList = [];\n\n var milestonesOrder = [MilestoneService.Milestones.SA01, MilestoneService.Milestones.SA02, MilestoneService.Milestones.SA03];\n\n vm.goToMilestone = function (id) {\n $state.go('milestone-edit', {\n Id: id\n });\n }\n\n vm.getDateMilestone = function (milestone) {\n if ( milestone.Deadline != null ) {\n return milestone.Deadline;\n }\n return milestone.CreatedDate;\n }\n\n function init() {\n DashboardService.listMilestonePending()\n .then(function (response) {\n var milestones = response, atual = moment(moment().format('YYYY-MM-DD'));\n if (milestones && milestones.length > 0) {\n milestones = $filter('filter')(milestones, filterByUser());\n for (var i = 0, len = milestones.length; i < len; i++) {\n var milestone = milestones[i];\n var milestoneDescription = milestonesOrder[milestone.Milestone - 1];\n\n if (moment(milestone.Deadline).diff(atual, 'days') <= 7) {\n milestone.expired = true;\n }\n\n if (milestoneDescription) {\n milestone.MilestoneDescription = milestoneDescription.Title;\n }\n }\n vm.milestoneList = milestones;\n }\n\n });\n }\n\n init();\n\n function filterByUser() {\n return function (milestone) {\n return milestone.ApprovedById === USER.Id || milestone.CreatedById === USER.Id;\n };\n }\n }\n\n function MilestonePendingDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'MilestonePendingController',\n transclude: true,\n templateUrl: \"app/dashboard/directive/sourcing/milestone/milestone-pending.html\",\n bindToController: true,\n scope: {\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('MilestonePendingController', MilestonePendingController)\n .directive('milestonePending', MilestonePendingDirective)\n})();\n\n(function () {\n\n 'use strict';\n function ComponentPendingReviewController($state, $filter, $window, moment, ComponentDevelopmentService, DashboardService) {\n\n var vm = this;\n\n var USER = {\n Name: $window.localStorage.aliasAqms,\n Id: parseInt($window.localStorage.userID)\n };\n\n vm.componentList = [];\n\n vm.goToComponentDevelopment = function (id) {\n $state.go('component-development-edit', {\n Id: id\n });\n }\n\n function init() {\n DashboardService.listComponentPendingReview()\n .then(function (response) {\n vm.componentList = response.resultList;\n });\n }\n\n init();\n\n }\n\n function ComponentPendingReviewDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'ComponentPendingReviewController',\n transclude: true,\n templateUrl: \"app/dashboard/directive/sourcing/component-development/component-pending-review.html\",\n bindToController: true,\n scope: {\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('ComponentPendingReviewController', ComponentPendingReviewController)\n .directive('componentPendingReview', ComponentPendingReviewDirective)\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(VendorNotificationTranslate);\n\n /** @ngInject */\n function VendorNotificationTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'vendor.notification.label.notification': 'Notification',\n 'vendor.notification.label.role': 'Role',\n 'vendor.notification.label.status': 'Status',\n 'vendor.notification.label.waiting': 'Waiting',\n 'vendor.notification.label.approved': 'Approved',\n 'vendor.notification.label.rejected': 'Rejected',\n 'vendor.notification.label.processing.date': 'Processing date',\n 'vendor.notification.label.notified.date': 'Notification date'\n });\n\n $translateProvider.translations('pt', {\n 'vendor.notification.label.notification': 'Notificação',\n 'vendor.notification.label.role': 'Função',\n 'vendor.notification.label.status': 'Situação',\n 'vendor.notification.label.waiting': 'Aguardando',\n 'vendor.notification.label.approved': 'Aprovado',\n 'vendor.notification.label.rejected': 'Rejeitado',\n 'vendor.notification.label.processing.date': 'Data de processamento',\n 'vendor.notification.label.notified.date': 'Data de Notificação'\n });\n }\n})();\n\n(function () {\n 'use strict';\n\n function VendorNotificationController($scope, ToastUtil, $translate, $log, $document, InputListEmailService, AuthService) {\n\n var MAX_EMAIL_LENGHT = 70;\n var vm = this;\n\n vm.newItem = '';\n\n vm.copyList = [];\n\n vm.listEmail = undefined;\n\n if (vm.isDisabled == undefined) {\n vm.isDisabled = false;\n }\n\n vm.insertNewEmail = function (form) {\n if (form.$valid) {\n\n if ( vm.copyList.length == 0 ) {\n vm.copyList = angular.copy(vm.list);\n }\n \n var userEmail = vm.getEmailObj();\n if ( userEmail.Email.length > MAX_EMAIL_LENGHT ){\n ToastUtil.showToastMessage($translate.instant('input.email.directive.toolongemail'),\n ToastUtil.ToastType.WARN);\n return;\n }\n userEmail.Business = {\n Id: AuthService.getBusinessId()\n };\n\n vm.saveEmail(userEmail);\n }\n };\n\n vm.saveEmail = function (userEmail) {\n\n if (userEmail.Email != \"\" && userEmail.Email != undefined) {\n if (!vm.containsEmail(userEmail)) {\n userEmail.Business = {\n Id: AuthService.getBusinessId()\n };\n\n userEmail.IsGroup = false;\n InputListEmailService.save(userEmail, -1).then(function (response) {\n var email = angular.copy(response);\n\n var VendorNotification = {\n ExternalEmail: angular.copy(email),\n ProcessingDate: null\n };\n\n vm.list.push(VendorNotification);\n\n if (!containsInListEmail(email)) {\n vm.listEmail.push(email);\n }\n\n }).catch(function (error) {\n $log.log(error);\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n }\n vm.list.push(angular.copy(userEmail));\n });\n\n vm.model = \"\";\n } else { \n angular.forEach(vm.list, function(item){\n if ( item.ExternalEmail.Email == userEmail.Email){\n item.ProcessingDate = null;\n } \n });\n vm.model = \"\";\n }\n }\n };\n\n vm.getEmailObj = function () {\n var obj = {};\n if (vm.model.Email == undefined) {\n var externalEmailBusinessDTO = {\n BusinessId: AuthService.getBusinessId()\n }\n\n obj = {\n Email: angular.copy(vm.model),\n Id: 0\n }\n externalEmailBusinessDTO.Type = 0;\n\n obj.ExternalEmailBusiness = [];\n obj.ExternalEmailBusiness.push(externalEmailBusinessDTO);\n } else {\n obj = vm.model;\n }\n obj.CsActive = 1;\n return obj;\n };\n\n InputListEmailService.listAll().then(function (response) {\n vm.listEmail = [];\n angular.forEach(response, function (email) {\n if (!containsInListEmail(email)) {\n vm.listEmail.push(email);\n }\n });\n }).catch(function (error) {\n $log.log(error);\n //No need an action.\n });\n\n vm.delete = function (item) {\n var index = vm.list.indexOf(item);\n if (index > -1) {\n vm.list.splice(index, 1);\n }\n }\n\n vm.containsEmail = function (email) {\n var contains = false;\n if (email) {\n angular.forEach(vm.list, function (mail) {\n if (mail.ExternalEmail.Email == email.Email) {\n contains = true;\n }\n });\n }\n return contains;\n };\n\n function containsInListEmail(email) {\n var contains = false;\n if (email) {\n angular.forEach(vm.listEmail, function (mail) {\n if (mail.Email == email.Email) {\n contains = true;\n }\n });\n }\n return contains;\n }\n\n function init() {\n }\n\n init();\n }\n\n function VendorNotificationDirective() {\n return {\n bindToController: true,\n restrict: 'E',\n scope: {\n list: '=',\n titleLabel: '@',\n disableInput: '=',\n disableDelete: '=',\n isRequired: '=',\n changeFn: '&?',\n statusDocument: '=?',\n targetApproved: '=?'\n },\n replace: true,\n templateUrl: \"app/sourcing/vendor/vendor_notification/vendor-notification.html\",\n controllerAs: 'ctrl',\n controller: 'VendorNotificationController'\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('VendorNotificationController', VendorNotificationController)\n .directive('vendorNotification', VendorNotificationDirective);\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *Controller to Autocomplete Vendor directive.\n */\n function SearchVendorCodeSapFantasyNameController($translate, $log, $scope, $interval, ToastUtil, DefaultService, ListModel) {\n var vm = this;\n\n vm.itemClicked = function () {\n if (vm.selectedEvt != null) {\n $interval(callSelectedEvt, 50, 1);\n }\n }\n\n function callSelectedEvt() {\n if (angular.isDefined(vm.selectedEvt)) {\n vm.selectedEvt();\n }\n }\n\n vm.blurEvent = function () {\n $interval(onBlur, 100, 1);\n };\n\n function onBlur() {\n var itemFound = false;\n if (typeof vm.vendorObj == \"string\") {\n angular.forEach(vm.vendors, function (item) {\n if (item.Title == vm.vendorObj) {\n vm.vendorObj = item;\n vm.itemClicked();\n itemFound = true;\n }\n });\n\n if (!itemFound) {\n vm.vendorObj = \"\";\n }\n }\n }\n\n function watchList() {\n $scope.$watch(\"ctrl.vendorListObj\", function () {\n $interval(initListViewModel, 250, 1);\n containsInListVendors();\n });\n }\n\n /**\n * Watch partId when isFilterPart.\n */\n function watchPartId() {\n if (vm.isTrue(vm.isFilterPart)) {\n $scope.$watch(\"ctrl.partId\", function () {\n $interval(loadVendors, 250, 1);\n });\n }\n }\n\n vm.addVendor = function () {\n if (vm.isDisabled === false && vm.vendorObj != \"\") {\n if (!isValidVendor()) {\n ToastUtil.showToastMessage($translate.instant(\"auto.complete.vendor.invalid.msg\"), ToastUtil.ToastType.WARN);\n } else if (selectedVendorsContainsVendor()) {\n ToastUtil.showToastMessage($translate.instant(\"auto.complete.vendor.duplicated.msg\"), ToastUtil.ToastType.WARN);\n } else {\n vm.listModelValues.items.push(angular.copy(vm.vendorObj));\n vm.vendorListObj = vm.listModelValues.items;\n vm.vendorObj = \"\";\n validateFormInputList();\n }\n }\n }\n\n vm.isTrue = function (value) {\n return (value === true || value == \"true\");\n }\n\n function initListViewModel() {\n var nameStyle = \"width: 30%;\";\n\n var properties = [\n ListModel.getProperties(\"label.name\", \"Title\", false, null, nameStyle, null, null)\n ];\n //Build menu\n var actionMenuItems = [\n ListModel.getActionMenuItem(ListModel.ActionMenuEnum.DELETE, \"Id\", \"Title\", deleteVendorFromList)\n ];\n var actionMenu = ListModel.getActionMenu(actionMenuItems, ListModel.ActionMenuTypeEnum.INLINE);\n vm.listModelValues = ListModel.getListModel(properties, vm.vendorListObj, actionMenu);\n validateFormInputList();\n\n }\n\n\n function validateFormInputList() {\n if (vm.isTrue(vm.isListComponent) && vm.formVendor != null && vm.nameToValidate != null) {\n if (vm.vendorListObj.length == 0) {\n vm.formVendor[vm.nameToValidate].$setValidity('validQtdMin', false, vm.formVendor[vm.nameToValidate]);\n } else {\n vm.formVendor[vm.nameToValidate].$setValidity('validQtdMin', true, vm.formVendor[vm.nameToValidate]);\n }\n }\n }\n\n function deleteVendorFromList(id) {\n\n angular.forEach(vm.listModelValues.items, function (item, key) {\n if (item.Id == id) {\n vm.listModelValues.items.splice(key, 1);\n validateFormInputList();\n }\n });\n\n }\n\n function isValidVendor() {\n var isValid = false;\n if (angular.isString(vm.vendorObj)) {\n angular.forEach(vm.vendorListObj, function (item) {\n if (item.Title == vm.vendorObj) {\n isValid = true;\n }\n });\n } else {\n isValid = true;\n }\n return isValid;\n }\n\n function selectedVendorsContainsVendor() {\n var contains = false;\n angular.forEach(vm.listModelValues.items, function (item) {\n if (item.Id == vm.vendorObj.Id) {\n contains = true;\n }\n });\n return contains;\n }\n\n /**\n * If isFilterPart must load vendors only if partId is fileld.\n */\n function loadVendors() {\n if (vm.isTrue(vm.isFilterPart)) {\n if (angular.isDefined(vm.partId) && vm.partId > 0) {\n executeLoadVendors();\n } else {\n vm.vendors = [];\n vm.vendorObj = \"\";\n }\n\n } else {\n executeLoadVendors();\n }\n }\n\n function executeLoadVendors() {\n var filterVendor = {\n CsActive: vm.filterOnlyActive == true || vm.filterOnlyActive == \"true\" ? 1 : \"\",\n GenericFilterID: vm.partId\n }\n setExtraFilters(filterVendor);\n DefaultService.autoCompleteVendor(filterVendor)\n .then(onLoadVendorResponse)\n .catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"auto.complete.vendor.directive.load.error\"), ToastUtil.ToastType.WARN);\n });\n }\n\n function onLoadVendorResponse(response) {\n vm.vendors = angular.copy(response.resultList.filter(function (item) {\n return item.FantasyName !== null && item.FantasyName.trim().length > 0;\n }));\n vm.vendors.forEach(function(vendor){\n vendor.Title = vendor.CodeSAP === null ? vendor.FantasyName : vendor.CodeSAP + ' - ' + vendor.FantasyName;\n });\n if (vm.vendorObj) {\n containsInListVendors();\n }\n if (!vm.vendorObj && vm.vendors.length == 1) {\n vm.vendorObj = vm.vendors[0];\n vm.itemClicked();\n }\n\n }\n\n function setExtraFilters(filterVendor) {\n if (angular.isDefined(vm.extraFilters) && vm.extraFilters != null) {\n for (var key in vm.extraFilters) {\n filterVendor[key] = vm.extraFilters[key];\n }\n }\n }\n\n function init() {\n vm.vendors = [];\n watchList();\n watchPartId();\n\n if (!vm.vendorObj) {\n vm.vendorObj = \"\";\n }\n\n if (angular.isUndefined(vm.isDisabled)) {\n vm.isDisabled = false;\n }\n\n if (angular.isUndefined(vm.isRequired)) {\n vm.isRequired = false;\n }\n\n if (angular.isUndefined(vm.filterOnlyActive)) {\n vm.filterOnlyActive = true;\n }\n\n if (angular.isUndefined(vm.isListComponent)) {\n vm.isListComponent = false;\n }\n\n if (angular.isUndefined(vm.formVendor)) {\n vm.formVendor = null;\n }\n if (angular.isUndefined(vm.nameToValidate)) {\n vm.nameToValidate = null;\n }\n\n if (angular.isUndefined(vm.isFilterPart)) {\n vm.isFilterPart = false;\n }\n\n loadVendors();\n initListViewModel();\n }\n\n function containsInListVendors() {\n var contains = false;\n for (var i = 0; i < vm.vendors.length; i++) {\n if (vm.vendors[i].Id == vm.vendorObj.Id) {\n contains = true;\n break;\n }\n }\n if (!contains) {\n vm.vendors.unshift(vm.vendorObj);\n }\n }\n\n init();\n }\n\n function SearchVendorCodeSapFantasyNameDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'SearchVendorCodeSapFantasyNameController',\n transclude: true,\n templateUrl: \"app/sourcing/vendor/auto-complete/search-vendor-codesap-fantasy-name.html\",\n bindToController: true,\n scope: {\n vendorObj: '=?',\n formVendor: '=?',\n nameToValidate: '@?',\n isDisabled: '=?',\n isRequired: '=?',\n selectedEvt: '&?',\n filterOnlyActive: '@?',\n isListComponent: '@?',\n vendorListObj: '=?',\n isFilterPart: '@?',\n partId: '=?',\n extraFilters: '=?',\n dataset: '=?'\n\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('SearchVendorCodeSapFantasyNameController', SearchVendorCodeSapFantasyNameController)\n .directive('searchVendorCodeSapFantasyName', SearchVendorCodeSapFantasyNameDirective);\n})();\n\n(function() {\n\n 'use strict';\n\n /**\n * \n * \n */\n function TemporaryApprovalController($scope) {\n var vm = this;\n var scope = $scope;\n\n vm.Justification = null;\n\n vm.Deadline = new Date();\n\n vm.close = function () {\n scope.$dismiss('cancel');\n };\n\n vm.save = function () {\n if ($scope.temporaryApprovalForm.$valid) {\n $scope.parentDialog.temporaryApprove(vm.Justification, vm.Deadline);\n scope.$close('ok');\n }\n };\n }\n\n function TemporaryApprovalDirective() {\n return {\n restrict: 'E',\n replace: true,\n templateUrl: 'app/sourcing/milestone/temporary-approval/temporary-approval.html',\n controllerAs: 'ctrl',\n controller: 'TemporaryApprovalController'\n };\n }\n\n angular.module('aqmsFrontend')\n\t\t.controller('TemporaryApprovalController', TemporaryApprovalController)\n\t\t.directive('temporaryApproval', TemporaryApprovalDirective);\n})();\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .factory('ComponentStepService', ComponentStepService);\n\n var BASE = '/componentDevelopment/';\n\n function ComponentStepService($injector, $q, ConfigurationService) {\n var Status = {\n CLOSED: {\n Id: 0,\n Title: 'component.development.step.status.closed'\n },\n IN_PROGRESS: {\n Id: 1,\n Title: 'component.development.step.status.inprogress'\n },\n APPROVED: {\n Id: 2,\n Title: 'component.development.step.status.approved'\n },\n REJECT: {\n Id: 3,\n Title: 'component.development.step.status.reject'\n }\n };\n var Types = {\n IQC: {\n Id: 1,\n Title: 'component.approval.iqc.title',\n Name: 'component.tab.iqc',\n Key: 'IQC'\n },\n TRAIL_RUN: {\n Id: 2,\n Title: 'component.approval.trail.run.title',\n Name: 'component.tab.trail.run',\n Key: 'TrailRun'\n },\n PILOT: {\n Id: 3,\n Title: 'component.approval.pilot.title',\n Name: 'component.tab.pilot',\n Key: 'PilotRun'\n },\n TEST_PLAN: {\n Id: 4,\n Title: 'component.approval.test.plan.title',\n Name: 'component.tab.test.plan',\n Key: 'TestPlan'\n }\n };\n var Tabs = {\n ICQ: {\n enabled: false, closed: false, rounds: 0, id: Types.IQC.Id\n },\n TrailRun: {\n enabled: false, closed: false, rounds: 0, id: Types.TRAIL_RUN.Id\n },\n PilotRun: {\n enabled: false, closed: false, rounds: 0, id: Types.PILOT.Id\n },\n TestPlan: {\n enabled: false, closed: false, rounds: 0, id: Types.TEST_PLAN.Id\n }\n };\n return {\n Status: Status,\n Types: Types,\n Tabs: Tabs,\n \n search: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + \"list\", {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getById: function (componentId, id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n var url = ConfigurationService.getServiceHost() + BASE + 'byId/' + componentId + \"/step/byId/\" + id + \"/\";\n\n $http.get(url, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n save: function (componentId, step) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + BASE + componentId + \"/step/\", step, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n delete: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + BASE + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n update: function (componentId, id, patch) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n var url = ConfigurationService.getServiceHost() + BASE + 'byId/' + componentId + \"/step/\" + id + \"/\";\n\n $http.patch(url, patch)\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n listStepsByComponentAndType: function (componentId, type) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n var url = ConfigurationService.getServiceHost() + BASE + 'byId/' + componentId + '/steps/byType/' + type;\n\n $http.get(url, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getStatusById: function (id) {\n var found = null;\n Object.keys(Status).forEach(function (key) {\n var status = Status[key];\n if (found == null && status.Id === id) {\n found = status;\n }\n });\n return found;\n },\n\n getTypeById: function (id) {\n var found = null;\n Object.keys(Types).forEach(function (key) {\n var type = Types[key];\n if (found == null && type.Id === id) {\n found = type;\n }\n });\n return found;\n },\n\n getTabByTypeId: function (id) {\n var found = null;\n Object.keys(Tabs).forEach(function (key) {\n var type = Tabs[key];\n if (found == null && type.id === id) {\n found = type;\n }\n });\n return found;\n },\n\n resetTabs: function() {\n Tabs.ICQ.enabled = false, Tabs.ICQ.closed= false, Tabs.ICQ.rounds= 0;\n Tabs.TrailRun.enabled = false, Tabs.TrailRun.closed= false, Tabs.TrailRun.rounds= 0;\n Tabs.PilotRun.enabled = false, Tabs.PilotRun.closed= false, Tabs.PilotRun.rounds= 0;\n Tabs.TestPlan.enabled = false, Tabs.TestPlan.closed= false, Tabs.TestPlan.rounds= 0;\n }\n }\n\n }\n})();\n\n/*eslint no-undef: 0*/\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('ComponentStepController', ComponentStepController);\n\n function ComponentStepController($state, $scope, $log, $document, ComponentStepService, moment, JsonPatchUtil, ToastUtil, $translate, ComponentDevelopmentService,\n $window, $filter, $sce, SourcingService, DialogControllerTemplate) {\n\n var vm = this,\n titleLabel = $state.params.titleLabel,\n stepStatus = ComponentStepService.Status.IN_PROGRESS.Id,\n _componentApprovalPatch = null,\n _componentSamplePatch = null,\n USER = {Id: parseInt($window.localStorage.userID), Name: $window.localStorage.aliasAqms},\n componentType = $state.params.componentStepType,\n componentStepTypeObject = ComponentStepService.getTypeById(componentType),\n NOW = new Date();\n\n vm.editorConfig = {\n sanitize: false,\n toolbar: [{\n name: 'basicStyling',\n items: ['bold', 'italic', 'underline', 'strikethrough', 'subscript', 'superscript', '-', 'leftAlign', 'centerAlign', 'rightAlign', 'blockJustify', '-']\n },\n {\n name: 'paragraph',\n items: ['orderedList', 'unorderedList', 'outdent', 'indent', '-']\n },\n {\n name: 'doers',\n items: ['removeFormatting', 'undo', 'redo', '-']\n },\n {\n name: 'colors',\n items: ['fontColor', 'backgroundColor', '-']\n },\n {\n name: 'styling',\n items: ['font', 'size']\n }\n ]\n };\n\n vm.approvalRequired = {\n Date: false,\n User: false,\n Participants: false,\n TrackingNumber: false,\n Quantity: false,\n Deadline: false,\n Engineer: false\n };\n\n vm.profile = {\n CanAdd: false,\n CanEdit: false,\n CanDelete: false,\n CanView: false,\n CanApprove: false,\n CanExport: false,\n CanConsult: false\n };\n\n vm.Component = {\n Id: parseInt($state.params.Id),\n ChangeNotice: null,\n Status: null\n };\n\n vm.Tabs = ComponentStepService.Tabs;\n vm.StepsInComponent = null;\n\n vm.ComponentStepType = parseInt(componentType);\n\n vm.titleLabel = titleLabel;\n\n vm.Steps = [];\n\n vm.dateLabel = componentStepTypeObject === ComponentStepService.Types.TEST_PLAN ? 'component.approval.testplan.sampleDateLabel.label' : 'component.approval.date.label';\n\n if (componentStepTypeObject === ComponentStepService.Types.TEST_PLAN) {\n vm.dateLabel = 'component.approval.testplan.sampleDateLabel.label';\n vm.sampleDateLabel = 'component.approval.testplan.senddate.label'\n vm.sampleTitleLabel = 'component.sample.testplan.title';\n } else {\n vm.dateLabel = 'component.approval.date.label';\n vm.sampleDateLabel = 'component.sample.date.label'\n vm.sampleTitleLabel = 'component.sample.title';\n }\n\n if (vm.Component.Id && vm.Component.Id > 0) {\n vm.ComponentPath = \"edit/\" + vm.Component.Id;\n } else {\n vm.ComponentPath = \"create\";\n }\n\n Array.prototype.groupBy = function (prop) {\n return this.reduce(function (groups, item) {\n var val = item[prop];\n groups[val] = groups[val] || [];\n groups[val].push(item);\n return groups;\n }, {});\n };\n\n vm.approve = function () {\n stepStatus = ComponentStepService.Status.APPROVED.Id;\n saveOrClosed();\n };\n\n vm.close = function () {\n stepStatus = ComponentStepService.Status.CLOSED.Id;\n saveOrClosed();\n };\n\n vm.saveOrUpdate = function () {\n var step = vm.Steps.find(filterOpened);\n stepStatus = angular.copy(step.Status);\n saveOrClosed();\n };\n\n vm.reject = function () {\n stepStatus = ComponentStepService.Status.REJECT.Id;\n saveOrClosed();\n };\n\n vm.onStepClicked = function (stepClicked) {\n vm.Steps.filter(function (step) {\n return step.Round !== stepClicked.Round;\n }).forEach(function (step) {\n step.isOpen = false;\n });\n if (stepClicked.Id && !stepClicked.loaded) {\n getStepDetail(stepClicked);\n }\n };\n\n vm.onConfirmSave = function (ChangeNotice) {\n\n if (angular.isDefined(ChangeNotice) && ChangeNotice != null && ChangeNotice != \"\") {\n vm.Component.ChangeNotice = ChangeNotice;\n }\n\n var step = vm.Steps.find(filterOpened);\n if (step) {\n var stepCopy = angular.copy(step);\n stepCopy.Status = stepStatus;\n if (stepCopy.Id > 0) {\n update(stepCopy, stepStatus);\n } else {\n setStatus(stepCopy);\n if ( stepCopy.Status === ComponentStepService.Status.CLOSED.Id) {\n stepCopy.Remark = ChangeNotice;\n if ( !stepCopy.ComponentSample.Id ) {\n stepCopy.ComponentSample = {\n CreatedBy: USER,\n CreatedDate: NOW,\n UpdatedBy: USER,\n UpdatedDate: NOW\n };\n }\n }\n save(stepCopy);\n }\n }\n }\n\n vm.disabled = function () {\n\n if (vm.Steps.length === 10) {\n var allReject = true;\n vm.Steps.forEach(function (item) {\n if (item.Status === ComponentStepService.Status.IN_PROGRESS.Id || item.Status === ComponentStepService.Status.APPROVED.Id) {\n allReject = false;\n return;\n }\n });\n\n if (allReject) {\n return true;\n }\n } else if(vm.Steps.length > 0) {\n var step = vm.Steps.find(filterOpened);\n if ( step === undefined) {\n step = vm.Steps[vm.Steps.length - 1]\n }\n if(step.Status === ComponentStepService.Status.CLOSED.Id || step.Status === ComponentStepService.Status.REJECT.Id)\n return true;\n\n }\n\n if (vm.profile.CanApprove) {\n return false;\n }\n\n if (vm.profile.CanConsult && !vm.profile.CanEdit) {\n return true;\n }\n\n if (vm.Component.Status === ComponentDevelopmentService.Status.IN_PROGRESS.Id || vm.Component.Status === ComponentDevelopmentService.Status.ON_HOLD.Id) {\n return false;\n } else {\n return true;\n }\n };\n\n vm.getHTML = function(text){\n return $sce.trustAsHtml(text);\n };\n\n function saveOrClosed() {\n var step = vm.Steps.find(filterOpened);\n if (stepStatus === ComponentStepService.Status.IN_PROGRESS.Id) {\n vm.approvalRequired.Date = false;\n vm.approvalRequired.User = false;\n vm.approvalRequired.TrackingNumber = false;\n vm.approvalRequired.Quantity = false;\n vm.approvalRequired.Deadline = false;\n vm.approvalRequired.Engineer = false;\n\n if (step.Type === ComponentStepService.Types.TEST_PLAN.Id) {\n if (step.ComponentApproval.Quantity === \"\" || step.ComponentApproval.Quantity === null)\n delete step.ComponentApproval.Quantity;\n }\n\n if ($scope.componentStepForm.$valid) {\n showConfirmDialog(false);\n }\n } else if (stepStatus === ComponentStepService.Status.CLOSED.Id) {\n step.Status = stepStatus;\n setStatus(step);\n showConfirmDialog(false);\n } else {\n if ($scope.componentStepForm.$valid && validApproval(step) && isParticipantsListValid(step) && validateReceivedDateAndApprovalDate(step)) {\n showConfirmDialog(false);\n }\n }\n }\n\n function validApproval(step) {\n if (stepStatus === ComponentStepService.Status.IN_PROGRESS.Id || stepStatus === ComponentStepService.Status.CLOSED.Id) {\n return true;\n } else {\n if (step.Type === ComponentStepService.Types.IQC.Id || step.Type === ComponentStepService.Types.TRAIL_RUN.Id || step.Type === ComponentStepService.Types.PILOT.Id) {\n if (!step.ComponentApproval.Date || step.ComponentApproval.User === undefined || step.ComponentApproval.User === null || !step.ComponentApproval.User.Id) {\n\n if (!step.ComponentApproval.Date && (step.ComponentApproval.User === undefined || step.ComponentApproval.User === null || !step.ComponentApproval.User.Id)) {\n vm.approvalRequired.Date = true;\n vm.approvalRequired.User = true;\n } else if (!step.ComponentApproval.Date) {\n vm.approvalRequired.Date = true;\n vm.approvalRequired.User = false;\n } else if (step.ComponentApproval.User === undefined || step.ComponentApproval.User === null || !step.ComponentApproval.User.Id) {\n vm.approvalRequired.Date = false;\n vm.approvalRequired.User = true;\n }\n\n $document[0].querySelector('#approvalDate').focus();\n\n ToastUtil.showToastMessage($translate.instant(\"component.step.required.fields\") + '' + $translate.instant(vm.approvalTitle), ToastUtil.ToastType.WARN);\n return false;\n } else {\n vm.approvalRequired.Date = false;\n vm.approvalRequired.User = false;\n return true;\n }\n } else if (step.Type === ComponentStepService.Types.TEST_PLAN.Id) {\n if (!step.ComponentApproval.Date || !step.ComponentApproval.TrackingNumber || !step.ComponentApproval.Quantity || !step.ComponentApproval.Deadline || !step.ComponentApproval.Engineer) {\n vm.approvalRequired.Date = step.ComponentApproval.Date ? false : true;\n vm.approvalRequired.TrackingNumber = step.ComponentApproval.TrackingNumber ? false : true;\n vm.approvalRequired.Quantity = step.ComponentApproval.Quantity ? false : true;\n vm.approvalRequired.Deadline = step.ComponentApproval.Deadline ? false : true;\n vm.approvalRequired.Engineer = step.ComponentApproval.Engineer ? false : true;\n\n $document[0].querySelector('#approvalDate').focus();\n\n ToastUtil.showToastMessage($translate.instant(\"component.step.required.fields\") + '' + $translate.instant(vm.approvalTitle), ToastUtil.ToastType.WARN);\n return false;\n } else {\n vm.approvalRequired.Date = false;\n vm.approvalRequired.TrackingNumber = false;\n vm.approvalRequired.Quantity = false;\n vm.approvalRequired.Deadline = false;\n vm.approvalRequired.Engineer = false;\n return true;\n }\n }\n }\n }\n\n function isParticipantsListValid(step) {\n var participantsListValid = false;\n\n if (step) {\n participantsListValid = true;\n if (step.Type !== ComponentStepService.Types.IQC.Id\n && step.Type !== ComponentStepService.Types.TEST_PLAN.Id) {\n participantsListValid = step.ComponentApproval && step.ComponentApproval.Participants && step.ComponentApproval.Participants.length > 0;\n }\n }\n if (!participantsListValid) {\n vm.approvalRequired.Participants = true;\n $document[0].querySelector('#approvalDate').focus();\n ToastUtil.showToastMessage($translate.instant(\"component.step.required.fields\") + '' + $translate.instant(vm.approvalTitle), ToastUtil.ToastType.WARN);\n } else {\n vm.approvalRequired.Participants = false;\n }\n return participantsListValid;\n }\n\n function validateReceivedDateAndApprovalDate(step) {\n var receivedDate = null, approvalDate = null;\n if ( step.Status !== ComponentStepService.Status.CLOSED.Id ) {\n if (step.Type !== ComponentStepService.Types.TEST_PLAN.Id) {\n receivedDate = moment(step.ComponentSample.Date), approvalDate = moment(step.ComponentApproval.Date);\n } else {\n receivedDate = moment(step.ComponentSample.Date), approvalDate = moment(step.ComponentApproval.Date);\n }\n if (moment(receivedDate).isAfter(approvalDate)) {\n if (step.Type !== ComponentStepService.Types.TEST_PLAN.Id)\n ToastUtil.showToastMessage($translate.instant(\"component.step.dates.invalid\"), ToastUtil.ToastType.WARN);\n else\n ToastUtil.showToastMessage($translate.instant(\"component.step.dates.test_plan.invalid\"), ToastUtil.ToastType.WARN);\n\n $document[0].querySelector('#approvalDate').focus();\n return false;\n }\n }\n return true;\n }\n\n function save(copy) {\n if (copy.Status !== ComponentStepService.Status.CLOSED.Id) {\n formatParticipantList(copy);\n formatListEmail(copy);\n }\n\n ComponentStepService.save(vm.Component.Id, copy)\n .then(function () {\n onSaveSuccess(copy);\n })\n .catch(onSaveError);\n }\n\n function formatListEmail(copy) {\n if (copy.StepNotifications.length > 0) {\n copy.StepNotifications.forEach(function (item) {\n copy.ComponentSample.Notifications.forEach(function (notification, index) {\n if (notification.ExternalEmail.Email == item.ExternalEmail.Email) {\n copy.ComponentSample.Notifications.splice(index, 1);\n }\n });\n });\n copy.StepNotifications.forEach(function (item) {\n copy.ComponentSample.Notifications.push(item);\n });\n }\n }\n\n function formatParticipantList(copy) {\n if (copy.ComponentApproval && copy.ComponentApproval.Participants) {\n copy.ComponentApproval.Participants = copy.ComponentApproval.Participants.map(function (item) {\n return {\n User: item,\n ComponentApproval: {Id: copy.ComponentApproval.Id}\n };\n });\n }\n }\n\n function update(step) {\n var patch = [];\n formatListEmail(step);\n generateComponentSamplePatch(step.ComponentSample, patch);\n generateComponentApprovalPatch(step.ComponentApproval, patch);\n\n var original = vm.Steps.find(function (item) {\n return angular.isDefined(item.Id) && item.Id === step.Id;\n });\n\n if (angular.isDefined(original) && original.Status !== stepStatus) {\n patch.push({\"op\": \"replace\", \"path\": \"/Status\", \"value\": stepStatus});\n }\n\n if (step.Remark) {\n patch.push({\"op\": \"replace\", \"path\": \"/Remark\", \"value\": step.Remark});\n }\n\n ComponentStepService.update(vm.Component.Id, step.Id, patch)\n .then(function () {\n onUpdateSuccess(original, stepStatus);\n })\n .catch(onSaveError);\n }\n\n function onUpdateSuccess(original, stepStatus) {\n _componentSamplePatch = null;\n _componentApprovalPatch = null;\n\n if (angular.isDefined(original)) {\n original.Status = stepStatus;\n formatStep(original);\n }\n updateComponentInformation();\n ToastUtil.showToastMessage($translate.instant(\"component.step.update.success\"), ToastUtil.ToastType.SUCCESS);\n }\n\n function generateComponentSamplePatch(componentSample, patch) {\n var componentSamplePatch = JsonPatchUtil.generate(componentSample, vm.ComponentSampleCopy, vm.ComponentSampleObserver, _componentSamplePatch);\n _componentSamplePatch = angular.copy(componentSamplePatch);\n\n handleFieldDate(componentSamplePatch, \"Date\", vm.ComponentSampleCopy);\n\n componentSamplePatch.filter(function (p) {\n return p.op === \"add\" && p.path.startsWith(\"/Attachments\");\n }).forEach(function (item) {\n item.value.ComponentSample = {Id: componentSample.Id};\n });\n\n componentSamplePatch.filter(function (p) {\n return p.op === \"add\" && p.path.startsWith(\"/Notifications\");\n }).forEach(function (item) {\n item.value.ComponentSample = {Id: componentSample.Id};\n });\n\n componentSamplePatch.forEach(function (item) {\n item.path = \"/ComponentSample\" + item.path;\n patch.push(item);\n });\n }\n\n function generateComponentApprovalPatch(componentApproval, patch) {\n var componentApprovalPatch = JsonPatchUtil.generate(componentApproval, vm.ComponentApprovalCopy, vm.ComponentApprovalObserver, _componentApprovalPatch);\n _componentApprovalPatch = angular.copy(componentApprovalPatch);\n\n handleFieldDate(componentApprovalPatch, \"Date\", vm.ComponentApprovalCopy);\n if (componentStepTypeObject === ComponentStepService.Types.TEST_PLAN) {\n handleFieldDate(componentApprovalPatch, \"Deadline\", vm.ComponentApprovalCopy);\n }\n\n componentApprovalPatch.filter(function (p) {\n return p.op === \"add\" && p.path.startsWith(\"/Attachments\");\n }).forEach(function (item) {\n item.value.ComponentApproval = {Id: componentApproval.Id};\n });\n\n componentApprovalPatch.filter(function (p) {\n return p.op === \"add\" && p.path.startsWith(\"/Participants\");\n }).forEach(function (item) {\n var participant = {\n User: item.value,\n ComponentApproval: {Id: componentApproval.Id}\n }\n item.value = participant;\n });\n\n componentApprovalPatch = componentApprovalPatch.reduce(function (newPatch, item) {\n if (!item.path.startsWith('/User')) {\n newPatch.push(item);\n }\n return newPatch;\n }, []);\n\n componentApprovalPatch.forEach(function (item) {\n item.path = \"/ComponentApproval\" + item.path;\n patch.push(item);\n });\n\n if (vm.ComponentApprovalCopy && componentStepTypeObject !== ComponentStepService.Types.TEST_PLAN && componentApproval.User.Id !== vm.ComponentApprovalCopy.User.Id) {\n patch.push({\n \"op\": \"replace\",\n \"path\": \"/ComponentApproval/User\",\n \"value\": {Id: componentApproval.User.Id, Name: componentApproval.User.Name}\n })\n }\n\n }\n\n function handleFieldDate(patch, field, modelCopy) {\n if (patch.length > 0) {\n var filtered = patch.filter(function (p) {\n return p.op == \"replace\" && p.path === \"/\" + field;\n });\n if (filtered && filtered.length > 0) {\n var currentPatch = filtered[0];\n if (angular.equals(new Date(currentPatch.value), modelCopy[field])) {\n patch.splice(patch.indexOf(currentPatch), 1);\n }\n }\n }\n }\n\n function onSaveError(error) {\n $log.log(error);\n }\n\n function onSaveSuccess(step) {\n updateComponentInformation();\n if ( step.Status === ComponentStepService.Status.CLOSED.Id ) {\n ToastUtil.showToastMessage($translate.instant(\"component.step.closed.success\"), ToastUtil.ToastType.SUCCESS);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"component.step.save.success\"), ToastUtil.ToastType.SUCCESS);\n }\n }\n\n function updateComponentInformation() {\n if (vm.Component.ChangeNotice === null || vm.Component.ChangeNotice === \"\") {\n init();\n } else {\n var patch = [\n {\"op\": \"replace\", \"path\": \"/ChangeNotice\", \"value\": vm.Component.ChangeNotice}\n ];\n\n ComponentDevelopmentService.update(vm.Component.Id, patch).then(function () {\n init();\n }).catch(onSaveError);\n }\n }\n\n function filterOpened(step) {\n return step.isOpen === true;\n }\n\n function tabsRule() {\n ComponentStepService.resetTabs();\n\n if (vm.Component.Id && vm.Component.Id > 0) {\n var groupByType = vm.StepsInComponent.groupBy('Type');\n\n for (var key in groupByType) {\n var tab = ComponentStepService.getTabByTypeId(groupByType[key][0].Type);\n if (tab !== null) {\n tab.rounds = groupByType[key][0].Rounds;\n tab.closed = groupByType[key][0].Closed;\n }\n }\n\n if (vm.Component.Status === ComponentDevelopmentService.Status.IN_PROGRESS.Id || vm.Component.Status === ComponentDevelopmentService.Status.ON_HOLD.Id) {\n vm.Tabs.ICQ.enabled = true;\n\n if (vm.Tabs.ICQ.rounds > 0 && vm.Tabs.ICQ.closed) {\n vm.Tabs.TrailRun.enabled = true;\n vm.Tabs.PilotRun.enabled = true;\n vm.Tabs.TestPlan.enabled = true;\n }\n\n } else {\n if (vm.Tabs.ICQ.rounds > 0) {\n vm.Tabs.ICQ.enabled = true;\n }\n if (vm.Tabs.TrailRun.rounds > 0) {\n vm.Tabs.TrailRun.enabled = true;\n }\n if (vm.Tabs.PilotRun.rounds > 0) {\n vm.Tabs.PilotRun.enabled = true;\n }\n if (vm.Tabs.TestPlan.rounds > 0) {\n vm.Tabs.TestPlan.enabled = true;\n }\n }\n }\n }\n\n function initViewModel(steps) {\n\n ComponentDevelopmentService.getStepsCounts(vm.Component.Id)\n .then(function (response) {\n vm.StepsInComponent = response;\n tabsRule();\n });\n\n steps.forEach(function (step) {\n vm.Steps.push(step);\n });\n\n if (vm.Steps) {\n if (vm.Steps.length > 0) {\n vm.Steps.forEach(function (step) {\n step.ComponentSample = {Date: step.Date};\n step.ComponentApproval = {Date: step.DateApproval};\n step.Component = {Status: vm.Component.Status};\n formatStep(step);\n step.isOpen = false;\n });\n var lastStep = vm.Steps[vm.Steps.length - 1];\n handleStepStatus(lastStep);\n } else {\n initNewComponentStep();\n }\n }\n $scope.componentStepForm.$setPristine();\n }\n\n function handleStepStatus(step) {\n var closedOrInprogess = false;\n\n if (step.Status === ComponentStepService.Status.IN_PROGRESS.Id || step.Status === ComponentStepService.Status.APPROVED.Id || step.Status === ComponentStepService.Status.CLOSED.Id)\n closedOrInprogess = true;\n\n if (!closedOrInprogess && (vm.Component.Status === ComponentDevelopmentService.Status.IN_PROGRESS.Id || vm.Component.Status === ComponentDevelopmentService.Status.ON_HOLD.Id) && vm.Steps.length < 10) {\n initNewComponentStep();\n } else {\n getStepDetail(step);\n }\n }\n\n function getStepDetail(step) {\n ComponentStepService.getById(vm.Component.Id, step.Id)\n .then(function (detail) {\n setViewModel(detail, step);\n })\n .catch(function (error) {\n $log.log(error);\n });\n }\n\n function setViewModel(detail, step) {\n formatStep(detail);\n step.StepNotifications = [];\n step.ComponentSample = detail.ComponentSample;\n step.ComponentApproval = detail.ComponentApproval;\n step.isOpen = true;\n step.loaded = true;\n step.Type = detail.Type;\n stepStatus = step.Status;\n\n if (step.ComponentSample) {\n step.ComponentSample.Date = formatDateToViewModel(step.ComponentSample.Date);\n step.ComponentSample.CreatedDate = formatDateToViewModel(step.ComponentSample.CreatedDate);\n step.ComponentSample.UpdatedDate = formatDateToViewModel(step.ComponentSample.UpdatedDate);\n if (step.ComponentSample.Notifications === null) {\n step.ComponentSample.Notifications = [];\n }\n }\n\n if (step.ComponentApproval) {\n step.ComponentApproval.Date = formatDateToViewModel(step.ComponentApproval.Date);\n if (step.ComponentApproval.Participants && step.ComponentApproval.Participants != null) {\n step.ComponentApproval.Participants = step.ComponentApproval.Participants.map(function (item) {\n return item.User;\n });\n } else {\n step.ComponentApproval.Participants = [];\n }\n if (componentStepTypeObject === ComponentStepService.Types.TEST_PLAN) {\n step.ComponentApproval.Deadline = formatDateToViewModel(step.ComponentApproval.Deadline);\n } else {\n step.ComponentApproval.User = mapUser(step.ComponentApproval.User);\n }\n }\n observe(step);\n }\n\n function mapUser(user) {\n if (user === null)\n return {Id: null, Name: null};\n\n return {Id: user.Id, Name: user.Name};\n }\n\n function observe(step) {\n\n if (vm.ComponentSampleObserver && vm.ComponentSampleObserver !== null) {\n vm.Steps.filter(function (item) {\n return item.ComponentSample && vm.ComponentSampleCopy && item.ComponentSample.Id === vm.ComponentSampleCopy.Id\n }).forEach(function (item) {\n jsonpatch.unobserve(item.ComponentSample, vm.ComponentSampleObserver);\n });\n }\n\n if (vm.ComponentApprovalObserver && vm.ComponentApprovalObserver !== null) {\n vm.Steps.filter(function (item) {\n return item.ComponentApproval && vm.ComponentApprovalCopy && item.ComponentApproval.Id === vm.ComponentApprovalCopy.Id\n }).forEach(function (item) {\n jsonpatch.unobserve(item.ComponentApproval, vm.ComponentApprovalObserver);\n });\n }\n\n vm.ComponentSampleCopy = null;\n vm.ComponentApprovalCopy = null;\n\n vm.ComponentSampleCopy = angular.copy(step.ComponentSample);\n vm.ComponentApprovalCopy = angular.copy(step.ComponentApproval);\n vm.ComponentSampleObserver = jsonpatch.observe(step.ComponentSample);\n vm.ComponentApprovalObserver = jsonpatch.observe(step.ComponentApproval);\n }\n\n function formatDateToViewModel(date) {\n if (date === null)\n return null;\n\n var momentDate = moment(date, 'YYYY/MM/DD');\n return new Date(momentDate.year(), momentDate.month(), momentDate.date());\n }\n\n function setStatus(step) {\n var status = ComponentStepService.getStatusById(step.Status);\n if (status !== null) {\n step.StatusDescription = status.Title;\n }\n }\n\n function formatStep(step) {\n setStatus(step);\n setDayCount(step);\n }\n\n function setDayCount(step) {\n if (step.ComponentSample.Date === null || step.ComponentSample.Date === \"\") {\n step.DaysCount = 0;\n return;\n }\n\n if (step.ComponentApproval === undefined || step.ComponentApproval === null || step.ComponentApproval.Date === null || step.ComponentApproval.Date === \"\") {\n step.DaysCount = 0;\n return;\n }\n\n step.DaysCount = moment(step.ComponentApproval.Date, 'YYYY/MM/DD').diff(moment(step.ComponentSample.Date, 'YYYY/MM/DD'), 'days');\n\n if (step.DaysCount === 0) {\n step.DaysCount = 1;\n return;\n }\n }\n\n function initNewComponentStep() {\n var step = {\n StepNotifications: [],\n Round: vm.Steps.length + 1,\n Status: ComponentStepService.Status.IN_PROGRESS.Id,\n ComponentSample: {\n CreatedBy: USER,\n CreatedDate: NOW,\n UpdatedBy: USER,\n UpdatedDate: NOW,\n NotificationDescription: null,\n Notifications: [],\n Date: null\n },\n ComponentApproval: {\n Participants: []\n },\n Component: {\n Status: vm.Component.Status\n },\n isOpen: true,\n StatusDescription: ComponentStepService.Status.IN_PROGRESS.Title,\n Type: vm.ComponentStepType\n };\n\n setDayCount(step);\n vm.Steps.push(step);\n }\n\n function showConfirmDialog(isRemarkOptional) {\n var directive = isRemarkOptional ? '' : '';\n var message = 'component.development.remark';\n var title = 'component.step.remark.dialog.title';\n if (stepStatus === ComponentStepService.Status.REJECT.Id && vm.Steps.length === 10) {\n message = 'component.step.reject.last';\n }\n if (stepStatus === ComponentStepService.Status.CLOSED.Id) {\n title = 'component.step.closed.remark';\n }\n DialogControllerTemplate.showWithCloseListener(title, message, directive, vm.onConfirmSave);\n }\n\n function init() {\n vm.Steps = [];\n vm.approvalTitle = componentStepTypeObject.Title;\n\n ComponentDevelopmentService.getById(vm.Component.Id)\n .then(function (response) {\n vm.Component.Status = angular.copy(response.Status);\n SourcingService.loadProfileComponentDevelopmentModules(vm, $scope)\n .then(function () {\n vm.profile = angular.copy(vm.profile);\n\n ComponentStepService.listStepsByComponentAndType(vm.Component.Id, vm.ComponentStepType)\n .then(initViewModel)\n .catch(function (error) {\n $log.log(error);\n var msg = error.data && error.data.Message ? error.data.Message : $filter('translate')('error.contract.search');\n var toastType = ToastUtil.ToastType.WARN;\n if (msg === 'componentstep.type.unavailable') {\n var name = $translate.instant(componentStepTypeObject.Name);\n msg = $translate.instant(msg).replace(\"$1\", name);\n $state.go('component-development-edit', {\n Id: vm.Component.Id\n });\n\n ToastUtil.showToastMessage(msg, toastType);\n } else {\n ToastUtil.showToastMessage($translate.instant(msg), toastType);\n }\n });\n });\n })\n .catch(function () {\n ToastUtil.showToastMessage($translate.instant(\"service.load.error\"), ToastUtil.ToastType.ERROR);\n });\n }\n\n init();\n }\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *\n */\n function TestInspectionTypeController($scope, $document) {\n\n var vm = this;\n\n vm.ortInspectionTemplateType = {\n Id: null,\n TestInspectionType: {},\n SequenceNumber: '',\n OrtInspectionItemTemplates: null,\n CsActive: true\n };\n\n vm.ortInspectionTemplateTypeList = [];\n\n function init() {\n if ($scope.modelDialog != null) {\n vm.ortInspectionTemplateType = $scope.modelDialog;\n vm.oldOrtInspectionTemplateType = angular.copy(vm.ortInspectionTemplateType);\n }\n\n vm.ortInspectionTemplateTypeList = angular.copy($scope.parentDialog.ort.CurrentOrtInspectionTemplate.OrtInspectionTemplateTypes);\n\n $document[0].querySelector('.modal').addEventListener('click', function () {\n vm.close();\n });\n\n $document[0].querySelector('.modal-body').addEventListener('click', function (evt) {\n evt.stopPropagation();\n });\n }\n\n vm.validateDuplicateType = function () {\n var typeAlreadyExist = false;\n angular.forEach(vm.ortInspectionTemplateTypeList, function (type) {\n if ((vm.ortInspectionTemplateType.TestInspectionType && vm.ortInspectionTemplateType.TestInspectionType.Id == type.TestInspectionType.Id)) {\n typeAlreadyExist = true;\n }\n\n });\n return typeAlreadyExist;\n }\n\n vm.close = function () {\n $scope.$dismiss('cancel');\n\n if (vm.ortInspectionTemplateType != undefined && vm.oldOrtInspectionTemplateType != undefined && vm.oldOrtInspectionTemplateType.TestInspectionType != undefined)\n vm.ortInspectionTemplateType.TestInspectionType = vm.oldOrtInspectionTemplateType.TestInspectionType;\n\n vm.oldOrtInspectionTemplateType = undefined;\n };\n\n vm.save = function () {\n vm.ortInspectionTemplateType.IdTemp = new Date().getMilliseconds();\n $scope.parentDialog.addInspectionType(vm.ortInspectionTemplateType);\n $scope.$close('ok');\n vm.oldOrtInspectionTemplateType = undefined;\n };\n\n\n init();\n }\n\n function TestInspectionTypeDirective() {\n return {\n restrict: 'E',\n replace: true,\n templateUrl: 'app/ort/ort-template/modal/test-inspection-type.html',\n controllerAs: 'ctrl',\n controller: 'TestInspectionTypeController'\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('TestInspectionTypeController', TestInspectionTypeController)\n .directive('testInspectionType', TestInspectionTypeDirective);\n})();\n\n(function () {\n\n function TestInspectionSubTypeController($scope, $document) {\n\n var vm = this;\n var scope = $scope;\n var oldObj = undefined;\n\n vm.templateItem = {\n Id: null,\n SequenceNumber: '',\n Description: '',\n OrtInspectionTemplateType: null,\n ParamType: null,\n ValueReference1: null,\n ValueReference2: null,\n UnitMeasurement: null,\n TestInspectionSubType: '',\n TestInspectionRule: ''\n };\n\n vm.parentTestInspectionType = {};\n\n function init() {\n var model = $scope.modelDialog;\n if (model.isEditAction) {\n //Edit Mode\n\n vm.templateItem = model;\n oldObj = angular.copy(vm.templateItem);\n vm.parentTestInspectionType = vm.templateItem.OrtInspectionTemplateType.TestInspectionType;\n } else {\n // New Mode\n vm.parentTestInspectionType = model.TestInspectionType;\n // vm.templateItem.OrtInspectionTemplateType = model;\n }\n\n $document[0].querySelector('.modal').addEventListener('click', function () {\n vm.close();\n });\n\n $document[0].querySelector('.modal-body').addEventListener('click', function (evt) {\n evt.stopPropagation();\n });\n\n $document[0].querySelector('.modal-footer').addEventListener('click', function (evt) {\n evt.stopPropagation();\n });\n\n }\n\n vm.close = function () {\n scope.$dismiss('cancel');\n if (angular.isDefined(oldObj)) {\n undoChanges();\n }\n oldObj = undefined;\n };\n\n function undoChanges() {\n vm.templateItem.Id = oldObj.Id;\n vm.templateItem.Description = oldObj.Description;\n vm.templateItem.OrtInspectionTemplateType = oldObj.OrtInspectionTemplateType;\n vm.templateItem.ParamType = oldObj.ParamType;\n vm.templateItem.ValueReference1 = oldObj.ValueReference1;\n vm.templateItem.ValueReference2 = oldObj.ValueReference2;\n vm.templateItem.UnitMeasurement = oldObj.UnitMeasurement;\n vm.templateItem.TestInspectionSubType = oldObj.TestInspectionSubType;\n vm.templateItem.TestInspectionRule = oldObj.TestInspectionRule;\n vm.templateItem.OrtInspectionTemplateType = oldObj.OrtInspectionTemplateType;\n }\n\n vm.save = function (value) {\n if (canSave() && value) {\n vm.templateItem.OrtInspectionTemplateType = null;\n $scope.parentDialog.addSubTypeItem(vm.templateItem, vm.parentTestInspectionType);\n\n scope.$close('ok');\n oldObj = undefined;\n }\n };\n\n function canSave() {\n var canSave = false;\n if (vm.templateItem.Description != '' && vm.templateItem.ParamType != null\n && vm.templateItem.UnitMeasurement != null && vm.templateItem.TestInspectionSubType != null && vm.templateItem.TestInspectionRule != null) {\n\n if (vm.templateItem.ParamType == 2) {\n if (vm.templateItem.ValueReference1 != null && vm.templateItem.ValueReference2 != null)\n canSave = true;\n } else if (vm.templateItem.ParamType == 4) {\n canSave = true;\n } else if (vm.templateItem.ValueReference1 != null) {\n canSave = true;\n }\n }\n return canSave;\n }\n\n init();\n }\n\n function TestInspectionSubTypeDirective() {\n return {\n restrict: 'E',\n replace: true,\n templateUrl: 'app/ort/ort-template/modal/test-inspection-sub-type.html',\n controllerAs: 'ctrl',\n controller: 'TestInspectionSubTypeController'\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('TestInspectionSubTypeController', TestInspectionSubTypeController)\n .directive('testInspectionSubType', TestInspectionSubTypeDirective);\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(OrtInspectionInspectTranslate);\n\n /** @ngInject */\n function OrtInspectionInspectTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'ort.inspection.inspect.title': 'Inspection',\n 'ort.inspection.inspect.subtype.label': 'Subtype',\n 'ort.inspection.inspect.samples.label': 'Samples',\n 'ort.inspection.inspect.sequence.label': 'Squence',\n 'ort.inspection.inspect.value.label': 'Value',\n 'ort.inspection.inspect.remark.label': 'Remark',\n 'ort.inspection.inspect.select.value.placeholder': 'Select a value',\n 'ort.inspection.inspect.save.success': 'Inspection successfully saved.'\n });\n\n $translateProvider.translations('pt', {\n 'ort.inspection.inspect.title': 'Inspeção',\n 'ort.inspection.inspect.subtype.label': 'Subtipo',\n 'ort.inspection.inspect.samples.label': 'Amostras',\n 'ort.inspection.inspect.sequence.label': 'Sequência',\n 'ort.inspection.inspect.value.label': 'Valor',\n 'ort.inspection.inspect.remark.label': 'Observação',\n 'ort.inspection.inspect.select.value.placeholder': 'Selecione um valor',\n 'ort.inspection.inspect.save.success': 'Inspeção salva com sucesso.'\n });\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('OrtInspectActionController', OrtInspectActionController);\n\n function OrtInspectActionController(OrtInspectionService, ToastUtil, $stateParams, $state, $translate, $log) {\n\n var vm = this;\n vm.groupedResult = {};\n vm.remarkObj = {};\n vm.partAttachments = [];\n\n vm.EParamType = {\n LESSTHAN: 0,\n BIGGERTHAN: 1,\n BETWEEN: 2,\n EQUALTO: 3,\n OKNOK: 4\n };\n\n vm.OrtStatus = {\n WAITINGAPPROVAL: 0,\n APPROVED: 1,\n RESERVATIONS: 2,\n REJECT: 3\n };\n\n vm.okNokList = [{\n Result: 'true',\n Title: 'OK'\n }, {\n Result: 'false',\n Title: 'NOK'\n }]\n\n vm.saveItemTemplate = function () {\n OrtInspectionService.saveInspectionSubtype(vm.groupedResult).then(function () {\n ToastUtil.showToastMessage($translate.instant('ort.inspection.inspect.save.success'), ToastUtil.ToastType.SUCCESS);\n $state.reload();\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n });\n }\n\n vm.goToInspectionEdit = function () {\n $state.go('ort-inspection-edit', {\n Id: angular.copy(inspectionId)\n });\n }\n\n /**\n * Return USL (Upper Specification Limit) Value\n * @param vm.itemTemplate\n */\n vm.getUSLValue = function () {\n var value = '';\n if (vm.groupedResult && vm.groupedResult.OrtInspectionItemTemplate) {\n switch (vm.groupedResult.OrtInspectionItemTemplate.ParamType) {\n case vm.EParamType.LESSTHAN:\n case vm.EParamType.EQUALTO:\n value = vm.groupedResult.OrtInspectionItemTemplate.ValueReference1;\n break;\n\n case vm.EParamType.BETWEEN:\n value = vm.groupedResult.OrtInspectionItemTemplate.ValueReference2;\n break;\n\n case vm.EParamType.OKNOK:\n value = 'OK/NOK'\n break;\n }\n }\n return value;\n }\n\n /**\n * Return LSL (Lower Specification Limit) Value\n * @param vm.itemTemplate\n */\n vm.getLSLValue = function () {\n var value = '';\n if (vm.groupedResult && vm.groupedResult.OrtInspectionItemTemplate) {\n switch (vm.groupedResult.OrtInspectionItemTemplate.ParamType) {\n case vm.EParamType.BIGGERTHAN:\n case vm.EParamType.EQUALTO:\n case vm.EParamType.BETWEEN:\n value = vm.groupedResult.OrtInspectionItemTemplate.ValueReference1;\n break;\n\n case vm.EParamType.OKNOK:\n value = 'OK/NOK'\n break;\n }\n }\n return value;\n }\n\n /**\n * Validations to IQC Result.\n * @param vm.itemTemplate\n * @returns {boolean}\n */\n vm.isResultValid = function (result, paramType, valueReference1, valueReference2) {\n var isValid = true;\n\n if (typeof (result) === 'boolean' || (angular.isDefined(result) && result !== null && result !== '')) {\n\n if (vm.EParamType.OKNOK != paramType) {\n result = parseFloat(result);\n }\n\n switch (paramType) {\n\n case vm.EParamType.BIGGERTHAN:\n isValid = (result > valueReference1);\n break;\n case vm.EParamType.LESSTHAN:\n isValid = (result < valueReference1);\n break;\n case vm.EParamType.EQUALTO:\n isValid = (result == valueReference1);\n break;\n case vm.EParamType.BETWEEN:\n isValid = (result >= valueReference1 && result <= valueReference2);\n break;\n case vm.EParamType.OKNOK:\n isValid = (result === true || result == 'true');\n break;\n }\n }\n return isValid;\n }\n\n vm.updateMetrics = function () {\n\n var metricResult = {\n Sum: 0,\n Max: -1,\n Min: -1,\n Ok: 0,\n Nok: 0,\n SampleValues: [],\n TotalResult: vm.groupedResult.OrtInspectionItemTemplate.TestInspectionRule.Value,\n Calculated: false,\n HasAtLeastOneValidResult: false,\n TotalInspected: 0\n };\n\n for (var i = 0; i < vm.groupedResult.OrtInspectionResults.length; i++) {\n var item = vm.groupedResult.OrtInspectionResults[i];\n if (typeof (item.Result) === 'boolean' || (angular.isDefined(item.Result) && item.Result !== null && item.Result !== '')) {\n metricResult.HasAtLeastOneValidResult = true;\n\n //Calculate metrics to ParamTYpe !== OKNOK (Only Numbers)\n if (vm.groupedResult.OrtInspectionItemTemplate.ParamType !== vm.EParamType.OKNOK) {\n var result = parseFloat(item.Result);\n metricResult.SampleValues.push({\n Value: result\n });\n\n if (result > metricResult.Max) {\n metricResult.Max = angular.copy(result);\n }\n\n if (metricResult.Min == -1 || result < metricResult.Min) {\n metricResult.Min = angular.copy(result);\n }\n\n metricResult.Sum += result;\n }\n\n var isValid = vm.isResultValid((vm.groupedResult.OrtInspectionItemTemplate.ParamType !== vm.EParamType.OKNOK) ? result : item.Result, vm.groupedResult.OrtInspectionItemTemplate.ParamType, vm.groupedResult.OrtInspectionItemTemplate.ValueReference1, vm.groupedResult.OrtInspectionItemTemplate.ValueReference2);\n\n if (isValid) {\n metricResult.Ok += 1;\n } else {\n metricResult.Nok += 1;\n }\n metricResult.TotalInspected++;\n }\n }\n\n metricResult.Max = (metricResult.Max == -1) ? 0 : metricResult.Max;\n metricResult.Min = (metricResult.Min == -1) ? 0 : metricResult.Min;\n\n if (metricResult.HasAtLeastOneValidResult === true) {\n vm.groupedResult.OKMetric = parseFloat(((metricResult.Ok / metricResult.TotalResult) * 100)).toFixed(1);\n vm.groupedResult.NOKMetric = parseFloat(((metricResult.Nok / metricResult.TotalResult) * 100)).toFixed(1);\n vm.groupedResult.TotalOkMetric = metricResult.Ok;\n vm.groupedResult.TotalNokMetric = metricResult.Nok;\n vm.groupedResult.TotalInspected = metricResult.TotalInspected;\n } else {\n vm.groupedResult.OKMetric = 0;\n vm.groupedResult.NOKMetric = 0;\n vm.groupedResult.TotalOkMetric = 0;\n vm.groupedResult.TotalNokMetric = 0;\n vm.groupedResult.TotalInspected = 0;\n }\n }\n\n vm.addRemark = function () {\n if (vm.remarkObj.Remark != null && vm.remarkObj.Remark.trim() != '') {\n\n if (angular.isUndefined(vm.remarkObj.IdTemp) && angular.isUndefined(vm.remarkObj.Id)) {\n vm.remarkObj.IdTemp = new Date().getTime();\n } else {\n angular.forEach(vm.groupedResult.OrtInspectionRemarks, function (item, key) {\n if (angular.isDefined(vm.remarkObj.Id) && vm.remarkObj.Id) {\n if (vm.remarkObj.Id == item.Id) {\n vm.groupedResult.OrtInspectionRemarks.splice(key, 1);\n }\n\n } else if (vm.remarkObj.IdTemp == item.IdTemp) {\n vm.groupedResult.OrtInspectionRemarks.splice(key, 1);\n }\n });\n }\n\n vm.groupedResult.OrtInspectionRemarks.push(angular.copy(vm.remarkObj));\n vm.isEditRemark = false;\n vm.remarkObj = {};\n }\n }\n\n /** Flag to indicate remark edition. */\n vm.isEditRemark = false;\n /**\n * Edit an remark item.\n * @param item\n */\n vm.editRemark = function (item) {\n vm.isEditRemark = true;\n vm.remarkObj.Remark = angular.copy(item.Remark);\n vm.remarkObj.OrtInspectionRemarkAttachments = angular.copy(item.OrtInspectionRemarkAttachments);\n vm.remarkObj.IdTemp = angular.copy(item.IdTemp);\n vm.remarkObj.Id = angular.copy(item.Id);\n }\n\n vm.removeRemark = function (item) {\n if (angular.isDefined(item.Id)) {\n angular.forEach(vm.groupedResult.OrtInspectionRemarks, function (obj, key) {\n if (obj.Id == item.Id) {\n vm.groupedResult.OrtInspectionRemarks.splice(key, 1);\n }\n });\n\n } else {\n angular.forEach(vm.groupedResult.OrtInspectionRemarks, function (obj, key) {\n if (obj.IdTemp == item.IdTemp) {\n vm.groupedResult.OrtInspectionRemarks.splice(key, 1);\n }\n });\n }\n }\n\n var inspectionId = 0;\n\n function init() {\n vm.idItemTemplate = $stateParams.Id;\n inspectionId = $stateParams.InspectionId;\n if (vm.idItemTemplate) {\n loadItemTemplate();\n loadOrtAttachments();\n }\n }\n\n function loadItemTemplate() {\n OrtInspectionService.loadItemTemplate(vm.idItemTemplate, inspectionId).then(function (response) {\n\n vm.groupedResult = angular.copy(response);\n vm.groupedResult.OrtInspectionId = inspectionId;\n\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n });\n }\n\n function loadOrtAttachments() {\n OrtInspectionService.loadOrtAttachmentsByInspection(inspectionId).then(function (response) {\n vm.partAttachments = angular.copy(response);\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n });\n }\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(PartInspectionInspectTranslate);\n\n /** @ngInject */\n function PartInspectionInspectTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'part.inspection.inspect.title' : 'Inspection',\n 'part.inspection.inspect.metric.mean.label' : 'Mean',\n 'part.inspection.inspect.metric.stdev.label' : 'Stdev',\n 'part.inspection.inspect.metric.range.label' : 'Range',\n 'part.inspection.inspect.metric.cp.label' : 'Cp',\n 'part.inspection.inspect.metric.cpk.label' : 'Cpk',\n 'part.inspection.inspect.metric.qualityyeld.label' : 'Quality Yeld',\n\n 'part.inspection.inspect.subtype.label' : 'Subtype',\n 'part.inspection.inspect.samples.label' : 'Samples',\n 'part.inspection.inspect.sequence.label' : 'Squence',\n 'part.inspection.inspect.value.label' : 'Value',\n 'part.inspection.inspect.remark.label' : 'Remark',\n 'part.inspection.inspect.select.value.placeholder' : 'Select a value',\n 'part.inspection.inspect.save.success' : 'Inspection successfully saved.'\n\n\n\n });\n\n $translateProvider.translations('pt', {\n\n 'part.inspection.inspect.title' : 'Inspeção',\n 'part.inspection.inspect.metric.mean.label' : 'Média',\n 'part.inspection.inspect.metric.stdev.label' : 'Stdev',\n 'part.inspection.inspect.metric.range.label' : 'Intervalo',\n 'part.inspection.inspect.metric.cp.label' : 'Cp',\n 'part.inspection.inspect.metric.cpk.label' : 'Cpk',\n 'part.inspection.inspect.metric.qualityyeld.label' : 'Rendimento de Qualidade',\n\n 'part.inspection.inspect.subtype.label' : 'Subtipo',\n 'part.inspection.inspect.samples.label' : 'Amostras',\n 'part.inspection.inspect.sequence.label' : 'Sequência',\n 'part.inspection.inspect.value.label' : 'Valor',\n 'part.inspection.inspect.remark.label' : 'Observação',\n 'part.inspection.inspect.select.value.placeholder' : 'Selecione um valor',\n 'part.inspection.inspect.save.success' : 'Inspeção salva com sucesso.'\n\n\n });\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('InspectActionController', InspectActionController);\n\n function InspectActionController(PartInspectionService, ToastUtil, $stateParams, $state,\n $translate, $log) {\n\n var vm = this;\n vm.groupedResult = {};\n vm.remarkObj = {};\n vm.partAttachments = [];\n\n\n vm.EParamType = {\n LESSTHAN: 0,\n BIGGERTHAN: 1,\n BETWEEN: 2,\n EQUALTO: 3,\n OKNOK: 4\n };\n\n vm.IqcStatus = {\n WAITINGAPPROVAL: 0,\n APPROVED: 1,\n RESERVATIONS: 2,\n REJECT: 3\n };\n\n\n vm.okNokList = [{Result: \"true\", Title: \"OK\"}, {Result: \"false\", Title: \"NOK\"}]\n\n\n vm.saveItemTemplate = function () {\n PartInspectionService.saveInspectionSubtype(vm.groupedResult).then(function () {\n ToastUtil.showToastMessage($translate.instant(\"part.inspection.inspect.save.success\"), ToastUtil.ToastType.SUCCESS);\n $state.reload();\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n });\n }\n\n\n vm.goToInspectionEdit = function () {\n $state.go('part-inspection-edit', {\n Id: angular.copy(inspectionId)\n });\n }\n\n\n /**\n * Return USL (Upper Specification Limit) Value\n * @param vm.itemTemplate\n */\n vm.getUSLValue = function () {\n var value = \"\";\n if (vm.groupedResult != null && vm.groupedResult.PartInspectionItemTemplate != null) {\n switch (vm.groupedResult.PartInspectionItemTemplate.ParamType) {\n case vm.EParamType.LESSTHAN:\n case vm.EParamType.EQUALTO:\n value = vm.groupedResult.PartInspectionItemTemplate.ValueReference1;\n break;\n\n case vm.EParamType.BETWEEN:\n value = vm.groupedResult.PartInspectionItemTemplate.ValueReference2;\n break;\n\n case vm.EParamType.OKNOK:\n value = \"OK/NOK\"\n break;\n }\n }\n\n\n return value;\n }\n\n\n /**\n * Return LSL (Lower Specification Limit) Value\n * @param vm.itemTemplate\n */\n vm.getLSLValue = function () {\n var value = \"\";\n if (vm.groupedResult != null && vm.groupedResult.PartInspectionItemTemplate != null) {\n switch (vm.groupedResult.PartInspectionItemTemplate.ParamType) {\n case vm.EParamType.BIGGERTHAN:\n case vm.EParamType.EQUALTO:\n case vm.EParamType.BETWEEN:\n value = vm.groupedResult.PartInspectionItemTemplate.ValueReference1;\n break;\n\n case vm.EParamType.OKNOK:\n value = \"OK/NOK\"\n break;\n }\n }\n\n\n return value;\n }\n\n\n /**\n * Validations to IQC Result.\n * @param vm.itemTemplate\n * @returns {boolean}\n */\n vm.isResultValid = function (result, paramType, valueReference1, valueReference2) {\n var isValid = true;\n\n if (typeof(result) === \"boolean\" || (result != null && result != undefined )) {\n\n switch (paramType) {\n\n case vm.EParamType.BIGGERTHAN:\n isValid = (parseFloat(result) > valueReference1);\n break;\n\n case vm.EParamType.LESSTHAN:\n isValid = (parseFloat(result) < valueReference1);\n break;\n case vm.EParamType.EQUALTO:\n isValid = (parseFloat(result) == valueReference1);\n break;\n case vm.EParamType.BETWEEN:\n isValid = (parseFloat(result) >= valueReference1 && parseFloat(result) <= valueReference2 );\n break;\n\n case vm.EParamType.OKNOK:\n isValid = (result === true || result == \"true\");\n break;\n }\n\n }\n\n\n return isValid;\n }\n\n\n vm.updateMetrics = function () {\n\n var metricResult = {\n Sum: 0,\n Max: -1,\n Min: -1,\n Ok: 0,\n Nok: 0,\n SampleValues: [],\n TotalResult: vm.groupedResult.PartInspectionItemTemplate.PartInspectionRule.Value,\n Calculated: false,\n HasAtLeastOneValidResult: false\n };\n\n for (var i = 0; i < vm.groupedResult.PartInspectionResults.length; i++) {\n var item = vm.groupedResult.PartInspectionResults[i];\n if (typeof(item.Result) === \"boolean\" || (item.Result != null && item.Result != \"\")) {\n metricResult.HasAtLeastOneValidResult = true;\n\n //Calculate metrics to ParamTYpe != OKNOK (Only Numbers)\n if (vm.groupedResult.PartInspectionItemTemplate.ParamType != vm.EParamType.OKNOK) {\n var result = parseFloat(item.Result);\n metricResult.SampleValues.push({Value: result});\n\n if (result > metricResult.Max) {\n metricResult.Max = angular.copy(result);\n }\n\n if (metricResult.Min == -1 || result < metricResult.Min) {\n metricResult.Min = angular.copy(result);\n }\n\n metricResult.Sum += result;\n }\n\n var isValid = vm.isResultValid((vm.groupedResult.PartInspectionItemTemplate.ParamType != vm.EParamType.OKNOK ) ? result : item.Result, vm.groupedResult.PartInspectionItemTemplate.ParamType, vm.groupedResult.PartInspectionItemTemplate.ValueReference1, vm.groupedResult.PartInspectionItemTemplate.ValueReference2);\n\n if (isValid) {\n metricResult.Ok += 1;\n } else {\n metricResult.Nok += 1;\n }\n\n\n }\n\n\n }\n\n metricResult.Max = (metricResult.Max == -1) ? 0 : metricResult.Max;\n metricResult.Min = (metricResult.Min == -1) ? 0 : metricResult.Min;\n\n if (metricResult.HasAtLeastOneValidResult === true) {\n vm.groupedResult.MaxMetric = metricResult.Max;\n vm.groupedResult.MeanMetric = getMeanValue(metricResult);\n vm.groupedResult.MinMetric = metricResult.Min;\n vm.groupedResult.RangeMetric = parseFloat((metricResult.Max - metricResult.Min)).toFixed(2);\n vm.groupedResult.OKMetric = parseFloat(((metricResult.Ok / metricResult.TotalResult) * 100)).toFixed(1);\n vm.groupedResult.NOKMetric = parseFloat(((metricResult.Nok / metricResult.TotalResult) * 100)).toFixed(1);\n vm.groupedResult.TotalOkMetric = metricResult.Ok;\n vm.groupedResult.TotalNokMetric = metricResult.Nok;\n var stdevValue = getStdevValue(metricResult);\n vm.groupedResult.StdevMetric = parseFloat(stdevValue).toFixed(2);\n vm.groupedResult.CpMetric = getCpValue(metricResult, stdevValue);\n vm.groupedResult.CpkMetric = getCpkValue(metricResult, stdevValue);\n } else {\n vm.groupedResult.MaxMetric = 0;\n vm.groupedResult.MeanMetric = 0;\n vm.groupedResult.MinMetric = 0;\n vm.groupedResult.RangeMetric = 0;\n vm.groupedResult.OKMetric = 0;\n vm.groupedResult.NOKMetric = 0;\n vm.groupedResult.TotalOkMetric = 0;\n vm.groupedResult.TotalNokMetric = 0;\n vm.groupedResult.StdevMetric = 0;\n vm.groupedResult.CpMetric = 0;\n vm.groupedResult.CpkMetric = 0;\n }\n\n }\n\n\n function getMeanValue(metricResult) {\n return parseFloat((metricResult.Sum / metricResult.TotalResult).toFixed(2));\n }\n\n\n function getCpValue(metricResult, stdevValue) {\n var value = 0;\n var sigma6 = 6;\n var usl = vm.getUSLValue();\n var lsl = vm.getLSLValue();\n usl = (usl == \"\") ? 0 : usl;\n lsl = (lsl == \"\") ? 0 : lsl;\n\n value = ((usl - lsl) / (sigma6 * parseFloat(stdevValue)))\n value = (isFinite(value) === true) ? value : 0;\n return parseFloat(value).toFixed(2);\n\n }\n\n function getCpkValue(metricResult, stdevValue) {\n var sigma3 = 3;\n var usl = vm.getUSLValue();\n var lsl = vm.getLSLValue();\n usl = (usl == \"\") ? 0 : usl;\n lsl = (lsl == \"\") ? 0 : lsl;\n var mean = getMeanValue(metricResult);\n\n var cps = ((usl - mean) / (sigma3 * parseFloat(stdevValue)));\n var cpi = ((mean - lsl) / (sigma3 * parseFloat(stdevValue)));\n var result = (cps < cpi) ? cps : cpi;\n\n result = (isFinite(result) === true) ? result : 0;\n\n return parseFloat(result).toFixed(2);\n }\n\n\n function getStdevValue(metricResult) {\n var mean = getMeanValue(metricResult);\n var sumMeanPow = 0;\n angular.forEach(metricResult.SampleValues, function (item) {\n var valuePow = ((item.Value - mean) * (item.Value - mean));\n valuePow = parseFloat(valuePow).toFixed(20);\n sumMeanPow = (parseFloat(sumMeanPow) + parseFloat(valuePow));\n });\n\n var variance = ((sumMeanPow / (metricResult.TotalResult - 1)));\n var result = Math.sqrt(variance);\n\n return isNaN(result) ? 0 : result;\n }\n\n\n vm.addRemark = function () {\n if (vm.remarkObj.Remark != null && vm.remarkObj.Remark.trim() != \"\") {\n\n if (angular.isUndefined(vm.remarkObj.IdTemp) && angular.isUndefined(vm.remarkObj.Id)) {\n vm.remarkObj.IdTemp = new Date().getTime();\n }\n else {\n angular.forEach(vm.groupedResult.PartInspectionRemarks, function (item, key) {\n if (angular.isDefined(vm.remarkObj.Id) && vm.remarkObj.Id != null) {\n if (vm.remarkObj.Id == item.Id) {\n vm.groupedResult.PartInspectionRemarks.splice(key, 1);\n }\n\n } else if (vm.remarkObj.IdTemp == item.IdTemp) {\n vm.groupedResult.PartInspectionRemarks.splice(key, 1);\n }\n\n\n });\n }\n\n\n vm.groupedResult.PartInspectionRemarks.push(angular.copy(vm.remarkObj));\n vm.isEditRemark = false;\n vm.remarkObj = {};\n }\n\n }\n\n\n /** Flag to indicate remark edition. */\n vm.isEditRemark = false;\n /**\n * Edit an remark item.\n * @param item\n */\n vm.editRemark = function (item) {\n vm.isEditRemark = true;\n vm.remarkObj.Remark = angular.copy(item.Remark);\n vm.remarkObj.PartInspectionRemarkAttachments = angular.copy(item.PartInspectionRemarkAttachments);\n vm.remarkObj.IdTemp = angular.copy(item.IdTemp);\n vm.remarkObj.Id = angular.copy(item.Id);\n }\n\n vm.removeRemark = function (item) {\n if (angular.isDefined(item.Id)) {\n angular.forEach(vm.groupedResult.PartInspectionRemarks, function (obj, key) {\n if (obj.Id == item.Id) {\n vm.groupedResult.PartInspectionRemarks.splice(key, 1);\n }\n });\n\n } else {\n angular.forEach(vm.groupedResult.PartInspectionRemarks, function (obj, key) {\n if (obj.IdTemp == item.IdTemp) {\n vm.groupedResult.PartInspectionRemarks.splice(key, 1);\n }\n });\n }\n\n\n }\n\n\n var inspectionId = 0;\n\n function init() {\n vm.idItemTemplate = $stateParams.Id;\n inspectionId = $stateParams.InspectionId;\n if (vm.idItemTemplate) {\n loadItemTemplate();\n loadPartAttachments();\n }\n\n }\n\n\n function loadItemTemplate() {\n PartInspectionService.loadItemTemplate(vm.idItemTemplate, inspectionId).then(function (response) {\n\n vm.groupedResult = angular.copy(response);\n vm.groupedResult.PartInspectionId = inspectionId;\n\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n });\n\n\n }\n\n function loadPartAttachments() {\n PartInspectionService.loadPartAttachmentsByInspection(inspectionId).then(function (response) {\n vm.partAttachments = angular.copy(response);\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n });\n\n\n }\n\n\n init();\n }\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *\n */\n function PartParamFormController($scope, $document) {\n\n var vm = this;\n var scope = $scope;\n\n scope.requiredFields = false;\n\n vm.EParamType = {\n LESSTHAN: 0,\n BIGGERTHAN: 1,\n BETWEEN: 2,\n EQUALTO: 3,\n OKNOK: 4\n };\n\n vm.validateFormParam = function(){\n if( vm.paramObj.ParamType == 2 && angular.isDefined(vm.paramForm)) {\n if (vm.validateRanger()) {\n vm.paramForm[\"divInputForm\"][\"opRange\"].$setValidity('validRange', false, vm.paramForm[\"divInputForm\"][\"opRange\"]);\n } else {\n vm.paramForm[\"divInputForm\"][\"opRange\"].$setValidity('validRange', true, vm.paramForm[\"divInputForm\"][\"opRange\"]);\n }\n }\n }\n\n\n\n vm.validateRanger = function () {\n if (vm.paramObj.ValueReference2) {\n return parseInt(vm.paramObj.ValueReference2) < parseInt(vm.paramObj.ValueReference1);\n }\n }\n\n\n vm.clearPatrolResultValues = function () {\n vm.paramObj.ValueReference1 = null;\n vm.paramObj.ValueReference2 = null;\n }\n\n vm.CheckRadioBtResultType = function () {\n if (vm.paramObj != undefined && vm.paramObj.Id != undefined && vm.paramObj.Id > 0 && vm.paramObj.ParamType == 0) {\n $document[0].getElementById('opLessThan').checked = true;\n }\n\n if (vm.paramObj != undefined && vm.paramObj.Id != undefined && vm.paramObj.Id > 0 && vm.paramObj.ParamType == 1) {\n $document[0].getElementById('opGreaterThan').checked = true;\n }\n\n if (vm.paramObj != undefined && vm.paramObj.Id != undefined && vm.paramObj.Id > 0 && vm.paramObj.ParamType == 2) {\n $document[0].getElementById('opRange').checked = true;\n }\n\n if (vm.paramObj != undefined && vm.paramObj.Id != undefined && vm.paramObj.Id > 0 && vm.paramObj.ParamType == 3) {\n $document[0].getElementById('opEqualTo').checked = true;\n }\n\n if (vm.paramObj != undefined && vm.paramObj.Id != undefined && vm.paramObj.Id > 0 && vm.paramObj.ParamType == 4) {\n $document[0].getElementById('opOkNok').checked = true;\n }\n }\n\n angular.element($document).ready(function () {\n vm.CheckRadioBtResultType();\n });\n\n }\n\n function PartParamFormDirective() {\n return {\n restrict: 'E',\n replace: true,\n templateUrl: \"app/iqc/part/parameter-definition/part-param-form.html\",\n controllerAs: 'ctrl',\n controller: 'PartParamFormController',\n bindToController: true,\n scope: {\n paramObj: '=',\n paramForm: '=?'\n\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('PartParamFormController', PartParamFormController)\n .directive('partParamForm', PartParamFormDirective);\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(PartTemplateItemTranslate);\n\n /** @ngInject */\n function PartTemplateItemTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'part.template.item.inspection.type.label': 'Inspection Type',\n 'part.template.item.inspection.subtype.label': 'Sub type',\n 'part.template.item.inspection.rule': 'Rule',\n 'part.template.item.inspection.unit.measurement': 'Unit of measurement',\n 'part.template.item.inspection.description.label': 'Inspection Description',\n 'part.template.item.parameter.label': 'Parameter'\n });\n\n $translateProvider.translations('pt', {\n 'part.template.item.inspection.type.label': 'Tipo de Inspeção',\n 'part.template.item.inspection.subtype.label': 'Subtipo',\n 'part.template.item.inspection.rule': 'Regra',\n 'part.template.item.inspection.unit.measurement': 'Unidade de Medida',\n 'part.template.item.inspection.description.label': 'Descrição da Inspeção',\n 'part.template.item.parameter.label': 'Parâmetro'\n });\n\n }\n})();\n\n(function () {\n\n function PartTemplateItemController($scope, $document) {\n\n var vm = this;\n var scope = $scope;\n var oldObj = undefined;\n\n vm.templateItem = {\n Id: null,\n SequenceNumber: '',\n Description: '',\n PartInspectionTemplateType: null,\n ParamType: null,\n ValueReference1: null,\n ValueReference2: null,\n UnitMeasurement: null,\n PartInspectionTemplateSubType: '',\n PartInspectionRule: '',\n PartInspectionResults: null\n };\n\n vm.parentPartInspectionType = {};\n\n\n function init() {\n var model = $scope.modelDialog;\n if (model.isEditAction) {\n //Edit Mode\n\n vm.templateItem = model;\n oldObj = angular.copy(vm.templateItem);\n vm.parentPartInspectionType = vm.templateItem.PartInspectionTemplateType.PartInspectionType;\n } else {\n // New Mode\n vm.parentPartInspectionType = model.PartInspectionType;\n }\n\n\n $document[0].querySelector('.modal').addEventListener('click', function () {\n vm.close();\n });\n\n $document[0].querySelector('.modal-body').addEventListener('click', function (evt) {\n evt.stopPropagation();\n });\n\n $document[0].querySelector('.modal-footer').addEventListener('click', function (evt) {\n evt.stopPropagation();\n });\n\n\n }\n\n\n vm.close = function () {\n scope.$dismiss('cancel');\n if (angular.isDefined(oldObj)) {\n undoChanges();\n }\n oldObj = undefined;\n\n };\n\n function undoChanges() {\n vm.templateItem.Id = oldObj.Id;\n vm.templateItem.Description = oldObj.Description;\n vm.templateItem.PartInspectionTemplateType = oldObj.PartInspectionTemplateType;\n vm.templateItem.ParamType = oldObj.ParamType;\n vm.templateItem.ValueReference1 = oldObj.ValueReference1;\n vm.templateItem.ValueReference2 = oldObj.ValueReference2;\n vm.templateItem.UnitMeasurement = oldObj.UnitMeasurement;\n vm.templateItem.PartInspectionTemplateSubType = oldObj.PartInspectionTemplateSubType;\n vm.templateItem.PartInspectionRule = oldObj.PartInspectionRule;\n vm.templateItem.PartInspectionResults = oldObj.PartInspectionResults;\n vm.templateItem.PartInspectionTemplateType = oldObj.PartInspectionTemplateType;\n }\n\n\n vm.save = function (value) {\n if (canSave() && value) {\n vm.templateItem.PartInspectionTemplateType = null;\n $scope.parentDialog.addSubTypeItem(vm.templateItem, vm.parentPartInspectionType);\n\n scope.$close('ok');\n oldObj = undefined;\n }\n };\n\n\n function canSave() {\n var canSave = false;\n if (vm.templateItem.Description != '' && vm.templateItem.ParamType != null\n && vm.templateItem.UnitMeasurement != null && vm.templateItem.PartInspectionTemplateSubType != null && vm.templateItem.PartInspectionRule != null) {\n\n if (vm.templateItem.ParamType == 2) {\n if (vm.templateItem.ValueReference1 != null && vm.templateItem.ValueReference2 != null)\n canSave = true;\n } else if (vm.templateItem.ParamType == 4) {\n canSave = true;\n } else if (vm.templateItem.ValueReference1 != null) {\n canSave = true;\n }\n\n\n }\n\n return canSave;\n }\n\n\n init();\n }\n\n function PartTemplateItemDirective() {\n return {\n restrict: 'E',\n replace: true,\n templateUrl: 'app/iqc/part/modal/part-template-item.html',\n controllerAs: 'ctrl',\n controller: 'PartTemplateItemController'\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('PartTemplateItemController', PartTemplateItemController)\n .directive('partTemplateItem', PartTemplateItemDirective);\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *\n */\n function InspectionTypeFormController($scope, $document) {\n\n var vm = this;\n\n vm.partInspectionTemplateType = {\n Id: null,\n PartInspectionType: {},\n SequenceNumber: \"\",\n PartInspectionItemTemplates: null,\n CsActive: true\n };\n\n vm.partInspectionTemplateTypeList = [];\n\n function init() {\n if ($scope.modelDialog != null) {\n vm.partInspectionTemplateType = $scope.modelDialog;\n vm.oldPartInspectionTemplateType = angular.copy(vm.partInspectionTemplateType);\n }\n\n vm.partInspectionTemplateTypeList = angular.copy($scope.parentDialog.part.CurrentPartInspectionTemplate.PartInspectionTemplateTypes);\n\n $document[0].querySelector('.modal').addEventListener('click', function () {\n vm.close();\n });\n\n $document[0].querySelector('.modal-body').addEventListener('click', function (evt) {\n evt.stopPropagation();\n });\n }\n\n vm.validateDuplicateType = function () {\n var typeAlreadyExist = false;\n angular.forEach(vm.partInspectionTemplateTypeList, function (type) {\n if ((vm.partInspectionTemplateType.PartInspectionType && vm.partInspectionTemplateType.PartInspectionType.Id == type.PartInspectionType.Id)) {\n typeAlreadyExist = true;\n }\n\n });\n return typeAlreadyExist;\n }\n\n vm.close = function () {\n $scope.$dismiss('cancel');\n\n if (vm.partInspectionTemplateType != undefined && vm.oldPartInspectionTemplateType != undefined && vm.oldPartInspectionTemplateType.PartInspectionType != undefined)\n vm.partInspectionTemplateType.PartInspectionType = vm.oldPartInspectionTemplateType.PartInspectionType;\n\n vm.oldPartInspectionTemplateType = undefined;\n };\n\n vm.save = function () {\n vm.partInspectionTemplateType.IdTemp = new Date().getMilliseconds();\n $scope.parentDialog.addInspectionType(vm.partInspectionTemplateType);\n $scope.$close('ok');\n vm.oldPartInspectionTemplateType = undefined;\n };\n\n\n init();\n }\n\n function InspectionTypeFormDirective() {\n return {\n restrict: 'E',\n replace: true,\n templateUrl: \"app/iqc/part/modal/inspection-type-form.html\",\n controllerAs: 'ctrl',\n controller: 'InspectionTypeFormController'\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('InspectionTypeFormController', InspectionTypeFormController)\n .directive('inspectionTypeForm', InspectionTypeFormDirective);\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *\n */\n function IshikawaItemsPanelController($scope, DialogController, $translate) {\n\n var vm = this;\n var scope = $scope;\n\n vm.items = $scope.list;\n vm.itemDisabled = $scope.itemDisabled == undefined ? false : $scope.itemDisabled\n\n vm.remove = function (item) {\n var index = vm.items.indexOf(item);\n if (index > -1) {\n\n var message = $translate.instant('remove.ishikawa.warn').replace(\"$description\", item.Description);\n vm.showConfirm(message, function () {\n vm.removeItemFromList(item, index)\n });\n }\n };\n\n vm.removeItemFromList = function (item, index) {\n vm.items.splice(index, 1);\n scope.removeItemListener({\n item: item\n });\n };\n\n vm.showConfirm = function (text, action) {\n DialogController.show('title.remove', '', action, text);\n };\n }\n\n function IshikawaItemsPanelDirective() {\n return {\n restrict: 'E',\n scope: {\n list: '=',\n removeItemListener: '&',\n itemDisabled: '=?'\n },\n replace: true,\n templateUrl: \"app/faca/problem/root-cause/ishikawa-items-panel.html\",\n controllerAs: 'ctrl',\n controller: 'IshikawaItemsPanelController'\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('IshikawaItemsPanelController', IshikawaItemsPanelController)\n .directive('ishikawaItemsPanel', IshikawaItemsPanelDirective);\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *\n */\n function IshikawaDivInputController($scope, ToastUtil, $translate) {\n\n var vm = this;\n vm.newItem = '';\n\n if (vm.list == undefined) {\n vm.list = [];\n }\n\n if (angular.isUndefined(vm.viewMode)) {\n vm.viewMode = false;\n }\n\n if( angular.isUndefined(vm.isRequired) ){\n vm.isRequired = false;\n }\n\n\n vm.isTrue = function (value) {\n return (value === true || value == \"true\");\n }\n\n\n vm.ishikawaTypeObj = {\n Description: vm.ishikawaType.Description,\n Id: vm.ishikawaType.Id\n };\n\n vm.addNewItem = function () {\n if (vm.newItem.length > 0 && !listContainsItem(vm.list, vm.newItem)) {\n var itemToInsert = new Object();\n\n itemToInsert.Description = vm.newItem;\n itemToInsert.IshikawaType = vm.ishikawaTypeObj;\n\n if (angular.isDefined(vm.pdcaType)) {\n itemToInsert.PDCAType = vm.pdcaType;\n }\n\n vm.list.push(itemToInsert);\n\n vm.issueModel.Ishikawas.push(itemToInsert);\n }\n\n vm.newItem = '';\n };\n\n var listContainsItem = function (list, item) {\n for (var i = 0; i < list.length; i++) {\n if (list[i].Description == item) {\n var message = $translate.instant('duplicated.item.warn').replace(\"$description\", item);\n ToastUtil.showToastMessage(message, ToastUtil.ToastType.WARN);\n return true;\n }\n }\n\n return false;\n };\n\n vm.removeItemListener = function (item) {\n var index = -1;\n angular.forEach(vm.issueModel.Ishikawas, function (value, key) {\n if (item.Description == value.Description) {\n index = key;\n }\n });\n\n if (index > -1) {\n vm.issueModel.Ishikawas.splice(index, 1);\n }\n };\n }\n\n function IshikawaDivInputDirective() {\n return {\n restrict: 'E',\n scope: {\n list: '=',\n issueModel: '=',\n ishikawaType: '=',\n pdcaType: '=?',\n titleLabel: '@',\n itemDisabled: '=?',\n isRequired: '=?',\n viewMode: '@?'\n },\n bindToController: true,\n replace: true,\n templateUrl: \"app/faca/problem/root-cause/ishikawa-div-input.html\",\n controllerAs: 'ctrl',\n controller: 'IshikawaDivInputController'\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('IshikawaDivInputController', IshikawaDivInputController)\n .directive('ishikawaDivInput', IshikawaDivInputDirective);\n})();\n\n(function () {\n\n function ContainmentFormController($scope) {\n\n var vm = this;\n var scope = $scope;\n\n vm.plan = {\n Id: 0,\n What: '',\n Wheres: '',\n Why: '',\n How: '',\n Whens: new Date(),\n Status: 0\n };\n\n vm.containmentStatus = [{\n id: 0,\n name: 'option.onGoing'\n },\n {\n id: 1,\n name: 'option.late'\n },\n {\n id: 2,\n name: 'option.closed'\n }\n ];\n\n function initView() {\n var model = $scope.modelDialog;\n if (model != undefined) {\n\n vm.plan = angular.copy(model);\n }\n }\n\n vm.close = function () {\n scope.$dismiss('cancel');\n };\n\n vm.save = function () {\n $scope.parentDialog.addContainmentPlan(vm.plan);\n scope.$close('ok');\n };\n\n initView();\n }\n\n function ContainmentFormDirective() {\n return {\n restrict: 'E',\n replace: true,\n templateUrl: \"app/faca/problem/containment/containment-form.html\",\n controllerAs: 'ctrl',\n controller: 'ContainmentFormController'\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('ContainmentFormController', ContainmentFormController)\n .directive('containmentForm', ContainmentFormDirective);\n})();\n\n/* global d3 */\n/*\n ng-radial-gauge 1.0.3\n (c) 2010-2017 Stéphane Therrien, \n https://github.com/stherrienaspnet/ngRadialGauge\n License: MIT\n\n Version 1.0.3\n Author: Stephane Therrien\n Fixed needle hidden when value are passing from out of range to in range.\n*/\n/*eslint no-unused-vars: 0*/\n\n\"use strict\";\nangular.module(\"ngRadialGauge\",[]).directive('ngRadialGauge', ['$window', '$timeout',\n function ($window, $timeout) {\n return {\n restrict: 'EAC',\n scope: {\n data: '=',\n lowerLimit: '=',\n upperLimit: '=',\n ranges: '=',\n value: '=',\n valueUnit: '=',\n precision: '=',\n majorGraduationPrecision: '=',\n label: '@',\n onClick: '&'\n },\n link: function (scope, ele, attrs) {\n var defaultUpperLimit = 100;\n var defaultLowerLimit = 0;\n var initialized = false;\n\n var renderTimeout;\n var gaugeAngle = parseInt(attrs.angle) || 120;\n\n //New width variable, now works in conjunction with fixed viewBox sizing\n var _width = attrs.width || \"100%\";\n\n /* Colin Bester\n Width and height are not really such an issue with SVG but choose these values as\n width of 300 seems to be pretty baked into code.\n I took the easy path seeing as size is not that relevant and hard coded width and height\n as I was too lazy to dig deep into code.\n May be the wrong call, but seems safe option.\n */\n var view = {\n width : 300,\n height : 225\n };\n var innerRadius = Math.round((view.width * 130) / 300);\n var outerRadius = Math.round((view.width * 145) / 300);\n var majorGraduations = parseInt(attrs.majorGraduations - 1) || 5;\n var minorGraduations = parseInt(attrs.minorGraduations) || 10;\n var majorGraduationLength = Math.round((view.width * 16) / 300);\n var minorGraduationLength = Math.round((view.width * 10) / 300);\n var majorGraduationMarginTop = Math.round((view.width * 7) / 300);\n var majorGraduationColor = attrs.majorGraduationColor || \"#B0B0B0\";\n var minorGraduationColor = attrs.minorGraduationColor || \"#D0D0D0\";\n var majorGraduationTextColor = attrs.majorGraduationTextColor || \"#6C6C6C\";\n var needleColor = attrs.needleColor || \"#416094\";\n var valueVerticalOffset = Math.round((view.width * 30) / 300);\n var inactiveColor = \"#D7D7D7\";\n var transitionMs = parseInt(attrs.transitionMs) || 750;\n var majorGraduationTextSize = parseInt(attrs.majorGraduationTextSize);\n var needleValueTextSize = parseInt(attrs.needleValueTextSize);\n var needle = undefined;\n\n //The scope.data object might contain the data we need, otherwise we fall back on the scope.xyz property\n var extractData = function (prop) {\n if (!scope.data) return scope[prop];\n if (scope.data[prop] === undefined || scope.data[prop] == null) {\n return scope[prop];\n }\n return scope.data[prop];\n };\n\n var maxLimit;\n var minLimit;\n var value;\n var valueUnit;\n var precision;\n var majorGraduationPrecision;\n var ranges;\n \n var updateInternalData = function() {\n maxLimit = extractData('upperLimit') ? extractData('upperLimit') : defaultUpperLimit;\n minLimit = extractData('lowerLimit') ? extractData('lowerLimit') : defaultLowerLimit;\n value = extractData('value');\n valueUnit = extractData('valueUnit');\n precision = extractData('precision');\n majorGraduationPrecision = extractData('majorGraduationPrecision');\n ranges = extractData('ranges');\n };\n updateInternalData();\n \n /* Colin Bester\n Add viewBox and width attributes.\n Used view.width and view.height in case it's decided that hardcoding these values is an issue.\n Width can be specified as %, px etc and will scale image to fit.\n */\n var svg = d3.select(ele[0])\n .append('svg')\n .attr('width', _width)\n .attr('viewBox', '0 0 '+view.width+' '+view.height);\n // .attr('view.width', view.width)\n // .attr('height', view.width * 0.75);\n var renderMajorGraduations = function (majorGraduationsAngles) {\n var centerX = view.width / 2;\n var centerY = view.width / 2;\n //Render Major Graduations\n majorGraduationsAngles.forEach(function (pValue, index) {\n var cos1Adj = Math.round(Math.cos((90 - pValue) * Math.PI / 180) * (innerRadius - majorGraduationMarginTop - majorGraduationLength));\n var sin1Adj = Math.round(Math.sin((90 - pValue) * Math.PI / 180) * (innerRadius - majorGraduationMarginTop - majorGraduationLength));\n var cos2Adj = Math.round(Math.cos((90 - pValue) * Math.PI / 180) * (innerRadius - majorGraduationMarginTop));\n var sin2Adj = Math.round(Math.sin((90 - pValue) * Math.PI / 180) * (innerRadius - majorGraduationMarginTop));\n var x1 = centerX + cos1Adj;\n var y1 = centerY + sin1Adj * -1;\n var x2 = centerX + cos2Adj;\n var y2 = centerY + sin2Adj * -1;\n svg.append(\"svg:line\")\n .attr(\"x1\", x1)\n .attr(\"y1\", y1)\n .attr(\"x2\", x2)\n .attr(\"y2\", y2)\n .style(\"stroke\", majorGraduationColor);\n\n renderMinorGraduations(majorGraduationsAngles, index);\n });\n };\n var renderMinorGraduations = function (majorGraduationsAngles, indexMajor) {\n var minorGraduationsAngles = [];\n\n if (indexMajor > 0) {\n var minScale = majorGraduationsAngles[indexMajor - 1];\n var maxScale = majorGraduationsAngles[indexMajor];\n var scaleRange = maxScale - minScale;\n\n for (var i = 1; i < minorGraduations; i++) {\n var scaleValue = minScale + i * scaleRange / minorGraduations;\n minorGraduationsAngles.push(scaleValue);\n }\n\n var centerX = view.width / 2;\n var centerY = view.width / 2;\n //Render Minor Graduations\n minorGraduationsAngles.forEach(function (pValue, indexMinor) {\n var cos1Adj = Math.round(Math.cos((90 - pValue) * Math.PI / 180) * (innerRadius - majorGraduationMarginTop - minorGraduationLength));\n var sin1Adj = Math.round(Math.sin((90 - pValue) * Math.PI / 180) * (innerRadius - majorGraduationMarginTop - minorGraduationLength));\n var cos2Adj = Math.round(Math.cos((90 - pValue) * Math.PI / 180) * (innerRadius - majorGraduationMarginTop));\n var sin2Adj = Math.round(Math.sin((90 - pValue) * Math.PI / 180) * (innerRadius - majorGraduationMarginTop));\n var x1 = centerX + cos1Adj;\n var y1 = centerY + sin1Adj * -1;\n var x2 = centerX + cos2Adj;\n var y2 = centerY + sin2Adj * -1;\n svg.append(\"svg:line\")\n .attr(\"x1\", x1)\n .attr(\"y1\", y1)\n .attr(\"x2\", x2)\n .attr(\"y2\", y2)\n .style(\"stroke\", minorGraduationColor);\n });\n }\n };\n var getMajorGraduationValues = function (pMinLimit, pMaxLimit, pPrecision) {\n var scaleRange = pMaxLimit - pMinLimit;\n var majorGraduationValues = [];\n for (var i = 0; i <= majorGraduations; i++) {\n var scaleValue = pMinLimit + i * scaleRange / (majorGraduations);\n majorGraduationValues.push(scaleValue.toFixed(pPrecision));\n }\n\n return majorGraduationValues;\n };\n var getMajorGraduationAngles = function () {\n var scaleRange = 2 * gaugeAngle;\n var minScale = -1 * gaugeAngle;\n var graduationsAngles = [];\n for (var i = 0; i <= majorGraduations; i++) {\n var scaleValue = minScale + i * scaleRange / (majorGraduations);\n graduationsAngles.push(scaleValue);\n }\n\n return graduationsAngles;\n };\n var getNewAngle = function(pValue) {\n var scale = d3.scale.linear().range([0, 1]).domain([minLimit, maxLimit]);\n var ratio = scale(pValue);\n var scaleRange = 2 * gaugeAngle;\n var minScale = -1 * gaugeAngle;\n var newAngle = minScale + (ratio * scaleRange);\n return newAngle;\n };\n var renderMajorGraduationTexts = function (majorGraduationsAngles, majorGraduationValues, pValueUnit) {\n if (!ranges) return;\n\n var centerX = view.width / 2;\n var centerY = view.width / 2;\n var textVerticalPadding = 5;\n var textHorizontalPadding = 5;\n\n var lastGraduationValue = majorGraduationValues[majorGraduationValues.length - 1];\n var textSize = isNaN(majorGraduationTextSize) ? (view.width * 12) / 300 : majorGraduationTextSize;\n var fontStyle = textSize + \"px Courier\";\n\n var dummyText = svg.append(\"text\")\n .attr(\"x\", centerX)\n .attr(\"y\", centerY)\n .attr(\"fill\", \"transparent\")\n .attr(\"text-anchor\", \"middle\")\n .style(\"font\", fontStyle)\n .text(lastGraduationValue + pValueUnit);\n\n var textWidth = dummyText.node().getBBox().width;\n\n for (var i = 0; i < majorGraduationsAngles.length; i++) {\n var angle = majorGraduationsAngles[i];\n var cos1Adj = Math.round(Math.cos((90 - angle) * Math.PI / 180) * (innerRadius - majorGraduationMarginTop - majorGraduationLength - textHorizontalPadding));\n var sin1Adj = Math.round(Math.sin((90 - angle) * Math.PI / 180) * (innerRadius - majorGraduationMarginTop - majorGraduationLength - textVerticalPadding));\n\n var sin1Factor = 1;\n if (sin1Adj < 0) sin1Factor = 1.1;\n if (sin1Adj > 0) sin1Factor = 0.9;\n if (cos1Adj > 0) {\n if (angle > 0 && angle < 45) {\n cos1Adj -= textWidth / 2;\n } else {\n cos1Adj -= textWidth;\n }\n }\n if (cos1Adj < 0) {\n if (angle < 0 && angle > -45) {\n cos1Adj -= textWidth / 2;\n }\n }\n if (cos1Adj == 0) {\n cos1Adj -= angle == 0 ? textWidth / 4 : textWidth / 2;\n }\n\n var x1 = centerX + cos1Adj;\n var y1 = centerY + sin1Adj * sin1Factor * -1;\n\n svg.append(\"text\")\n .attr(\"class\", \"mtt-majorGraduationText\")\n .style(\"font\", fontStyle)\n .attr(\"text-align\", \"center\")\n .attr(\"x\", x1)\n .attr(\"dy\", y1)\n .attr(\"fill\", majorGraduationTextColor)\n .text(majorGraduationValues[i] + pValueUnit);\n }\n };\n var renderGraduationNeedle = function (value, valueUnit, precision, minLimit, maxLimit) {\n svg.selectAll('.mtt-graduation-needle').remove();\n svg.selectAll('.mtt-graduationValueText').remove();\n svg.selectAll('.mtt-graduation-needle-center').remove();\n \n var centerX = view.width / 2;\n var centerY = view.width / 2;\n var centerColor;\n\n if (typeof value === 'undefined') {\n centerColor = inactiveColor;\n } else {\n centerColor = needleColor;\n var needleAngle = getNewAngle(value);\n var needleLen = innerRadius - majorGraduationLength - majorGraduationMarginTop;\n var needleRadius = (view.width * 2.5) / 300;\n var textSize = isNaN(needleValueTextSize) ? (view.width * 12) / 300 : needleValueTextSize;\n var fontStyle = textSize + \"px Courier\";\n\n var lineData = [\n [needleRadius, 0],\n [0, -needleLen],\n [-needleRadius, 0],\n [needleRadius, 0]\n ];\n var pointerLine = d3.svg.line().interpolate('monotone');\n var pg = svg.append('g').data([lineData])\n .attr('class', 'mtt-graduation-needle')\n .style(\"fill\", needleColor)\n .attr('transform', 'translate(' + centerX + ',' + centerY + ')');\n needle = pg.append('path')\n .attr('d', pointerLine)\n .attr('transform', 'rotate('+needleAngle+')');\n\n svg.append(\"text\")\n .attr(\"x\", centerX)\n .attr(\"y\", centerY + valueVerticalOffset)\n .attr(\"class\", \"mtt-graduationValueText\")\n .attr(\"fill\", needleColor)\n .attr(\"text-anchor\", \"middle\")\n .attr(\"font-weight\", \"bold\")\n .style(\"font\", fontStyle)\n .text('[ ' + value.toFixed(precision) + valueUnit + ' ]');\n }\n\n var circleRadius = (view.width * 6) / 300;\n\n svg.append(\"circle\")\n .attr(\"r\", circleRadius)\n .attr(\"cy\", centerX)\n .attr(\"cx\", centerY)\n .attr(\"fill\", centerColor)\n .attr(\"class\", \"mtt-graduation-needle-center\");\n \n if (value < minLimit || value > maxLimit) {\n svg.selectAll('.mtt-graduation-needle').style(\"visibility\", \"hidden\");\n svg.selectAll('.mtt-graduation-needle-center').attr(\"fill\", inactiveColor);\n } \n \n };\n $window.onresize = function () {\n scope.$apply();\n };\n scope.$watch(function () {\n return angular.element($window)[0].innerWidth;\n }, function () {\n scope.render();\n });\n\n /* Colin Bester\n Removed watching of data.value as couldn't see reason for this, plus it's the cause of flicker when using\n data=option mode of using directive.\n I'm assuming that calling render function is not what was intended on every value update.\n */\n // scope.$watchCollection('[ranges, data.ranges, data.value]', function () {\n scope.$watchCollection('[ranges, data.ranges]', function () {\n scope.render();\n }, true);\n\n\n scope.render = function () {\n updateInternalData();\n svg.selectAll('*').remove();\n if (renderTimeout) clearTimeout(renderTimeout);\n\n renderTimeout = $timeout(function () {\n var d3DataSource = [];\n\n if (typeof ranges === 'undefined') {\n d3DataSource.push([minLimit, maxLimit, inactiveColor]);\n } else {\n //Data Generation\n ranges.forEach(function (pValue, index) {\n d3DataSource.push([pValue.min, pValue.max, pValue.color]);\n });\n }\n\n //Render Gauge Color Area\n var translate = \"translate(\" + view.width / 2 + \",\" + view.width / 2 + \")\";\n var cScale = d3.scale.linear().domain([minLimit, maxLimit]).range([-1 * gaugeAngle * (Math.PI / 180), gaugeAngle * (Math.PI / 180)]);\n var arc = d3.svg.arc()\n .innerRadius(innerRadius)\n .outerRadius(outerRadius)\n .startAngle(function (d) { return cScale(d[0]); })\n .endAngle(function (d) { return cScale(d[1]); });\n svg.selectAll(\"path\")\n .data(d3DataSource)\n .enter()\n .append(\"path\")\n .attr(\"d\", arc)\n .style(\"fill\", function (d) { return d[2]; })\n .attr(\"transform\", translate);\n\n var majorGraduationsAngles = getMajorGraduationAngles();\n var majorGraduationValues = getMajorGraduationValues(minLimit, maxLimit, majorGraduationPrecision);\n renderMajorGraduations(majorGraduationsAngles);\n renderMajorGraduationTexts(majorGraduationsAngles, majorGraduationValues, valueUnit);\n renderGraduationNeedle(value, valueUnit, precision, minLimit, maxLimit);\n initialized = true;\n }, 200);\n\n };\n var onValueChanged = function(pValue, pPrecision, pValueUnit) {\n if (typeof pValue === 'undefined' || pValue == null) return;\n \n svg.selectAll('.mtt-graduationValueText')\n .text('[ ' + pValue.toFixed(pPrecision) + pValueUnit + ' ]') ;\n \n if (pValue >= minLimit && pValue <= maxLimit) {\n var needleAngle = getNewAngle(pValue);\n needle.transition()\n .duration(transitionMs)\n .ease('elastic')\n .attr('transform', 'rotate('+needleAngle+')');\n\n svg.selectAll('.mtt-graduation-needle').style(\"visibility\", \"visible\");\n svg.selectAll('.mtt-graduation-needle-center').attr(\"fill\", needleColor);\n \n } else {\n svg.selectAll('.mtt-graduation-needle').style(\"visibility\", \"hidden\");\n svg.selectAll('.mtt-graduation-needle-center').attr(\"fill\", inactiveColor);\n }\n };\n scope.$watchCollection('[value, data.value]', function () {\n if (!initialized) return;\n updateInternalData();\n onValueChanged(value, precision, valueUnit);\n }, true);\n }\n };\n }]);\n\n\"use strict\";\nangular.module(\"ngRadialGauge\").factory('d3Service', ['$document', '$window', '$q', '$rootScope',\n function($document, $window, $q, $rootScope) {\n var d = $q.defer(),\n d3service = {\n d3: function() { return d.promise; }\n };\n function onScriptLoad() {\n // Load client in the browser\n $rootScope.$apply(function() { d.resolve($window.d3); });\n }\n var scriptTag = $document[0].createElement('script');\n scriptTag.type = 'text/javascript'; \n scriptTag.async = true;\n scriptTag.src = '../../public/d3/d3.min.js';\n scriptTag.onreadystatechange = function () {\n if (this.readyState == 'complete') onScriptLoad();\n };\n scriptTag.onload = onScriptLoad;\n \n var s = $document[0].getElementsByTagName('body')[0];\n s.appendChild(scriptTag);\n \n return d3service;\n }]);\n\n(function () {\n\n 'use strict';\n function NextAlertController($scope, $state, $window, moment, AlertService, SourcingService, DashboardService, AuthService) {\n\n var vm = this;\n var DefaultState = {\n canEdit: true,\n canEditAlertType: true,\n canEditEmissionDate: true,\n canEditDueDate: true\n };\n \n vm.State = DefaultState;\n vm.AlertId = null;\n vm.profileSourcing = null;\n vm.profileAlert = null;\n $scope.moduleAlert = 'alert';\n $scope.moduleSourcing = 'sourcing';\n vm.profileBackup = null;\n\n vm.searchParams = {\n Title: '',\n StartCreatedDate: '',\n EndCreatedDate: '',\n StartDueDate: '',\n EndDueDate: '',\n Type: '-1',\n CsActive: '1',\n SourcingApprove: false,\n UserId: AuthService.getUserID(),\n Page: 1,\n MaxPerPage: 10\n };\n\n vm.alertList = [];\n\n function validateViewOrEditPermission() {\n AlertService.editAlertDashboard(vm.AlertId);\n }\n\n vm.goToAlert = function (id) {\n vm.AlertId = id;\n validateViewOrEditPermission();\n }\n \n function init() {\n vm.profileBackup = angular.copy(vm.profile);\n search(); \n }\n\n function search() {\n DashboardService.listNextAlert(vm.searchParams)\n .then(function (response) {\n var alerts = response, atual = moment(moment().format('YYYY-MM-DD'));\n if (alerts && alerts.length > 0) {\n for (var i = 0, len = alerts.length; i < len; i++) {\n var alert = alerts[i];\n if (moment(alert.Date).isAfter(atual)) {\n alerts.slice(alert, i);\n }\n }\n vm.alertList = alerts;\n }\n });\n }\n\n init();\n\n }\n\n function NextAlertDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'NextAlertController',\n transclude: true,\n templateUrl: \"app/dashboard/directive/alert/next-alert.html\",\n bindToController: false,\n scope: {\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('NextAlertController', NextAlertController)\n .directive('nextAlert', NextAlertDirective)\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(AutoCompleteVendorTranslate);\n\n /** @ngInject */\n function AutoCompleteVendorTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'auto.complete.vendor.directive.placeholder': 'Select a vendor',\n 'auto.complete.vendor.directive.required': 'The vendor field is required.',\n 'auto.complete.vendor.directive.load.error': 'An error occurred while trying to load the vendor list.',\n 'auto.complete.vendor.invalid.msg': 'Selected Vendor is invalid.',\n 'auto.complete.vendor.duplicated.msg': 'Vendor already inserted.'\n });\n\n $translateProvider.translations('pt', {\n 'auto.complete.vendor.directive.placeholder': 'Selecione um fornecedor',\n 'auto.complete.vendor.directive.required': 'O campo fornecedor é obrigatório.',\n 'auto.complete.vendor.directive.load.error': 'Ocorreu um erro ao tentar carregar a lista de fornecedor.',\n 'auto.complete.vendor.invalid.msg': 'O Fornecedor selecionado é inválido.',\n 'auto.complete.vendor.duplicated.msg': 'Fornecedor já inserido.'\n });\n }\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *Controller to Autocomplete Vendor directive.\n */\n function AutoCompleteVendorController($translate, $log, $scope, $interval, ToastUtil, DefaultService, AuthService, ListModel) {\n var vm = this;\n\n vm.itemClicked = function () {\n if (vm.selectedEvt != null) {\n $interval(callSelectedEvt, 50, 1);\n }\n }\n\n function callSelectedEvt() {\n if (angular.isDefined(vm.selectedEvt)) {\n vm.selectedEvt();\n }\n }\n\n vm.blurEvent = function () {\n $interval(onBlur, 100, 1);\n };\n\n function onBlur() {\n var itemFound = false;\n if (typeof vm.vendorObj == \"string\") {\n angular.forEach(vm.vendors, function (item) {\n if (item.Title == vm.vendorObj) {\n vm.vendorObj = item;\n vm.itemClicked();\n itemFound = true;\n }\n });\n\n if (!itemFound) {\n vm.vendorObj = \"\";\n }\n }\n }\n\n function watchList() {\n $scope.$watch(\"ctrl.vendorListObj\", function () {\n $interval(initListViewModel, 250, 1);\n containsInListVendors();\n });\n }\n\n /**\n * Watch partId when isFilterPart.\n */\n function watchPartId() {\n if (vm.isTrue(vm.isFilterPart)) {\n $scope.$watch(\"ctrl.partId\", function () {\n $interval(loadVendors, 250, 1);\n });\n }\n }\n\n vm.addVendor = function () {\n if (vm.isDisabled === false && vm.vendorObj != \"\") {\n if (!isValidVendor()) {\n ToastUtil.showToastMessage($translate.instant(\"auto.complete.vendor.invalid.msg\"), ToastUtil.ToastType.WARN);\n } else if (selectedVendorsContainsVendor()) {\n ToastUtil.showToastMessage($translate.instant(\"auto.complete.vendor.duplicated.msg\"), ToastUtil.ToastType.WARN);\n } else {\n vm.listModelValues.items.push(angular.copy(vm.vendorObj));\n vm.vendorListObj = vm.listModelValues.items;\n vm.vendorObj = \"\";\n validateFormInputList();\n }\n }\n }\n\n vm.isTrue = function (value) {\n return (value === true || value == \"true\");\n }\n\n function initListViewModel() {\n var nameStyle = \"width: 30%;\";\n\n var properties = [\n ListModel.getProperties(\"label.name\", \"Title\", false, null, nameStyle, null, null)\n ];\n //Build menu\n var actionMenuItems = [\n ListModel.getActionMenuItem(ListModel.ActionMenuEnum.DELETE, \"Id\", \"Title\", deleteVendorFromList)\n ];\n var actionMenu = ListModel.getActionMenu(actionMenuItems, ListModel.ActionMenuTypeEnum.INLINE);\n vm.listModelValues = ListModel.getListModel(properties, vm.vendorListObj, actionMenu);\n validateFormInputList();\n\n }\n\n\n function validateFormInputList() {\n if (vm.isTrue(vm.isListComponent) && vm.formVendor != null && vm.nameToValidate != null) {\n if (vm.vendorListObj.length == 0) {\n vm.formVendor[vm.nameToValidate].$setValidity('validQtdMin', false, vm.formVendor[vm.nameToValidate]);\n } else {\n vm.formVendor[vm.nameToValidate].$setValidity('validQtdMin', true, vm.formVendor[vm.nameToValidate]);\n }\n }\n }\n\n function deleteVendorFromList(id) {\n\n angular.forEach(vm.listModelValues.items, function (item, key) {\n if (item.Id == id) {\n vm.listModelValues.items.splice(key, 1);\n validateFormInputList();\n }\n });\n\n }\n\n function isValidVendor() {\n var isValid = false;\n if (angular.isString(vm.vendorObj)) {\n angular.forEach(vm.vendorListObj, function (item) {\n if (item.Title == vm.vendorObj) {\n isValid = true;\n }\n });\n } else {\n isValid = true;\n }\n return isValid;\n }\n\n function selectedVendorsContainsVendor() {\n var contains = false;\n angular.forEach(vm.listModelValues.items, function (item) {\n if (item.Id == vm.vendorObj.Id) {\n contains = true;\n }\n });\n return contains;\n }\n\n /**\n * If isFilterPart must load vendors only if partId is fileld.\n */\n function loadVendors() {\n if (vm.isTrue(vm.isFilterPart)) {\n if (angular.isDefined(vm.partId) && vm.partId > 0) {\n executeLoadVendors();\n } else {\n vm.vendors = [];\n vm.vendorObj = \"\";\n }\n\n } else {\n executeLoadVendors();\n }\n }\n\n function executeLoadVendors() {\n var filterVendor = {\n CsActive: vm.filterOnlyActive == true || vm.filterOnlyActive == \"true\" ? 1 : \"\",\n GenericFilterID: vm.partId\n }\n setExtraFilters(filterVendor);\n DefaultService.loadVendors(filterVendor)\n .then(onLoadVendorResponse)\n .catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"auto.complete.vendor.directive.load.error\"), ToastUtil.ToastType.WARN);\n });\n }\n\n function onLoadVendorResponse(response) {\n vm.vendors = angular.copy(response);\n if (vm.vendorObj) {\n containsInListVendors();\n }\n if (!vm.vendorObj && vm.vendors.length == 1) {\n vm.vendorObj = vm.vendors[0];\n vm.itemClicked();\n }\n\n }\n\n function setExtraFilters(filterVendor) {\n if (angular.isDefined(vm.extraFilters) && vm.extraFilters != null) {\n for (var key in vm.extraFilters) {\n filterVendor[key] = vm.extraFilters[key];\n }\n }\n }\n\n function init() {\n vm.vendors = [];\n watchList();\n watchPartId();\n\n if (!vm.vendorObj) {\n vm.vendorObj = \"\";\n }\n\n if (angular.isUndefined(vm.isDisabled)) {\n vm.isDisabled = false;\n }\n\n if (angular.isUndefined(vm.isRequired)) {\n vm.isRequired = false;\n }\n\n if (angular.isUndefined(vm.filterOnlyActive)) {\n vm.filterOnlyActive = true;\n }\n\n if (angular.isUndefined(vm.isListComponent)) {\n vm.isListComponent = false;\n }\n\n if (angular.isUndefined(vm.formVendor)) {\n vm.formVendor = null;\n }\n if (angular.isUndefined(vm.nameToValidate)) {\n vm.nameToValidate = null;\n }\n\n if (angular.isUndefined(vm.isFilterPart)) {\n vm.isFilterPart = false;\n }\n\n loadVendors();\n initListViewModel();\n }\n\n function containsInListVendors() {\n var contains = false;\n for (var i = 0; i < vm.vendors.length; i++) {\n if (vm.vendors[i].Id == vm.vendorObj.Id) {\n contains = true;\n break;\n }\n }\n if (!contains) {\n vm.vendors.unshift(vm.vendorObj);\n }\n }\n\n init();\n }\n\n function AutoCompleteVendorDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'AutoCompleteVendorController',\n transclude: true,\n templateUrl: \"app/components/auto_complete/vendor/auto-complete-vendor.html\",\n bindToController: true,\n scope: {\n vendorObj: '=?',\n formVendor: '=?',\n nameToValidate: '@?',\n isDisabled: '=?',\n isRequired: '=?',\n selectedEvt: '&?',\n filterOnlyActive: '@?',\n isListComponent: '@?',\n vendorListObj: '=?',\n isFilterPart: '@?',\n partId: '=?',\n extraFilters: '=?',\n dataset: '=?'\n\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('AutoCompleteVendorController', AutoCompleteVendorController)\n .directive('autoCompleteVendor', AutoCompleteVendorDirective);\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(AutoCompleteVariantOrtTranslate);\n\n /** @ngInject */\n function AutoCompleteVariantOrtTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'auto.complete.variant.directive.placeholder': 'Select a variant',\n 'auto.complete.variant.directive.required': 'The variant field is required.',\n 'auto.complete.variant.directive.load.error': 'An error occurred while trying to load the variant list.'\n });\n\n $translateProvider.translations('pt', {\n 'auto.complete.variant.directive.placeholder': 'Selecione uma variante',\n 'auto.complete.variant.directive.required': 'O campo variante é obrigatório.',\n 'auto.complete.variant.directive.load.error': 'Ocorreu um erro ao tentar carregar a lista de variantes.'\n });\n }\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *Controller to Autocomplete Variant directive.\n */\n function AutoCompleteVariantOrtController($translate, $log, $scope, $interval, ToastUtil, DefaultService) {\n var vm = this;\n\n vm.itemClicked = function () {\n if (vm.selectedEvt != null) {\n $interval(callSelectedEvt, 150, 1);\n }\n };\n\n function callSelectedEvt() {\n vm.selectedEvt();\n }\n\n vm.blurEvent = function () {\n $interval(onBlur, 200, 1);\n };\n\n function onBlur() {\n if (!vm.variantObj) {\n vm.variantObj = \"\";\n vm.itemClicked();\n } else {\n angular.forEach(vm.variants, function (item) {\n if (item.Code == vm.variantObj) {\n vm.variantObj = item;\n vm.itemClicked();\n }\n });\n }\n }\n\n function loadVariantsOrt() {\n var filterVariant = {\n CsActive: vm.filterOnlyActive == true || vm.filterOnlyActive == \"true\" ? 1 : \"\"\n };\n\n DefaultService.loadVariantsOrt(filterVariant)\n .then(function (response) {\n vm.variants = angular.copy(response);\n if (vm.variantObj) {\n containsInListVariant();\n }\n if (!vm.variantObj && vm.variants.length == 1) {\n vm.variantObj = vm.variants[0];\n vm.itemClicked();\n }\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"auto.complete.variant.directive.load.error\"), ToastUtil.ToastType.WARN);\n });\n }\n\n function init() {\n vm.variants = [];\n if (!vm.variantObj) {\n vm.variantObj = \"\";\n }\n\n if (angular.isUndefined(vm.isDisabled)) {\n vm.isDisabled = false;\n }\n\n if (angular.isUndefined(vm.isRequired)) {\n vm.isRequired = false;\n }\n\n if (angular.isUndefined(vm.filterOnlyActive)) {\n vm.filterOnlyActive = true;\n }\n\n watchListVariantObj();\n loadVariantsOrt();\n }\n\n function watchListVariantObj() {\n $scope.$watch(\"ctrl.variantObj\", function (newValue) {\n if (newValue) {\n containsInListVariant();\n }\n });\n }\n\n function containsInListVariant() {\n var contains = false;\n for (var i = 0; i < vm.variants.length; i++) {\n if (vm.variants[i].Id == vm.variantObj.Id) {\n contains = true;\n break;\n }\n }\n if (!contains) {\n vm.variants.unshift(vm.variantObj);\n }\n }\n\n init();\n }\n\n function AutoCompleteVariantOrtDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'AutoCompleteVariantOrtController',\n transclude: true,\n templateUrl: \"app/components/auto_complete/variant-ort/auto-complete-variant-ort.html\",\n bindToController: true,\n scope: {\n variantObj: '=',\n isDisabled: '=?',\n isRequired: '=?',\n selectedEvt: '&?',\n filterModel: '=?',\n filterOnlyActive: '@?'\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('AutoCompleteVariantOrtController', AutoCompleteVariantOrtController)\n .directive('autoCompleteVariantOrt', AutoCompleteVariantOrtDirective);\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(AutoCompleteVariantTranslate);\n\n /** @ngInject */\n function AutoCompleteVariantTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'auto.complete.variant.directive.placeholder': 'Select a variant',\n 'auto.complete.variant.directive.required': 'The variant field is required.',\n 'auto.complete.variant.directive.load.error': 'An error occurred while trying to load the variant list.'\n });\n\n $translateProvider.translations('pt', {\n 'auto.complete.variant.directive.placeholder': 'Selecione uma variante',\n 'auto.complete.variant.directive.required': 'O campo variante é obrigatório.',\n 'auto.complete.variant.directive.load.error': 'Ocorreu um erro ao tentar carregar a lista de variantes.'\n });\n }\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *Controller to Autocomplete Variant directive.\n */\n function AutoCompleteVariantController($translate, $log, $scope, $interval, ToastUtil, DefaultService) {\n var vm = this;\n var lastSelectedVariant = {};\n\n vm.itemClicked = function () {\n $interval(updateVariantCopy, 150, 1);\n if (vm.selectedEvt != null) {\n $interval(callSelectedEvt, 150, 1);\n }\n };\n\n function updateVariantCopy() {\n lastSelectedVariant = angular.copy(vm.variantObj);\n }\n\n function callSelectedEvt() {\n vm.selectedEvt();\n }\n\n vm.blurEvent = function () {\n if (!vm.variantObj) {\n vm.variantObj = \"\";\n vm.itemClicked();\n } else {\n angular.forEach(vm.variants, function (item) {\n if (item.Code == vm.variantObj) {\n vm.variantObj = item;\n vm.itemClicked();\n }\n });\n }\n updateVariantObjWithLatest();\n };\n\n /**\n * Method to avoid null in variant directive.\n * Used only when vm.isAlwaysSelectOne is true.\n */\n function updateVariantObjWithLatest() {\n if (isTrue(vm.isAlwaysSelectOne) && (vm.variantObj == null || vm.variantObj == undefined || vm.variantObj == \"\")) {\n vm.variantObj = lastSelectedVariant;\n }\n }\n\n function loadVariants() {\n var filterVariant = {\n CsActive: vm.filterOnlyActive == true || vm.filterOnlyActive == \"true\" ? 1 : \"\"\n };\n\n DefaultService.loadVariants(filterVariant)\n .then(function (response) {\n vm.variants = angular.copy(response);\n if (vm.variantObj) {\n containsInListVariant();\n }\n if (!vm.variantObj && vm.variants.length == 1) {\n vm.variantObj = vm.variants[0];\n vm.itemClicked();\n }\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"auto.complete.variant.directive.load.error\"), ToastUtil.ToastType.WARN);\n });\n }\n\n function loadVariantByModel() {\n if (vm.filterModel && vm.filterModel.Id > 0) {\n DefaultService.loadVariantByModel(vm.filterModel.Id)\n .then(function (response) {\n vm.variants = angular.copy(response);\n if (vm.variantObj) {\n containsInListVariant();\n }\n if (!vm.variantObj && vm.variants.length == 1 || isTrue(vm.isAlwaysSelectOne)) {\n vm.variantObj = vm.variants[0];\n vm.itemClicked();\n }\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"auto.complete.variant.directive.load.error\"), ToastUtil.ToastType.WARN);\n });\n }\n }\n\n function watchList() {\n $scope.$watch(\"ctrl.filterModel\", function (newValue) {\n if (!newValue || angular.isUndefined(newValue) || newValue == null || angular.isUndefined(newValue.Id) || newValue.Id <= 0) {\n vm.variants = [];\n vm.variantObj = \"\";\n } else {\n loadVariantByModel();\n }\n\n updateVariantObjWithLatest();\n });\n }\n\n function isTrue(value) {\n return (value === true || value === \"true\");\n }\n\n function init() {\n vm.variants = [];\n if (!vm.variantObj) {\n vm.variantObj = \"\";\n }\n\n if (angular.isUndefined(vm.isDisabled)) {\n vm.isDisabled = false;\n }\n\n if (angular.isUndefined(vm.isRequired)) {\n vm.isRequired = false;\n }\n\n if (angular.isUndefined(vm.filterOnlyActive)) {\n vm.filterOnlyActive = true;\n }\n\n if (angular.isUndefined(vm.isAlwaysSelectOne)) {\n vm.isAlwaysSelectOne = false;\n }\n watchListVariantObj();\n if (angular.isUndefined(vm.filterByModel) || !vm.filterByModel) {\n loadVariants();\n } else {\n watchList();\n }\n }\n\n function watchListVariantObj() {\n $scope.$watch(\"ctrl.variantObj\", function (newValue) {\n if (newValue) {\n containsInListVariant();\n }\n });\n }\n\n function containsInListVariant() {\n var contains = false;\n for (var i = 0; i < vm.variants.length; i++) {\n if (vm.variants[i].Id == vm.variantObj.Id) {\n contains = true;\n break;\n }\n }\n if (!contains) {\n vm.variants.unshift(vm.variantObj);\n }\n }\n\n init();\n }\n\n function AutoCompleteVariantDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'AutoCompleteVariantController',\n transclude: true,\n templateUrl: \"app/components/auto_complete/variant/auto-complete-variant.html\",\n bindToController: true,\n scope: {\n variantObj: '=',\n isDisabled: '=?',\n isRequired: '=?',\n selectedEvt: '&?',\n filterModel: '=?',\n filterByModel: '@?',\n filterOnlyActive: '@?',\n isAlwaysSelectOne: '@?'\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('AutoCompleteVariantController', AutoCompleteVariantController)\n .directive('autoCompleteVariant', AutoCompleteVariantDirective);\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(AutoCompleteTurnTranslate);\n\n /** @ngInject */\n function AutoCompleteTurnTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'auto.complete.turn.directive.placeholder': 'Select shift',\n 'auto.complete.turn.directive.required': 'Shift field is required',\n 'auto.complete.turn.directive.load.error': 'An error occurred while trying to load the list of shifts'\n });\n\n $translateProvider.translations('pt', {\n 'auto.complete.turn.directive.placeholder': 'Selecione o turno',\n 'auto.complete.turn.directive.required': 'O campo turno é obrigatório',\n 'auto.complete.turn.directive.load.error': 'Ocorreu um erro ao tentar carregar a lista de turnos'\n });\n }\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *Controller to Autocomplete Turn directive.\n */\n function AutoCompleteTurnController($translate, $log, $scope, $interval, ToastUtil, DefaultService, AuthService) {\n var vm = this;\n\n vm.itemClicked = function () {\n if (vm.selectedEvt != null) {\n $interval(callSelectedEvt, 50, 1);\n }\n }\n\n function callSelectedEvt() {\n vm.selectedEvt();\n }\n\n vm.blurEvent = function () {\n if (!vm.turnObj) {\n vm.turnObj = \"\";\n vm.itemClicked();\n } else {\n angular.forEach(vm.turns, function (item) {\n if (item.Title == vm.turnObj) {\n vm.turnObj = item;\n vm.itemClicked();\n }\n });\n }\n };\n\n function loadTurns() {\n var filterTurn = {\n BusinessId: AuthService.getBusinessId(),\n CsActive: vm.filterOnlyActive == true || vm.filterOnlyActive == \"true\" ? 1 : \"\"\n }\n DefaultService.loadTurn(filterTurn).then(function (response) {\n vm.turns = angular.copy(response);\n if (vm.turnObj) {\n containsInListTurn();\n }\n if (!vm.turnObj && vm.turns.length == 1) {\n vm.turnObj = vm.turns[0];\n vm.itemClicked();\n }\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"auto.complete.turn.directive.load.error\"), ToastUtil.ToastType.WARN);\n });\n }\n\n function init() {\n vm.turns = [];\n\n if (!vm.turnObj) {\n vm.turnObj = \"\";\n }\n\n if (angular.isUndefined(vm.isDisabled)) {\n vm.isDisabled = false;\n }\n\n if (angular.isUndefined(vm.isRequired)) {\n vm.isRequired = false;\n }\n\n if (angular.isUndefined(vm.filterOnlyActive)) {\n vm.filterOnlyActive = true;\n }\n\n watchList();\n loadTurns();\n }\n\n function watchList() {\n $scope.$watch(\"ctrl.turnObj\", function (newValue) {\n if (newValue) {\n containsInListTurn();\n }\n });\n }\n\n function containsInListTurn() {\n var contains = false;\n for (var i = 0; i < vm.turns.length; i++) {\n if (vm.turns[i].Id == vm.turnObj.Id) {\n contains = true;\n break;\n }\n }\n if (!contains) {\n vm.turns.unshift(vm.turnObj);\n }\n }\n\n init();\n }\n\n function AutoCompleteTurnDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'AutoCompleteTurnController',\n transclude: true,\n templateUrl: \"app/components/auto_complete/turn/auto-complete-turn.html\",\n bindToController: true,\n scope: {\n turnObj: '=',\n isDisabled: '=?',\n isRequired: '=?',\n selectedEvt: '&?',\n filterOnlyActive: '@?'\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('AutoCompleteTurnController', AutoCompleteTurnController)\n .directive('autoCompleteTurn', AutoCompleteTurnDirective);\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(AutoCompleteTestTypeTranslate);\n\n /** @ngInject */\n function AutoCompleteTestTypeTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'auto.complete.testtype.directive.placeholder': 'Select a test type',\n 'auto.complete.testtype.directive.load.error': 'An error occurred while trying to load the test type list.'\n });\n\n $translateProvider.translations('pt', {\n 'auto.complete.testtype.directive.placeholder': 'Selecione um tipo de teste',\n 'auto.complete.testtype.directive.load.error': 'An error occurred while trying to load the test type list.'\n });\n }\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *Controller to Autocomplete testType directive.\n */\n function AutoCompleteTestTypeController($translate, $window, $log, $scope, $interval, ToastUtil, DefaultService) {\n var vm = this;\n\n\n vm.itemClicked = function () {\n if (vm.selectedEvt != null) {\n $interval(callSelectedEvt, 50, 1);\n }\n }\n\n function callSelectedEvt() {\n vm.selectedEvt();\n }\n\n vm.blurEvent = function () {\n $interval(onBlur, 50, 1);\n };\n\n\n function onBlur() {\n var itemFound = false;\n if (typeof vm.testTypeObj == \"string\") {\n angular.forEach(vm.testTypeList, function (item) {\n if (item.Title == vm.testTypeObj) {\n vm.testTypeObj = item;\n vm.itemClicked();\n itemFound = true;\n }\n });\n\n if (!itemFound) {\n vm.testTypeObj = \"\";\n }\n }\n }\n\n function loadInspectionType() {\n var searchParams = {\n CsActive: isTrue(vm.filterOnlyActive) ? '1' : ''\n };\n\n DefaultService.loadTestType(searchParams).then(function (response) {\n vm.testTypeList = angular.copy(response);\n if (vm.testTypeObj) {\n containsInListTestType();\n }\n if (!vm.testTypeObj && vm.testTypeList.length == 1) {\n vm.testTypeObj = vm.testTypeList[0];\n vm.itemClicked();\n }\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"auto.complete.testtype.directive.load.error\"), ToastUtil.ToastType.WARN);\n });\n }\n\n function isTrue(value) {\n var result = false;\n if (value === true || value == \"true\") {\n result = true;\n }\n return result;\n }\n\n function init() {\n vm.testTypeList = [];\n if (angular.isUndefined(vm.testTypeObj)) {\n vm.testTypeObj = \"\";\n }\n\n if (angular.isUndefined(vm.isDisabled)) {\n vm.isDisabled = false;\n }\n\n if (angular.isUndefined(vm.isRequired)) {\n vm.isRequired = false;\n }\n\n if (angular.isUndefined(vm.filterOnlyActive)) {\n vm.filterOnlyActive = true;\n }\n\n watchList();\n loadInspectionType();\n }\n\n function watchList() {\n $scope.$watch(\"ctrl.testTypeObj\", function (newValue) {\n if (newValue) {\n containsInListTestType();\n }\n });\n }\n\n function containsInListTestType() {\n var contains = false;\n for (var i = 0; i < vm.testTypeList.length; i++) {\n if (vm.testTypeList[i].Id == vm.testTypeObj.Id) {\n contains = true;\n break;\n }\n }\n if (!contains) {\n vm.testTypeList.unshift(vm.testTypeObj);\n }\n }\n\n init();\n }\n\n function AutoCompleteTestTypeDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'AutoCompleteTestTypeController',\n transclude: true,\n templateUrl: \"app/components/auto_complete/test-type/auto-complete-test-type.html\",\n bindToController: true,\n scope: {\n testTypeObj: '=',\n isDisabled: '=?',\n isRequired: '=?',\n selectedEvt: '&?',\n filterOnlyActive: '@?'\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('AutoCompleteTestTypeController', AutoCompleteTestTypeController)\n .directive('autoCompleteTestType', AutoCompleteTestTypeDirective);\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(AutoCompleteTestRuleTranslate);\n\n /** @ngInject */\n function AutoCompleteTestRuleTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'auto.complete.testrule.directive.placeholder': 'Select a rule',\n 'auto.complete.testrule.directive.load.error': 'An error occurred while trying to load the rule list.'\n });\n\n $translateProvider.translations('pt', {\n 'auto.complete.testrule.directive.placeholder': 'Selecione um tipo de regra',\n 'auto.complete.testrule.directive.load.error': 'Ocorreu um erro ao tentar carregar a lista de tipo de regra.'\n });\n }\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *Controller to Autocomplete testRule directive.\n */\n function AutoCompleteTestRuleController($translate, $window, $log, $scope, $interval, ToastUtil, DefaultService) {\n var vm = this;\n\n\n vm.itemClicked = function () {\n if (vm.selectedEvt != null) {\n $interval(callSelectedEvt, 50, 1);\n }\n };\n\n function callSelectedEvt() {\n vm.selectedEvt();\n }\n\n vm.blurEvent = function () {\n $interval(onBlur, 50, 1);\n };\n\n\n function onBlur() {\n var itemFound = false;\n if (typeof vm.testRuleObj == \"string\") {\n angular.forEach(vm.testRuleList, function (item) {\n if (item.Title == vm.testRuleObj) {\n vm.testRuleObj = item;\n vm.itemClicked();\n itemFound = true;\n }\n });\n\n if (!itemFound) {\n vm.testRuleObj = \"\";\n }\n }\n }\n\n function loadTestRule() {\n var searchParams = {\n CsActive: (isTrue(vm.listDisabled) ? '' : '1'),\n IsListFromUnion: (isTrue(vm.listAssociated) ? true : false)\n };\n DefaultService.loadTestRule(searchParams)\n .then(function (response) {\n vm.testRuleList = angular.copy(response);\n if (vm.testRuleObj) {\n containsInListTestRule();\n }\n if (!vm.testRuleObj && vm.testRuleList.length == 1) {\n vm.testRuleObj = vm.testRuleList[0];\n vm.itemClicked();\n }\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"auto.complete.testrule.directive.load.error\"), ToastUtil.ToastType.WARN);\n });\n }\n\n function isTrue(value) {\n var result = false;\n if (value === true || value == \"true\") {\n result = true;\n }\n return result;\n }\n\n function init() {\n vm.testRuleList = [];\n if (angular.isUndefined(vm.testRuleObj) || angular.equals(vm.testRuleObj, {})) {\n vm.testRuleObj = \"\";\n }\n\n if (angular.isUndefined(vm.isDisabled)) {\n vm.isDisabled = false;\n }\n\n if (angular.isUndefined(vm.isRequired)) {\n vm.isRequired = false;\n }\n\n if (angular.isUndefined(vm.listDisabled)) {\n vm.listDisabled = false;\n }\n\n if (angular.isUndefined(vm.listAssociated)) {\n vm.listAssociated = true;\n }\n\n watchList();\n loadTestRule();\n }\n\n function watchList() {\n $scope.$watch(\"ctrl.testRuleObj\", function (newValue) {\n if (newValue) {\n containsInListTestRule();\n }\n });\n }\n\n function containsInListTestRule() {\n var contains = false;\n for (var i = 0; i < vm.testRuleList.length; i++) {\n if (vm.testRuleList[i].Id == vm.testRuleObj.Id) {\n contains = true;\n break;\n }\n }\n if (!contains) {\n vm.testRuleList.unshift(vm.testRuleObj);\n }\n }\n\n init();\n }\n\n function AutoCompleteTestRuleDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'AutoCompleteTestRuleController',\n transclude: true,\n templateUrl: \"app/components/auto_complete/test-rule/auto-complete-test-rule.html\",\n bindToController: true,\n scope: {\n testRuleObj: '=',\n listAssociated: '@?',\n isDisabled: '=?',\n isRequired: '=?',\n selectedEvt: '&?',\n listDisabled: '@'\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('AutoCompleteTestRuleController', AutoCompleteTestRuleController)\n .directive('autoCompleteTestRule', AutoCompleteTestRuleDirective);\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(AutoCompleteTestInspecTypeTranslate);\n\n /** @ngInject */\n function AutoCompleteTestInspecTypeTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'auto.complete.testinspectype.directive.placeholder': 'Select a inspection type',\n 'auto.complete.testinspectype.directive.load.error': 'An error occurred while trying to load the inspection type list.'\n });\n\n $translateProvider.translations('pt', {\n 'auto.complete.testinspectype.directive.placeholder': 'Selecione um tipo de inspeção',\n 'auto.complete.testinspectype.directive.load.error': 'Ocorreu um erro ao tentar carregar a lista de tipo de inspeção.'\n });\n }\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *Controller to Autocomplete testInspectionType directive.\n */\n function AutoCompleteTestInspectionTypeController($translate, $window, $log, $scope, $interval, ToastUtil, DefaultService) {\n var vm = this;\n\n\n vm.itemClicked = function () {\n if (vm.selectedEvt != null) {\n $interval(callSelectedEvt, 50, 1);\n }\n };\n\n function callSelectedEvt() {\n vm.selectedEvt();\n }\n\n vm.blurEvent = function () {\n $interval(onBlur, 50, 1);\n };\n\n function onBlur() {\n var itemFound = false;\n if (typeof vm.inspecTypeObj == \"string\") {\n angular.forEach(vm.inspecTypeList, function (item) {\n if (item.Title == vm.inspecTypeObj) {\n vm.inspecTypeObj = item;\n vm.itemClicked();\n itemFound = true;\n }\n });\n\n if (!itemFound) {\n vm.inspecTypeObj = \"\";\n }\n }\n }\n\n function loadInspectionType() {\n var searchParams = {\n CsActive: (isTrue(vm.listDisabled) ? '' : '1'),\n IsListFromUnion: (isTrue(vm.listAssociated) ? true : false)\n };\n DefaultService.loadTestInspectionType(searchParams).then(function (response) {\n vm.inspecTypeList = angular.copy(response);\n if (vm.inspecTypeObj) {\n containsInListTestInspectionType();\n }\n if (!vm.inspecTypeObj && vm.inspecTypeList.length == 1) {\n vm.inspecTypeObj = vm.inspecTypeList[0];\n vm.itemClicked();\n }\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"auto.complete.testinspectype.directive.load.error\"), ToastUtil.ToastType.WARN);\n });\n }\n\n function isTrue(value) {\n var result = false;\n if (value === true || value == \"true\") {\n result = true;\n }\n return result;\n }\n\n function init() {\n vm.inspecTypeList = [];\n if (angular.isUndefined(vm.inspecTypeObj) || angular.equals(vm.inspecTypeObj, {})) {\n vm.inspecTypeObj = \"\";\n }\n\n if (angular.isUndefined(vm.isDisabled)) {\n vm.isDisabled = false;\n }\n\n if (angular.isUndefined(vm.isRequired)) {\n vm.isRequired = false;\n }\n\n if (angular.isUndefined(vm.listDisabled)) {\n vm.listDisabled = false;\n }\n\n if (angular.isUndefined(vm.listAssociated)) {\n vm.listAssociated = true;\n }\n\n watchList();\n loadInspectionType();\n }\n\n function watchList() {\n $scope.$watch(\"ctrl.inspecTypeObj\", function (newValue) {\n if (newValue) {\n containsInListTestInspectionType();\n }\n });\n }\n\n function containsInListTestInspectionType() {\n var contains = false;\n for (var i = 0; i < vm.inspecTypeList.length; i++) {\n if (vm.inspecTypeList[i].Id == vm.inspecTypeObj.Id) {\n contains = true;\n break;\n }\n }\n if (!contains) {\n vm.inspecTypeList.unshift(vm.inspecTypeObj);\n }\n }\n\n init();\n }\n\n function AutoCompleteTestInspectionTypeDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'AutoCompleteTestInspectionTypeController',\n transclude: true,\n templateUrl: \"app/components/auto_complete/test-inspection-type/auto-complete-test-inspection-type.html\",\n bindToController: true,\n scope: {\n inspecTypeObj: '=',\n listAssociated: '@?',\n isDisabled: '=?',\n isRequired: '=?',\n selectedEvt: '&?',\n listDisabled: '@'\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('AutoCompleteTestInspectionTypeController', AutoCompleteTestInspectionTypeController)\n .directive('autoCompleteTestInspecType', AutoCompleteTestInspectionTypeDirective);\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(AutoCompleteTestInspecSubTypeTranslate);\n\n /** @ngInject */\n function AutoCompleteTestInspecSubTypeTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'auto.complete.subtype.directive.placeholder': 'Select a inspection sub type',\n 'auto.complete.subtype.directive.load.error': 'An error occurred while trying to load the inspection sub type list.',\n 'test.ort.type.table.subtype.label': 'Test Inspection Sub Type'\n });\n\n $translateProvider.translations('pt', {\n 'auto.complete.subtype.directive.placeholder': 'Selecione um tipo de sub inspeção',\n 'auto.complete.subtype.directive.load.error': 'Ocorreu um erro ao tentar carregar a lista de sub tipo de inspeção.',\n 'test.ort.type.table.subtype.label': 'Sub Tipo de Inspeção de Teste'\n });\n }\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *Controller to Autocomplete TestInspecSubType directive.\n */\n function AutoCompleteTestInspecSubTypeController($translate, $log, $scope, $interval, ToastUtil, DefaultService) {\n var vm = this;\n var lastSelectedSubType = {};\n\n vm.itemClicked = function () {\n $interval(updateSubTypeCopy, 150, 1);\n if (vm.selectedEvt != null) {\n $interval(callSelectedEvt, 150, 1);\n }\n };\n\n function updateSubTypeCopy() {\n lastSelectedSubType = angular.copy(vm.subTypeObj);\n }\n\n function callSelectedEvt() {\n vm.selectedEvt();\n }\n\n vm.blurEvent = function () {\n if (!vm.subTypeObj) {\n vm.subTypeObj = \"\";\n vm.itemClicked();\n } else {\n angular.forEach(vm.subTypes, function (item) {\n if (item.Title == vm.subTypeObj) {\n vm.subTypeObj = item;\n vm.itemClicked();\n }\n });\n }\n updateSubTypeObjWithLatest();\n };\n\n /**\n * Method to avoid null in subType directive.\n * Used only when vm.isAlwaysSelectOne is true.\n */\n function updateSubTypeObjWithLatest() {\n if (isTrue(vm.isAlwaysSelectOne) && (vm.subTypeObj == null || vm.subTypeObj == undefined || vm.subTypeObj == \"\")) {\n vm.subTypeObj = lastSelectedSubType;\n }\n }\n\n function loadSubTypes() {\n var filterSubType = {\n CsActive: vm.filterOnlyActive == true || vm.filterOnlyActive == \"true\" ? 1 : \"\"\n };\n\n DefaultService.loadTestInspectionSubType(filterSubType)\n .then(function (response) {\n vm.subTypes = angular.copy(response);\n if (vm.subTypeObj) {\n containsInListSubType();\n }\n if (!vm.subTypeObj && vm.subTypes.length == 1) {\n vm.subTypeObj = vm.subTypes[0];\n vm.itemClicked();\n }\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"auto.complete.subtype.directive.load.error\"), ToastUtil.ToastType.WARN);\n });\n }\n\n function loadSubTypesByInspecType() {\n if (vm.filterInspecType && vm.filterInspecType.Id > 0) {\n\n var filterSubType = {\n CsActive: vm.filterOnlyActive == true || vm.filterOnlyActive == \"true\" ? 1 : \"\",\n GenericFilterID: vm.filterInspecType.Id,\n IsListFromUnion: true\n };\n\n DefaultService.loadTestInspectionSubType(filterSubType)\n .then(function (response) {\n vm.subTypes = angular.copy(response);\n if (vm.subTypeObj) {\n containsInListSubType();\n }\n if (!vm.subTypeObj && vm.subTypes.length == 1 || isTrue(vm.isAlwaysSelectOne)) {\n vm.subTypeObj = vm.subTypes[0];\n vm.itemClicked();\n }\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"auto.complete.subtype.directive.load.error\"), ToastUtil.ToastType.WARN);\n });\n }\n }\n\n function watchList() {\n $scope.$watch(\"ctrl.filterInspecType\", function (newValue) {\n if (!newValue || angular.isUndefined(newValue) || newValue == null || angular.isUndefined(newValue.Id) || newValue.Id <= 0) {\n vm.subTypes = [];\n vm.subTypeObj = \"\";\n } else {\n loadSubTypesByInspecType();\n }\n updateSubTypeObjWithLatest();\n });\n }\n\n function isTrue(value) {\n return (value === true || value === \"true\");\n }\n\n function init() {\n vm.subTypes = [];\n if (!vm.subTypeObj) {\n vm.subTypeObj = \"\";\n }\n\n if (angular.isUndefined(vm.isDisabled)) {\n vm.isDisabled = false;\n }\n\n if (angular.isUndefined(vm.isRequired)) {\n vm.isRequired = false;\n }\n\n if (angular.isUndefined(vm.filterOnlyActive)) {\n vm.filterOnlyActive = true;\n }\n\n if (angular.isUndefined(vm.isAlwaysSelectOne)) {\n vm.isAlwaysSelectOne = false;\n }\n\n if (angular.isUndefined(vm.filterByInspecType) || !vm.filterByInspecType) {\n loadSubTypes();\n } else {\n watchList();\n }\n watchListSubTypeObj();\n }\n\n function watchListSubTypeObj() {\n $scope.$watch(\"ctrl.subTypeObj\", function (newValue) {\n if (newValue) {\n containsInListSubType();\n }\n });\n }\n\n function containsInListSubType() {\n var contains = false;\n for (var i = 0; i < vm.subTypes.length; i++) {\n if (vm.subTypes[i].Id == vm.subTypeObj.Id) {\n contains = true;\n break;\n }\n }\n if (!contains) {\n vm.subTypes.unshift(vm.subTypeObj);\n }\n }\n\n init();\n }\n\n function AutoCompleteTestInspecSubTypeDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'AutoCompleteTestInspecSubTypeController',\n transclude: true,\n templateUrl: \"app/components/auto_complete/test-inspection-sub-type/auto-complete-test-inspection-sub-type.html\",\n bindToController: true,\n scope: {\n subTypeObj: '=',\n isDisabled: '=?',\n isRequired: '=?',\n selectedEvt: '&?',\n filterInspecType: '=?',\n filterByInspecType: '@?',\n filterOnlyActive: '@?',\n isAlwaysSelectOne: '@?'\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('AutoCompleteTestInspecSubTypeController', AutoCompleteTestInspecSubTypeController)\n .directive('autoCompleteTestInspecSubType', AutoCompleteTestInspecSubTypeDirective);\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(AutoCompleteTasktypeTranslate);\n\n /** @ngInject */\n function AutoCompleteTasktypeTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'auto.complete.tasktype.directive.placeholder': 'Select the task type',\n 'auto.complete.tasktype.directive.required': 'Task type field is required',\n 'auto.complete.tasktype.directive.load.error': 'An error occurred while trying to load the task type list'\n });\n\n $translateProvider.translations('pt', {\n 'auto.complete.tasktype.directive.placeholder': 'Selecione o tipo da terefa',\n 'auto.complete.tasktype.directive.required': 'O campo tipo da tarefa é obrigatório',\n 'auto.complete.tasktype.directive.load.error': 'Ocorreu um erro ao tentar carregar a lista de tipo da terefa'\n });\n }\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *Controller to Autocomplete Tasktype directive.\n */\n function AutoCompleteTasktypeController($translate, $log, $scope, $interval, ToastUtil, DefaultService, AuthService) {\n var vm = this;\n\n vm.itemClicked = function () {\n if (vm.selectedEvt != null) {\n $interval(callSelectedEvt, 50, 1);\n }\n }\n\n function callSelectedEvt() {\n vm.selectedEvt();\n }\n\n vm.blurEvent = function () {\n if (!vm.tasktypeObj) {\n vm.tasktypeObj = \"\";\n vm.itemClicked();\n } else {\n angular.forEach(vm.tasktypes, function (item) {\n if (item.Title == vm.tasktypeObj) {\n vm.tasktypeObj = item;\n vm.itemClicked();\n }\n });\n }\n };\n\n function loadTasktypes() {\n var filterTasktype = {\n BusinessId: AuthService.getBusinessId(),\n CsActive: vm.filterOnlyActive == true || vm.filterOnlyActive == \"true\" ? 1 : \"\"\n }\n DefaultService.loadTypes(filterTasktype).then(function (response) {\n vm.tasktypes = angular.copy(response);\n if (vm.tasktypeObj) {\n containsInListTasktype();\n }\n if (!vm.tasktypeObj && vm.tasktypes.length == 1) {\n vm.tasktypeObj = vm.tasktypes[0];\n vm.itemClicked();\n }\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"auto.complete.tasktype.directive.load.error\"), ToastUtil.ToastType.WARN);\n });\n }\n\n function init() {\n vm.tasktypes = [];\n\n if (!vm.tasktypeObj) {\n vm.tasktypeObj = \"\";\n }\n\n if (angular.isUndefined(vm.isDisabled)) {\n vm.isDisabled = false;\n }\n\n if (angular.isUndefined(vm.isRequired)) {\n vm.isRequired = false;\n }\n\n if (angular.isUndefined(vm.filterOnlyActive)) {\n vm.filterOnlyActive = true;\n }\n\n watchList();\n loadTasktypes();\n }\n\n function watchList() {\n $scope.$watch(\"ctrl.tasktypeObj\", function (newValue) {\n if (newValue) {\n containsInListTasktype();\n }\n });\n }\n\n function containsInListTasktype() {\n var contains = false;\n for (var i = 0; i < vm.tasktypes.length; i++) {\n if (vm.tasktypes[i].Id == vm.tasktypeObj.Id) {\n contains = true;\n break;\n }\n }\n if (!contains) {\n vm.tasktypes.unshift(vm.tasktypeObj);\n }\n }\n\n init();\n }\n\n function AutoCompleteTasktypeDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'AutoCompleteTasktypeController',\n transclude: true,\n templateUrl: \"app/components/auto_complete/tasktype/auto-complete-tasktype.html\",\n bindToController: true,\n scope: {\n tasktypeObj: '=',\n isDisabled: '=?',\n isRequired: '=?',\n selectedEvt: '&?',\n filterOnlyActive: '@?'\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('AutoCompleteTasktypeController', AutoCompleteTasktypeController)\n .directive('autoCompleteTasktype', AutoCompleteTasktypeDirective);\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(AutoCompleteSynthesisTranslate);\n\n /** @ngInject */\n function AutoCompleteSynthesisTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'auto.complete.synthesis.directive.placeholder': 'Select a synthesis',\n 'auto.complete.synthesis.directive.load.error': 'An error occurred while trying to load the synthesis list.'\n });\n\n $translateProvider.translations('pt', {\n 'auto.complete.synthesis.directive.placeholder': 'Selecione uma síntese',\n 'auto.complete.synthesis.directive.load.error': 'Ocorreu um erro ao tentar carregar a lista de sínteses.'\n });\n }\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *Controller to Autocomplete Synthesis directive.\n */\n function AutoCompleteSynthesisController($translate, $window, $log, $scope, $interval, ToastUtil, DefaultService) {\n var vm = this;\n\n vm.isLocaleEn = false;\n\n vm.itemClicked = function () {\n if (vm.selectedEvt != null) {\n $interval(callSelectedEvt, 50, 1);\n }\n }\n\n function callSelectedEvt() {\n vm.selectedEvt();\n }\n\n vm.blurEvent = function () {\n $interval(onBlur, 50, 1);\n };\n\n\n function onBlur() {\n var itemFound = false;\n if (typeof vm.synthesisObj == \"string\") {\n angular.forEach(vm.synthesisList, function (item) {\n if ((vm.isLocaleEn && item.NameEn == vm.synthesisObj) || (!vm.isLocaleEn && item.NamePt == vm.synthesisObj)) {\n vm.synthesisObj = item;\n vm.itemClicked();\n itemFound = true;\n }\n });\n\n if (!itemFound) {\n vm.synthesisObj = \"\";\n }\n }\n }\n\n function loadSynthesis() {\n var searchParams = {}\n DefaultService.loadSynthesis(searchParams).then(function (response) {\n vm.synthesisList = angular.copy(response);\n if (vm.synthesisObj) {\n containsInListSynthesis();\n }\n if (!vm.synthesisObj && vm.synthesisList.length == 1) {\n vm.synthesisObj = vm.synthesisList[0];\n vm.itemClicked();\n }\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"auto.complete.synthesis.directive.load.error\"), ToastUtil.ToastType.WARN);\n });\n }\n\n function watchLocaleChange() {\n $scope.$watch(function () {\n return $window.localStorage.defaultLanguage;\n }, function () {\n vm.isLocaleEn = ($window.localStorage.defaultLanguage == \"en\");\n });\n }\n\n function init() {\n vm.synthesisList = [];\n if (angular.isUndefined(vm.synthesisObj) || angular.equals(vm.synthesisObj, {})) {\n vm.synthesisObj = \"\";\n }\n\n if (angular.isUndefined(vm.isDisabled)) {\n vm.isDisabled = false;\n }\n\n if (angular.isUndefined(vm.isRequired)) {\n vm.isRequired = false;\n }\n watchList();\n watchLocaleChange();\n loadSynthesis();\n }\n\n function watchList() {\n $scope.$watch(\"ctrl.synthesisObj\", function (newValue) {\n if (newValue) {\n containsInListSynthesis();\n }\n });\n }\n\n function containsInListSynthesis() {\n var contains = false;\n for (var i = 0; i < vm.synthesisList.length; i++) {\n if (vm.synthesisList[i].Id == vm.synthesisObj.Id) {\n contains = true;\n break;\n }\n }\n if (!contains) {\n vm.synthesisList.unshift(vm.synthesisObj);\n }\n }\n\n init();\n }\n\n function AutoCompleteSynthesisDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'AutoCompleteSynthesisController',\n transclude: true,\n templateUrl: \"app/components/auto_complete/synthesis/auto-complete-synthesis.html\",\n bindToController: true,\n scope: {\n synthesisObj: '=',\n isDisabled: '=?',\n isRequired: '=?',\n selectedEvt: '&?'\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('AutoCompleteSynthesisController', AutoCompleteSynthesisController)\n .directive('autoCompleteSynthesis', AutoCompleteSynthesisDirective);\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(AutoCompleteStationTranslate);\n\n /** @ngInject */\n function AutoCompleteStationTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'auto.complete.station.directive.placeholder': 'Select a station',\n 'auto.complete.station.directive.required': 'The station field is required.',\n 'auto.complete.station.directive.load.error': 'An error occurred while trying to load the station list.'\n });\n\n $translateProvider.translations('pt', {\n 'auto.complete.station.directive.placeholder': 'Selecione uma estação',\n 'auto.complete.station.directive.required': 'O campo estação é obrigatório.',\n 'auto.complete.station.directive.load.error': 'Ocorreu um erro ao tentar carregar a lista de estações.'\n });\n }\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *Controller to Autocomplete Station directive.\n */\n function AutoCompleteStationController($translate, $log, $scope, $interval, ToastUtil, DefaultService, AuthService) {\n var vm = this;\n\n vm.itemClicked = function () {\n if (vm.selectedEvt != null) {\n $interval(callSelectedEvt, 50, 1);\n }\n }\n\n function callSelectedEvt() {\n vm.selectedEvt();\n }\n\n vm.blurEvent = function () {\n if (!vm.stationObj) {\n vm.stationObj = \"\";\n vm.itemClicked();\n } else {\n angular.forEach(vm.stations, function (item) {\n if (item.Title == vm.stationObj) {\n vm.stationObj = item;\n vm.itemClicked();\n }\n });\n }\n };\n\n function loadStations() {\n var filterStation = {\n BusinessId: AuthService.getBusinessId(),\n CsActive: vm.filterOnlyActive == true || vm.filterOnlyActive == \"true\" ? 1 : \"\",\n DependencyFilterId: (vm.filterSection && angular.isDefined(vm.filterSection.Id)) ? vm.filterSection.Id : null\n }\n if (vm.filterSection && vm.filterSection.Id > 0) {\n DefaultService.loadStations(filterStation).then(function (response) {\n vm.stations = angular.copy(response);\n if (vm.stationObj) {\n containsInListStation();\n }\n if (!vm.stationObj && vm.stations.length == 1) {\n vm.stationObj = vm.stations[0];\n vm.itemClicked();\n }\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"auto.complete.station.directive.load.error\"), ToastUtil.ToastType.WARN);\n });\n }\n }\n\n function watchList() {\n $scope.$watch(\"ctrl.filterSection\", function (newValue) {\n if (!newValue || angular.isUndefined(newValue) || newValue == null || angular.isUndefined(newValue.Id) || newValue.Id <= 0) {\n vm.stations = [];\n vm.stationObj = \"\";\n } else {\n loadStations();\n }\n });\n }\n\n function init() {\n vm.stations = [];\n\n if (!vm.stationObj) {\n vm.stationObj = \"\";\n }\n\n if (angular.isUndefined(vm.isDisabled)) {\n vm.isDisabled = false;\n }\n\n if (angular.isUndefined(vm.isRequired)) {\n vm.isRequired = false;\n }\n\n if (angular.isUndefined(vm.filterOnlyActive)) {\n vm.filterOnlyActive = true;\n }\n\n watchStationObj();\n watchList();\n }\n\n function watchStationObj() {\n $scope.$watch(\"ctrl.stationObj\", function (newValue) {\n if (newValue) {\n containsInListStation();\n }\n });\n }\n\n function containsInListStation() {\n var contains = false;\n for (var i = 0; i < vm.stations.length; i++) {\n if (vm.stations[i].Id == vm.stationObj.Id) {\n contains = true;\n break;\n }\n }\n if (!contains) {\n vm.stations.unshift(vm.stationObj);\n }\n }\n\n init();\n }\n\n function AutoCompleteStationDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'AutoCompleteStationController',\n transclude: true,\n templateUrl: \"app/components/auto_complete/station/auto-complete-station.html\",\n bindToController: true,\n scope: {\n stationObj: '=',\n isDisabled: '=?',\n isRequired: '=?',\n selectedEvt: '&?',\n filterSection: '=?',\n filterOnlyActive: '@?'\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('AutoCompleteStationController', AutoCompleteStationController)\n .directive('autoCompleteStation', AutoCompleteStationDirective);\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(AutoCompleteSectionTranslate);\n\n /** @ngInject */\n function AutoCompleteSectionTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'auto.complete.section.directive.placeholder': 'Select a section/line',\n 'auto.complete.section.directive.required': 'The section field is required.',\n 'auto.complete.section.directive.load.error': 'There was an error trying to load the list of sections.'\n });\n\n $translateProvider.translations('pt', {\n 'auto.complete.section.directive.placeholder': 'Selecione uma seção/linha',\n 'auto.complete.section.directive.required': 'O campo seção é obrigatório.',\n 'auto.complete.section.directive.load.error': 'Ocorreu um erro ao tentar carregar a lista de secões.'\n });\n }\n})();\n\n(function () {\n\n 'use strict';\n\n\n /**\n *Controller to Autocomplete Section directive.\n */\n function AutoCompleteSectionController($translate, $log, $scope, $interval, ToastUtil, DefaultService, AuthService) {\n var vm = this;\n\n vm.sections = [];\n\n if (!vm.sectionObj || angular.equals(vm.sectionObj, {})) {\n vm.sectionObj = \"\";\n }\n\n if (angular.isUndefined(vm.isDisabled)) {\n vm.isDisabled = false;\n }\n\n if (angular.isUndefined(vm.isRequired)) {\n vm.isRequired = false;\n }\n\n if (angular.isUndefined(vm.filterBusiness)) {\n vm.filterBusiness = true;\n }\n\n if (angular.isUndefined(vm.filterOnlyActive)) {\n vm.filterOnlyActive = true;\n }\n\n vm.itemClicked = function () {\n if (vm.selectedEvt != null) {\n $interval(callSelectedEvt, 150, 1);\n }\n }\n\n function callSelectedEvt() {\n vm.selectedEvt();\n }\n\n vm.blurEvent = function () {\n if (!vm.sectionObj) {\n vm.sectionObj = \"\";\n vm.itemClicked();\n } else {\n angular.forEach(vm.sections, function (item) {\n if (item.Title == vm.sectionObj) {\n vm.sectionObj = item;\n vm.itemClicked();\n }\n });\n }\n };\n\n function init() {\n watchList();\n loadSections();\n }\n\n function loadSections() {\n var param = {\n CsActive: vm.filterOnlyActive == true || vm.filterOnlyActive == \"true\" ? 1 : \"\",\n BusinessId: vm.filterBusiness == true || vm.filterBusiness == \"true\" ? AuthService.getBusinessId() : 0\n }\n DefaultService.loadSections(param).then(function (response) {\n vm.sections = angular.copy(response);\n if (vm.sectionObj) {\n containsInListSection();\n }\n if (!vm.sectionObj && vm.sections.length == 1) {\n vm.sectionObj = vm.sections[0];\n vm.itemClicked();\n }\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"auto.complete.section.directive.load.error\"), ToastUtil.ToastType.WARN);\n });\n }\n\n function watchList() {\n $scope.$watch(\"ctrl.sectionObj\", function (newValue) {\n if (newValue) {\n containsInListSection();\n }\n });\n }\n\n function containsInListSection() {\n var contains = false;\n for (var i = 0; i < vm.sections.length; i++) {\n if (vm.sections[i].Id == vm.sectionObj.Id) {\n contains = true;\n break;\n }\n }\n if (!contains) {\n vm.sections.unshift(vm.sectionObj);\n }\n }\n\n init();\n }\n\n function AutoCompleteSectionDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'AutoCompleteSectionController',\n transclude: true,\n templateUrl: \"app/components/auto_complete/section/auto-complete-section.html\",\n bindToController: true,\n scope: {\n sectionObj: '=',\n isDisabled: '=?',\n isRequired: '=?',\n selectedEvt: '&?',\n filterBusiness: '@?',\n filterOnlyActive: '@?'\n\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('AutoCompleteSectionController', AutoCompleteSectionController)\n .directive('autoCompleteSection', AutoCompleteSectionDirective);\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(AutoCompleteRequestTypeTranslate);\n\n /** @ngInject */\n function AutoCompleteRequestTypeTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'auto.complete.request.directive.placeholder': 'Select a request type',\n 'auto.complete.request.directive.required': 'The request type field is required.',\n 'auto.complete.request.directive.load.error': 'An error occurred while trying to load the request type list.'\n });\n\n $translateProvider.translations('pt', {\n 'auto.complete.request.directive.placeholder': 'Selecione um tipo de solicitação',\n 'auto.complete.request.directive.required': 'O campo tipo de solicitação é obrigatório.',\n 'auto.complete.request.directive.load.error': 'Ocorreu um erro ao tentar carregar a lista de tipo de solicitação.'\n });\n }\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *Controller to Autocomplete RequestType directive.\n */\n function AutoCompleteRequestTypeController($translate, $log, $scope, $interval, ToastUtil, DefaultService, AuthService) {\n var vm = this;\n\n vm.itemClicked = function () {\n if (vm.selectedEvt != null) {\n $interval(callSelectedEvt, 50, 1);\n }\n }\n\n function callSelectedEvt() {\n vm.selectedEvt();\n }\n\n vm.blurEvent = function () {\n if (!vm.requestTypeObj) {\n vm.requestTypeObj = \"\";\n vm.itemClicked();\n } else {\n angular.forEach(vm.requestTypes, function (item) {\n if (item.Title == vm.requestTypeObj) {\n vm.requestTypeObj = item;\n vm.itemClicked();\n }\n });\n }\n };\n\n function loadRequestTypes() {\n var filterRequestType = {\n BusinessId: AuthService.getBusinessId(),\n CsActive: vm.filterOnlyActive == true || vm.filterOnlyActive == \"true\" ? 1 : \"\",\n orderByTitle: 1\n }\n if (vm.filterCategory && vm.filterCategory > 0) {\n filterRequestType.Category = vm.filterCategory;\n }\n\n DefaultService.loadRequestTypes(filterRequestType).then(function (response) {\n vm.requestTypes = angular.copy(response);\n if (vm.requestTypes.length == 1) {\n vm.requestTypeObj = vm.requestTypes[0];\n vm.itemClicked();\n } else {\n containsInListRequestType();\n }\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"auto.complete.request.directive.load.error\"), ToastUtil.ToastType.WARN);\n });\n }\n\n function init() {\n vm.requestTypes = [];\n\n if (!vm.requestTypeObj) {\n vm.requestTypeObj = \"\";\n }\n\n if (angular.isUndefined(vm.isDisabled)) {\n vm.isDisabled = false;\n }\n\n if (angular.isUndefined(vm.isRequired)) {\n vm.isRequired = false;\n }\n\n if (angular.isUndefined(vm.filterOnlyActive)) {\n vm.filterOnlyActive = true;\n }\n\n if (angular.isUndefined(vm.category)) {\n vm.category = undefined;\n }\n\n // watchModelObj();\n\n if (angular.isDefined(vm.filterByCategory) || vm.filterByCategory) {\n watchListFilterCategory();\n } else {\n loadRequestTypes();\n }\n\n }\n \n function watchListFilterCategory() {\n $scope.$watch(\"ctrl.filterCategory\", function (newValue) {\n if (!newValue || angular.isUndefined(newValue) || newValue == null ) {\n vm.requestTypes = [];\n vm.requestTypeObj = \"\";\n }\n loadRequestTypes();\n });\n }\n\n function containsInListRequestType() {\n var contains = false;\n if (vm.requestTypeObj) {\n for (var i = 0; i < vm.requestTypes.length; i++) {\n if (vm.requestTypes[i].Id == vm.requestTypeObj.Id) {\n contains = true;\n break;\n }\n }\n }\n\n if ( !contains ) {\n vm.requestTypeObj = undefined;\n }\n }\n\n // function watchModelObj() {\n // $scope.$watch(\"ctrl.requestTypeObj\", function (newValue) {\n // if (newValue) {\n // containsInListRequestType();\n // }\n // });\n // }\n\n init();\n }\n\n function AutoCompleteRequestTypeDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'AutoCompleteRequestTypeController',\n transclude: true,\n templateUrl: \"app/components/auto_complete/request_type/auto-complete-request-type.html\",\n bindToController: true,\n scope: {\n requestTypeObj: '=',\n isDisabled: '=?',\n isRequired: '=?',\n selectedEvt: '&?',\n filterOnlyActive: '@?',\n filterCategory: '=?',\n filterByCategory: '@?'\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('AutoCompleteRequestTypeController', AutoCompleteRequestTypeController)\n .directive('autoCompleteRequestType', AutoCompleteRequestTypeDirective);\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(AutoCompleteProjectTranslate);\n\n /** @ngInject */\n function AutoCompleteProjectTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'auto.complete.project.directive.placeholder': 'Select a project',\n 'auto.complete.project.directive.required': 'The project field is required.',\n 'auto.complete.project.directive.load.error': 'An error occurred while trying to load the project list.'\n });\n\n $translateProvider.translations('pt', {\n 'auto.complete.project.directive.placeholder': 'Selecione um projeto',\n 'auto.complete.project.directive.required': 'O campo projeto é obrigatório.',\n 'auto.complete.project.directive.load.error': 'Ocorreu um erro ao tentar carregar a lista de projetos.'\n });\n }\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *Controller to Autocomplete Project directive.\n */\n function AutoCompleteProjectController($translate, $log, $scope, $interval, ToastUtil, DefaultService, AuthService) {\n var vm = this;\n\n var lastSelectedProject = {};\n\n vm.atualizarModel = function () {\n if (vm.modelIsId) {\n vm.projectObj = vm.projectObj.Id;\n vm.projectName = vm.projectObj.Name;\n }\n };\n\n vm.itemClicked = function () {\n $interval(updateProjectCopy, 150, 1);\n if (vm.selectedEvt != null) {\n $interval(callSelectedEvt, 150, 1);\n }\n };\n\n\n function getProjectFromId(projectId) {\n if (vm.projects.length > 0 && vm.modelIsId) {\n angular.forEach(vm.projects, function (value) {\n if (value.Id == projectId) {\n vm.projectObj = angular.copy(value);\n }\n });\n }\n }\n\n function updateProjectCopy() {\n lastSelectedProject = angular.copy(vm.projectObj);\n }\n\n function callSelectedEvt() {\n vm.selectedEvt();\n }\n\n vm.blurEvent = function () {\n if (!vm.projectObj) {\n vm.projectObj = \"\";\n vm.itemClicked();\n } else {\n angular.forEach(vm.projects, function (item) {\n if (item.Title == vm.projectObj) {\n vm.projectObj = item;\n vm.itemClicked();\n }\n });\n }\n\n if (isTrue(vm.isAlwaysSelectOne) && (vm.projectObj == null || vm.projectObj == undefined || vm.projectObj == \"\")) {\n vm.projectObj = lastSelectedProject;\n }\n\n };\n\n function loadProjects() {\n var filterProject = {\n CsActive: vm.filterOnlyActive == true || vm.filterOnlyActive == \"true\" ? 1 : \"\",\n BusinessId: vm.filterByCompany == false || vm.filterByCompany == \"false\" ? AuthService.getBusinessId() : undefined,\n CompanyId: AuthService.getCompanyId()\n };\n DefaultService.loadProjects(filterProject).then(function (response) {\n vm.projects = angular.copy(response);\n if (vm.modelIsId) {\n getProjectFromId(vm.projectObj);\n }\n if (vm.projectObj) {\n containsInListProject();\n }\n if (!vm.projectObj && (vm.projects.length == 1 && (!vm.isOnlySearch || vm.isOnlySearch == 'false') && isTrue(vm.isAlwaysSelectOne)) || isTrue(vm.isAlwaysSelectOne)) {\n vm.projectObj = vm.projects[0];\n vm.itemClicked();\n }\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"auto.complete.project.directive.load.error\"), ToastUtil.ToastType.WARN);\n });\n }\n\n function loadProjectsByClient() {\n if (vm.filterClient && vm.filterClient.Id > 0) {\n var filterProject = {\n CsActive: vm.filterOnlyActive == true || vm.filterOnlyActive == \"true\" ? 1 : \"\",\n ClientId: vm.filterClient.Id,\n BusinessId: AuthService.getBusinessId()\n };\n DefaultService.loadProjects(filterProject).then(function (response) {\n vm.projects = angular.copy(response);\n if (vm.projectObj) {\n containsInListProject();\n }\n if (!vm.projectObj && (vm.projects.length == 1 && (!vm.isOnlySearch || vm.isOnlySearch == 'false')) || isTrue(vm.isAlwaysSelectOne)) {\n vm.projectObj = vm.projects[0];\n vm.itemClicked();\n }\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"auto.complete.project.directive.load.error\"), ToastUtil.ToastType.WARN);\n });\n }\n }\n\n function isTrue(value) {\n return (value === true || value === \"true\");\n }\n\n function watchList() {\n $scope.$watch(\"ctrl.filterClient\", function (newValue) {\n if (!newValue || angular.isUndefined(newValue) || newValue == null || angular.isUndefined(newValue.Id) || newValue.Id <= 0) {\n vm.projects = [];\n vm.projectObj = \"\";\n } else {\n loadProjectsByClient();\n }\n });\n }\n\n function init() {\n vm.projects = [];\n\n if (!vm.projectObj) {\n vm.projectObj = \"\";\n }\n\n if (angular.isUndefined(vm.isOnlySearch)) {\n vm.isOnlySearch = false;\n }\n\n if (angular.isUndefined(vm.isDisabled)) {\n vm.isDisabled = false;\n }\n\n if (angular.isUndefined(vm.isRequired)) {\n vm.isRequired = false;\n }\n\n if (angular.isUndefined(vm.filterOnlyActive)) {\n vm.filterOnlyActive = true;\n }\n\n if (angular.isUndefined(vm.filterByCompany)) {\n vm.filterByCompany = false;\n }\n\n if (angular.isUndefined(vm.isAlwaysSelectOne)) {\n vm.isAlwaysSelectOne = false;\n }\n\n watchClientObj();\n\n if (angular.isDefined(vm.filterByClient) || vm.filterByClient) {\n watchList();\n } else {\n loadProjects();\n }\n }\n\n function watchClientObj() {\n $scope.$watch(\"ctrl.projectObj\", function (newValue) {\n if (newValue) {\n containsInListProject();\n }\n });\n }\n\n function containsInListProject() {\n var contains = false;\n for (var i = 0; i < vm.projects.length; i++) {\n if (vm.projects[i].Id == vm.projectObj.Id) {\n contains = true;\n break;\n }\n }\n if (!contains) {\n vm.projects.unshift(vm.projectObj);\n }\n }\n\n init();\n }\n\n function AutoCompleteProjectDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'AutoCompleteProjectController',\n transclude: true,\n templateUrl: \"app/components/auto_complete/project/auto-complete-project.html\",\n bindToController: true,\n scope: {\n projectObj: '=',\n isDisabled: '=?',\n isRequired: '=?',\n selectedEvt: '&?',\n filterOnlyActive: '@?',\n filterByCompany: '@?',\n isOnlySearch: '@?',\n isAlwaysSelectOne: '@?',\n filterClient: '=?',\n filterByClient: '@?',\n modelIsId: '@?'\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('AutoCompleteProjectController', AutoCompleteProjectController)\n .directive('autoCompleteProject', AutoCompleteProjectDirective);\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(AutoCompletePartInspecTypeTranslate);\n\n /** @ngInject */\n function AutoCompletePartInspecTypeTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'auto.complete.partinspectype.directive.placeholder': 'Select a inspection type',\n 'auto.complete.partinspectype.directive.load.error': 'An error occurred while trying to load the inspection type list.'\n });\n\n $translateProvider.translations('pt', {\n 'auto.complete.partinspectype.directive.placeholder': 'Selecione um tipo de inspeção',\n 'auto.complete.partinspectype.directive.load.error': 'Ocorreu um erro ao tentar carregar a lista de tipo de inspeção.'\n });\n }\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *Controller to Autocomplete partInspectionType directive.\n */\n function AutoCompletePartInspectionTypeController($translate, $window, $log, $scope, $interval, ToastUtil, DefaultService) {\n var vm = this;\n\n\n vm.itemClicked = function () {\n if (vm.selectedEvt != null) {\n $interval(callSelectedEvt, 50, 1);\n }\n }\n\n function callSelectedEvt() {\n vm.selectedEvt();\n }\n\n vm.blurEvent = function () {\n $interval(onBlur, 50, 1);\n };\n\n function onBlur() {\n var itemFound = false;\n if (typeof vm.inspecTypeObj == \"string\") {\n angular.forEach(vm.inspecTypeList, function (item) {\n if (item.Title == vm.inspecTypeObj) {\n vm.inspecTypeObj = item;\n vm.itemClicked();\n itemFound = true;\n }\n });\n\n if (!itemFound) {\n vm.inspecTypeObj = \"\";\n }\n }\n }\n\n function loadInspectionType() {\n var searchParams = {\n CsActive: (isTrue(vm.listDisabled) ? '' : '1'),\n IsListFromUnion: (isTrue(vm.listAssociated) ? true : false)\n }\n DefaultService.loadPartInspectionType(searchParams).then(function (response) {\n vm.inspecTypeList = angular.copy(response);\n if (vm.inspecTypeObj) {\n containsInListInspectionType();\n }\n if (!vm.inspecTypeObj && vm.inspecTypeList.length == 1) {\n vm.inspecTypeObj = vm.inspecTypeList[0];\n vm.itemClicked();\n }\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"auto.complete.partinspectype.directive.load.error\"), ToastUtil.ToastType.WARN);\n });\n }\n\n function isTrue(value) {\n var result = false;\n if (value === true || value == \"true\") {\n result = true;\n }\n return result;\n }\n\n function init() {\n vm.inspecTypeList = [];\n if (angular.isUndefined(vm.inspecTypeObj) || angular.equals(vm.inspecTypeObj, {})) {\n vm.inspecTypeObj = \"\";\n }\n\n if (angular.isUndefined(vm.isDisabled)) {\n vm.isDisabled = false;\n }\n\n if (angular.isUndefined(vm.isRequired)) {\n vm.isRequired = false;\n }\n\n if (angular.isUndefined(vm.listDisabled)) {\n vm.listDisabled = false;\n }\n\n if (angular.isUndefined(vm.listAssociated)) {\n vm.listAssociated = true;\n }\n watchList();\n loadInspectionType();\n }\n\n function watchList() {\n $scope.$watch(\"ctrl.inspecTypeObj\", function (newValue) {\n if (newValue) {\n containsInListInspectionType();\n }\n });\n }\n\n function containsInListInspectionType() {\n var contains = false;\n for (var i = 0; i < vm.inspecTypeList.length; i++) {\n if (vm.inspecTypeList[i].Id == vm.inspecTypeObj.Id) {\n contains = true;\n break;\n }\n }\n if (!contains) {\n vm.inspecTypeList.unshift(vm.inspecTypeObj);\n }\n }\n\n init();\n }\n\n function AutoCompletePartInspectionTypeDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'AutoCompletePartInspectionTypeController',\n transclude: true,\n templateUrl: \"app/components/auto_complete/part_inspection_type/auto-complete-part-inspection-type.html\",\n bindToController: true,\n scope: {\n inspecTypeObj: '=',\n listAssociated: '@?',\n isDisabled: '=?',\n isRequired: '=?',\n selectedEvt: '&?',\n listDisabled: '@'\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('AutoCompletePartInspectionTypeController', AutoCompletePartInspectionTypeController)\n .directive('autoCompleteInspecType', AutoCompletePartInspectionTypeDirective);\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(AutoCompletePartTypeTranslate);\n\n /** @ngInject */\n function AutoCompletePartTypeTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'auto.complete.parttype.directive.placeholder': 'Select a part type',\n 'auto.complete.parttype.directive.load.error': 'An error occurred while trying to load the part type list.'\n });\n\n $translateProvider.translations('pt', {\n 'auto.complete.parttype.directive.placeholder': 'Selecione um tipo de peça',\n 'auto.complete.parttype.directive.load.error': 'Ocorreu um erro ao tentar carregar a lista de tipo de peça.'\n });\n }\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *Controller to Autocomplete partType directive.\n */\n function AutoCompletePartTypeController($translate, $window, $log, $scope, $interval, ToastUtil, DefaultService) {\n var vm = this;\n\n\n vm.itemClicked = function () {\n if (vm.selectedEvt != null) {\n $interval(callSelectedEvt, 50, 1);\n }\n }\n\n function callSelectedEvt() {\n vm.selectedEvt();\n }\n\n vm.blurEvent = function () {\n $interval(onBlur, 50, 1);\n };\n\n\n function onBlur() {\n var itemFound = false;\n if (typeof vm.partTypeObj == \"string\") {\n angular.forEach(vm.partTypeList, function (item) {\n if (item.Title == vm.partTypeObj) {\n vm.partTypeObj = item;\n vm.itemClicked();\n itemFound = true;\n }\n });\n\n if (!itemFound) {\n vm.partTypeObj = \"\";\n }\n }\n }\n\n function loadInspectionType() {\n var searchParams = {\n CsActive: isTrue(vm.listDisabled) ? '' : '1'\n }\n DefaultService.loadPartType(searchParams).then(function (response) {\n vm.partTypeList = angular.copy(response);\n if (vm.partTypeObj) {\n containsInListInspectionType();\n }\n if (!vm.partTypeObj && vm.partTypeList.length == 1) {\n vm.partTypeObj = vm.partTypeList[0];\n vm.itemClicked();\n }\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"auto.complete.parttype.directive.load.error\"), ToastUtil.ToastType.WARN);\n });\n }\n\n function isTrue(value) {\n var result = false;\n if (value === true || value == \"true\") {\n result = true;\n }\n return result;\n }\n\n function init() {\n vm.partTypeList = [];\n if (angular.isUndefined(vm.partTypeObj)) {\n vm.partTypeObj = \"\";\n }\n\n if (angular.isUndefined(vm.isDisabled)) {\n vm.isDisabled = false;\n }\n\n if (angular.isUndefined(vm.isRequired)) {\n vm.isRequired = false;\n }\n\n if (angular.isUndefined(vm.listDisabled)) {\n vm.listDisabled = false;\n }\n watchList();\n loadInspectionType();\n }\n\n function watchList() {\n $scope.$watch(\"ctrl.partTypeObj\", function (newValue) {\n if (newValue) {\n containsInListInspectionType();\n }\n });\n }\n\n function containsInListInspectionType() {\n var contains = false;\n for (var i = 0; i < vm.partTypeList.length; i++) {\n if (vm.partTypeList[i].Id == vm.partTypeObj.Id) {\n contains = true;\n break;\n }\n }\n if (!contains) {\n vm.partTypeList.unshift(vm.partTypeObj);\n }\n }\n\n init();\n }\n\n function AutoCompletePartTypeDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'AutoCompletePartTypeController',\n transclude: true,\n templateUrl: \"app/components/auto_complete/part-type/auto-complete-part-type.html\",\n bindToController: true,\n scope: {\n partTypeObj: '=',\n isDisabled: '=?',\n isRequired: '=?',\n selectedEvt: '&?',\n listDisabled: '@?'\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('AutoCompletePartTypeController', AutoCompletePartTypeController)\n .directive('autoCompletePartType', AutoCompletePartTypeDirective);\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(AutoCompletePartRuleTranslate);\n\n /** @ngInject */\n function AutoCompletePartRuleTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'auto.complete.partrule.directive.placeholder': 'Select a rule',\n 'auto.complete.partrule.directive.load.error': 'An error occurred while trying to load the rule list.'\n });\n\n $translateProvider.translations('pt', {\n 'auto.complete.partrule.directive.placeholder': 'Selecione uma regra',\n 'auto.complete.partrule.directive.load.error': 'Ocorreu um erro ao tentar carregar a lista de regras.'\n });\n }\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *Controller to Autocomplete partRule directive.\n */\n function AutoCompletePartRuleController($translate, $filter, $log, $scope, $interval, ToastUtil, DefaultService) {\n var vm = this;\n\n vm.itemClicked = function () {\n if (vm.selectedEvt != null) {\n $interval(callSelectedEvt, 50, 1);\n }\n }\n\n function callSelectedEvt() {\n vm.selectedEvt();\n }\n\n vm.blurEvent = function () {\n $interval(onBlur, 50, 1);\n };\n\n function onBlur() {\n var itemFound = false;\n if (typeof vm.partRuleObj == \"string\") {\n angular.forEach(vm.partRuleList, function (item) {\n if (item.Title == vm.partRuleObj) {\n vm.partRuleObj = item;\n vm.itemClicked();\n itemFound = true;\n }\n });\n\n if (!itemFound) {\n vm.partRuleObj = \"\";\n }\n }\n }\n\n function loadPartRule() {\n var searchParams = {\n CsActive: isTrue(vm.listDisabled) ? '' : '1'\n }\n DefaultService.loadPartRule(searchParams).then(function (response) {\n vm.partRuleList = angular.copy(response);\n vm.partRuleList = $filter('orderBy')(vm.partRuleList, 'Title');\n\n if (vm.partRuleObj) {\n containsInListPartRule();\n }\n if (!vm.partRuleObj && vm.partRuleList.length == 1) {\n vm.partRuleObj = vm.partRuleList[0];\n vm.itemClicked();\n }\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"auto.complete.partrule.directive.load.error\"), ToastUtil.ToastType.WARN);\n });\n }\n\n function isTrue(value) {\n var result = false;\n if (value === true || value == \"true\") {\n result = true;\n }\n return result;\n }\n\n function init() {\n vm.partRuleList = [];\n if (angular.isUndefined(vm.partRuleObj)) {\n vm.partRuleObj = \"\";\n }\n\n if (angular.isUndefined(vm.isDisabled)) {\n vm.isDisabled = false;\n }\n\n if (angular.isUndefined(vm.isRequired)) {\n vm.isRequired = false;\n }\n\n if (angular.isUndefined(vm.listDisabled)) {\n vm.listDisabled = false;\n }\n watchList();\n loadPartRule();\n }\n\n function watchList() {\n $scope.$watch(\"ctrl.partRuleObj\", function (newValue) {\n if (newValue) {\n containsInListPartRule();\n }\n });\n }\n\n function containsInListPartRule() {\n var contains = false;\n for (var i = 0; i < vm.partRuleList.length; i++) {\n if (vm.partRuleList[i].Id == vm.partRuleObj.Id) {\n contains = true;\n break;\n }\n }\n if (!contains) {\n vm.partRuleList.unshift(vm.partRuleObj);\n }\n }\n\n init();\n }\n\n function AutoCompletePartRuleDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'AutoCompletePartRuleController',\n transclude: true,\n templateUrl: \"app/components/auto_complete/part-rule/auto-complete-part-rule.html\",\n bindToController: true,\n scope: {\n partRuleObj: '=',\n isDisabled: '=?',\n isRequired: '=?',\n selectedEvt: '&?',\n listDisabled: '@?'\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('AutoCompletePartRuleController', AutoCompletePartRuleController)\n .directive('autoCompletePartRule', AutoCompletePartRuleDirective);\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(AutoCompletePartTranslate);\n\n /** @ngInject */\n function AutoCompletePartTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'auto.complete.part.directive.placeholder': 'Select a part',\n 'auto.complete.part.directive.load.error': 'An error occurred while trying to load the part list.'\n });\n\n $translateProvider.translations('pt', {\n 'auto.complete.part.directive.placeholder': 'Selecione uma peça',\n 'auto.complete.part.directive.load.error': 'Ocorreu um erro ao tentar carregar a lista de peça.'\n });\n }\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *Controller to Autocomplete part directive.\n */\n function AutoCompletePartController($translate, $log, $interval, ToastUtil, DefaultService, $scope) {\n var vm = this;\n\n\n vm.itemClicked = function () {\n if (vm.selectedEvt != null) {\n $interval(callSelectedEvt, 50, 1);\n }\n }\n\n function callSelectedEvt() {\n vm.selectedEvt();\n }\n\n vm.blurEvent = function () {\n $interval(onBlur, 50, 1);\n };\n\n\n function onBlur() {\n var itemFound = false;\n if (typeof vm.partObj == \"string\") {\n angular.forEach(vm.partList, function (item) {\n if (item.Title == vm.partObj) {\n vm.partObj = item;\n vm.itemClicked();\n itemFound = true;\n }\n });\n\n if (!itemFound) {\n vm.partObj = \"\";\n }\n }\n }\n\n function loadParts() {\n var searchParams = {\n CsActive: (isTrue(vm.listDisabled) ? '' : '1')\n }\n DefaultService.loadPart(searchParams).then(function (response) {\n vm.partList = angular.copy(response);\n if (vm.partObj) {\n containsInListPart();\n }\n if (!vm.partObj && vm.partList.length == 1) {\n vm.partObj = vm.partList[0];\n vm.itemClicked();\n }\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"auto.complete.part.directive.load.error\"), ToastUtil.ToastType.WARN);\n });\n }\n\n function isTrue(value) {\n var result = false;\n if (value === true || value == \"true\") {\n result = true;\n }\n return result;\n }\n\n function init() {\n vm.partList = [];\n if (angular.isUndefined(vm.partObj) || angular.equals(vm.partObj, {})) {\n vm.partObj = \"\";\n }\n\n if (angular.isUndefined(vm.isDisabled)) {\n vm.isDisabled = false;\n }\n\n if (angular.isUndefined(vm.isRequired)) {\n vm.isRequired = false;\n }\n\n if (angular.isUndefined(vm.listDisabled)) {\n vm.listDisabled = false;\n }\n watchList();\n loadParts();\n }\n\n function watchList() {\n $scope.$watch(\"ctrl.partObj\", function (newValue) {\n if (newValue) {\n containsInListPart();\n }\n });\n }\n\n function containsInListPart() {\n var contains = false;\n for (var i = 0; i < vm.partList.length; i++) {\n if (vm.partList[i].Id == vm.partObj.Id) {\n contains = true;\n break;\n }\n }\n if (!contains) {\n vm.partList.unshift(vm.partObj);\n }\n }\n\n init();\n }\n\n function AutoCompletePartDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'AutoCompletePartController',\n transclude: true,\n templateUrl: \"app/components/auto_complete/part/auto-complete-part.html\",\n bindToController: true,\n scope: {\n partObj: '=',\n isDisabled: '=?',\n isRequired: '=?',\n selectedEvt: '&?',\n listDisabled: '@'\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('AutoCompletePartController', AutoCompletePartController)\n .directive('autoCompletePart', AutoCompletePartDirective);\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(AutoCompleteModelTranslate);\n\n /** @ngInject */\n function AutoCompleteModelTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'auto.complete.model.directive.placeholder': 'Select a model',\n 'auto.complete.model.directive.required': 'The model field is required.',\n 'auto.complete.model.directive.load.error': 'An error occurred while trying to load the model list.'\n });\n\n $translateProvider.translations('pt', {\n 'auto.complete.model.directive.placeholder': 'Selecione um modelo',\n 'auto.complete.model.directive.required': 'O campo modelo é obrigatório.',\n 'auto.complete.model.directive.load.error': 'Ocorreu um erro ao tentar carregar a lista de modelos.'\n });\n }\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *Controller to Autocomplete Model directive.\n */\n function AutoCompleteModelController($translate, $log, $scope, $interval, ToastUtil, DefaultService) {\n var vm = this;\n\n vm.itemClicked = function () {\n if (vm.selectedEvt != null) {\n $interval(callSelectedEvt, 150, 1);\n }\n };\n\n function callSelectedEvt() {\n vm.selectedEvt();\n }\n\n vm.blurEvent = function () {\n $interval(onBlur, 200, 1);\n };\n\n function onBlur() {\n var itemFound = false;\n if (typeof vm.modelObj == \"string\") {\n angular.forEach(vm.models, function (item) {\n if (item.Title == vm.modelObj) {\n vm.modelObj = item;\n vm.modelVariants = vm.modelObj.Variants;\n vm.itemClicked();\n itemFound = true;\n }\n });\n\n if (!itemFound) {\n vm.modelObj = \"\";\n vm.modelVariants = [];\n }\n }\n }\n\n function loadModels() {\n var filterModel = {\n CsActive: vm.filterOnlyActive == true || vm.filterOnlyActive == \"true\" ? 1 : \"\"\n };\n if (vm.filterClient && vm.filterClient.Id > 0) {\n filterModel.DependencyFilterId = vm.filterClient.Id;\n }\n DefaultService.loadModels(filterModel).then(function (response) {\n vm.models = angular.copy(response);\n if (vm.modelObj) {\n containsInListModel();\n }\n if (!vm.modelObj && vm.models.length == 1) {\n vm.modelObj = vm.models[0];\n vm.modelVariants = vm.modelObj.Variants;\n vm.itemClicked();\n }\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"auto.complete.model.directive.load.error\"), ToastUtil.ToastType.WARN);\n });\n }\n\n function loadModelByVariant() {\n if (vm.filterVariant && vm.filterVariant.Id > 0) {\n var filterModel = {\n DependencyFilterId: vm.filterVariant.Id,\n CsActive: vm.filterOnlyActive == true || vm.filterOnlyActive == \"true\" ? 1 : \"\"\n };\n DefaultService.loadModelByVariant(filterModel).then(function (response) {\n vm.models = angular.copy(response);\n if (vm.modelObj) {\n containsInListModel();\n }\n if (!vm.modelObj && vm.models.length == 1) {\n vm.modelObj = vm.models[0];\n vm.modelVariants = vm.modelObj.Variants;\n vm.itemClicked();\n }\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"auto.complete.model.directive.load.error\"), ToastUtil.ToastType.WARN);\n });\n }\n }\n\n function watchListFilterClient() {\n $scope.$watch(\"ctrl.filterClient\", function (newValue) {\n if (!newValue || angular.isUndefined(newValue) || newValue == null || angular.isUndefined(newValue.Id) || newValue.Id <= 0) {\n vm.models = [];\n vm.modelObj = undefined;\n vm.modelVariants = [];\n } else {\n loadModels();\n }\n });\n }\n\n function watchListFilterVariant() {\n $scope.$watch(\"ctrl.filterVariant\", function (newValue) {\n if (!newValue || angular.isUndefined(newValue) || newValue == null || angular.isUndefined(newValue.Id) || newValue.Id <= 0) {\n vm.models = [];\n vm.modelObj = undefined;\n vm.modelVariants = [];\n } else {\n loadModelByVariant();\n }\n });\n }\n\n function watchModelObj() {\n $scope.$watch(\"ctrl.modelObj\", function (newValue) {\n if (!newValue || angular.isUndefined(newValue) || newValue == null || angular.isUndefined(newValue.Id) || newValue.Id <= 0) {\n vm.modelVariants = [];\n } else {\n vm.modelVariants = newValue.Variants;\n containsInListModel();\n }\n });\n }\n\n function containsInListModel() {\n var contains = false;\n for (var i = 0; i < vm.models.length; i++) {\n if (vm.models[i].Id == vm.modelObj.Id) {\n contains = true;\n break;\n }\n }\n if (!contains) {\n vm.models.unshift(vm.modelObj);\n }\n }\n\n function init() {\n vm.models = [];\n\n if (!vm.modelObj) {\n vm.modelObj = \"\";\n vm.modelVariants = [];\n }\n\n if (angular.isUndefined(vm.isDisabled)) {\n vm.isDisabled = false;\n }\n\n if (angular.isUndefined(vm.isRequired)) {\n vm.isRequired = false;\n }\n\n if (angular.isUndefined(vm.filterOnlyActive)) {\n vm.filterOnlyActive = true;\n }\n\n if (angular.isDefined(vm.filterByClient) || vm.filterByClient) {\n watchListFilterClient();\n } else if (angular.isDefined(vm.filterByVariant) || vm.filterByVariant) {\n watchListFilterVariant();\n } else {\n loadModels();\n }\n\n watchModelObj();\n }\n\n init();\n }\n\n function AutoCompleteModelDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'AutoCompleteModelController',\n transclude: true,\n templateUrl: \"app/components/auto_complete/model/auto-complete-model.html\",\n bindToController: true,\n scope: {\n modelObj: '=',\n modelVariants: '=?',\n isDisabled: '=?',\n isRequired: '=?',\n selectedEvt: '&?',\n filterClient: '=?',\n filterByClient: '@?',\n filterVariant: '=?',\n filterByVariant: '@?',\n filterOnlyActive: '@?'\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('AutoCompleteModelController', AutoCompleteModelController)\n .directive('autoCompleteModel', AutoCompleteModelDirective);\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *Controller to Autocomplete Licenses directive.\n */\n function AutoCompleteLicenseTypeController($translate, $log, $scope, $interval, ToastUtil, DefaultService, AuthService) {\n var vm = this, business = vm.business;\n\n vm.itemClicked = function () {\n if (vm.selectedEvt != null) {\n $interval(callSelectedEvt, 50, 1);\n }\n };\n\n function callSelectedEvt() {\n vm.selectedEvt();\n }\n\n vm.blurEvent = function () {\n if (!vm.licenseObj) {\n vm.licenseObj = \"\";\n vm.itemClicked();\n } else {\n angular.forEach(vm.licenses, function (item) {\n if (item.Title == vm.licenseObj) {\n vm.licenseObj = item;\n vm.itemClicked();\n }\n });\n }\n };\n\n function loadLicenses() {\n var filterLicense = {\n CsActive: vm.filterOnlyActive == true || vm.filterOnlyActive == \"true\" ? 1 : \"\"\n }\n DefaultService.listAllLicenseTypes(filterLicense).then(function (response) {\n vm.licenses = angular.copy(response.resultList);\n if (vm.licenseObj) {\n containsInListLicense();\n }\n if (!vm.licenseObj && vm.licenses.length == 1) {\n vm.licenseObj = vm.licenses[0];\n vm.itemClicked();\n }\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"auto.complete.license.type.directive.load.error\"), ToastUtil.ToastType.WARN);\n });\n }\n\n function init() {\n vm.licenses = [];\n\n if (!vm.licenseObj) {\n vm.licenseObj = \"\";\n }\n\n if (angular.isUndefined(vm.isDisabled)) {\n vm.isDisabled = false;\n }\n\n if (angular.isUndefined(vm.isRequired)) {\n vm.isRequired = false;\n }\n\n if (angular.isUndefined(vm.filterOnlyActive)) {\n vm.filterOnlyActive = true;\n }\n\n if(angular.isUndefined(business)){\n business = AuthService.getBusinessId();\n }\n\n watchModelObj();\n loadLicenses();\n }\n\n function containsInListLicense() {\n var contains = false;\n for (var i = 0; i < vm.licenses.length; i++) {\n if (vm.licenses[i].Id == vm.licenseObj.Id) {\n contains = true;\n break;\n }\n }\n if (!contains) {\n vm.licenses.unshift(vm.licenseObj);\n }\n }\n\n function watchModelObj() {\n $scope.$watch(\"ctrl.licenseObj\", function (newValue) {\n if (newValue) {\n containsInListLicense();\n }\n });\n }\n\n init();\n }\n\n function AutoCompleteLicenseTypeDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'AutoCompleteLicenseTypeController',\n transclude: true,\n templateUrl: \"app/components/auto_complete/license-type/auto-complete-license-type.html\",\n bindToController: true,\n scope: {\n licenseObj: '=',\n isDisabled: '=?',\n isRequired: '=?',\n selectedEvt: '&?',\n filterOnlyActive: '@?'\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('AutoCompleteLicenseTypeController', AutoCompleteLicenseTypeController)\n .directive('autoCompleteLicenseType', AutoCompleteLicenseTypeDirective);\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(AutoCompleteLicenseTypeTranslate);\n\n /** @ngInject */\n function AutoCompleteLicenseTypeTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'auto.complete.license.type.directive.placeholder': 'Select a License Type',\n 'auto.complete.license.type.directive.required': 'The area field is required.',\n 'auto.complete.license.type.directive.load.error': 'An error occurred while trying to load the license list.'\n });\n\n $translateProvider.translations('pt', {\n 'auto.complete.license.type.directive.placeholder': 'Selecione uma Licença',\n 'auto.complete.license.type.directive.required': 'O campo Licença é obrigatório.',\n 'auto.complete.license.type.directive.load.error': 'Ocorreu um erro ao tentar carregar a lista de licenças.'\n });\n }\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *Controller to Autocomplete Licenses directive.\n */\n function AutoCompleteLicenseController($translate, $log, $scope, $interval, ToastUtil, DefaultService, AuthService) {\n var vm = this, business = vm.business;\n\n vm.itemClicked = function () {\n if (vm.selectedEvt != null) {\n $interval(callSelectedEvt, 50, 1);\n }\n };\n\n function callSelectedEvt() {\n vm.selectedEvt();\n }\n\n vm.blurEvent = function () {\n if (!vm.licenseObj) {\n vm.licenseObj = \"\";\n vm.itemClicked();\n } else {\n angular.forEach(vm.licenses, function (item) {\n if (item.Title == vm.licenseObj) {\n vm.licenseObj = item;\n vm.itemClicked();\n }\n });\n }\n };\n\n function loadLicenses() {\n var filterLicense = {\n Code: vm.Code\n }\n DefaultService.listAllLicenses(filterLicense).then(function (response) {\n vm.licenses = angular.copy(response);\n if (vm.licenseObj) {\n containsInListLicense();\n }\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"auto.complete.license.directive.load.error\"), ToastUtil.ToastType.WARN);\n });\n }\n\n function init() {\n vm.licenses = [];\n\n if (!vm.licenseObj) {\n vm.licenseObj = \"\";\n }\n\n if (angular.isUndefined(vm.isDisabled)) {\n vm.isDisabled = false;\n }\n\n if (angular.isUndefined(vm.isRequired)) {\n vm.isRequired = false;\n }\n\n if (angular.isUndefined(vm.code)) {\n vm.code = null;\n }\n\n if(angular.isUndefined(business)){\n business = AuthService.getBusinessId();\n }\n\n watchModelObj();\n loadLicenses();\n }\n\n function containsInListLicense() {\n var contains = false;\n for (var i = 0; i < vm.licenses.length; i++) {\n if (vm.licenses[i].Id == vm.licenseObj.Id) {\n contains = true;\n break;\n }\n }\n if (!contains) {\n vm.licenses.unshift(vm.licenseObj);\n }\n }\n\n function watchModelObj() {\n $scope.$watch(\"ctrl.licenseObj\", function (newValue) {\n if (newValue) {\n containsInListLicense();\n }\n });\n }\n\n init();\n }\n\n function AutoCompleteLicenseDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'AutoCompleteLicenseController',\n transclude: true,\n templateUrl: \"app/components/auto_complete/license/auto-complete-license.html\",\n bindToController: true,\n scope: {\n licenseObj: '=',\n isDisabled: '=?',\n isRequired: '=?',\n selectedEvt: '&?',\n code: '@?'\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('AutoCompleteLicenseController', AutoCompleteLicenseController)\n .directive('autoCompleteLicense', AutoCompleteLicenseDirective);\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(AutoCompleteLicenseTranslate);\n\n /** @ngInject */\n function AutoCompleteLicenseTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'auto.complete.license.directive.placeholder': 'Select a License',\n 'auto.complete.license.directive.required': 'The area field is required.',\n 'auto.complete.license.directive.load.error': 'An error occurred while trying to load the license list.'\n });\n\n $translateProvider.translations('pt', {\n 'auto.complete.license.directive.placeholder': 'Selecione uma Licença',\n 'auto.complete.license.directive.required': 'O campo Licença é obrigatório.',\n 'auto.complete.license.directive.load.error': 'Ocorreu um erro ao tentar carregar a lista de licenças.'\n });\n }\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *Controller to Autocomplete DocumentFlow directive.\n */\n function AutoCompleteDocumentFlowController($translate, $log, $scope, $interval, ToastUtil, AuthService, DocumentFlowService, ListModel) {\n var vm = this;\n\n vm.itemClicked = function () {\n if (vm.selectedEvt != null) {\n $interval(callSelectedEvt, 50, 1);\n }\n }\n\n function callSelectedEvt() {\n if (angular.isDefined(vm.selectedEvt)) {\n vm.selectedEvt();\n }\n }\n\n vm.blurEvent = function () {\n $interval(onBlur, 100, 1);\n };\n\n function onBlur() {\n var itemFound = false;\n if (typeof vm.documentFlowObj == \"string\") {\n angular.forEach(vm.documents, function (item) {\n if (item.Subject == vm.documentFlowObj) {\n vm.documentFlowObj = item;\n vm.itemClicked();\n itemFound = true;\n }\n });\n\n if (!itemFound) {\n vm.documentFlowObj = \"\";\n }\n }\n }\n\n function watchList() {\n $scope.$watch(\"ctrl.documentFlowListObj\", function () {\n $interval(initListViewModel, 250, 1);\n containsInListDocumentFlows();\n });\n }\n\n /**\n * Watch partId when isFilterPart.\n */\n function watchPartId() {\n if (vm.isTrue(vm.isFilterPart)) {\n $scope.$watch(\"ctrl.partId\", function () {\n $interval(loadDocumentFlows, 250, 1);\n });\n }\n }\n\n vm.addDocumentFlow = function () {\n if (vm.isDisabled === false && vm.documentFlowObj != \"\") {\n if (!isValidDocumentFlow()) {\n ToastUtil.showToastMessage($translate.instant(\"auto.complete.vendor.invalid.msg\"), ToastUtil.ToastType.WARN);\n } else if (selectedDocumentFlowsContainsDocumentFlow()) {\n ToastUtil.showToastMessage($translate.instant(\"auto.complete.vendor.duplicated.msg\"), ToastUtil.ToastType.WARN);\n } else {\n vm.listModelValues.items.push(angular.copy(vm.documentFlowObj));\n vm.documentFlowListObj = vm.listModelValues.items;\n vm.documentFlowObj = \"\";\n validateFormInputList();\n }\n }\n }\n\n vm.isTrue = function (value) {\n return (value === true || value == \"true\");\n }\n\n function initListViewModel() {\n var nameStyle = \"width: 30%;\";\n\n var properties = [\n ListModel.getProperties(\"label.name\", \"Title\", false, null, nameStyle, null, null)\n ];\n //Build menu\n var actionMenuItems = [\n ListModel.getActionMenuItem(ListModel.ActionMenuEnum.DELETE, \"Id\", \"Title\", deleteDocumentFlowFromList)\n ];\n var actionMenu = ListModel.getActionMenu(actionMenuItems, ListModel.ActionMenuTypeEnum.INLINE);\n vm.listModelValues = ListModel.getListModel(properties, vm.documentFlowListObj, actionMenu);\n validateFormInputList();\n\n }\n\n\n function validateFormInputList() {\n if (vm.isTrue(vm.isListComponent) && vm.formDocumentFlow != null && vm.nameToValidate != null) {\n if (vm.documentFlowListObj.length == 0) {\n vm.formDocumentFlow[vm.nameToValidate].$setValidity('validQtdMin', false, vm.formDocumentFlow[vm.nameToValidate]);\n } else {\n vm.formDocumentFlow[vm.nameToValidate].$setValidity('validQtdMin', true, vm.formDocumentFlow[vm.nameToValidate]);\n }\n }\n }\n\n function deleteDocumentFlowFromList(id) {\n\n angular.forEach(vm.listModelValues.items, function (item, key) {\n if (item.Id == id) {\n vm.listModelValues.items.splice(key, 1);\n validateFormInputList();\n }\n });\n\n }\n\n function isValidDocumentFlow() {\n var isValid = false;\n if (angular.isString(vm.documentFlowObj)) {\n angular.forEach(vm.documentFlowListObj, function (item) {\n if (item.Title == vm.documentFlowObj) {\n isValid = true;\n }\n });\n } else {\n isValid = true;\n }\n return isValid;\n }\n\n function selectedDocumentFlowsContainsDocumentFlow() {\n var contains = false;\n angular.forEach(vm.listModelValues.items, function (item) {\n if (item.Id == vm.documentFlowObj.Id) {\n contains = true;\n }\n });\n return contains;\n }\n\n /**\n * If isFilterPart must load DocumentFlows only if partId is fileld.\n */\n function loadDocumentFlows() {\n if (vm.isTrue(vm.isFilterPart)) {\n if (angular.isDefined(vm.partId) && vm.partId > 0) {\n executeLoadDocumentFlows();\n } else {\n vm.DocumentFlows = [];\n vm.documentFlowObj = \"\";\n }\n\n } else {\n executeLoadDocumentFlows();\n }\n }\n\n function executeLoadDocumentFlows() {\n var filterDocumentFlow = {\n Subject: '',\n Category: '-1',\n BusinessId: AuthService.getBusinessId()\n };\n DocumentFlowService.autoCompleteDocumentFlow(filterDocumentFlow)\n .then(onLoadDocumentFlowResponse)\n .catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"auto.complete.vendor.directive.load.error\"), ToastUtil.ToastType.WARN);\n });\n }\n\n function onLoadDocumentFlowResponse(response) {\n vm.documents = angular.copy(response);\n vm.documents.forEach(function(documentFlow){\n documentFlow.Title = documentFlow.Id + ' - ' + documentFlow.Subject;\n });\n if (vm.documentFlowObj) {\n containsInListDocumentFlows();\n }\n if (!vm.documentFlowObj && vm.documents.length == 1) {\n vm.documentFlowObj = vm.documents[0];\n vm.itemClicked();\n }\n\n }\n\n function init() {\n vm.documents = [];\n watchList();\n watchPartId();\n\n if (!vm.documentFlowObj) {\n vm.documentFlowObj = \"\";\n }\n\n if (angular.isUndefined(vm.isDisabled)) {\n vm.isDisabled = false;\n }\n\n if (angular.isUndefined(vm.isRequired)) {\n vm.isRequired = false;\n }\n\n if (angular.isUndefined(vm.formDocumentFlow)) {\n vm.formDocumentFlow = null;\n }\n if (angular.isUndefined(vm.nameToValidate)) {\n vm.nameToValidate = null;\n }\n\n if (angular.isUndefined(vm.isFilterPart)) {\n vm.isFilterPart = false;\n }\n\n loadDocumentFlows();\n initListViewModel();\n }\n\n function containsInListDocumentFlows() {\n var contains = false;\n for (var i = 0; i < vm.documents.length; i++) {\n if (vm.documents[i].Id == vm.documentFlowObj.Id) {\n contains = true;\n break;\n }\n }\n if (!contains) {\n vm.documents.unshift(vm.documentFlowObj);\n }\n }\n\n init();\n }\n\n function AutoCompleteDocumentFlowDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'AutoCompleteDocumentFlowController',\n transclude: true,\n templateUrl: \"app/components/auto_complete/document_flow/auto-complete-document-flow.html\",\n bindToController: true,\n scope: {\n documentFlowObj: '=?',\n formDocumentFlow: '=?',\n nameToValidate: '@?',\n isDisabled: '=?',\n isRequired: '=?',\n selectedEvt: '&?',\n filterOnlyActive: '@?',\n isListComponent: '@?',\n documentFlowListObj: '=?',\n isFilterPart: '@?',\n partId: '=?',\n dataset: '=?'\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('AutoCompleteDocumentFlowController', AutoCompleteDocumentFlowController)\n .directive('autoCompleteDocumentFlow', AutoCompleteDocumentFlowDirective);\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(AutoCompleteClientTranslate);\n\n /** @ngInject */\n function AutoCompleteClientTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'auto.complete.client.directive.placeholder': 'Select a client',\n 'auto.complete.client.directive.required': 'The client field is required.',\n 'auto.complete.client.directive.load.error': 'An error occurred while trying to load the client list.'\n });\n\n $translateProvider.translations('pt', {\n 'auto.complete.client.directive.placeholder': 'Selecione um cliente',\n 'auto.complete.client.directive.required': 'O campo cliente é obrigatório.',\n 'auto.complete.client.directive.load.error': 'Ocorreu um erro ao tentar carregar a lista de clientes.'\n });\n }\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *Controller to Autocomplete Client directive.\n */\n function AutoCompleteClientController($translate, $log, $scope, $interval, ToastUtil, DefaultService) {\n var vm = this;\n var lastSelectedClient = {};\n var clientDefault = null;\n\n vm.itemClicked = function () {\n $interval(updateClientCopy, 150, 1);\n if (vm.selectedEvt != null) {\n $interval(callSelectedEvt, 150, 1);\n }\n }\n\n function updateClientCopy() {\n lastSelectedClient = angular.copy(vm.clientObj);\n }\n\n function callSelectedEvt() {\n vm.selectedEvt();\n }\n\n vm.blurEvent = function () {\n if (!vm.clientObj) {\n vm.clientObj = \"\";\n vm.itemClicked();\n } else {\n angular.forEach(vm.clients, function (item) {\n if (item.Title == vm.clientObj) {\n vm.clientObj = item;\n vm.itemClicked();\n }\n });\n }\n updateClientObjWithLatest();\n\n };\n\n /**\n * Method to avoid null in client directive.\n * Used only when vm.isAlwaysSelectOne is true.\n */\n function updateClientObjWithLatest() {\n if (isTrue(vm.isAlwaysSelectOne) && (vm.clientObj == null || vm.clientObj == undefined || vm.clientObj == \"\")) {\n vm.clientObj = lastSelectedClient;\n }\n }\n\n function loadClients() {\n var filterClient = {\n CsActive: vm.filterOnlyActive == true || vm.filterOnlyActive == \"true\" ? 1 : \"\"\n }\n DefaultService.loadClients(filterClient).then(function (response) {\n vm.clients = angular.copy(response);\n if (!vm.clientObj && vm.clients.length == 1) {\n vm.clientObj = vm.clients[0];\n vm.itemClicked();\n }\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"auto.complete.client.directive.load.error\"), ToastUtil.ToastType.WARN);\n });\n }\n\n function loadClientByProject() {\n if (vm.filterProject && vm.filterProject.Id > 0) {\n var filterClient = {\n ProjectId: vm.filterProject.Id,\n ClientId: clientDefault ? clientDefault.Id : 0,\n CsActive: vm.filterOnlyActive == true || vm.filterOnlyActive == \"true\" ? 1 : \"\"\n }\n DefaultService.loadClientByProject(filterClient).then(function (response) {\n vm.clients = angular.copy(response);\n if (!vm.clientObj && vm.clients.length == 1 || isTrue(vm.isAlwaysSelectOne)) {\n vm.clientObj = vm.clients[0];\n vm.itemClicked();\n }\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"auto.complete.client.directive.load.error\"), ToastUtil.ToastType.WARN);\n });\n }\n }\n\n function loadClientByModel() {\n if (vm.filterModel && vm.filterModel.Id > 0) {\n var filterClient = {\n ModelId: vm.filterModel.Id,\n ClientId: clientDefault ? clientDefault.Id : 0,\n CsActive: vm.filterOnlyActive == true || vm.filterOnlyActive == \"true\" ? 1 : \"\"\n }\n DefaultService.loadClientByProject(filterClient).then(function (response) {\n vm.clients = angular.copy(response);\n if (!vm.clientObj && vm.clients.length == 1 || isTrue(vm.isAlwaysSelectOne)) {\n vm.clientObj = vm.clients[0];\n vm.itemClicked();\n }\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"auto.complete.client.directive.load.error\"), ToastUtil.ToastType.WARN);\n });\n }\n }\n\n function watchList() {\n $scope.$watch(\"ctrl.filterProject\", function (newValue) {\n if (!newValue || angular.isUndefined(newValue) || newValue == null || angular.isUndefined(newValue.Id) || newValue.Id <= 0) {\n vm.clients = [];\n vm.clientObj = \"\";\n } else {\n loadClientByProject();\n }\n updateClientObjWithLatest();\n });\n }\n\n function watchListFilterModel() {\n $scope.$watch(\"ctrl.filterModel\", function (newValue) {\n if (!newValue || angular.isUndefined(newValue) || newValue == null || angular.isUndefined(newValue.Id) || newValue.Id <= 0) {\n vm.clients = [];\n vm.clientObj = \"\";\n } else {\n loadClientByModel();\n }\n updateClientObjWithLatest();\n });\n }\n\n function isTrue(value) {\n return (value === true || value === \"true\");\n }\n\n function init() {\n vm.clients = [];\n if (!vm.clientObj) {\n vm.clientObj = \"\";\n }\n\n if (angular.isUndefined(vm.isDisabled)) {\n vm.isDisabled = false;\n }\n\n if (angular.isUndefined(vm.isRequired)) {\n vm.isRequired = false;\n }\n\n if (angular.isUndefined(vm.filterOnlyActive)) {\n vm.filterOnlyActive = true;\n }\n\n if (angular.isUndefined(vm.isAlwaysSelectOne)) {\n vm.isAlwaysSelectOne = false;\n }\n\n watchClientObj();\n\n if (angular.isDefined(vm.filterByProject) || vm.filterByProject) {\n watchList();\n } else if (angular.isDefined(vm.filterByModel) || vm.filterByModel) {\n watchListFilterModel();\n } else {\n loadClients();\n }\n }\n\n function watchClientObj() {\n $scope.$watch(\"ctrl.clientObj\", function (newValue) {\n if (newValue && !clientDefault) {\n clientDefault = newValue;\n }\n });\n }\n\n init();\n }\n\n function AutoCompleteClientDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'AutoCompleteClientController',\n transclude: true,\n templateUrl: \"app/components/auto_complete/client/auto-complete-client.html\",\n bindToController: true,\n scope: {\n clientObj: '=',\n isDisabled: '=?',\n isRequired: '=?',\n selectedEvt: '&?',\n filterProject: '=?',\n filterByProject: '@?',\n filterModel: '=?',\n filterByModel: '@?',\n filterOnlyActive: '@?',\n isAlwaysSelectOne: '@?'\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('AutoCompleteClientController', AutoCompleteClientController)\n .directive('autoCompleteClient', AutoCompleteClientDirective);\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(AutoCompleteAreaTranslate);\n\n /** @ngInject */\n function AutoCompleteAreaTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'auto.complete.area.directive.placeholder': 'Select a area',\n 'auto.complete.area.directive.required': 'The area field is required.',\n 'auto.complete.area.directive.load.error': 'An error occurred while trying to load the area list.'\n });\n\n $translateProvider.translations('pt', {\n 'auto.complete.area.directive.placeholder': 'Selecione uma área',\n 'auto.complete.area.directive.required': 'O campo área é obrigatório.',\n 'auto.complete.area.directive.load.error': 'Ocorreu um erro ao tentar carregar a lista de área.'\n });\n }\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *Controller to Autocomplete Area directive.\n */\n function AutoCompleteAreaController($translate, $log, $scope, $interval, ToastUtil, DefaultService, AuthService) {\n var vm = this, business = vm.business;\n\n vm.itemClicked = function () {\n if (vm.selectedEvt != null) {\n $interval(callSelectedEvt, 50, 1);\n }\n }\n\n function callSelectedEvt() {\n vm.selectedEvt();\n }\n\n vm.blurEvent = function () {\n if (!vm.areaObj) {\n vm.areaObj = \"\";\n vm.itemClicked();\n } else {\n angular.forEach(vm.areas, function (item) {\n if (item.Title == vm.areaObj) {\n vm.areaObj = item;\n vm.itemClicked();\n }\n });\n }\n };\n\n function loadAreas() {\n var filterArea = {};\n\n if(vm.filterBusiness === \"true\" || vm.filterBusiness === true) {\n filterArea = {\n BusinessId: business,\n CsActive: vm.filterOnlyActive == true || vm.filterOnlyActive == \"true\" ? 1 : \"\"\n }\n } else {\n filterArea = {\n CsActive: vm.filterOnlyActive == true || vm.filterOnlyActive == \"true\" ? 1 : \"\"\n }\n }\n \n DefaultService.loadAreas(filterArea).then(function (response) {\n vm.areas = angular.copy(response);\n if (vm.areaObj) {\n containsInListArea();\n }\n if (!vm.areaObj && vm.areas.length == 1) {\n vm.areaObj = vm.areas[0];\n vm.itemClicked();\n }\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"auto.complete.area.directive.load.error\"), ToastUtil.ToastType.WARN);\n });\n }\n\n function init() {\n vm.areas = [];\n\n if (!vm.areaObj) {\n vm.areaObj = \"\";\n }\n\n if (angular.isUndefined(vm.isDisabled)) {\n vm.isDisabled = false;\n }\n\n if (angular.isUndefined(vm.isRequired)) {\n vm.isRequired = false;\n }\n\n if (angular.isUndefined(vm.filterOnlyActive)) {\n vm.filterOnlyActive = true;\n }\n\n if (angular.isUndefined(vm.filterBusiness)) {\n vm.filterBusiness = true;\n }\n\n if(angular.isUndefined(business)){\n business = AuthService.getBusinessId();\n }\n\n watchModelObj();\n loadAreas();\n }\n\n function containsInListArea() {\n var contains = false;\n for (var i = 0; i < vm.areas.length; i++) {\n if (vm.areas[i].Id == vm.areaObj.Id) {\n contains = true;\n break;\n }\n }\n if (!contains) {\n vm.areas.unshift(vm.areaObj);\n }\n }\n\n function watchModelObj() {\n $scope.$watch(\"ctrl.areaObj\", function (newValue) {\n if (newValue) {\n containsInListArea();\n }\n });\n }\n\n init();\n }\n\n function AutoCompleteAreaDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'AutoCompleteAreaController',\n transclude: true,\n templateUrl: \"app/components/auto_complete/area/auto-complete-area.html\",\n bindToController: true,\n scope: {\n areaObj: '=',\n isDisabled: '=?',\n isRequired: '=?',\n selectedEvt: '&?',\n filterOnlyActive: '@?',\n business: '=?',\n filterBusiness: '@?'\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('AutoCompleteAreaController', AutoCompleteAreaController)\n .directive('autoCompleteArea', AutoCompleteAreaDirective);\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *Controller to Autocomplete Generic directive.\n */\n function AutoCompleteContractController($translate, $log, $scope, $interval, ToastUtil, DefaultService, ListModel) {\n var vm = this;\n\n vm.itemClicked = function () {\n if (vm.selectedEvt != null) {\n $interval(callSelectedEvt, 50, 1);\n }\n }\n\n function callSelectedEvt() {\n if (angular.isDefined(vm.selectedEvt)) {\n vm.selectedEvt();\n }\n }\n\n vm.blurEvent = function () {\n $interval(onBlur, 100, 1);\n };\n\n function onBlur() {\n var itemFound = false;\n if (typeof vm.contractObj == \"string\") {\n angular.forEach(vm.contracts, function (item) {\n if (item.Title == vm.contractObj) {\n vm.contractObj = item;\n vm.itemClicked();\n itemFound = true;\n }\n });\n\n if (!itemFound) {\n vm.contractObj = \"\";\n }\n }\n }\n\n function watchList() {\n $scope.$watch(\"ctrl.contractListObj\", function () {\n $interval(initListViewModel, 250, 1);\n containsInListContracts();\n });\n }\n\n /**\n * Watch partId when isFilterPart.\n */\n function watchPartId() {\n if (vm.isTrue(vm.isFilterPart)) {\n $scope.$watch(\"ctrl.partId\", function () {\n $interval(load, 250, 1);\n });\n }\n }\n\n vm.addContract = function () {\n if (vm.isDisabled === false && vm.contractObj != \"\") {\n if (!isValidContract()) {\n ToastUtil.showToastMessage($translate.instant(\"auto.complete.contract.invalid.msg\"), ToastUtil.ToastType.WARN);\n } else if (selectedContractsContainsContract()) {\n ToastUtil.showToastMessage($translate.instant(\"auto.complete.contract.duplicated.msg\"), ToastUtil.ToastType.WARN);\n } else {\n vm.listModelValues.items.push(angular.copy(vm.contractObj));\n vm.contractListObj = vm.listModelValues.items;\n vm.contractObj = \"\";\n validateFormInputList();\n }\n }\n }\n\n vm.isTrue = function (value) {\n return (value === true || value == \"true\");\n }\n\n function initListViewModel() {\n var nameStyle = \"width: 30%;\";\n\n var properties = [\n ListModel.getProperties(\"label.name\", \"Title\", false, null, nameStyle, null, null)\n ];\n //Build menu\n var actionMenuItems = [\n ListModel.getActionMenuItem(ListModel.ActionMenuEnum.DELETE, \"Id\", \"Title\", deleteContractFromList)\n ];\n var actionMenu = ListModel.getActionMenu(actionMenuItems, ListModel.ActionMenuTypeEnum.INLINE);\n vm.listModelValues = ListModel.getListModel(properties, vm.contractListObj, actionMenu);\n validateFormInputList();\n\n }\n\n\n function validateFormInputList() {\n if (vm.isTrue(vm.isListComponent) && vm.form != null && vm.nameToValidate != null) {\n if (vm.contractListObj.length == 0) {\n vm.form[vm.nameToValidate].$setValidity('validQtdMin', false, vm.form[vm.nameToValidate]);\n } else {\n vm.form[vm.nameToValidate].$setValidity('validQtdMin', true, vm.form[vm.nameToValidate]);\n }\n }\n }\n\n function deleteContractFromList(id) {\n\n angular.forEach(vm.listModelValues.items, function (item, key) {\n if (item.Id == id) {\n vm.listModelValues.items.splice(key, 1);\n validateFormInputList();\n }\n });\n\n }\n\n function isValidContract() {\n var isValid = false;\n if (angular.isString(vm.contractObj)) {\n angular.forEach(vm.contractListObj, function (item) {\n if (item.Title == vm.contractObj) {\n isValid = true;\n }\n });\n } else {\n isValid = true;\n }\n return isValid;\n }\n\n function selectedContractsContainsContract() {\n var contains = false;\n angular.forEach(vm.listModelValues.items, function (item) {\n if (item.Id == vm.contractObj.Id) {\n contains = true;\n }\n });\n return contains;\n }\n\n /**\n * If isFilterPart must load contracts only if partId is fileld.\n */\n function load() {\n if (vm.isTrue(vm.isFilterPart)) {\n if (angular.isDefined(vm.partId) && vm.partId > 0) {\n executeLoad();\n } else {\n vm.contracts = [];\n vm.contractObj = \"\";\n }\n\n } else {\n executeLoad();\n }\n }\n\n function executeLoad() {\n var filterContract = {\n CsActive: vm.filterOnlyActive == true || vm.filterOnlyActive == \"true\" ? 1 : \"\",\n Rescinded: false,\n GenericFilterID: vm.partId\n }\n setExtraFilters(filterContract);\n DefaultService.listAllContracts(filterContract)\n .then(onLoadResponse)\n .catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"auto.complete.contract.directive.load.error\"), ToastUtil.ToastType.WARN);\n });\n }\n\n function onLoadResponse(response) {\n vm.contracts = angular.copy(response.resultList.filter(function (item) {\n return item.Vendor !== null && item.Vendor.trim().length > 0;\n }));\n\n vm.contracts.sort(dynamicSort(\"Vendor\"));\n\n vm.contracts.forEach(function (contract) {\n contract.Title = contract.Id + ' - ' + contract.Vendor;\n });\n if (vm.contractObj) {\n containsInListContracts();\n }\n if (!vm.contractObj && vm.contracts.length == 1) {\n vm.contractObj = vm.contracts[0];\n vm.itemClicked();\n }\n\n }\n\n function setExtraFilters(filterContract) {\n if (angular.isDefined(vm.extraFilters) && vm.extraFilters != null) {\n for (var key in vm.extraFilters) {\n filterContract[key] = vm.extraFilters[key];\n }\n }\n }\n\n /**\n * Function to sort alphabetically an array of objects by some specific key.\n *\n * @param {String} property Key of the object to sort.\n */\n function dynamicSort(property) {\n var sortOrder = 1;\n\n if (property[0] === \"-\") {\n sortOrder = -1;\n property = property.substr(1);\n }\n\n return function (a, b) {\n if (sortOrder == -1) {\n return b[property].localeCompare(a[property]);\n } else {\n return a[property].localeCompare(b[property]);\n }\n }\n }\n\n function init() {\n vm.contracts = [];\n watchList();\n watchPartId();\n\n if (!vm.contractObj) {\n vm.contractObj = \"\";\n }\n\n if (angular.isUndefined(vm.isDisabled)) {\n vm.isDisabled = false;\n }\n\n if (angular.isUndefined(vm.isRequired)) {\n vm.isRequired = false;\n }\n\n if (angular.isUndefined(vm.filterOnlyActive)) {\n vm.filterOnlyActive = true;\n }\n\n if (angular.isUndefined(vm.isListComponent)) {\n vm.isListComponent = false;\n }\n\n if (angular.isUndefined(vm.form)) {\n vm.form = null;\n }\n\n if (angular.isUndefined(vm.nameToValidate)) {\n vm.nameToValidate = null;\n }\n\n if (angular.isUndefined(vm.isFilterPart)) {\n vm.isFilterPart = false;\n }\n\n load();\n initListViewModel();\n }\n\n function containsInListContracts() {\n var contains = false;\n for (var i = 0; i < vm.contracts.length; i++) {\n if (vm.contracts[i].Id == vm.contractObj.Id) {\n contains = true;\n break;\n }\n }\n if (!contains) {\n vm.contracts.unshift(vm.contractObj);\n }\n }\n\n init();\n }\n\n function AutoCompleteContractDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'AutoCompleteContractController',\n transclude: true,\n templateUrl: \"app/components/auto_complete/contract/auto-complete-contract.html\",\n bindToController: true,\n scope: {\n form: '=?',\n contractObj: '=?',\n nameToValidate: '@?',\n isDisabled: '=?',\n isRequired: '=?',\n selectedEvt: '&?',\n filterOnlyActive: '@?',\n isListComponent: '@?',\n contractListObj: '=?',\n isFilterPart: '@?',\n partId: '=?',\n extraFilters: '=?',\n dataset: '=?'\n\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('AutoCompleteContractController', AutoCompleteContractController)\n .directive('autoCompleteContract', AutoCompleteContractDirective);\n})();\n\n(function () {\n 'use_strict';\n\n angular\n .module('aqmsFrontend')\n .controller('QuotesController', QuotesController);\n\n function QuotesController($scope, $translate, $filter, $state, $window,\n LogisticsService, ToastUtil, moment,\n $rootScope, Idle, IndexConstant, $q, $interval, QuotesReportService) {\n\n // Globals\n var vm = this;\n var yearDate = moment(new Date()).year();\n var weekOfYear = parseInt(moment(new Date()).format(\"w\"));\n vm.MonthList = LogisticsService.getMonthOptions();\n vm.ProjectList = LogisticsService.getProjectOptions();\n vm.FrequencyList = LogisticsService.getFrequencyOptions();\n vm.searchParam = {\n Year: yearDate,\n Frequency: vm.FrequencyList[0].Value,\n Start: weekOfYear,\n End: (weekOfYear + 4) > vm.maxWeekOfYear ? vm.maxWeekOfYear : (weekOfYear + 4)\n }\n vm.labels = [\n $translate.instant('contract.month.jan'), $translate.instant('contract.month.fev'),\n $translate.instant('contract.month.mar'), $translate.instant('contract.month.apr'),\n $translate.instant('contract.month.may'), $translate.instant('contract.month.jun'),\n $translate.instant('contract.month.jul'), $translate.instant('contract.month.aug'),\n $translate.instant('contract.month.sep'), $translate.instant('contract.month.oct'),\n $translate.instant('contract.month.nov'), $translate.instant('contract.month.dec')];\n vm.quotesPeriod = []\n vm.ordersPeriod = []\n\n vm.colors = [ { backgroundColor: '#5081BC' }, { backgroundColor: '#9CBA56' } ];\n\n var options = {\n title: {\n display: true,\n text: '',\n fontSize: 18,\n padding: 20\n },\n legend: {\n position: 'bottom',\n display: true\n },\n scales: {\n yAxes: [{\n ticks: {\n precision: 0\n }\n }]\n }\n }\n\n\n // Scope\n function constructor() {\n vm.maxWeekOfYear = weeksInYear(yearDate);\n setOptions();\n }\n\n function setOptions() {\n vm.closedQuotes = {\n options: angular.copy(options),\n series: [\n translate('quotes.report.graphic.quoteOpen'),\n translate('quotes.report.graphic.orderOpen')\n ],\n content: vm.closedQuotes ? vm.closedQuotes.content : {}\n };\n\n vm.closedOrders = {\n options: options,\n series: [\n translate('quotes.report.graphic.quoteClosed'),\n translate('quotes.report.graphic.orderClosed')\n ],\n content: vm.closedOrders ? vm.closedOrders.content : {}\n };\n if (vm.searchParam.Frequency === 0) {\n vm.closedQuotes.options.title.text = translate('quotes.report.graphic.graphicQuoteOpen');\n } else {\n vm.closedQuotes.options.title.text = translate('quotes.report.graphic.graphicQuoteOpenMonthly');\n }\n if (vm.searchParam.Frequency === 0) {\n vm.closedOrders.options.title.text = translate('quotes.report.graphic.graphicOrderClosed');\n } else {\n vm.closedOrders.options.title.text = translate('quotes.report.graphic.graphicOrderClosedMonthly');\n }\n }\n\n function init() {\n constructor();\n search();\n }\n\n // takes data for the Chart of quotes + Po`s list + closed quotes\n function getQuotesData() {\n var params = vm.searchParam;\n\n\n QuotesReportService.getQuotesData(params, $translate.use())\n .then(function (res) {\n vm.closedQuotes.content = res.opened;\n vm.closedOrders.content = res.closed;\n setPeriodLabels()\n })\n .catch(function (error) {\n asError(error, 'quotes.report.error')\n vm.closedQuotes.content = {};\n vm.closedOrders.content = {}\n });\n\n }\n\n function search() {\n getQuotesData();\n }\n\n function asError(error, message) {\n var msg = error.data && error.data.Message ? error.data.Message : $filter('translate')(message);\n ToastUtil.showToastMessage($translate.instant(msg), ToastUtil.ToastType.ERROR);\n }\n\n function translate(message) {\n return $translate.instant(message);\n }\n\n function weeksInYear(year) {\n return Math.max(\n moment(new Date(year, 11, 31)).isoWeek()\n , moment(new Date(year, 11, 31 - 7)).isoWeek()\n );\n }\n\n // Angular actions\n vm.search = function () {\n search();\n }\n\n vm.onChangeFrequency = function () {\n if (vm.searchParam.Frequency == vm.FrequencyList[0].Value) {\n vm.searchParam.Start = weekOfYear;\n vm.searchParam.End = (weekOfYear + 4) > vm.maxWeekOfYear ? vm.maxWeekOfYear : (weekOfYear + 4);\n } else {\n vm.searchParam.Start = vm.MonthList[0].Value;\n vm.searchParam.End = vm.MonthList[11].Value;\n }\n if (vm.searchParam.Frequency === 0) {\n vm.closedQuotes.options.title.text = translate('quotes.report.graphic.graphicQuoteOpen');\n } else {\n vm.closedQuotes.options.title.text = translate('quotes.report.graphic.graphicQuoteOpenMonthly');\n }\n if (vm.searchParam.Frequency === 0) {\n vm.closedOrders.options.title.text = translate('quotes.report.graphic.graphicOrderClosed');\n } else {\n vm.closedOrders.options.title.text = translate('quotes.report.graphic.graphicOrderClosedMonthly');\n }\n search();\n };\n\n\n vm.startLessEnd = function () {\n return vm.searchParam.End < vm.searchParam.Start;\n }\n\n function setPeriodLabels() {\n if (vm.searchParam.Frequency === 1) {\n vm.labels = [\n $translate.instant('contract.month.jan'), $translate.instant('contract.month.fev'),\n $translate.instant('contract.month.mar'), $translate.instant('contract.month.apr'),\n $translate.instant('contract.month.may'), $translate.instant('contract.month.jun'),\n $translate.instant('contract.month.jul'), $translate.instant('contract.month.aug'),\n $translate.instant('contract.month.sep'), $translate.instant('contract.month.oct'),\n $translate.instant('contract.month.nov'), $translate.instant('contract.month.dec')];\n vm.quotesPeriod = vm.closedQuotes.content.period.map(function (item) {\n return vm.labels[item - 1]\n });\n vm.ordersPeriod = vm.closedOrders.content.period.map(function (item) {\n return vm.labels[item - 1]\n });\n } else {\n vm.quotesPeriod = vm.closedQuotes.content.period;\n vm.ordersPeriod = vm.closedOrders.content.period;\n }\n }\n\n vm.downloadChart = function (canvasChartId) {\n\n\n var d = (canvasChartId === 'canvasChartYear') ? \"chartToExport\" : canvasChartId;\n\n html2canvas(document.getElementById(d), {\n onrendered: function (canvas) {\n // document.body.appendChild(canvas);\n\n var date = moment().format(\"DDMMYYYY_HHmmss\");\n var file_name = '';\n var canvasChartElement = canvas;\n var imgChartYear = canvasChartElement.toDataURL(\"image/png\");\n var downloadChart = document.createElement(\"a\");\n\n if (canvasChartId === \"openedChartToExportCanvas\") {\n file_name = vm.closedQuotes.options.title.text + date + \".png\";\n } else {\n file_name = vm.closedOrders.options.title.text + date + \".png\";\n }\n\n downloadChart.href = imgChartYear;\n downloadChart.target = \"_blank\";\n downloadChart.download = file_name;\n downloadChart.click();\n downloadChart.remove();\n\n }\n });\n }\n\n var unregister = $rootScope.$on('CHANGE-LANGUAGE', function () {\n setOptions();\n setPeriodLabels();\n });\n\n $scope.$on('$destroy', unregister);\n\n init();\n }\n\n})();\n\n\n\n\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('QuotesReportService', QuotesReportService);\n\n var BASE = '/acquisition/report/';\n\n /** @ngInject */\n function QuotesReportService($state, $window, $injector, $q, $log, ToastUtil, $translate, ConfigurationService, AuthService, DefaultService) {\n\n function validateViewPermission(vm) {\n return (vm.profile.CanView);\n }\n\n function validateEditOrConsultPermission(vm) {\n return (vm.profile.CanEdit || vm.profile.CanConsult);\n }\n\n function validateDeletePermission(vm) {\n return (vm.profile.hasLoad && vm.profile.CanDelete);\n }\n\n function validateAddPermission(vm) {\n return (vm.profile.hasLoad && vm.profile.CanAdd);\n }\n\n function validateApprovePermission(vm) {\n return (vm.profile.hasLoad && vm.profile.CanApprove);\n }\n\n return {\n hasApprovePermission: validateApprovePermission,\n\n getQuotesData: function (searchParams, language) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + 'quotes/' + language, {\n params: searchParams\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n };\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('AcquisitionApprovalReportController', AcquisitionApprovalReportController);\n\n function AcquisitionApprovalReportController($scope, $state, $log, $translate, ApprovalRouteService, moment, $document, ToastUtil, ListModel, AuthService, AcquisitionReportService) {\n\n var vm = this;\n\n var documentStatus = {\n ONGOING: 0,\n PENDINGAPPROVAL: 1,\n APPROVED: 2,\n REJECT: 3,\n CANCELED: 4\n };\n\n vm.disableExport = false;\n\n vm.searchParams = {\n Subject: '',\n CreatedDateStart: '',\n CreatedDateEnd: '',\n DeadlineDateStart: '',\n DeadlineDateEnd: '',\n RequestType: '',\n RequestBy: '',\n ListPO: false,\n Status: '-1',\n UserLoggedId: AuthService.getUserID()\n };\n\n vm.statusList = [{\n Value: documentStatus.ONGOING,\n Title: \"document.flow.label.ongoing\"\n },\n {\n Value: documentStatus.PENDINGAPPROVAL,\n Title: \"document.flow.label.pending.approval\"\n },\n {\n Value: documentStatus.APPROVED,\n Title: \"document.flow.label.approved\"\n },\n {\n Value: documentStatus.CANCELED,\n Title: \"document.flow.label.status.canceled\"\n },\n {\n Value: documentStatus.REJECT,\n Title: \"document.flow.label.status.rejected\"\n }\n ];\n\n function init() {\n\n }\n\n function copy(value) {\n return !value ? null : angular.copy(value);\n }\n\n function buildSearchParam() {\n var searchParams = {};\n\n angular.forEach(vm.searchParams, function (value, key) {\n searchParams[key] = copy(vm.searchParams[key]);\n });\n searchParams.CreatedDateStart = searchParams.CreatedDateStart ? moment(searchParams.CreatedDateStart).format('DD/MM/YYYY') : searchParams.CreatedDateStart;\n searchParams.CreatedDateEnd = searchParams.CreatedDateEnd ? moment(searchParams.CreatedDateEnd).format('DD/MM/YYYY') : searchParams.CreatedDateEnd;\n searchParams.DeadlineDateStart = searchParams.DeadlineDateStart ? moment(searchParams.DeadlineDateStart).format('DD/MM/YYYY') : searchParams.DeadlineDateStart;\n searchParams.DeadlineDateEnd = searchParams.DeadlineDateEnd ? moment(searchParams.DeadlineDateEnd).format('DD/MM/YYYY') : searchParams.DeadlineDateEnd;\n searchParams.Type = vm.searchParams.RequestType ? vm.searchParams.RequestType.Id : null;\n searchParams.ListPO = vm.searchParams.ListPO ? vm.searchParams.ListPO : false;\n\n return searchParams;\n }\n\n vm.clearSearchParams = function () {\n vm.searchParams = {\n Subject: '',\n CreatedDateStart: '',\n CreatedDateEnd: '',\n DeadlineDateStart: '',\n DeadlineDateEnd: '',\n RequestType: '',\n RequestBy: '',\n Status: '-1',\n ListPO: false,\n UserLoggedId: AuthService.getUserID()\n };\n }\n\n vm.export = function () {\n vm.disableExport = true;\n AcquisitionReportService.exportApproval(buildSearchParam(vm.searchParams), $translate.use())\n .then(function (response) {\n\n var date = moment().format(\"DD_MM_YYYY_HH_mm_ss\");\n\n var newFIle = new Blob([response], {\n type: 'application/vnd.ms-excel'\n });\n var fileURL = URL.createObjectURL(newFIle);\n var a = $document[0].createElement(\"a\");\n $document[0].body.appendChild(a);\n a.style = \"display: none\";\n a.href = fileURL;\n a.download = $translate.instant('acquisition.report.labels.filename') + \"_\" + date + \".xls\";\n a.click();\n vm.disableExport = false;\n\n })\n .catch(function () {\n ToastUtil.showToastMessage($translate.instant(\"listview.directive.no.items.found\"), ToastUtil.ToastType.WARN);\n vm.disableExport = false;\n });\n }\n\n init();\n\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('UsersTelegramListController', UsersTelegramListController);\n\n function UsersTelegramListController($scope, $state, $log, $translate, AcquisitionRisksService, ToastUtil, $interval,\n ListModel, AuthService, $templateCache, AcquisitionRiskService, DefaultService) {\n\n var vm = this;\n vm.isOpen = false;\n vm.user = \"\";\n vm.listTelegramUsers = [];\n vm.userForm = {};\n vm.listUserValues = {\n items: []\n };\n vm.listUser = [];\n\n vm.delete = function (id) {\n AcquisitionRiskService.deleteUserTelegram(vm, id).then(function () {\n ToastUtil.showToastMessage($translate.instant(\"acquisition.risk.msg.deleteUserTelegramSuccess\"), ToastUtil.ToastType.SUCCESS);\n loadListUsersTelegram();\n }).catch(function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized || error.status === $scope.HttpStatusCodeConflict) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"acquisition.risk.msg.deleteUserTelegramError\"), ToastUtil.ToastType.ERROR);\n }\n });\n };\n\n vm.addUser = function () {\n if (vm.user && vm.user != null && vm.user !== \"\") {\n if (!isValidUser()) {\n ToastUtil.showToastMessage($translate.instant(\"input.user.directive.invalid.error\"), ToastUtil.ToastType.WARN);\n } else if (selectedUsersContainsUser()) {\n ToastUtil.showToastMessage($translate.instant(\"input.user.directive.alread.inlist.warn\"), ToastUtil.ToastType.WARN);\n } else {\n vm.userForm['inputListUser'].$setValidity('validQtdMin', true, vm.userForm['inputListUser']);\n const newItem = {\n Id : 0,\n User: angular.copy(vm.user),\n Company: {Id: 0}\n };\n vm.listUserValues.items.push(angular.copy(vm.user));\n vm.listUser = vm.listUserValues.items;\n vm.user = \"\";\n AcquisitionRiskService.saveUserTelegram(newItem).then(function () {\n ToastUtil.showToastMessage($translate.instant(\"acquisition.risk.msg.saveUserTelegramSuccess\"), ToastUtil.ToastType.SUCCESS);\n loadListUsersTelegram();\n }).catch(function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized || error.status === $scope.HttpStatusCodeConflict) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"acquisition.risk.msg.saveUserTelegramError\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n }\n };\n\n function isValidUser() {\n var isValid = false;\n if (typeof vm.user === 'string') {\n angular.forEach(vm.users, function (item) {\n if (item.Name === vm.user.Name) {\n isValid = true;\n }\n });\n } else {\n isValid = true;\n }\n return isValid;\n }\n\n function loadListUsersTelegram() {\n AcquisitionRiskService.listUsersTelegram(vm).then(function (response) {\n vm.listTelegramUsers = response.resultList;\n }).catch(function (error) {\n if (error && error.status) {\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.access.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"error.acquisition.search\"), ToastUtil.ToastType.ERROR);\n }\n } else if (error == \"not authorized\" ) {\n $state.go('not-authorized', {}, {});\n }\n });\n }\n\n function selectedUsersContainsUser() {\n var contains = false;\n angular.forEach(vm.listTelegramUsers, function (item) {\n if (item.UserId === vm.user.Id) {\n contains = true;\n }\n });\n return contains;\n }\n\n function loadUser() {\n DefaultService.loadInputUsers({\n CsActive: 1\n }).then(function (response) {\n vm.users = angular.copy(response);\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"input.model.directive.model.load.error\"), ToastUtil.ToastType.ERROR);\n });\n }\n\n function watchList() {\n $scope.$watch(\"ctrl.listUser\", function () {\n $interval(updateList, 250, 1);\n });\n }\n\n function updateList() {\n vm.listUserValues.items = vm.listUser;\n if (vm.listUserValues.items.length === 0) {\n vm.userForm['inputListUser'].$setValidity('validQtdMin', false, vm.userForm['inputListUser']);\n } else {\n vm.userForm['inputListUser'].$setValidity('validQtdMin', true, vm.userForm['inputListUser']);\n }\n }\n\n function init() {\n AcquisitionRiskService.loadProfileModules(vm, $scope)\n .then(function () {\n watchList();\n loadUser();\n loadListUsersTelegram();\n })\n .catch(function (error) {\n var msg = error.data && error.data.Message ? error.data.Message : $filter('translate')('error.acquisition.search');\n ToastUtil.showToastMessage($translate.instant(msg), ToastUtil.ToastType.ERROR);\n });\n }\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .directive('taskItem', TaskItem);\n\n /** @ngInject */\n function TaskItem() {\n\n var taskDirective = {};\n var approveIcon = ['../../assets/images/ic-pending.png', '../../assets/images/ic-approved.png', '', '../../assets/images/ic-not-approved.svg'];\n var delayIcon = '../../assets/images/ic-delay.svg';\n var priorityIcon = [{clazz: 'label aqms-label-veryhigh', text: 'VeryHigh'},\n {clazz: 'label aqms-label-high', text: 'High'},\n {clazz: 'label aqms-label-medium', text: 'Medium'},\n {clazz: 'label aqms-label-low', text: 'Low'}];\n\n taskDirective.restrict = 'EA';\n taskDirective.scope = {};\n taskDirective.scope.task = '=';\n taskDirective.scope.callback = '&';\n taskDirective.templateUrl = 'app/task/directives/taskitem.html';\n taskDirective.controller = function ($scope) {\n var vm = $scope;\n\n vm.taskLate = true;\n\n vm.actionEdit = function () {\n $scope.callback({task: vm.task});\n };\n\n vm.getAproveIcon = function () {\n if (vm.task.Status != null && vm.task.KanbanStatus != 2) {\n return approveIcon[vm.task.Status];\n }\n return '';\n };\n\n vm.getPriority = function () {\n return priorityIcon[vm.task.Priority];\n };\n\n vm.getDelayPath = function () {\n return delayIcon;\n };\n\n vm.getLetters = function(){\n\n if(angular.isDefined(vm.task.NameLetters) && vm.task.NameLetters != '' && vm.task.NameLetters != null){\n return vm.task.NameLetters;\n }\n else{\n return vm.task.GroupNameLetters;\n }\n };\n\n vm.getStatusTask = function () {\n var dataActual = new Date();\n dataActual.setHours(0, 0, 0, 0);\n\n var duoDate = new Date();\n duoDate.setTime(Date.parse(vm.task.DuoDate + \"-04:00\"));\n duoDate.setHours(23, 59, 59, 59);\n\n if (duoDate < dataActual) {\n return true;\n } else {\n return false;\n }\n\n };\n\n vm.getDateIcon = function () {\n\n var dt2 = new Date();\n dt2.setHours(0, 0, 0, 0);\n\n var dt1 = new Date();\n dt1.setTime(Date.parse(vm.task.DuoDate + \"-04:00\"));\n dt1.setHours(23, 59, 59, 59);\n\n if (dt1 < dt2) {\n return 'label aqms-label-late';\n } else {\n return 'label aqms-label-deadline';\n }\n }\n\n };\n\n return taskDirective;\n }\n\n\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .directive('taskArchivedItem', taskArchivedItem);\n\n /** @ngInject */\n function taskArchivedItem() {\n var taskDirective = {};\n var statusStyle = [{clazz:'label task-closed', text:'closed'}, {clazz:'label task-canceled', text:'canceled'}];\n\n taskDirective.restrict = 'EA';\n taskDirective.scope = {};\n taskDirective.scope.task = '=';\n taskDirective.scope.callback = '&';\n taskDirective.templateUrl = 'app/task/directives/taskarchiveditem.html';\n taskDirective.controller = function ($scope) {\n var vm = $scope;\n\n //Values of Status to persist in DB\n vm.ETaskStatus = {\n APPROVEPENDING: 0,\n ACCEPTED: 1,\n CANCELLED: 2, //Archived by fail\n REJECTED: 3\n }\n\n vm.actionEdit = function () {\n $scope.callback({task: vm.task});\n };\n\n vm.getDateIcon = function () {\n var dt2 = new Date();\n dt2.setHours(0, 0, 0, 0);\n\n var dt1 = new Date();\n dt1.setTime(Date.parse(vm.task.DuoDate + \"-04:00\"));\n dt1.setHours(23, 59, 59, 59);\n\n // TODO precisa dessa lógica na tela de archived?\n if (dt1 < dt2) {\n return 'label aqms-label-late';\n } else {\n return 'label aqms-label';\n }\n };\n\n vm.getStatus = function () {\n if(vm.task.Status == vm.ETaskStatus.CANCELLED){\n return statusStyle[1];\n }\n else{\n return statusStyle[0];\n }\n };\n };\n\n return taskDirective;\n }\n\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('VendorService', VendorService);\n\n var VENDOR_BASE = '/vendor/';\n /** @ngInject */\n function VendorService($injector, $q, ConfigurationService, VendorTypeConstant, CadastralSituationConstant, RegistrationStatusConstant) {\n\n var vendorTypeOptions = [], cadastralSituationOptions, registrationStatusOptions, statusOptions;\n\n statusOptions = [{\n id: 1,\n Name: 'basic.header.status.active.label'\n }, {\n id: 0,\n Name: 'basic.header.status.inactive.label'\n }];\n\n vendorTypeOptions = constantToList(VendorTypeConstant, function (type) {\n return {\n Type: type.Id,\n Title: type.Title,\n Checked: false\n }\n });\n\n cadastralSituationOptions = constantToList(CadastralSituationConstant);\n\n registrationStatusOptions = constantToList(RegistrationStatusConstant);\n\n function constantToList(constant, mapper) {\n var list = [];\n for (var key in constant) {\n list.push({\n Id: constant[key],\n Title: key\n });\n }\n if (!mapper) {\n return list;\n } else {\n return list.map(mapper);\n }\n }\n\n return {\n listVendors: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + VENDOR_BASE + \"list\", {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n listVendorsAutocomplete: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + VENDOR_BASE + \"list/autocomplete\", {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getById: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + VENDOR_BASE + 'byId/' + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n save: function (vendor) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + VENDOR_BASE, vendor, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n delete: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + VENDOR_BASE + \"/\" + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n update: function (id, vendor) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.patch(ConfigurationService.getServiceHost() + VENDOR_BASE + \"/\" + id, vendor)\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n downloadAll: function (filtro, language) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + VENDOR_BASE + 'export-all/' + language,\n {\n params : filtro,\n responseType: 'arraybuffer'\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n }\n , function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getVendorTypeOptions: function () {\n return vendorTypeOptions;\n },\n\n getCadastralSituationOptions: function () {\n return cadastralSituationOptions;\n },\n\n getRegistrationStatusOptions: function () {\n return registrationStatusOptions;\n },\n\n getStatusOptions: function () {\n return statusOptions;\n }\n\n };\n }\n})();\n\n(function () {\n 'use_strict';\n\n angular\n .module('aqmsFrontend')\n .controller('VendorListController', VendorListController);\n\n function VendorListController($scope, $log, $translate, $filter, $state, $window, $document, SourcingService, AuthService, RegistrationStatusConstant,\n CadastralSituationConstant, VendorTypeConstant, ToastUtil, FileService, moment) {\n\n var vm = this;\n vm.disableExport = true;\n\n var HTTP_STATUS_CONFLICT = 409;\n\n vm.profile = {\n canAdd: false,\n canEdit: false,\n canDelete: false,\n canView: false,\n hasLoad: false,\n canApprove: false,\n canExport: false\n };\n\n vm.vendorOriginList = [];\n vm.registrationStatusList = [];\n vm.cadastralSituationList = [];\n vm.vendorTypeList = [];\n\n vm.itensPerPageList = [\n {name: '5', value: 5, before: 0, after: 6},\n {name: '10', value: 10, before: 5, after: 11},\n {name: '20', value: 20, before: 10, after: 21},\n {name: '30', value: 30, before: 20, after: 31},\n {name: '40', value: 40, before: 30, after: 41},\n {name: '50', value: 50, before: 40, after: 51}]\n\n vm.itemPerPage = vm.itensPerPageList[0];\n vm.totalLista = 0;\n\n vm.searchParam = {\n BusinessId: AuthService.getBusinessId(),\n Id: null,\n Type: null,\n KeyWord: null,\n Origin: null,\n Vendor: null,\n StartDate: null,\n FinalDate: null,\n Address: null,\n District: null,\n City: null,\n UF: null,\n Site: null,\n RegistrationStatus: null,\n CadastralSituation: null,\n Page: 1,\n MaxPerPage: vm.itemPerPage.value\n };\n\n vm.clearSearchFields = function () {\n vm.searchParam.Id = null;\n vm.searchParam.Type = null;\n vm.searchParam.KeyWord = null;\n vm.searchParam.Origin = null;\n vm.searchParam.Vendor = null;\n vm.searchParam.StartDate = null;\n vm.searchParam.FinalDate = null;\n vm.searchParam.Address = null;\n vm.searchParam.District = null;\n vm.searchParam.City = null;\n vm.searchParam.UF = null;\n vm.searchParam.Site = null;\n vm.searchParam.RegistrationStatus = null;\n vm.searchParam.CadastralSituation = null;\n }\n\n vm.shouldShow = function (item) {\n if (vm.totalLista > 0 && item != undefined) {\n return vm.totalLista >= item.value || (vm.totalLista < item.after && vm.totalLista > item.before);\n }\n return false;\n }\n\n vm.changeItemsPerPage = function () {\n if (vm.itemPerPage == null) {\n vm.itemPerPage = vm.itensPerPageList[0];\n }\n search(1, vm.itemPerPage.value);\n };\n\n vm.onPageChange = function () {\n search(vm.searchParam.Page, vm.searchParam.MaxPerPage);\n };\n\n vm.init = function () {\n loadVendorType();\n loadVendorRegistrationStatus();\n loadCadastralSituationList();\n SourcingService.loadProfileModules(vm, $scope)\n .then(function () {\n vm.disableExport = !vm.profile.CanExport;\n validateViewPermission();\n loadVendorOrigin();\n vm.search();\n })\n .catch(function (error) {\n var msg = error.data && error.data.Message ? error.data.Message : $filter('translate')('error.vendor.search');\n ToastUtil.showToastMessage($translate.instant(msg), ToastUtil.ToastType.ERROR);\n });\n\n };\n\n function validateExportPermission() {\n if (!vm.profile.CanExport) {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n return false;\n }\n\n return true;\n }\n\n function validateViewPermission() {\n if (!vm.profile.CanView) {\n $state.go('not-authorized', {}, {});\n }\n }\n\n function search(page, max) {\n vm.searchParam.Page = page;\n vm.searchParam.MaxPerPage = max;\n\n var searchParams = buildSearchParam();\n\n SourcingService.searchVendors(vm, searchParams, $scope)\n .then(function (response) {\n\n angular.forEach(response.resultList, formatResponse);\n\n vm.vendors = response.resultList;\n vm.totalLista = response.total;\n vm.disableExport = response.total == 0;\n\n })\n .catch(function (error) {\n if (error && error.status) {\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"error.vendor.search\"), ToastUtil.ToastType.ERROR);\n }\n }\n });\n }\n\n vm.search = function () {\n vm.searchParam.Page = 1;\n if (sessionStorage.getItem(\"searchParams\")) {\n vm.searchParam = JSON.parse(sessionStorage.getItem(\"searchParams\"));\n sessionStorage.removeItem(\"searchParams\");\n vm.itensPerPageList.forEach(function (element) {\n if (element.value == vm.searchParam.MaxPerPage) {\n vm.itemPerPage = element;\n return;\n }\n });\n } else {\n vm.itemPerPage = vm.itensPerPageList[0];\n }\n search(vm.searchParam.Page, vm.itemPerPage.value);\n };\n\n vm.create = function () {\n var searchParams = JSON.stringify(vm.searchParam);\n sessionStorage.setItem(\"searchParams\", searchParams);\n\n SourcingService.createVendor(vm);\n };\n\n vm.edit = function (id) {\n var searchParams = JSON.stringify(vm.searchParam);\n sessionStorage.setItem(\"searchParams\", searchParams);\n SourcingService.editVendor(id, vm.profile);\n };\n\n vm.delete = function (vendorId) {\n\n SourcingService.removeVendor(vm, vendorId)\n .then(function () {\n var searchParams = JSON.stringify(vm.searchParam);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go($state.current, {}, {\n reload: true\n });\n ToastUtil.showToastMessage($translate.instant(\"vendor.remove.success\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(function (error) {\n if (error === 'not authorized') {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n } else {\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if (error.status === HTTP_STATUS_CONFLICT) {\n ToastUtil.showToastMessage($translate.instant(\"vendor.remove.error.conflict\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"vendor.remove.error\"), ToastUtil.ToastType.ERROR);\n }\n }\n\n });\n };\n\n vm.openSite = function (site) {\n $window.open(site, '_blank');\n };\n\n vm.download = function (file) {\n FileService.download(file).then(function (response) {\n var newFIle = new Blob([response], {}), fileURL = URL.createObjectURL(newFIle),\n a = $document[0].createElement(\"a\");\n $document[0].body.appendChild(a);\n a.style = \"display: none\";\n a.href = fileURL;\n a.download = file.FileName;\n a.click();\n }).catch(function (error) {\n $log.log(error);\n });\n };\n\n vm.contractList = function () {\n $state.go('contract-list', {});\n }\n\n vm.componentDevelopmentList = function () {\n $state.go('component-development-list', {});\n }\n\n vm.createTechnicalVisit = function () {\n $state.go('visit-list', {});\n };\n\n vm.createMilestone = function () {\n $state.go('milestone-create', {});\n };\n\n vm.createMilestones = function () {\n $state.go('milestone-list', {});\n }\n\n vm.createAvaliation = function () {\n $state.go('avaliation-list', {});\n }\n\n vm.exportToExcel = function () {\n if (!vm.disableExport) {\n\n if (!validateExportPermission()) {\n return;\n }\n\n var searchParams = buildSearchParam();\n\n vm.disableExport = true;\n\n SourcingService.exportVendors(vm, searchParams, $translate.use())\n .then(function (response) {\n\n var date = moment().format(\"DD_MM_YYYY_HH_mm_ss\");\n\n var newFIle = new Blob([response], {\n type: 'application/vnd.ms-excel'\n });\n var fileURL = URL.createObjectURL(newFIle);\n var a = $document[0].createElement(\"a\");\n $document[0].body.appendChild(a);\n a.style = \"display: none\";\n a.href = fileURL;\n a.download = $translate.instant('vendor.report.name') + AuthService.getBusinessName() + \"_\" + date + \".xls\";\n a.click();\n vm.disableExport = false;\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"service.load.error\"), ToastUtil.ToastType.ERROR);\n vm.disableExport = false;\n });\n }\n };\n\n vm.init();\n\n function onResponseError(error) {\n ToastUtil.showToastMessage(error, ToastUtil.ToastType.ERROR);\n }\n\n function buildSearchParam() {\n var searchParams = {\n BusinessId: null,\n Id: null,\n Type: null,\n KeyWord: null,\n Origin: null,\n Vendor: null,\n StartDate: null,\n FinalDate: null,\n Address: null,\n District: null,\n City: null,\n UF: null,\n Site: null,\n RegistrationStatus: null,\n CadastralSituation: null,\n Page: vm.searchParam.Page,\n MaxPerPage: vm.searchParam.MaxPerPage\n };\n\n angular.forEach(searchParams, function (value, key) {\n searchParams[key] = copy(vm.searchParam[key]);\n });\n\n searchParams.Type = searchParams.Type ? searchParams.Type.Type : searchParams.Type;\n searchParams.RegistrationStatus = searchParams.RegistrationStatus ? searchParams.RegistrationStatus.Id : searchParams.RegistrationStatus;\n searchParams.CadastralSituation = searchParams.CadastralSituation ? searchParams.CadastralSituation.Id : searchParams.CadastralSituation;\n searchParams.VendorOrigin_id = searchParams.Origin ? searchParams.Origin.Id : searchParams.Origin;\n searchParams.StartDate = searchParams.StartDate ? moment(searchParams.StartDate).format('DD/MM/YYYY') : searchParams.StartDate;\n searchParams.FinalDate = searchParams.FinalDate ? moment(searchParams.FinalDate).format('DD/MM/YYYY') : searchParams.FinalDate;\n\n delete searchParams.Origin;\n\n return searchParams;\n }\n\n function copy(value) {\n return !value ? null : angular.copy(value);\n }\n\n function loadVendorType() {\n vm.vendorTypeList = SourcingService.getVendorTypeOptions();\n }\n\n function loadVendorRegistrationStatus() {\n vm.registrationStatusList = SourcingService.getRegistrationStatusOptions();\n }\n\n function loadVendorOrigin() {\n SourcingService.listAllVendorOrigin()\n .then(function (response) {\n vm.vendorOriginList = response.resultList;\n }).catch(onResponseError);\n }\n\n function loadCadastralSituationList() {\n constantToList(CadastralSituationConstant, vm.cadastralSituationList);\n }\n\n function constantToList(constant, list) {\n angular.forEach(constant, function (value, key) {\n list.push({\n Id: value,\n Title: key\n });\n });\n }\n\n function formatResponse(vendor) {\n formatUpdatedRegister(vendor);\n\n formatRegistrationStatus(vendor);\n\n formatTypes(vendor);\n\n formatAttachment(vendor);\n\n formatVendorNullValues(vendor);\n\n }\n\n function formatVendorNullValues(vendor) {\n angular.forEach(vendor, function (value, key) {\n vendor[key] = !value ? '-' : value;\n });\n }\n\n function formatRegistrationStatus(vendor) {\n vendor.RegistrationStatus = vendor.RegistrationStatus && vendor.RegistrationStatus > 0 ? vm.registrationStatusList[vendor.RegistrationStatus - 1].Title : '-';\n }\n\n function formatAttachment(vendor) {\n if (vendor.Attachment_Id) {\n vendor.Attachment = {\n Id: vendor.Attachment_Id,\n Path: vendor.Attachment_Path,\n FileName: vendor.Attachment_FileName\n };\n } else {\n vendor.Attachment = null;\n }\n delete vendor.Attachment_Id;\n delete vendor.Attachment_Path;\n delete vendor.Attachment_FileName;\n }\n\n function formatTypes(vendor) {\n if (vendor.Types && vendor.Types.length > 0) {\n var types = [];\n angular.forEach(vendor.Types, function (type) {\n types.push($filter('translate')(vm.vendorTypeList[type.Type - 1].Title));\n });\n vendor.Types = types.join();\n } else {\n vendor.Types = \"-\";\n }\n }\n\n function formatUpdatedRegister(vendor) {\n var ticks = vendor.UpdatedRegister;\n // ticks are in nanotime; convert to microtime\n var ticksToMicrotime = ticks / 10000;\n // ticks are recorded from 1/1/1; get microtime difference from 1/1/1/ to 1/1/1970\n var epochMicrotimeDiff = Math.abs(new Date(0, 0, 1).setFullYear(1));\n // converted to microtime minus difference from epoch microtime\n vendor.UpdatedRegister = ticksToMicrotime - epochMicrotimeDiff;\n }\n }\n})();\n\n/*eslint no-undef: 0*/\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('VendorController', VendorController);\n\n function VendorController($scope, $interval, $window, $state, $translate, $filter, SourcingService, VendorTypeConstant, ToastUtil, JsonPatchUtil, moment) {\n\n var vm = this;\n\n\n vm.profile = {\n canAdd: false,\n canEdit: false,\n canDelete: false,\n canView: false,\n hasLoad: false,\n canApprove: false,\n canExport: false,\n canConsult: false\n };\n\n var _patch = null;\n\n var DIRECT_TYPE = VendorTypeConstant['vendor.vendortype.direct'];\n\n var USER = {\n Id: parseInt($window.localStorage.userID),\n Name: $window.localStorage.aliasAqms\n };\n\n vm.label = \"label.new.vendor\";\n\n vm.VendorNotifications = [];\n\n vm.vendor = {\n Types: [],\n ProductLine: null,\n EconomicActivity: null,\n Origins: [],\n FantasyName: null,\n Address: null,\n District: null,\n City: null,\n UF: null,\n Site: null,\n RegistrationStatus: null,\n CadastralSituation: null,\n CsActive: null,\n User: USER,\n CodeSAP: null,\n TechnicalVisit: false,\n Title: null,\n VendorAttachment: [],\n Remark: null,\n Contacts: [],\n VendorNotifications: [],\n CreatedBy: null\n };\n\n vm.cadastralSituationList = [];\n vm.registrationStatusList = [];\n vm.vendorTypeList = [];\n vm.statusList = [];\n vm.vendorOriginList = [];\n vm.newOrigin = \"\";\n vm.isTechnicalVisitDisabled = false;\n vm.observer = null;\n vm.CreatedDate = new Date();\n vm.originalAttachment = null;\n vm.Contact = {ContactUs: null, Email: null, Phone: null, Department: null};\n\n var vendorId = $state.params.Id;\n\n vm.saveOrUpdate = function () {\n\n if (vendorId && vendorId > 0) {\n if (!vm.profile.CanEdit && !vm.profile.CanConsult) {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n return false;\n } else if (!vm.profile.CanEdit && vm.profile.CanConsult) {\n $state.go('vendor-list');\n return;\n }\n }\n\n if (!isContactListValid()) {\n ToastUtil.showToastMessage($translate.instant(\"validation.vendor.contact.required\"), ToastUtil.ToastType.WARN);\n return;\n }\n\n if (vendorId && vendorId > 0) {\n vm.update();\n } else {\n vm.vendor.CreatedBy = USER;\n vm.save();\n }\n }\n\n vm.save = function () {\n if (vm.canSave()) {\n SourcingService.saveVendor(parseVendor())\n .then(function () {\n ToastUtil.showToastMessage($translate.instant(\"vendor.save.success\"), ToastUtil.ToastType.SUCCESS);\n $state.go('vendor-list');\n })\n .catch(onSaveVendorError);\n }\n };\n\n vm.update = function () {\n if (vm.canSave()) {\n if (vm.VendorNotifications.length > 0) {\n vm.VendorNotifications.forEach(function (item) {\n vm.vendor.VendorNotifications.forEach(function (notification, index) {\n if (notification.ExternalEmail.Email == item.ExternalEmail.Email) {\n vm.vendor.VendorNotifications.splice(index, 1);\n }\n });\n });\n vm.VendorNotifications.forEach(function (item) {\n vm.vendor.VendorNotifications.push(item);\n });\n\n }\n\n var patch = generatePatch();\n\n if (patch && patch.length > 0) {\n\n if (!vm.vendor.User || (vm.vendor.User.Id !== USER.Id)) {\n var replaceUser = {\"op\": \"replace\", \"path\": \"/User\", \"value\": USER};\n if (!replaceUserExists(patch, replaceUser)) {\n patch.push(replaceUser);\n }\n }\n\n SourcingService.updateVendor(vendorId, patch)\n .then(function () {\n _patch = null;\n ToastUtil.showToastMessage($translate.instant(\"vendor.update.success\"), ToastUtil.ToastType.SUCCESS);\n $state.go('vendor-list');\n })\n .catch(onSaveVendorError);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"vendor.update.success\"), ToastUtil.ToastType.SUCCESS);\n $state.go('vendor-list');\n }\n }\n }\n\n vm.canSave = function () {\n var canSave = $scope.vendorForm.$valid;\n return canSave && !vm.exporting && isContactListValid() && isVendorOriginListValid();\n };\n\n vm.removeOrigin = function (index) {\n vm.vendor.Origins.splice(index, 1);\n };\n\n vm.addOrigin = function () {\n vm.showOriginDuplicatedMessage = false;\n\n if (isValidOrigin(vm.newOrigin)) {\n if (!findOriginAnyMatch()) {\n var origin = angular.copy(vm.newOrigin);\n vm.vendor.Origins.push(origin);\n vm.newOrigin = \"\";\n } else {\n vm.showOriginDuplicatedMessage = true;\n }\n }\n\n };\n\n vm.saveContact = function () {\n vm.showPhoneDuplicatedMessage = false;\n\n if (isValidContact(vm.Contact)) {\n delete vm.Contact.invalid;\n var contact = angular.copy(vm.Contact);\n contact.Phone = angular.copy(contact.Phone).replace(/\\D+/g, '');\n\n if (vm.isEditingContact()) {\n updateContact(contact);\n } else {\n addNewContact(contact);\n }\n }\n\n };\n\n vm.editContact = function (index, contact) {\n vm.Contact = angular.copy(contact);\n vm.ContactIndex = index;\n }\n\n vm.removeContact = function (index) {\n vm.vendor.Contacts.splice(index, 1);\n clearContactFormFields();\n delete vm.ContactIndex;\n }\n\n vm.isEditingContact = function () {\n return angular.isDefined(vm.ContactIndex) && vm.ContactIndex >= 0;\n }\n\n vm.onContactChange = function () {\n vm.showPhoneDuplicatedMessage = false\n if (vm.Contact) {\n delete vm.Contact.invalid;\n }\n }\n\n vm.blurEvent = function () {\n vm.showOriginDuplicatedMessage = false;\n $interval(onBlur, 100, 1);\n };\n\n vm.onInputPhoneChanged = function () {\n vm.showPhoneDuplicatedMessage = false;\n }\n\n vm.itemClicked = function () {\n if (vm.selectedEvt != null) {\n $interval(callSelectedEvt, 50, 1);\n }\n };\n\n vm.originsChanged = function () {\n vm.showOriginDuplicatedMessage = false;\n var showRequiredMsg = false;\n if (vm.vendor.Origins.length == 0) {\n showRequiredMsg = true;\n }\n return showRequiredMsg;\n };\n\n vm.phonesChanged = function () {\n var showRequiredMsg = false;\n if (vm.vendor.Contacts.length == 0) {\n showRequiredMsg = true;\n }\n return showRequiredMsg;\n };\n\n vm.onTypeChanged = function (type) {\n\n if (type.Checked) {\n\n vm.vendor.Types.push({Id: null, Vendor: null, Type: type.Type});\n\n if (type.Type === DIRECT_TYPE) {\n vm.vendor.TechnicalVisit = true;\n vm.isTechnicalVisitDisabled = true;\n } else {\n handleDirectTypeChecked();\n }\n } else {\n var filtered = vm.vendor.Types.filter(function (c) {\n return c.Type === type.Type;\n });\n\n if (filtered) {\n\n if (angular.isArray(filtered) && filtered.length > 0) {\n filtered = filtered[0];\n }\n\n var index = vm.vendor.Types.indexOf(filtered);\n\n vm.vendor.Types.splice(index, 1);\n\n }\n handleDirectTypeChecked();\n }\n };\n\n vm.onCadastralSituationChanged = function () {\n vm.vendor.CadastralSituation = !vm.CadastralSituation ? vm.CadastralSituation : vm.CadastralSituation.Id;\n if (!vm.vendor.CadastralSituation || (vm.vendor.CadastralSituation == 2)) {\n vm.vendor.CodeSAP = undefined;\n }\n };\n\n vm.onRegistrationStatusChanged = function () {\n vm.vendor.RegistrationStatus = !vm.RegistrationStatus ? vm.RegistrationStatus : vm.RegistrationStatus.Id;\n }\n\n vm.isUFInvalid = function () {\n var form = $scope.vendorForm;\n\n if (!form.$submitted) {\n return false;\n }\n\n var invalid = false;\n if (form.$error && form.$error.pattern) {\n angular.forEach(form.$error.pattern, function (error) {\n if (error.uf) {\n invalid = true;\n return;\n }\n });\n }\n return invalid;\n };\n\n vm.isEmailInvalid = function () {\n var form = $scope.vendorContactsForm, fieldKey = \"email\";\n\n var invalid = false;\n if (form.$error && form.$error.pattern) {\n angular.forEach(form.$error.pattern, function (error) {\n if (error[fieldKey]) {\n invalid = true;\n return;\n }\n });\n }\n return invalid;\n };\n\n vm.isCodeSAPInvalid = function () {\n return isInvalidField('codesap');\n };\n\n vm.isSiteInvalid = function () {\n return isInvalidField('site');\n };\n\n vm.onChangeStatus = function () {\n vm.vendor.CsActive = !vm.Status ? vm.Status : vm.Status.id === 1 ? true : false;\n };\n\n function replaceUserExists(patch, replaceUser) {\n return patch.filter(function (p) {\n return angular.equals(p, replaceUser);\n }).length > 0;\n }\n\n function isContactListValid() {\n return vm.vendor.Contacts && vm.vendor.Contacts.length > 0;\n }\n\n function isVendorOriginListValid() {\n return vm.vendor.Origins && vm.vendor.Origins.length > 0;\n }\n\n function isValidOrigin(origin) {\n return origin && origin !== \"\" && angular.isDefined(origin.Id) && vm.vendorOriginList.filter(function (vendorOrigin) {\n return vendorOrigin.Id === origin.Id\n }).length > 0;\n }\n\n function updateContact(contact) {\n var filtered = filterContactByName(contact.ContactUs);\n filtered = angular.isArray(filtered) ? filtered[0] : filtered;\n if (filtered && vm.vendor.Contacts.indexOf(filtered) !== vm.ContactIndex) {\n vm.showPhoneDuplicatedMessage = true;\n } else {\n vm.vendor.Contacts[vm.ContactIndex] = contact;\n vm.Contact = {ContactUs: null, Email: null, Phone: null, Department: null};\n vm.ContactIndex = undefined;\n }\n }\n\n function addNewContact(contact) {\n if (existsContact(contact.ContactUs)) {\n vm.showPhoneDuplicatedMessage = true;\n } else {\n vm.vendor.Contacts.push(contact);\n clearContactFormFields();\n }\n }\n\n function clearContactFormFields() {\n vm.Contact = {ContactUs: null, Email: null, Phone: null, Department: null};\n }\n\n function filterContactByName(name) {\n return vm.vendor.Contacts.filter(function (c) {\n return c.ContactUs === name;\n })\n }\n\n function existsContact(contactus) {\n return filterContactByName(contactus).length > 0;\n }\n\n function isValidContact(contact) {\n var valid = true;\n var invalid = {};\n if (!contact || contact.length === 0) return false;\n for (var key in contact) {\n if (key != \"Email\" && key != \"Department\") {\n if (!contact[key] || contact[key] === null || contact[key] === \"\") {\n valid = false;\n invalid[key] = true;\n }\n }\n\n }\n contact.invalid = invalid;\n return valid;\n }\n\n function generatePatch() {\n var patch = JsonPatchUtil.generate(vm.vendor, vm.vendorCopy, vm.observer, _patch);\n\n patch.filter(function (p) {\n return p.op === \"add\" && p.path.startsWith(\"/VendorAttachment\");\n }).forEach(function (item) {\n item.value.Vendor = {Id: vm.vendor.Id};\n });\n\n // Guarda uma cópia pra caso da operação falhar. Quando falha e o método generate é chamado novamente, o patch volta vazio, a menos que\n // o usuário faça qualquer outra mudança no modelo.\n _patch = angular.copy(patch);\n return patch;\n }\n\n function mapToContact(c) {\n return {\n ContactUs: c.ContactUs,\n Email: c.Email,\n Id: c.Id,\n Phone: c.Phone,\n Vendor_Id: c.Vendor_Id,\n Department: c.Department\n }\n }\n\n function onlyChecked(type) {\n return type.Checked === true;\n }\n\n function mapToId(o) {\n return {Id: o.Id};\n }\n\n function findOriginAnyMatch() {\n return vm.vendor.Origins.map(function (origin) {\n return origin.Title;\n }).indexOf(vm.newOrigin.Title) !== -1\n }\n\n function handleDirectTypeChecked() {\n if (!isDirectTypeChecked()) {\n vm.isTechnicalVisitDisabled = false;\n }\n }\n\n function isDirectTypeChecked() {\n return vm.vendorTypeList\n .filter(function (c) {\n return c.Checked && c.Type === DIRECT_TYPE;\n }).length > 0;\n }\n\n function isInvalidField(fieldKey) {\n var form = $scope.vendorForm;\n\n if (!form.$submitted) {\n return false;\n }\n\n var invalid = false;\n if (form.$error && form.$error.pattern) {\n angular.forEach(form.$error.pattern, function (error) {\n if (error[fieldKey]) {\n invalid = true;\n return;\n }\n });\n }\n return invalid;\n }\n\n function getVendorById() {\n SourcingService.getVendorById(vendorId)\n .then(function (response) {\n setViewModel(response);\n });\n }\n\n function validateSavePermission() {\n if (!vm.profile.CanAdd) {\n $state.go('not-authorized', {}, {});\n }\n }\n\n function validateEditOrConsultPermission() {\n if (!vm.profile.CanEdit && !vm.profile.CanConsult) {\n $state.go('not-authorized', {}, {});\n }\n }\n\n function init() {\n\n vm.vendorTypeList = angular.copy(SourcingService.getVendorTypeOptions());\n vm.cadastralSituationList = SourcingService.getCadastralSituationOptions();\n vm.registrationStatusList = SourcingService.getRegistrationStatusOptions();\n vm.statusList = SourcingService.getStatusOptions();\n\n initOriginList();\n\n if (vendorId && vendorId > 0) {\n vm.label = 'label.edit.vendor';\n SourcingService.loadProfileModules(vm, $scope)\n .then(function () {\n validateEditOrConsultPermission();\n getVendorById();\n })\n .catch(function (error) {\n var msg = error.data && error.data.Message ? error.data.Message : $filter('translate')('error.vendor.search');\n ToastUtil.showToastMessage($translate.instant(msg), ToastUtil.ToastType.ERROR);\n });\n } else {\n SourcingService.loadProfileModules(vm, $scope)\n .then(function () {\n validateSavePermission();\n vm.vendor.CreatedBy = USER;\n })\n .catch(function (error) {\n var msg = error.data && error.data.Message ? error.data.Message : $filter('translate')('error.vendor.search');\n ToastUtil.showToastMessage($translate.instant(msg), ToastUtil.ToastType.ERROR);\n });\n\n }\n\n }\n\n function formatDate() {\n var createdDate = moment(vm.CreatedDate, 'YYYY/MM/DD');\n vm.CreatedDate = new Date(createdDate.year(), createdDate.month(), createdDate.date());\n }\n\n function setViewModel(vendor) {\n\n vm.vendor.Id = vendor.Id;\n vm.CreatedDate = vendor.CreatedDate;\n vm.vendor.ProductLine = vendor.ProductLine;\n vm.vendor.EconomicActivity = vendor.EconomicActivity;\n vm.vendor.FantasyName = vendor.FantasyName;\n vm.vendor.Address = vendor.Address;\n vm.vendor.District = vendor.District;\n vm.vendor.City = vendor.City;\n vm.vendor.UF = vendor.UF;\n vm.vendor.Site = vendor.Site;\n vm.vendor.CodeSAP = vendor.CodeSAP;\n vm.vendor.TechnicalVisit = vendor.TechnicalVisit;\n vm.vendor.Title = vendor.Title;\n vm.vendor.Remark = vendor.Remark;\n vm.vendor.VendorAttachment = vendor.VendorAttachment;\n setUpdatedBy(vendor);\n setCreatedBy(vendor);\n formatDate();\n setVendorTypesViewModel(vendor.Types);\n setCadastralSituationViewModel(vendor.CadastralSituation);\n setRegistrationStatusViewModel(vendor.RegistrationStatus);\n setStatusViewModel(vendor.CsActive);\n setContactsViewModel(vendor.Contacts);\n setVendorOriginsViewModel(vendor.Origins);\n setNotificationsViewModel(vendor.VendorNotifications);\n vm.vendorCopy = angular.copy(vm.vendor);\n vm.observer = jsonpatch.observe(vm.vendor);\n vm.isTechnicalVisitDisabled = vm.profile.CanEdit === false && vm.profile.CanConsult === true;\n }\n\n function setUpdatedBy(vendor) {\n if (vendor.User && vendor.User !== null) {\n vm.vendor.User = {Id: parseInt(vendor.User.Id), Name: vendor.User.Name};\n } else {\n vm.vendor.User = null;\n }\n }\n\n function setCreatedBy(vendor) {\n if (vendor.CreatedBy && vendor.CreatedBy !== null) {\n vm.vendor.CreatedBy = {Id: parseInt(vendor.CreatedBy.Id), Name: vendor.CreatedBy.Name};\n } else {\n vm.vendor.CreatedBy = null;\n }\n }\n\n function setVendorOriginsViewModel(Origins) {\n vm.vendor.Origins = Origins;\n if (!vm.vendor.Origins) vm.vendor.Origins = [];\n }\n\n function setNotificationsViewModel(notifications) {\n vm.vendor.VendorNotifications = notifications;\n }\n\n function setVendorTypesViewModel(Types) {\n vm.vendor.Types = Types;\n if (vm.vendor.Types && vm.vendor.Types.length > 0) {\n\n vm.vendor.Types.forEach(function (type) {\n\n var filtered = vm.vendorTypeList.filter(function (option) {\n return option.Type === type.Type;\n });\n\n if (filtered) {\n\n if (angular.isArray(filtered) && filtered.length > 0) {\n filtered = filtered[0];\n }\n\n filtered.Checked = true;\n\n }\n });\n }\n }\n\n function mapVendorType(type) {\n return {Type: type.Type, Id: !type.Id ? null : type.Id}\n }\n\n function setCadastralSituationViewModel(CadastralSituation) {\n if (CadastralSituation && CadastralSituation > 0) {\n setComboValue(vm.cadastralSituationList, CadastralSituation, vm, \"CadastralSituation\");\n vm.onCadastralSituationChanged();\n }\n }\n\n function setRegistrationStatusViewModel(RegistrationStatus) {\n if (RegistrationStatus && RegistrationStatus > 0) {\n setComboValue(vm.registrationStatusList, RegistrationStatus, vm, \"RegistrationStatus\");\n vm.onRegistrationStatusChanged();\n }\n }\n\n function setContactsViewModel(Contacts) {\n if (Contacts && Contacts.length > 0) {\n var tmpContacts = Contacts.map(mapToContact);\n vm.vendor.Contacts = tmpContacts;\n } else {\n vm.vendor.Contacts = [];\n }\n }\n\n function setStatusViewModel(CsActive) {\n var id = CsActive === true ? 1 : 0;\n var find = vm.statusList\n .filter(function (c) {\n return c.id === id;\n });\n\n if (find && find.length > 0) {\n vm.Status = find[0];\n vm.onChangeStatus();\n }\n }\n\n function setComboValue(list, value, model, key) {\n var find = list\n .filter(function (c) {\n return c.Id === value;\n });\n\n if (find && find.length > 0) {\n model[key] = find[0];\n }\n }\n\n function initOriginList() {\n SourcingService.listAllActiveVendorOrigin()\n .then(function (response) {\n vm.vendorOriginList = response.resultList;\n }).catch(function (error) {\n ToastUtil.showToastMessage(error, ToastUtil.ToastType.ERROR);\n });\n }\n\n function onSaveVendorError(error) {\n var serverMsg = error.data ? error.data.Message : 'Network error';\n var errorMsg;\n\n if (error.data && error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n return;\n }\n } else if (serverMsg.indexOf(\"#errorMessage\") !== -1) {\n serverMsg = serverMsg.replace(\"#errorMessage\", \"\");\n var message = $translate.instant('vendor.save.error.duplicated');\n message = message.replace(\"$description\", serverMsg);\n errorMsg = message;\n } else {\n errorMsg = $translate.instant(serverMsg)\n }\n\n ToastUtil.showToastMessage($translate.instant(errorMsg), ToastUtil.ToastType.ERROR);\n }\n\n function parseVendor() {\n var vendor = angular.copy(vm.vendor);\n\n vendor.Origins = vm.vendor.Origins.map(mapToId);\n vendor.Types = vm.vendorTypeList\n .filter(onlyChecked)\n .map(mapVendorType);\n\n vendor.Contacts = vm.vendor.Contacts;\n vendor.VendorNotifications = vm.VendorNotifications;\n vm.vendor.VendorNotifications = angular.copy(vendor.VendorNotifications);\n\n return vendor;\n }\n\n function callSelectedEvt() {\n if (angular.isDefined(vm.selectedEvt)) {\n vm.selectedEvt();\n }\n }\n\n function onBlur() {\n var itemFound = false;\n if (typeof vm.newOrigin == \"string\") {\n angular.forEach(vm.vendorOriginList, function (item) {\n if (item.Title == vm.newOrigin) {\n vm.vendorObj = item;\n itemFound = true;\n }\n });\n\n if (!itemFound) {\n vm.newOrigin = \"\";\n }\n }\n }\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('VisitService', VisitService);\n\n var TECHNICAL_VISIT_BASE = '/technical-visit/';\n /** @ngInject */\n function VisitService($window, $injector, $q, ConfigurationService) {\n return {\n\n Status: {\n WAITINGAPPROVAL: 1, ONGOING: 2, APPROVED: 3, REJECT: 4\n },\n\n listVisits: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + TECHNICAL_VISIT_BASE + \"list\", {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n save: function (visit) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + TECHNICAL_VISIT_BASE, visit, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n delete: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + TECHNICAL_VISIT_BASE + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getById: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + TECHNICAL_VISIT_BASE + 'byId/' + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n update: function (id, technicalVisit) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.patch(ConfigurationService.getServiceHost() + TECHNICAL_VISIT_BASE + id, technicalVisit)\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n downloadAll: function (filtro, language) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + TECHNICAL_VISIT_BASE + 'export-all/' + language,\n {\n params : filtro,\n responseType: 'arraybuffer'\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n }\n , function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n\n };\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('VisitListController', VisitListController);\n\n function VisitListController($scope, $log, $translate, $filter, $state, $window, $document, SourcingService, AuthService, ToastUtil, moment) {\n\n var vm = this;\n var HTTP_STATUS_CONFLICT = 409;\n var USER = {\n Name: $window.localStorage.aliasAqms,\n Id: parseInt($window.localStorage.userID)\n };\n var dateNow = moment(new Date()).format('YYYY-MM-DD');\n var finalStatus = {\n WAITINGAPPROVAL: 1,\n ONGOING: 2,\n APPROVED: 3,\n REJECT: 4\n };\n\n vm.disableExport = true;\n vm.profile = {\n canAdd: false,\n canEdit: false,\n canDelete: false,\n canView: false,\n hasLoad: false,\n canApprove: false,\n canExport: false\n };\n vm.statusList = [{\n Value: finalStatus.WAITINGAPPROVAL,\n Title: \"label.inspection.waiting.approval\"\n },\n {\n Value: finalStatus.ONGOING,\n Title: \"label.ongoing\"\n },\n {\n Value: finalStatus.APPROVED,\n Title: \"label.inspection.approved\"\n },\n {\n Value: finalStatus.REJECT,\n Title: \"label.inspection.status.rejected\"\n }\n ];\n vm.visits = [];\n vm.itensPerPageList = [\n {name: '5', value: 5, before: 0, after: 6},\n {name: '10', value: 10, before: 5, after: 11},\n {name: '20', value: 20, before: 10, after: 21},\n {name: '30', value: 30, before: 20, after: 31},\n {name: '40', value: 40, before: 30, after: 41},\n {name: '50', value: 50, before: 40, after: 51}];\n vm.itemPerPage = vm.itensPerPageList[0];\n vm.totalLista = 0;\n vm.searchParams = {\n Id: '',\n StartDate: '',\n FinalDate: '',\n Vendor: '',\n Status: '-1',\n Page: 1,\n MaxPerPage: vm.itemPerPage.value\n };\n\n vm.clearSearchFields = function () {\n vm.searchParams.Id = '';\n vm.searchParams.StartDate = '';\n vm.searchParams.FinalDate = '';\n vm.searchParams.Vendor = '';\n vm.searchParams.Status = '-1';\n }\n\n vm.resolveStatusCss = function (status) {\n var result = \"\";\n\n switch (status) {\n case finalStatus.WAITINGAPPROVAL:\n result = 'label label-pending';\n break;\n case finalStatus.ONGOING:\n result = 'label label-ongoing';\n break;\n case finalStatus.APPROVED:\n result = 'label label-approved';\n break;\n case finalStatus.RESERVATIONS:\n result = 'label label-approved';\n break;\n case finalStatus.REJECT:\n result = 'label label-rejected';\n break;\n }\n\n return result;\n }\n\n vm.canEdit = function (visit) {\n var Status = visit.Status, isApproverOrCreator = [visit.CreatedById, visit.ApproverId].indexOf(USER.Id) > -1;\n return Status === finalStatus.ONGOING || Status === finalStatus.WAITINGAPPROVAL || isApproverOrCreator;\n }\n\n vm.shouldShow = function (item) {\n if (vm.totalLista > 0 && item != undefined) {\n return vm.totalLista >= item.value || (vm.totalLista < item.after && vm.totalLista > item.before);\n }\n return false;\n }\n\n vm.changeItemsPerPage = function () {\n if (vm.itemPerPage == null) {\n vm.itemPerPage = vm.itensPerPageList[0];\n }\n search(1, vm.itemPerPage.value);\n };\n\n vm.onPageChange = function () {\n search(vm.searchParams.Page, vm.searchParams.MaxPerPage);\n };\n\n vm.search = function () {\n if (sessionStorage.getItem(\"searchParams\")) {\n vm.searchParams = JSON.parse(sessionStorage.getItem(\"searchParams\"));\n sessionStorage.removeItem(\"searchParams\");\n vm.itensPerPageList.forEach(function (element) {\n if (element.value == vm.searchParams.MaxPerPage) {\n vm.itemPerPage = element;\n return;\n }\n });\n }\n var searchParams = buildSearchParam();\n\n SourcingService.searchVisits(vm, searchParams, $scope)\n .then(function (response) {\n vm.visits = response.resultList;\n vm.totalLista = response.total;\n vm.disableExport = response.total == 0;\n })\n .catch(function (error) {\n if (error && error.status) {\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"error.visit.search\"), ToastUtil.ToastType.ERROR);\n }\n }\n });\n };\n\n vm.getStatusDescription = function (statusId) {\n var str = \"\";\n switch (statusId) {\n case finalStatus.ONGOING:\n str = \"label.inprogress\";\n break;\n case finalStatus.WAITINGAPPROVAL:\n str = \"visit.label.status.waiting.approval\";\n break;\n case finalStatus.APPROVED:\n str = \"visit.label.status.approved\";\n break;\n case finalStatus.REJECT:\n str = \"visit.label.status.rejected\";\n break;\n }\n return str;\n };\n\n vm.verifyVisitExpired = function (visit) {\n var visitDate = visit.Date;\n var dateVisitTechnical = moment(visitDate).format('YYYY-MM-DD');\n if (moment(dateVisitTechnical).isBefore(dateNow) && (visit.Status === finalStatus.ONGOING || visit.Status === finalStatus.WAITINGAPPROVAL)) {\n return \"visit-expired\"\n }\n }\n\n vm.searchVisit = function () {\n vm.itemPerPage = vm.itensPerPageList[0];\n search(1, vm.itemPerPage.value);\n }\n\n vm.init = function () {\n SourcingService.loadProfileTechnicalVisitModules(vm, $scope)\n .then(function () {\n vm.disableExport = !vm.profile.CanExport;\n if (SourcingService.hasApproveAndViewPermission(vm)) {\n vm.search();\n }\n })\n .catch(function (error) {\n var msg = error.data && error.data.Message ? error.data.Message : $filter('translate')('error.visit.search');\n ToastUtil.showToastMessage($translate.instant(msg), ToastUtil.ToastType.ERROR);\n });\n }\n\n vm.contractList = function () {\n $state.go('contract-list', {});\n }\n\n vm.contractList = function () {\n $state.go('contract-list', {});\n }\n\n vm.createVendor = function () {\n $state.go('vendor-list', {});\n }\n\n vm.createMilestones = function () {\n $state.go('milestone-list', {});\n }\n\n vm.createAvaliation = function () {\n $state.go('avaliation-list', {});\n }\n\n vm.componentDevelopmentList = function () {\n $state.go('component-development-list', {});\n }\n\n vm.create = function () {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n SourcingService.createVisit(vm);\n };\n\n vm.edit = function (id) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n SourcingService.editVisit(id, vm);\n };\n\n vm.delete = function (technicalVisit) {\n\n if (canDelete(technicalVisit)) {\n SourcingService.removeVisit(vm, technicalVisit.Id)\n .then(function () {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go($state.current, {}, {\n reload: true\n });\n ToastUtil.showToastMessage($translate.instant(\"visit.remove.success\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(function (error) {\n if (error === 'not authorized') {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n } else {\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if (error.status === HTTP_STATUS_CONFLICT) {\n ToastUtil.showToastMessage($translate.instant(\"visit.remove.error.conflict\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"visit.remove.error\"), ToastUtil.ToastType.ERROR);\n }\n }\n\n });\n } else if (technicalVisit.Status !== finalStatus.WAITINGAPPROVAL && technicalVisit.Status !== finalStatus.ONGOING) {\n ToastUtil.showToastMessage($translate.instant('visit.remove.warning.unauthorized'), ToastUtil.ToastType.WARN);\n } else if ([technicalVisit.CreatedById, technicalVisit.ApproverId].indexOf(USER.Id) == -1) {\n ToastUtil.showToastMessage($translate.instant('visit.remove.warning.not.creator.appover'), ToastUtil.ToastType.WARN);\n }\n\n };\n\n vm.exportToExcel = function () {\n if (!vm.disableExport) {\n\n if (!validateExportPermission()) {\n return;\n }\n\n var searchParams = buildSearchParam();\n\n vm.disableExport = true;\n\n SourcingService.exportVisits(vm, searchParams, $translate.use())\n .then(function (response) {\n\n var date = moment().format(\"DD_MM_YYYY_HH_mm_ss\");\n\n var newFIle = new Blob([response], {\n type: 'application/vnd.ms-excel'\n });\n var fileURL = URL.createObjectURL(newFIle);\n var a = $document[0].createElement(\"a\");\n $document[0].body.appendChild(a);\n a.style = \"display: none\";\n a.href = fileURL;\n a.download = $translate.instant('visit.report.name') + AuthService.getBusinessName() + \"_\" + date + \".xls\";\n a.click();\n vm.disableExport = false;\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"service.load.error\"), ToastUtil.ToastType.ERROR);\n vm.disableExport = false;\n });\n }\n };\n\n vm.init();\n\n function validateExportPermission() {\n if (!vm.profile.CanExport) {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n return false;\n }\n\n return true;\n }\n\n function buildSearchParam() {\n var searchParams = {\n Id: vm.searchParams.Id,\n Vendor: vm.searchParams.Vendor,\n StartDate: null,\n FinalDate: null,\n Status: vm.searchParams.Status,\n Page: vm.searchParams.Page,\n MaxPerPage: vm.searchParams.MaxPerPage\n };\n\n angular.forEach(searchParams, function (value, key) {\n searchParams[key] = copy(vm.searchParams[key]);\n });\n\n searchParams.StartDate = searchParams.StartDate ? moment(searchParams.StartDate).format('DD/MM/YYYY') : searchParams.StartDate;\n searchParams.FinalDate = searchParams.FinalDate ? moment(searchParams.FinalDate).format('DD/MM/YYYY') : searchParams.FinalDate;\n\n return searchParams;\n }\n\n function copy(value) {\n return !value ? null : angular.copy(value);\n }\n\n function search(page, max) {\n vm.searchParams.Page = page;\n vm.searchParams.MaxPerPage = max;\n vm.search();\n }\n\n function canDelete(technicalVisit) {\n return technicalVisit.CreatedById === USER.Id && (technicalVisit.Status === finalStatus.WAITINGAPPROVAL || technicalVisit.Status === finalStatus.ONGOING);\n }\n\n }\n})();\n\n/*eslint no-undef: 0*/\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('TechnicalVisitController', TechnicalVisitController);\n\n function TechnicalVisitController($scope, $filter, $log, $window, $state, $translate, SourcingService, ToastUtil, VisitService, JsonPatchUtil, moment) {\n\n var PENDING_APPROVAL = 1, ON_GOING = 2, APPROVED = 3, REJECT = 4;\n\n var USER = {\n Name: $window.localStorage.aliasAqms,\n Id: parseInt($window.localStorage.userID)\n };\n\n var technicalVisitId = $state.params.Id, _patch = null, vm = this, nextStatus = null;\n\n vm.editing = false;\n vm.label = 'label.new.visit';\n vm.isCreator = false;\n vm.isApprover = false;\n\n vm.visit = {\n Vendor: null,\n CreatedBy: null,\n Date: new Date(),\n Remark: null,\n Attachments: [],\n Status: null,\n Accepted: 0,\n Points: 0\n }\n\n vm.extraFilters = {\n TechnicalVisit: true\n }\n\n vm.sendApproval = function () {\n nextStatus = PENDING_APPROVAL;\n if (technicalVisitId && technicalVisitId > 0) {\n update();\n } else {\n save();\n }\n }\n\n vm.approve = function () {\n nextStatus = APPROVED;\n update();\n }\n\n vm.reject = function () {\n if (!vm.visit.Remark || vm.visit.Remark === \"\" || vm.visit.Remark.length === 0) {\n ToastUtil.showToastMessage($translate.instant(\"visit.remark.required\"), ToastUtil.ToastType.WARN);\n return;\n }\n\n nextStatus = REJECT;\n update();\n }\n\n vm.saveOrUpdate = function () {\n\n if (technicalVisitId && technicalVisitId > 0) {\n update();\n } else {\n nextStatus = ON_GOING;\n save();\n }\n }\n\n vm.isFieldInvalid = function (form, fieldKey, errorKey) {\n\n if (!form.$submitted) {\n return false;\n }\n\n var invalid = false;\n if (form.$error && form.$error[errorKey]) {\n var array = form.$error[errorKey];\n for (var i = 0, len = array.length; i < len; i++) {\n var error = array[i];\n if (error[fieldKey]) {\n invalid = true;\n return;\n }\n }\n }\n\n return invalid;\n }\n\n function isAprrover() {\n return vm.visit.ApprovedBy.Id === USER.Id;\n }\n\n function isCreator() {\n return vm.visit.CreatedBy.Id === USER.Id;\n }\n\n vm.isOnGoing = function () {\n return vm.visit.Status === ON_GOING;\n }\n\n function isPendingApproval() {\n return vm.visit.Status === PENDING_APPROVAL;\n }\n\n function save() {\n if (canSave()) {\n var visit = generateVisitToSaveUpdate();\n formatDate();\n\n var approved = visit.ApprovedBy, createdBy = vm.visit.CreatedBy\n\n if (approved.Id === USER.Id && createdBy.Id === approved.Id) {\n ToastUtil.showToastMessage($translate.instant(\"visit.approved.error\"), ToastUtil.ToastType.WARN);\n return;\n }\n\n SourcingService.saveVisit(vm.visit)\n .then(function () {\n nextStatus = null;\n ToastUtil.showToastMessage($translate.instant(\"visit.save.success\"), ToastUtil.ToastType.SUCCESS);\n $state.go('visit-list');\n })\n .catch(function (error) {\n $log.log(error);\n });\n }\n\n }\n\n function generateVisitToSaveUpdate() {\n var approved = vm.visit.ApprovedBy;\n vm.visit.Date = moment(vm.visit.Date).format('DD/MM/YYYY');\n if (nextStatus) {\n vm.visit.Status = nextStatus;\n }\n vm.visit.ApprovedBy = {\n Id: approved.Id, Name: approved.Name\n }\n\n vm.visit.Vendor = {\n Id: vm.visit.Vendor.Id,\n Title: vm.visit.Vendor.Title,\n CodeSAP: vm.visit.Vendor.CodeSAP,\n FantasyName: vm.visit.Vendor.FantasyName\n };\n\n return vm.visit;\n }\n\n function canSave() {\n return $scope.technicalVisitForm.$valid;\n }\n\n function init() {\n if (technicalVisitId && technicalVisitId > 0) {\n vm.label = 'label.edit.visit';\n vm.editing = true;\n\n SourcingService.loadProfileTechnicalVisitModules(vm, $scope)\n .then(function () {\n if (SourcingService.hasApproveAndViewPermission(vm)) {\n VisitService.getById(technicalVisitId)\n .then(setViewModel)\n .catch(onEditError);\n }\n })\n .catch(onEditError);\n\n\n } else {\n vm.visit.CreatedBy = USER;\n vm.isCreator = true;\n }\n }\n\n function onEditError(error) {\n var msg = error.data && error.data.Message ? error.data.Message : $filter('translate')('error.visit.edit');\n ToastUtil.showToastMessage($translate.instant(msg), ToastUtil.ToastType.ERROR);\n }\n\n vm.checkCanEdit = function () {\n vm.isApprover = isAprrover();\n vm.isCreator = isCreator();\n return (vm.visit.Status === ON_GOING || vm.visit.Status === PENDING_APPROVAL) && (vm.isCreator || vm.isApprover);\n\n }\n\n function setViewModel(technicalVisit) {\n vm.visit.CreatedBy = {Id: technicalVisit.CreatedBy.Id, Name: technicalVisit.CreatedBy.Name};\n vm.visit.ApprovedBy = {Id: technicalVisit.ApprovedBy.Id, Name: technicalVisit.ApprovedBy.Name};\n vm.visit.Vendor = {\n Id: technicalVisit.Vendor.Id,\n Title: technicalVisit.Vendor.Title,\n CodeSAP: technicalVisit.Vendor.CodeSAP,\n FantasyName: technicalVisit.Vendor.FantasyName\n };\n vm.visit.Accepted = technicalVisit.Accepted;\n vm.visit.Points = technicalVisit.Points;\n vm.visit.Date = technicalVisit.Date;\n vm.visit.Status = technicalVisit.Status;\n vm.visit.Remark = technicalVisit.Remark;\n vm.canEdit = vm.checkCanEdit();\n vm.isPendingApproval = isPendingApproval();\n\n setAttachmentViewModel(technicalVisit.Attachments);\n formatDate();\n vm.technicalVisitCopy = angular.copy(vm.visit);\n vm.observer = jsonpatch.observe(vm.visit);\n }\n\n function setAttachmentViewModel(Attachments) {\n if (Attachments && Attachments.length > 0) {\n vm.attachments = Attachments;\n vm.visit.Attachments = Attachments;\n }\n }\n\n function formatDate() {\n var visitDate = moment(vm.visit.Date, 'DD/MM/YYYY');\n vm.visit.Date = new Date(visitDate.year(), visitDate.month(), visitDate.date());\n }\n\n function update() {\n if (canSave()) {\n generateVisitToSaveUpdate();\n formatDate();\n delete vm.visit.Vendor_Id;\n\n var approved = vm.visit.ApprovedBy, createdBy = vm.visit.CreatedBy;\n\n if (approved.Id === USER.Id && createdBy.Id === approved.Id) {\n ToastUtil.showToastMessage($translate.instant(\"visit.approved.error\"), ToastUtil.ToastType.WARN);\n return;\n }\n\n var patch = generatePatch();\n\n if (nextStatus !== null && nextStatus !== vm.visit.Status) {\n patch.push({\"op\": \"replace\", \"path\": \"/Status\", \"value\": nextStatus});\n }\n\n patch.push({\"op\": \"replace\", \"path\": \"/Date\", \"value\": vm.visit.Date});\n\n if (patchIsNotEmpty(patch)) {\n VisitService.update(technicalVisitId, patch)\n .then(function () {\n vm.visit.Status = nextStatus;\n nextStatus = null;\n _patch = null;\n ToastUtil.showToastMessage($translate.instant(\"visit.update.success\"), ToastUtil.ToastType.SUCCESS);\n $state.go('visit-list');\n })\n .catch(onSaveVisitError);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"visit.update.success\"), ToastUtil.ToastType.SUCCESS);\n $state.go('visit-list');\n }\n }\n }\n\n function patchIsNotEmpty(patch) {\n return patch && patch.length > 0;\n }\n\n function generatePatch() {\n var patch = JsonPatchUtil.generate(vm.visit, vm.technicalVisitCopy, vm.observer, _patch);\n\n if (patchIsNotEmpty(patch)) {\n for (var i = 0, len = patch.length; i < len; i++) {\n var item = patch[i];\n if (item.op === \"replace\" && item.path === \"/Date\") {\n patch.splice(i, 1);\n break;\n }\n }\n }\n // Guarda uma c�pia pra caso da opera��o falhar. Quando falha e o m�todo generate � chamado novamente, o patch volta vazio, a menos que\n // o usu�rio fa�a qualquer outra mudan�a no modelo.\n _patch = angular.copy(patch);\n return patch;\n }\n\n function onSaveVisitError(error) {\n var serverMsg = error.data ? error.data.Message : 'Network error';\n var errorMsg;\n\n if (error.data && error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n return;\n }\n } else if (serverMsg.indexOf(\"#errorMessage\") !== -1) {\n serverMsg = serverMsg.replace(\"#errorMessage\", \"\");\n var message = $translate.instant('visit.save.error.duplicated');\n message = message.replace(\"$description\", serverMsg);\n errorMsg = message;\n } else {\n errorMsg = $translate.instant(serverMsg)\n }\n\n ToastUtil.showToastMessage($translate.instant(errorMsg), ToastUtil.ToastType.ERROR);\n }\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('MilestoneService', MilestoneService);\n\n var RESOURCE_BASE = '/milestones/';\n\n /** @ngInject */\n function MilestoneService($injector, $q, ConfigurationService) {\n\n return {\n\n Status: {\n WAITINGAPPROVAL: 1, ONGOING: 2, APPROVED: 3, TEMPORARYWAIVER: 4, REJECT: 5\n },\n Milestones: {\n SA01: {Id: 1, Title: 'SA01'},\n SA02: {Id: 2, Title: 'SA02'},\n SA03: {Id: 3, Title: 'SA03'}\n },\n\n save: function (milestone) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + RESOURCE_BASE, milestone, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n\n\n return deferred.promise;\n },\n\n listMilestones: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + RESOURCE_BASE + \"list\", {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n listMilestonesByVendor: function (vendorId, status) {\n return this.listMilestones({\n VendorId: vendorId,\n Status: status\n });\n },\n\n delete: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + RESOURCE_BASE + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getById: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + RESOURCE_BASE + 'byId/' + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n update: function (id, milestone) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.patch(ConfigurationService.getServiceHost() + RESOURCE_BASE + id, milestone)\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n downloadAll: function (filtro, language) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + RESOURCE_BASE + 'export-all/' + language,\n {\n params: filtro,\n responseType: 'arraybuffer'\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n }\n , function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n\n };\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('MilestoneListController', MilestoneListController);\n\n function MilestoneListController($scope, $log, $translate, $filter, $state, $window, SourcingService, MilestoneService, ToastUtil, moment, $document, AuthService) {\n\n var vm = this;\n var HTTP_STATUS_CONFLICT = 409;\n var USER = {\n Name: $window.localStorage.aliasAqms,\n Id: parseInt($window.localStorage.userID)\n };\n var finalStatus = MilestoneService.Status;\n\n vm.disableExport = true;\n vm.profile = {\n canAdd: false,\n canEdit: false,\n canDelete: false,\n canView: false,\n hasLoad: false,\n canApprove: false,\n canExport: false\n };\n vm.milestones = [];\n vm.itensPerPageList = [\n {name: '5', value: 5, before: 0, after: 6},\n {name: '10', value: 10, before: 5, after: 11},\n {name: '20', value: 20, before: 10, after: 21},\n {name: '30', value: 30, before: 20, after: 31},\n {name: '40', value: 40, before: 30, after: 41},\n {name: '50', value: 50, before: 40, after: 51}];\n vm.itemPerPage = vm.itensPerPageList[0];\n vm.totalLista = 0;\n vm.searchParams = {\n Id: '',\n StartDate: '',\n FinalDate: '',\n Vendor: '',\n Status: null,\n Page: 1,\n MaxPerPage: vm.itemPerPage.value\n };\n vm.statusList = [{\n Value: finalStatus.WAITINGAPPROVAL,\n Title: \"label.inspection.waiting.approval\"\n },\n {\n Value: finalStatus.ONGOING,\n Title: \"label.inprogress\"\n },\n {\n Value: finalStatus.APPROVED,\n Title: \"label.inspection.approved\"\n },\n {\n Value: finalStatus.TEMPORARYWAIVER,\n Title: \"label.milestone.status.temporarywaiver\"\n },\n {\n Value: finalStatus.REJECT,\n Title: \"label.inspection.status.rejected\"\n }\n ];\n\n vm.init = function () {\n SourcingService.loadProfileSupplierApprovalMilestonesModules(vm, $scope)\n .then(function () {\n vm.disableExport = !vm.profile.CanExport;\n if (SourcingService.hasApproveAndViewPermission(vm)) {\n vm.search();\n }\n })\n .catch(function (error) {\n var msg = error.data && error.data.Message ? error.data.Message : $filter('translate')('error.milestones.search');\n ToastUtil.showToastMessage($translate.instant(msg), ToastUtil.ToastType.ERROR);\n });\n }\n\n vm.clearSearchFields = function () {\n vm.searchParams.Id = '';\n vm.searchParams.StartDate = '';\n vm.searchParams.FinalDate = '';\n vm.searchParams.Vendor = '';\n vm.searchParams.Status = null;\n }\n\n vm.resolveStatusCss = function (status) {\n var result = \"\";\n\n switch (status) {\n case finalStatus.WAITINGAPPROVAL:\n result = 'ng-binding label label-pending';\n break;\n case finalStatus.ONGOING:\n result = 'ng-binding label label-ongoing';\n break;\n case finalStatus.APPROVED:\n result = 'ng-binding label label-approved';\n break;\n case finalStatus.TEMPORARYWAIVER:\n result = 'ng-binding label label-approved';\n break;\n case finalStatus.REJECT:\n result = 'ng-binding label label-rejected';\n break;\n }\n\n return result;\n }\n\n vm.canEdit = function (Status) {\n return Status === finalStatus.ONGOING || Status === finalStatus.WAITINGAPPROVAL;\n }\n\n vm.edit = function (id) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n SourcingService.editMilestone(id, vm);\n };\n\n vm.shouldShow = function (item) {\n if (vm.totalLista > 0 && item != undefined) {\n return vm.totalLista >= item.value || (vm.totalLista < item.after && vm.totalLista > item.before);\n }\n return false;\n }\n\n vm.changeItemsPerPage = function () {\n if (vm.itemPerPage == null) {\n vm.itemPerPage = vm.itensPerPageList[0];\n }\n search(1, vm.itemPerPage.value);\n };\n\n vm.onPageChange = function () {\n search(vm.searchParams.Page, vm.searchParams.MaxPerPage);\n };\n\n vm.searchMilestone = function () {\n vm.itemPerPage = vm.itensPerPageList[0];\n search(1, vm.itemPerPage.value);\n }\n\n vm.search = function () {\n if (sessionStorage.getItem(\"searchParams\")) {\n vm.searchParams = JSON.parse(sessionStorage.getItem(\"searchParams\"));\n sessionStorage.removeItem(\"searchParams\");\n vm.itensPerPageList.forEach(function (element) {\n if (element.value == vm.searchParams.MaxPerPage) {\n vm.itemPerPage = element;\n return;\n }\n });\n }\n var searchParams = buildSearchParam();\n\n SourcingService.searchMilestones(vm, searchParams, $scope)\n .then(function (response) {\n vm.milestones = response.resultList;\n vm.totalLista = response.total;\n vm.disableExport = response.total == 0;\n if (vm.milestones) {\n for (var i = 0, len = vm.milestones.length; i < len; i++) {\n var milestone = vm.milestones[i], canEdit = false;\n if (milestone.Status === finalStatus.TEMPORARYWAIVER\n && milestone.ApprovedById === USER.Id || milestone.CreatedById === USER.Id) {\n canEdit = true;\n } else {\n canEdit = milestone.Status === finalStatus.ONGOING || milestone.Status === finalStatus.WAITINGAPPROVAL || milestone.Status === finalStatus.APPROVED || milestone.Status === finalStatus.REJECT;\n }\n milestone.canEdit = canEdit;\n }\n }\n })\n .catch(function (error) {\n if (error && error.status) {\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"error.milestones.search\"), ToastUtil.ToastType.ERROR);\n }\n }\n });\n };\n\n vm.getStatusDescription = function (statusId) {\n var str = \"\";\n switch (statusId) {\n case finalStatus.ONGOING:\n str = \"label.ongoing\";\n break;\n case finalStatus.WAITINGAPPROVAL:\n str = \"visit.label.status.waiting.approval\";\n break;\n case finalStatus.APPROVED:\n str = \"visit.label.status.approved\";\n break;\n case finalStatus.TEMPORARYWAIVER:\n str = \"label.milestone.status.temporarywaiver\";\n break;\n case finalStatus.REJECT:\n str = \"visit.label.status.rejected\";\n break;\n }\n return str;\n };\n\n vm.getMilestoneDescription = function (item) {\n var str = \"\";\n switch (item) {\n case MilestoneService.Milestones.SA01.Id:\n str = MilestoneService.Milestones.SA01.Title;\n break;\n case MilestoneService.Milestones.SA02.Id:\n str = MilestoneService.Milestones.SA02.Title;\n break;\n case MilestoneService.Milestones.SA03.Id:\n str = MilestoneService.Milestones.SA03.Title;\n break;\n }\n return str;\n }\n\n vm.edit = function (id) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n SourcingService.editMilestone(id, vm);\n };\n\n init();\n\n vm.contractList = function () {\n $state.go('contract-list', {});\n }\n\n vm.createVendor = function () {\n $state.go('vendor-list', {});\n }\n\n vm.createVisit = function () {\n $state.go('visit-list', {});\n }\n\n vm.createAvaliation = function () {\n $state.go('avaliation-list', {});\n }\n\n vm.componentDevelopmentList = function () {\n $state.go('component-development-list', {});\n }\n\n vm.create = function () {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n SourcingService.createMilestone(vm);\n };\n\n vm.delete = function (milestones) {\n\n if (canDelete(milestones)) {\n SourcingService.removeMilestones(vm, milestones.Id)\n .then(function () {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go($state.current, {}, {\n reload: true\n });\n ToastUtil.showToastMessage($translate.instant(\"milestones.remove.success\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(function (error) {\n if (error === 'not authorized') {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n } else {\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if (error.status === HTTP_STATUS_CONFLICT) {\n ToastUtil.showToastMessage($translate.instant(\"milestones.remove.error.conflict\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"milestones.remove.error\"), ToastUtil.ToastType.ERROR);\n }\n }\n\n });\n } else {\n ToastUtil.showToastMessage($translate.instant('milestones.remove.warning.unauthorized'), ToastUtil.ToastType.WARN);\n }\n\n };\n\n vm.exportToExcel = function () {\n if (!vm.disableExport) {\n\n if (!validateExportPermission()) {\n return;\n }\n\n var searchParams = buildSearchParam();\n\n vm.disableExport = true;\n\n SourcingService.exportMilestones(vm, searchParams, $translate.use())\n .then(function (response) {\n\n var date = moment().format(\"DD_MM_YYYY_HH_mm_ss\");\n\n var newFIle = new Blob([response], {\n type: 'application/vnd.ms-excel'\n });\n var fileURL = URL.createObjectURL(newFIle);\n var a = $document[0].createElement(\"a\");\n $document[0].body.appendChild(a);\n a.style = \"display: none\";\n a.href = fileURL;\n a.download = $translate.instant('milestones.report.name') + AuthService.getBusinessName() + \"_\" + date + \".xls\";\n a.click();\n vm.disableExport = false;\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"service.load.error\"), ToastUtil.ToastType.ERROR);\n vm.disableExport = false;\n });\n }\n };\n\n vm.init();\n\n function canDelete(milestone) {\n return milestone.CreatedById === USER.Id && (milestone.Status === finalStatus.WAITINGAPPROVAL || milestone.Status === finalStatus.ONGOING);\n }\n\n function buildSearchParam() {\n var searchParams = {\n Id: vm.searchParams.Id,\n Vendor: vm.searchParams.Vendor,\n StartDate: null,\n FinalDate: null,\n Status: vm.searchParams.Status,\n Page: vm.searchParams.Page,\n MaxPerPage: vm.searchParams.MaxPerPage\n };\n\n angular.forEach(searchParams, function (value, key) {\n searchParams[key] = copy(vm.searchParams[key]);\n });\n\n searchParams.StartDate = searchParams.StartDate ? moment(searchParams.StartDate).format('DD/MM/YYYY') : searchParams.StartDate;\n searchParams.FinalDate = searchParams.FinalDate ? moment(searchParams.FinalDate).format('DD/MM/YYYY') : searchParams.FinalDate;\n\n return searchParams;\n }\n\n function copy(value) {\n return !value ? null : angular.copy(value);\n }\n\n function validateExportPermission() {\n if (!vm.profile.CanExport) {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n return false;\n }\n\n return true;\n }\n\n function search(page, max) {\n vm.searchParams.Page = page;\n vm.searchParams.MaxPerPage = max;\n vm.search();\n }\n\n function init() {\n SourcingService.loadProfileSupplierApprovalMilestonesModules(vm, $scope)\n .then(function () {\n if (SourcingService.hasApproveAndViewPermission(vm)) {\n vm.search();\n }\n })\n .catch(function (error) {\n var msg = error.data && error.data.Message ? error.data.Message : $filter('translate')('error.milestones.search');\n ToastUtil.showToastMessage($translate.instant(msg), ToastUtil.ToastType.ERROR);\n });\n }\n\n }\n})();\n\n/*eslint no-undef: 0*/\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('MilestoneController', MilestoneController);\n\n function MilestoneController($scope, $window, $state, $translate, $log, MilestoneService, ToastUtil, VendorService, JsonPatchUtil, DialogController, moment) {\n\n var vm = this, nextStatus = null, _patch = null, states = {};\n\n var DefaultState = {\n showApproveButton: false,\n showSaveButton: true,\n showRejectButton: false,\n showTemporaryWaiverApprovalButton: false,\n showSendApprovalButton: true,\n canEdit: true,\n canEditRemark: true,\n showJustification: false,\n canEditAttachment: true\n }\n\n vm.State = DefaultState;\n\n vm.editing = false;\n\n initStates();\n\n vm.vendorList = [];\n\n var USER = {\n Id: parseInt($window.localStorage.userID),\n Name: $window.localStorage.aliasAqms\n };\n\n var milestonesOrder = [MilestoneService.Milestones.SA01, MilestoneService.Milestones.SA02, MilestoneService.Milestones.SA03];\n\n var milestoneId = parseInt($state.params.Id);\n\n vm.extraFilters = {\n TechnicalVisit: true,\n TechnicalVisitApproved: true\n }\n\n vm.label = \"label.new.milestone\";\n\n vm.nextMilestone = MilestoneService.Milestones.SA01;\n\n vm.milestone = {\n Vendor: null,\n CreatedBy: USER,\n ApprovedBy: null,\n CreatedDate: new Date(),\n Milestone: vm.nextMilestone.Id,\n Remark: null,\n Attachments: [],\n Status: MilestoneService.Status.ONGOING,\n Justification: null,\n Deadline: null\n };\n\n vm.saveOrUpdate = function () {\n if (milestoneId && milestoneId > 0) {\n update();\n } else {\n nextStatus = MilestoneService.Status.ONGOING;\n save();\n }\n }\n\n vm.sendApproval = function () {\n nextStatus = MilestoneService.Status.WAITINGAPPROVAL;\n if (milestoneId && milestoneId > 0) {\n update();\n } else {\n save();\n }\n }\n\n vm.reject = function () {\n if (isRemarkInvalid()) {\n ToastUtil.showToastMessage($translate.instant(\"milestone.remark.required\"), ToastUtil.ToastType.WARN);\n return;\n }\n\n nextStatus = MilestoneService.Status.REJECT;\n update();\n }\n\n vm.approve = function () {\n nextStatus = MilestoneService.Status.APPROVED;\n update();\n }\n\n vm.temporaryApprove = function (justification, deadline) {\n vm.milestone.Justification = justification;\n vm.milestone.Deadline = deadline;\n nextStatus = MilestoneService.Status.TEMPORARYWAIVER;\n update();\n }\n\n vm.showTemporaryApprovalJustificationDialog = function () {\n DialogController.show('title.temporary.approval.justification', '', vm);\n }\n\n vm.onVendorSelected = function () {\n var status = ''+MilestoneService.Status.WAITINGAPPROVAL+','+MilestoneService.Status.ONGOING+','+MilestoneService.Status.APPROVED+','+MilestoneService.Status.TEMPORARYWAIVER+'';\n MilestoneService.listMilestonesByVendor(vm.milestone.Vendor.Id, status)\n .then(setMilestone)\n .catch(function (error) {\n $log.log(error);\n clearMilestone();\n });\n }\n\n function isRemarkInvalid() {\n return !vm.milestone.Remark || vm.milestone.Remark === \"\" || vm.milestone.Remark.length === 0;\n }\n\n function setMilestone(response) {\n var milestones = response.resultList;\n\n if (milestones && milestones.length > 0) {\n var lastMilestone = filterLastMilestone(milestones);\n if (lastMilestone && lastMilestone.Milestone) {\n var milestone = lastMilestone;\n\n if (vm.editing === true && milestone.Id === milestoneId) {\n setNextMilestone(milestonesOrder[milestone.Milestone - 1]);\n return;\n }\n\n if (milestone.Status === MilestoneService.Status.APPROVED) {\n var next = milestonesOrder[milestone.Milestone];\n\n if (next) {\n setNextMilestone(next);\n } else {\n showMilestoneToastError();\n }\n } else {\n showMilestoneToastError();\n }\n } else {\n showMilestoneToastError();\n }\n } else {\n setNextMilestone(MilestoneService.Milestones.SA01);\n }\n\n }\n\n function showMilestoneToastError() {\n clearMilestone();\n ToastUtil.showToastMessage($translate.instant(\"Não é possível cadastrar um novo milestone para esse fornecedor.\"), ToastUtil.ToastType.WARN);\n }\n\n function filterLastMilestone(milestones) {\n return milestones.reduce(function(prev, current){\n return (prev.Milestone > current.Milestone) ? prev : current;\n });\n }\n\n function setNextMilestone(next) {\n vm.nextMilestone = next;\n vm.milestone.Milestone = vm.nextMilestone.Id;\n }\n\n function clearMilestone() {\n vm.nextMilestone = null;\n vm.milestone.Milestone = null;\n }\n\n function save() {\n if (canSave()) {\n if (isApproverInvalid()) {\n return;\n }\n MilestoneService.save(convertMilestone())\n .then(function () {\n ToastUtil.showToastMessage($translate.instant(\"milestone.save.success\"), ToastUtil.ToastType.SUCCESS);\n $state.go('milestone-list');\n })\n .catch(onSaveMilestoneError);\n }\n }\n\n function isApproverInvalid() {\n var approvedId = vm.milestone.ApprovedBy.Id, creatorId = vm.milestone.CreatedBy.Id;\n if (approvedId === USER.Id && creatorId === approvedId) {\n ToastUtil.showToastMessage($translate.instant(\"milestone.approved.error\"), ToastUtil.ToastType.WARN);\n return true;\n }\n return false;\n }\n\n function update() {\n if (canSave()) {\n if (isApproverInvalid()) {\n return;\n }\n var patch = formatMilestoneToSave();\n if (patchIsNotEmpty(patch)) {\n MilestoneService.update(milestoneId, patch)\n .then(function () {\n vm.milestone.Status = nextStatus;\n nextStatus = null;\n _patch = null;\n ToastUtil.showToastMessage($translate.instant(\"milestone.update.success\"), ToastUtil.ToastType.SUCCESS);\n $state.go('milestone-list');\n })\n .catch(onSaveMilestoneError);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"milestone.update.success\"), ToastUtil.ToastType.SUCCESS);\n $state.go('milestone-list');\n }\n }\n }\n\n function generatePatch() {\n var patch = JsonPatchUtil.generate(vm.milestone, vm.milestoneCopy, vm.observer, _patch);\n if (patchIsNotEmpty(patch)) {\n for (var i = 0, len = patch.length; i < len; i++) {\n var item = patch[i];\n if (item.op === \"replace\" && item.path === \"/CreatedDate\") {\n patch.splice(i, 1);\n break;\n }\n }\n }\n _patch = angular.copy(patch);\n return patch;\n }\n\n function patchIsNotEmpty(patch) {\n return patch && patch.length > 0;\n }\n\n function formatMilestoneToSave() {\n var approver = vm.milestone.ApprovedBy, vendor = vm.milestone.Vendor, createdBy = vm.milestone.CreatedBy;\n\n if (approver.Id === USER.Id && createdBy.Id === approver.Id) {\n ToastUtil.showToastMessage($translate.instant(\"milestone.approved.error\"), ToastUtil.ToastType.WARN);\n return;\n }\n\n vm.milestone.ApprovedBy = {\n Id: approver.Id, Name: approver.Name\n }\n\n vm.milestone.Vendor = { Id: vendor.Id, Title: vendor.Title, CodeSAP: vendor.CodeSAP, FantasyName: vendor.FantasyName };\n\n var patch = generatePatch();\n\n if (nextStatus !== null && nextStatus !== vm.milestone.Status) {\n patch.push({ \"op\": \"replace\", \"path\": \"/Status\", \"value\": nextStatus });\n }\n\n patch.push({ \"op\": \"replace\", \"path\": \"/CreatedDate\", \"value\": vm.milestone.CreatedDate });\n\n return patch;\n }\n\n function canSave() {\n var vendor = vm.milestone ? vm.milestone.Vendor : null;\n return $scope.milestoneForm.$valid && vendor != null && vendor.Id > 0;\n }\n\n function init() {\n\n VendorService.listVendors()\n .then(function (response) {\n vm.vendorList = response.resultList;\n if (milestoneId && milestoneId > 0) {\n vm.label = 'label.edit.milestone';\n vm.editing = true;\n\n MilestoneService.getById(milestoneId)\n .then(setViewModel);\n } else {\n vm.milestone.CreatedBy = USER;\n }\n });\n\n }\n\n function initStates() {\n states = {\n Other: initStateOther(),\n Default: DefaultState,\n Approver: initStateApprover(),\n Creator: initStateCreator()\n }\n }\n\n function initStateOther() {\n var stateOther = angular.copy(vm.State);\n stateOther.showSaveButton = false;\n stateOther.showSendApprovalButton = false;\n stateOther.canEdit = false;\n stateOther.canEditRemark = false;\n stateOther.canEditAttachment = false;\n return stateOther;\n }\n\n function initStateApprover() {\n var pending = angular.copy(vm.State);\n pending.showRejectButton = true;\n pending.showApproveButton = true;\n pending.showTemporaryWaiverApprovalButton = true;\n pending.showSendApprovalButton = false;\n pending.canEdit = false;\n pending.canEditAttachment = false;\n\n var ongoing = angular.copy(vm.State);\n ongoing.showSendApprovalButton = false;\n ongoing.canEdit = false;\n ongoing.canEditAttachment = false;\n\n var temporary = angular.copy(vm.State);\n temporary.showSaveButton = false;\n temporary.showSendApprovalButton = false;\n temporary.canEdit = false;\n temporary.canEditRemark = true;\n temporary.showJustification = true;\n temporary.showRejectButton = true;\n temporary.showApproveButton = true;\n temporary.canEditAttachment = true;\n\n return {\n Pending: pending,\n OnGoing: ongoing,\n Temporary: temporary\n };\n }\n\n function initStateCreator() {\n var ongoing = angular.copy(vm.State);\n\n var pending = angular.copy(vm.State);\n pending.showSendApprovalButton = false;\n\n return {\n Pending: pending,\n OnGoing: ongoing\n };\n }\n\n function setViewModel(milestone) {\n vm.milestone.CreatedBy = { Id: milestone.CreatedBy.Id, Name: milestone.CreatedBy.Name };\n vm.milestone.ApprovedBy = { Id: milestone.ApprovedBy.Id, Name: milestone.ApprovedBy.Name };\n vm.milestone.Vendor = { Id: milestone.Vendor.Id, Title: milestone.Vendor.Title, CodeSAP: milestone.Vendor.CodeSAP, FantasyName: milestone.Vendor.FantasyName };\n vm.milestone.Milestone = milestone.Milestone;\n vm.milestone.Remark = milestone.Remark;\n vm.milestone.Attachments = milestone.Attachments;\n vm.milestone.Status = milestone.Status;\n vm.milestone.Justification = milestone.Justification;\n vm.nextMilestone = milestonesOrder[milestone.Milestone - 1];\n\n var createdDate = moment(milestone.CreatedDate, 'YYYY/MM/DD');\n vm.milestone.CreatedDate = new Date(createdDate.year(), createdDate.month(), createdDate.date());\n\n if (milestone.Deadline) {\n var deadline = moment(milestone.Deadline, 'YYYY/MM/DD');\n vm.milestone.Deadline = new Date(deadline.year(), deadline.month(), deadline.date());\n }\n\n vm.milestoneCopy = angular.copy(vm.milestone);\n vm.observer = jsonpatch.observe(vm.milestone);\n\n handleCurrentState();\n }\n\n function handleCurrentState() {\n var status = vm.milestone.Status, approver = vm.milestone.ApprovedBy, creator = vm.milestone.CreatedBy;\n\n if (USER.Id === approver.Id) {\n if (status === MilestoneService.Status.ONGOING) {\n vm.State = states.Approver.OnGoing;\n } else if (status === MilestoneService.Status.WAITINGAPPROVAL) {\n vm.State = states.Approver.Pending;\n } else if (status === MilestoneService.Status.TEMPORARYWAIVER) {\n vm.State = states.Approver.Temporary;\n } else {\n vm.State = states.Other;\n }\n\n } else if (USER.Id === creator.Id) {\n if (status === MilestoneService.Status.ONGOING) {\n vm.State = states.Creator.OnGoing;\n } else if (status === MilestoneService.Status.WAITINGAPPROVAL) {\n vm.State = states.Creator.Pending;\n } else if (status === MilestoneService.Status.TEMPORARYWAIVER) {\n vm.State = angular.copy(states.Approver.Temporary);\n vm.State.showApproveButton = false;\n vm.State.showRejectButton = false;\n } else {\n vm.State = states.Other;\n }\n } else {\n vm.State = states.Other;\n }\n }\n\n function onSaveMilestoneError(error) {\n if (error.status === 404) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.generic\"), ToastUtil.ToastType.ERROR);\n return;\n }\n var serverMsg = error.data ? error.data.Message : 'Network error';\n var errorMsg;\n\n if (error.data && error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n return;\n }\n } else if (serverMsg.indexOf(\"#errorMessage\") !== -1) {\n serverMsg = serverMsg.replace(\"#errorMessage\", \"\");\n var message = $translate.instant('milestone.save.error.duplicated');\n message = message.replace(\"$description\", serverMsg);\n errorMsg = message;\n } else {\n errorMsg = $translate.instant(serverMsg)\n }\n\n ToastUtil.showToastMessage($translate.instant(errorMsg), ToastUtil.ToastType.ERROR);\n }\n\n function convertMilestone() {\n var milestone = angular.copy(vm.milestone);\n var approved = milestone.ApprovedBy, vendor = milestone.Vendor;\n milestone.ApprovedBy = { Id: approved.Id, Name: approved.Name };\n milestone.Vendor = { Id: vendor.Id, Title: vendor.Title, CodeSAP: vendor.CodeSAP, FantasyName: vendor.FantasyName };\n milestone.Status = nextStatus;\n return milestone;\n }\n\n init();\n }\n\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(LogisticTranslate);\n\n /** @ngInject */\n function LogisticTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n sourcing: {\n kpi: {\n import: {\n labels: {\n tabTitle: 'Import KPI',\n types: {\n zmph: 'ZMPH',\n fi014: 'FI014'\n }\n },\n error: {\n worksheet: {\n invalid: 'Worksheet format is invalid.'\n }\n }\n }\n }\n }\n });\n\n $translateProvider.translations('pt', {\n sourcing: {\n kpi: {\n import: {\n labels: {\n tabTitle: 'Importar KPI',\n types: {\n zmph: 'ZMPH',\n fi014: 'FI014'\n }\n },\n error: {\n worksheet: {\n invalid: 'Formato de planilha inválido.'\n }\n }\n }\n }\n }\n });\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('SourcingKpiImportService', SourcingKpiImportService);\n\n var BASE = '/sourcing-kpi/';\n\n /** @ngInject */\n function SourcingKpiImportService($injector, $q, ConfigurationService, AuthService, DefaultService) {\n\n var Status = {\n ACTIVE: {\n Id: 1,\n Title: 'logistics.import.status.active'\n },\n INACTIVE: {\n Id: 0,\n Title: 'logistics.import.status.inactive'\n }\n };\n\n\n var Types = {\n ZMPH: {\n Id: 0,\n Title: 'sourcing.kpi.import.labels.types.zmph'\n },\n FI014: {\n Id: 1,\n Title: 'sourcing.kpi.import.labels.types.fi014'\n }\n };\n\n function validateAddPermission(vm) {\n if (vm.profile.hasLoad && !vm.profile.CanAdd) {\n return false;\n }\n\n return true;\n }\n\n return {\n\n Types: Types,\n\n Status: Status,\n\n getTypeById: function (id) {\n var found = null;\n Object.keys(Types).forEach(function (key) {\n var type = Types[key];\n if (found == null && type.Id === id) {\n found = type;\n }\n });\n return found;\n },\n\n getStatusById: function (id) {\n var found = null;\n Object.keys(Status).forEach(function (key) {\n var status = Status[key];\n if (found == null && status.Id === id) {\n found = status;\n }\n });\n return found;\n },\n\n list: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + \"import/list\", {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n save: function (freightCostWorksheet) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + BASE + \"import/\", freightCostWorksheet, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n download: function (filtro) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + 'import/download/',\n {\n params: filtro,\n responseType: 'arraybuffer'\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n }\n , function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n loadProfileModules: function (vm, $scope) {\n var profileModule = {};\n\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.moduleSourcing;\n\n return DefaultService.loadModules(profileModule)\n .then(function (response) {\n vm.profile = angular.copy(response);\n vm.profile.hasLoad = true;\n });\n }\n\n };\n }\n})();\n\n(function () {\n 'use_strict';\n\n angular\n .module('aqmsFrontend')\n .controller('SourcingKpiImportListController', SourcingKpiImportListController);\n\n function SourcingKpiImportListController($scope, $log, $translate, $filter, $state, $window, $document, SourcingKpiImportService, AuthService, ToastUtil, FileService, moment,\n DialogControllerTemplate, DialogController) {\n\n var vm = this;\n\n var yearDate = moment(new Date());\n var USER = {\n Id: parseInt($window.localStorage.userID),\n Name: $window.localStorage.aliasAqms\n };\n\n vm.attachments = [];\n\n vm.TypeList = [\n {\n name: SourcingKpiImportService.Types.ZMPH.Title,\n value: SourcingKpiImportService.Types.ZMPH.Id\n },\n {\n name: SourcingKpiImportService.Types.FI014.Title,\n value: SourcingKpiImportService.Types.FI014.Id\n }\n ];\n\n vm.profile = {\n canAdd: false,\n canEdit: false,\n canDelete: false,\n canView: false,\n hasLoad: false,\n canApprove: false,\n canExport: false\n };\n\n vm.itemList = [];\n\n vm.WorksheetFile = {\n User: USER,\n FilePath: null,\n FileName: null,\n Model: {name: SourcingKpiImportService.Types.ZMPH.Title, value: SourcingKpiImportService.Types.ZMPH.Id},\n Year: yearDate.year()\n };\n\n vm.itensPerPageList = [\n {name: '5', value: 5, before: 0, after: 6},\n {name: '10', value: 10, before: 5, after: 11},\n {name: '20', value: 20, before: 10, after: 21},\n {name: '30', value: 30, before: 20, after: 31},\n {name: '40', value: 40, before: 30, after: 41},\n {name: '50', value: 50, before: 40, after: 51}]\n\n vm.itemPerPage = vm.itensPerPageList[0];\n vm.totalLista = 0;\n\n vm.searchParam = {\n BusinessId: AuthService.getBusinessId(),\n Page: 1,\n MaxPerPage: vm.itemPerPage.value\n };\n\n vm.shouldShow = function (item) {\n if (vm.totalLista > 0 && item != undefined) {\n return vm.totalLista >= item.value || (vm.totalLista < item.after && vm.totalLista > item.before);\n }\n return false;\n }\n\n vm.changeItemsPerPage = function () {\n if (vm.itemPerPage == null) {\n vm.itemPerPage = vm.itensPerPageList[0];\n }\n search(1, vm.itemPerPage.value);\n };\n\n vm.onPageChange = function () {\n search(vm.searchParam.Page, vm.searchParam.MaxPerPage);\n };\n\n vm.init = function () {\n SourcingKpiImportService.loadProfileModules(vm, $scope)\n .then(function () {\n validateViewPermission();\n vm.search();\n })\n .catch(function (error) {\n var msg = error.data && error.data.Message ? error.data.Message : $filter('translate')('error.logistc.freight.cost.search');\n ToastUtil.showToastMessage($translate.instant(msg), ToastUtil.ToastType.ERROR);\n });\n\n };\n\n function validateViewPermission() {\n if (!vm.profile.CanView) {\n $state.go('not-authorized', {}, {});\n }\n }\n\n function search(page, max) {\n vm.searchParam.Page = page;\n vm.searchParam.MaxPerPage = max;\n\n SourcingKpiImportService.list(vm.searchParam)\n .then(function (response) {\n angular.forEach(response.resultList, formatResponse);\n vm.itemList = response.resultList;\n vm.totalLista = response.total;\n })\n .catch(function (error) {\n if (error && error.status) {\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"error.logistc.freight.cost.search\"), ToastUtil.ToastType.ERROR);\n }\n }\n });\n }\n\n vm.search = function () {\n vm.searchParam.Page = 1;\n if (sessionStorage.getItem(\"searchParam\")) {\n vm.searchParam = JSON.parse(sessionStorage.getItem(\"searchParam\"));\n sessionStorage.removeItem(\"searchParam\");\n vm.itensPerPageList.forEach(function (element) {\n if (element.value == vm.searchParam.MaxPerPage) {\n vm.itemPerPage = element;\n return;\n }\n });\n } else {\n vm.itemPerPage = vm.itensPerPageList[0];\n }\n search(vm.searchParam.Page, vm.itemPerPage.value);\n };\n\n vm.canSave = function () {\n return $scope.importForm.$valid && hasFileWorksheet();\n };\n\n vm.onCloseImportErrorList = function () {\n vm.errors = [];\n }\n\n vm.save = function () {\n if (vm.canSave()) {\n\n var message = $translate.instant(\"logistic.confirm.dialog.message\");\n vm.showConfirm(message, function () {\n confirmSaveFile();\n });\n }\n };\n\n function confirmSaveFile() {\n SourcingKpiImportService.save(parseImport())\n .then(function (response) {\n if (response.Count === 0 && response.Errors.length > 0) {\n vm.errors = response.Errors;\n DialogControllerTemplate.showWithCloseListener('logistics.import.errors.title', 'logistics.import.errors.label',\n '', vm, vm.onCloseImportErrorList);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"logistics.import.success\"), ToastUtil.ToastType.SUCCESS);\n vm.WorksheetFile.FilePath = null;\n vm.WorksheetFile.FileName = null;\n vm.attachments = [];\n vm.search();\n }\n\n })\n .catch(onSaveError);\n }\n\n function parseImport() {\n var file = angular.copy(vm.WorksheetFile);\n\n if (vm.attachments && vm.attachments.length > 0) {\n var attachment = angular.copy(vm.attachments[0]);\n file.FilePath = attachment.Path;\n file.FileName = attachment.FileName;\n file.Model = file.Model.value;\n }\n\n return file;\n }\n\n function onSaveError(error) {\n if (error && error === 'not authorized') {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n return;\n }\n\n var serverMsg = error.data ? error.data.Message : 'Network error';\n var errorMsg;\n\n if (error.data && error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n return;\n }\n } else {\n errorMsg = $translate.instant(serverMsg)\n }\n\n ToastUtil.showToastMessage($translate.instant(errorMsg), ToastUtil.ToastType.ERROR);\n }\n\n\n function hasFileWorksheet() {\n return vm.attachments && vm.attachments.length > 0;\n }\n\n vm.openSite = function (site) {\n $window.open(site, '_blank');\n };\n\n vm.download = function (filePath, fileName) {\n var file = {\n Path: filePath,\n FileName: fileName\n }\n FileService.download(file).then(function (response) {\n var newFIle = new Blob([response], {}), fileURL = URL.createObjectURL(newFIle),\n a = $document[0].createElement(\"a\");\n $document[0].body.appendChild(a);\n a.style = \"display: none\";\n a.href = fileURL;\n a.download = file.FileName;\n a.click();\n }).catch(function (error) {\n $log.log(error);\n });\n };\n\n vm.showConfirm = function (text, action) {\n DialogController.show($translate.instant(\"logistic.title.import\"), '', action, text);\n };\n\n vm.init();\n\n function formatResponse(freightCost) {\n var status = SourcingKpiImportService.getStatusById(freightCost.Status);\n freightCost.StatusDescription = status.Title;\n }\n\n vm.getStatusName = function (statusId) {\n var statusTitle = \"\";\n var statusList = SourcingKpiImportService.getStatusOptions();\n angular.forEach(statusList, function (value) {\n if (value.id == statusId) {\n statusTitle = value.Name;\n }\n });\n return statusTitle;\n };\n\n vm.getType = function (id) {\n var type = SourcingKpiImportService.getTypeById(id);\n return type;\n };\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(SourcingTranslate);\n\n function SourcingTranslate($translateProvider) {\n $translateProvider.translations('en', {\n 'contract.label.area': 'Department/Area',\n 'contract.identification': 'Contract Identification',\n 'new.title.contract': 'New Contract',\n 'title.contract': 'Contract',\n 'contract.type.buyandsell': 'Buy and Sell',\n 'contract.type.lending': 'Lending',\n 'contract.type.product': 'Product',\n 'contract.type.rental': 'Rental',\n 'contract.type.service': 'Service',\n 'contract.status.current': 'Active',\n 'contract.status.expired': 'Expirated',\n 'contract.status.rescinded': 'Inactive',\n 'contract.status.approvalroute': 'Under Approval',\n 'error.contract.search': 'An error occurred when trying to load a list of Contracts.',\n 'contract.remove.success': 'Contract was successfully removed',\n 'contract.remove.error.conflict': 'The Contract can not be removed because it is being used by the system.',\n 'contract.remove.error': 'Ocorreu um erro ao tentar remover o contrato',\n 'label.new.contract': 'New Contract',\n 'contract.label.id': 'ID',\n 'contract.placeholder.id': 'Search by ID',\n 'contract.label.archivecode': 'Archive Code',\n 'contract.placeholder.archivecode': 'Search by Archive Code',\n 'contract.label.owner': 'Owner',\n 'contract.label.type': 'Category',\n 'contract.placeholder.type': 'Select the category',\n 'contract.label.status': 'Status',\n 'contract.placeholder.status': 'Search by status',\n 'contract.label.startdate': 'Start Date',\n 'contract.label.expirationdate': 'Expiration Date',\n 'contract.list.notfound': 'No contract found',\n 'contract.financial.not.found': 'No contract financial found',\n 'contract.label.vendor': 'Vendor',\n 'contract.label.aging': 'Aging',\n 'contract.label.department': 'Department/Area',\n 'contract.label.remark': 'Remark',\n 'contract.placeholder.vendor': 'Search by code SAP or vendor name',\n 'contract.label.start.date': 'Start (Expiration Date)',\n 'contract.label.end.date': 'End (Expiration Date)',\n 'contract.label.expiration.date': 'Expiration Date',\n 'contract.label.paymentterms': 'Payment Terms',\n 'contract.label.object': 'Object',\n 'contract.actionstatus.identification': 'Action Status Identification',\n 'contract.label.actionstatus.date': 'Date',\n 'contract.label.actionstatus.description': 'Description',\n 'contract.label.fixed': 'Fixed',\n 'contract.label.technicalvisit': 'Technical Visit',\n 'contract.label.milestone': 'Supplier Approval Milestones',\n 'contract.update.success': 'Contract was successfully updated',\n 'contract.save.success': 'Contract was successfully saved',\n 'label.edit.contract': 'Contract Editing',\n 'contract.remark.title': 'Alteration Remark',\n 'contract.remark': 'Remark',\n 'contract.actionstatus.duplicated': 'An action status already exists with the reported data.',\n 'contract.dates.invalid': 'The contract start date must be less than or equal to expiration date',\n 'contract.financial.identification': 'Contract - Financial',\n 'contract.financial.year': 'Year',\n 'contract.inactive.vendor': 'The selected vendor is inactive',\n 'auto.complete.contract.directive.placeholder': 'Select by contract Id or vendor name',\n 'auto.complete.contract.invalid.msg': 'Selected Contract is invalid.',\n 'auto.complete.contract.duplicated.msg': 'Contract already inserted.',\n 'contract.change.view.list.label': 'View List',\n 'contract.change.view.graphic.year.label': 'View Chart Year',\n 'contract.change.view.graphic.year.title': 'Contracts Expenses Compararison',\n 'contract.change.view.graphic.month.label': 'View Chart Month',\n 'contract.change.view.graphic.month.title': 'Contracts Monthly Spend Service (BRL)',\n 'contract.label.start.year': 'Started Contract',\n 'contract.label.end.year': 'Ended Contract',\n 'contract.placeholder.year': 'Year',\n 'contract.required.msg': 'Required field',\n 'contract.view.graphic.years.invalid': 'Contract year is less than initial year',\n 'contract.view.graphic.years.many': 'Final year of the contract must not exceed 5 years of the initial year',\n 'contract.month.jan': 'JAN',\n 'contract.month.fev': 'FEV',\n 'contract.month.mar': 'MAR',\n 'contract.month.apr': 'APR',\n 'contract.month.may': 'MAY',\n 'contract.month.jun': 'JUN',\n 'contract.month.jul': 'JUL',\n 'contract.month.aug': 'AUG',\n 'contract.month.sep': 'SEP',\n 'contract.month.oct': 'OCT',\n 'contract.month.nov': 'NOV',\n 'contract.month.dec': 'DEC'\n });\n $translateProvider.translations('pt', {\n 'contract.label.area': 'Departamento/ Área',\n 'contract.identification': 'Identificação do Contrato',\n 'new.title.contract': 'Novo Contrato',\n 'title.contract': 'Contrato',\n 'contract.type.buyandsell': 'Compra e Venda',\n 'contract.type.lending': 'Empréstimo',\n 'contract.type.product': 'Produto',\n 'contract.type.rental': 'Aluguel',\n 'contract.type.service': 'Serviço',\n 'contract.status.current': 'Ativo',\n 'contract.status.expired': 'Expirado',\n 'contract.status.rescinded': 'Inativo',\n 'contract.status.approvalroute': 'Em rota de aprovação',\n 'error.contract.search': 'Não foi possível carregar a lista de contratos, tente novamente ou contate um administrador.',\n '': 'Contrato removido com sucesso',\n 'contract.remove.error.conflict': 'O Fornecedor não pode ser removido pois está sendo usado pelo sistema',\n 'contract.remove.error': 'An error occurred when try to remove contract',\n 'label.new.contract': 'Novo Contrato',\n 'contract.label.id': 'ID',\n 'contract.placeholder.id': 'Consulta por ID',\n 'contract.label.archivecode': 'Código no Arquivo',\n 'contract.placeholder.archivecode': 'Consulta por código do arquivo',\n 'contract.label.owner': 'Responsável',\n 'contract.label.type': 'Categoria',\n 'contract.placeholder.type': 'Selecione a categoria',\n 'contract.label.status': 'Situação',\n 'contract.placeholder.status': 'Consulta por situação',\n 'contract.label.startdate': 'Data de Início',\n 'contract.label.expirationdate': 'Data de Expiração',\n 'contract.label.aging': 'Tempo',\n 'contract.list.notfound': 'Nenhum contrato encontrado',\n 'contract.financial.not.found': 'Nenhuma informação financeira do contrato encontrada',\n 'contract.label.vendor': 'Fornecedor',\n 'contract.label.department': 'Departamento/Área',\n 'contract.label.remark': 'Obervação',\n 'contract.placeholder.vendor': 'Consulta por código do SAP ou nome do fornecedor',\n 'contract.label.start.date': 'Início (Data de Expiração)',\n 'contract.label.end.date': 'Fim (Data de Expiração)',\n 'contract.label.expiration.date': 'Data de Expiração',\n 'contract.label.paymentterms': 'Termos do Pagamento',\n 'contract.label.object': 'Objeto',\n 'contract.actionstatus.identification': 'Identificação do Acompanhamento',\n 'contract.label.actionstatus.date': 'Data',\n 'contract.label.actionstatus.description': 'Descrição',\n 'contract.label.fixed': 'Fixo',\n 'contract.label.technicalvisit': 'Visita Técnica',\n 'contract.label.milestone': 'Etapas de Aprovação do Fornecedor',\n 'contract.update.success': 'Contrato atualizado com sucesso',\n 'contract.save.success': 'Contrato salvo com sucesso',\n 'label.edit.contract': 'Edição de Contrato',\n 'contract.remark.title': 'Observação de Alteração',\n 'contract.remark': 'Observação',\n 'contract.actionstatus.duplicated': 'Já existe um acompanhamento com os dados informados.',\n 'contract.dates.invalid': 'A data inicial do contrato deve ser menor ou igual a data de expiração',\n 'contract.financial.identification': 'Contrato - Financeiro',\n 'contract.financial.year': 'Ano',\n 'contract.inactive.vendor': 'O fornecedor selecionado encontra-se inativo',\n 'auto.complete.contract.directive.placeholder': 'Selecione por Id do contrato ou nome do fornecedor',\n 'auto.complete.contract.invalid.msg': 'O Contrato selecionado é inválido.',\n 'auto.complete.vendor.duplicated.msg': 'Contrato já inserido.',\n 'contract.change.view.list.label': 'Visualizar lista',\n 'contract.change.view.graphic.year.label': 'Visualizar gráfico por ano',\n 'contract.change.view.graphic.month.label': 'Visualizar gráfico por mês',\n 'contract.change.view.graphic.year.title': 'Comparação de Despesas de Contratos',\n 'contract.change.view.graphic.month.title': 'Gráfico Serviço de Gasto Mensal de Contratos (BRL)',\n 'contract.label.start.year': 'Ínicio do contrato',\n 'contract.label.end.year': 'Final do contrato',\n 'contract.placeholder.year': 'Ano',\n 'contract.required.msg': 'Campo obrigatório.',\n 'contract.view.graphic.years.invalid': 'Ano final do contrato é menor que ano inicial',\n 'contract.view.graphic.years.many': 'Ano final do contrato não deve ultrapassar 5 anos do ano inicial',\n 'contract.month.jan': 'JAN',\n 'contract.month.fev': 'FEV',\n 'contract.month.mar': 'MAR',\n 'contract.month.apr': 'ABR',\n 'contract.month.may': 'MAI',\n 'contract.month.jun': 'JUN',\n 'contract.month.jul': 'JUL',\n 'contract.month.aug': 'AGO',\n 'contract.month.sep': 'SET',\n 'contract.month.oct': 'OUT',\n 'contract.month.nov': 'NOV',\n 'contract.month.dec': 'DEZ'\n });\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .factory('ContractService', ContractService);\n\n var BASE = '/contract/';\n\n function ContractService($injector, $q, ConfigurationService) {\n return {\n\n Types: {\n BUY_AND_SELL: {\n Id: 1,\n Title: 'contract.type.buyandsell'\n },\n LENDING: {\n Id: 2,\n Title: 'contract.type.lending'\n },\n PRODUCT: {\n Id: 3,\n Title: 'contract.type.product'\n },\n RENTAL: {\n Id: 4,\n Title: 'contract.type.rental'\n },\n SERVICE: {\n Id: 5,\n Title: 'contract.type.service'\n }\n },\n Status: {\n CURRENT: {\n Id: 1,\n Title: 'contract.status.current'\n },\n EXPIRED: {\n Id: 2,\n Title: 'contract.status.expired'\n },\n RESCINDED: {\n Id: 3,\n Title: 'contract.status.rescinded'\n },\n APPROVAL_ROUTE: {\n Id: 4,\n Title: 'contract.status.approvalroute'\n }\n },\n search: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + \"list\", {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getById: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + 'byId/' + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n save: function (contract) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + BASE, contract, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n delete: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + BASE + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n update: function (id, contract) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.patch(ConfigurationService.getServiceHost() + BASE + id, contract)\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n export: function (id, language) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + '/export-pdf/' + id + '/' + language, {\n responseType: 'arraybuffer'\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n downloadAll: function (filtro, language) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + 'export-all/' + language,\n {\n params: filtro,\n responseType: 'arraybuffer'\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n }\n , function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n }\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(ContractRoute);\n\n function ContractRoute($stateProvider) {\n $stateProvider.state('contract-list', {\n url: '/sourcing/contract',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/sourcing/contract/contract-list.html',\n controller: 'ContractListController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.sourcing'\n },\n authorize: true\n });\n\n $stateProvider.state('contract-create', {\n url: '/sourcing/contract/create',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/sourcing/contract/contract-edit.html',\n controller: 'ContractController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.sourcing'\n },\n authorize: true\n });\n\n $stateProvider.state('contract-edit', {\n url: '/sourcing/contract/edit/:Id',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/sourcing/contract/contract-edit.html',\n controller: 'ContractController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.sourcing'\n },\n authorize: true\n });\n }\n})();\n/*eslint no-undef: 0*/\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('ContractController', ContractController);\n\n function ContractController(ContractService, $window, $scope, $sce, MessageUtil, ToastUtil, $translate, $state, moment, JsonPatchUtil, DialogControllerTemplate,\n DefaultService, SourcingService, $rootScope, $document) {\n var vm = this, _patch = null, patch = null,\n USER = {Id: parseInt($window.localStorage.userID), Name: $window.localStorage.aliasAqms},\n contractId = parseInt($state.params.Id), states = {};\n\n var DefaultState = {\n canEdit: true,\n canEditVendor: true\n };\n\n vm.ContractNotifications = [];\n vm.State = DefaultState;\n\n initStates();\n\n vm.ActionStatus = {\n Date: new Date(),\n Description: null\n }\n\n vm.addActionStatus = function () {\n if (angular.isUndefined(vm.ActionStatus.Date) || angular.isUndefined(vm.ActionStatus.Description) || vm.ActionStatus.Date === null\n || vm.ActionStatus.Description === null || vm.ActionStatus.Description.trim().length === 0) {\n return;\n }\n if (actionStatusExists()) {\n ToastUtil.showToastMessage($translate.instant(\"contract.actionstatus.duplicated\"), ToastUtil.ToastType.WARN);\n } else {\n if (angular.isDefined(vm.ActionStatusIndex)) {\n var actionStatus = vm.Contract.ActionStatus[vm.ActionStatusIndex];\n actionStatus.Date = vm.ActionStatus.Date;\n actionStatus.Description = vm.ActionStatus.Description;\n delete vm.ActionStatusIndex;\n } else {\n vm.Contract.ActionStatus.push(angular.copy(vm.ActionStatus));\n }\n\n vm.ActionStatus.Date = new Date();\n vm.ActionStatus.Description = null;\n }\n }\n\n vm.deleteActionStatus = function (index) {\n vm.Contract.ActionStatus.splice(index, 1);\n delete vm.ActionStatusIndex;\n }\n\n vm.editActionStatus = function (index, actionStatus) {\n vm.ActionStatus = angular.copy(actionStatus);\n vm.ActionStatusIndex = index;\n }\n\n vm.isEditingActionStatus = function () {\n return angular.isDefined(vm.ActionStatusIndex) && vm.ActionStatusIndex >= 0;\n }\n\n vm.saveOrUpdate = function () {\n if (contractId && contractId > 0) {\n update();\n } else {\n save();\n }\n };\n\n vm.onConfirmUpdate = function (remark) {\n var filtered = patch.filter(function (p) {\n return p.op === \"add\" && p.path.startsWith(\"/Attachments\");\n });\n\n filtered.forEach(function (item) {\n item.value.Contract = {Id: contractId};\n });\n\n patch.push({\"op\": \"replace\", \"path\": \"/Remark\", \"value\": remark});\n patch.push({\"op\": \"replace\", \"path\": \"/UpdatedBy\", \"value\": {Id: USER.Id, Name: USER.Name}});\n\n ContractService.update(contractId, patch)\n .then(function () {\n _patch = null;\n patch = null;\n ToastUtil.showToastMessage($translate.instant(\"contract.update.success\"), ToastUtil.ToastType.SUCCESS);\n $state.go('contract-edit', {\n Id: contractId\n });\n })\n .catch(onSaveContractError);\n }\n\n vm.getHTML = function (text) {\n return $sce.trustAsHtml(text);\n };\n\n vm.onVendorSelected = function () {\n var contract = vm.Contract;\n DefaultService.vendorHasTechnicalVisit(vm.Contract.Vendor.Id)\n .then(function (vendorSituation) {\n if (vendorSituation) {\n vm.HasMilestoneApproved = vendorSituation.HasMilestoneApproved === \"True\";\n vm.HasTechnicalVisitApproved = vendorSituation.HasTechnicalVisitApproved === \"True\";\n }\n });\n vm.Contract.Vendor = {\n Id: contract.Vendor.Id,\n Title: contract.Vendor.Title,\n CodeSAP: contract.Vendor.CodeSAP,\n FantasyName: contract.Vendor.FantasyName,\n CsActive: contract.Vendor.CsActive\n };\n }\n\n vm.editorConfig = {\n sanitize: false,\n toolbar: [{\n name: 'basicStyling',\n items: ['bold', 'italic', 'underline', 'strikethrough', 'subscript', 'superscript', '-', 'leftAlign', 'centerAlign', 'rightAlign', 'blockJustify', '-']\n },\n {\n name: 'paragraph',\n items: ['orderedList', 'unorderedList', 'outdent', 'indent', '-']\n },\n {\n name: 'doers',\n items: ['removeFormatting', 'undo', 'redo', '-']\n },\n {\n name: 'colors',\n items: ['fontColor', 'backgroundColor', '-']\n },\n {\n name: 'styling',\n items: ['font', 'size']\n }\n ]\n };\n\n vm.onContractDateChanged = fillContractValueGrid;\n\n function fillContractValueGrid() {\n $rootScope.$broadcast('fillContractValueGrid', {});\n }\n\n function actionStatusExists() {\n return vm.Contract.ActionStatus.some(function (ac, index) {\n return ac.Description === vm.ActionStatus.Description && isDateEqual(ac.Date, vm.ActionStatus.Date)\n && ((vm.ActionStatusIndex === null || angular.isUndefined(vm.ActionStatusIndex)) || vm.ActionStatusIndex !== index);\n });\n }\n\n function isDateEqual(date1, date2) {\n return moment(date1).isSame(date2, 'day');\n }\n\n function initStates() {\n states = {\n Default: DefaultState,\n Consult: initConsultState()\n }\n }\n\n function initConsultState() {\n var consult = angular.copy(vm.State);\n consult.canEdit = false\n consult.canEditVendor = false\n return consult;\n }\n\n function canSave() {\n var notes = vm.Contract.Object;\n return $scope.contractForm.$valid && notes !== null && notes !== \"\" && validateStartDateAndExpirationDate();\n }\n\n function validateStartDateAndExpirationDate() {\n var startDate = moment(vm.Contract.StartDate), expirationDate = vm.Contract.ExpirationDate;\n if (startDate.isSame(expirationDate, 'day') || startDate.isBefore(expirationDate, 'day')) {\n return true;\n }\n ToastUtil.showToastMessage($translate.instant(\"contract.dates.invalid\"), ToastUtil.ToastType.WARN);\n return false;\n }\n\n function save() {\n if (canSave()) {\n var contract = angular.copy(vm.Contract);\n delete contract.HasTechnicalVisitApproved;\n contract.Vendor = {Id: vm.Contract.Vendor.Id, Title: vm.Contract.Vendor.Title};\n contract.ContractNotifications = angular.copy(vm.ContractNotifications);\n contract.Values = contract.Values.filter(function (contractValue) {\n return contractValue.Value > 0;\n });\n\n ContractService.save(contract)\n .then(onSaveContractSuccess)\n .catch(onSaveContractError);\n }\n }\n\n function update() {\n if (canSave()) {\n\n if (vm.ContractNotifications.length > 0) {\n vm.ContractNotifications.forEach(function (item) {\n vm.Contract.ContractNotifications.forEach(function (notification, index) {\n if (notification.ExternalEmail.Email == item.ExternalEmail.Email) {\n vm.Contract.ContractNotifications.splice(index, 1);\n }\n });\n });\n vm.ContractNotifications.forEach(function (item) {\n vm.Contract.ContractNotifications.push(item);\n });\n }\n\n patch = formatContractToUpdate();\n if (patchIsNotEmpty(patch)) {\n DialogControllerTemplate.showWithCloseListener('contract.remark.title', 'contract.remark',\n '', vm.onConfirmUpdate);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"contract.update.success\"), ToastUtil.ToastType.SUCCESS);\n $state.go('contract-edit', {\n Id: contractId\n });\n }\n }\n }\n\n function patchIsNotEmpty(patch) {\n return patch && patch.length > 0;\n }\n\n function formatContractToUpdate() {\n var updated = vm.Contract.UpdatedBy;\n\n vm.Contract.UpdatedBy = {\n Id: updated.Id, Name: updated.Name\n }\n\n vm.Contract.Owner = mapUser(vm.Contract.Owner);\n\n var patch = generatePatch();\n\n handleFieldDate(patch, \"StartDate\");\n handleFieldDate(patch, \"CreatedDate\");\n handleFieldDate(patch, \"UpdatedDate\");\n handleFieldDate(patch, \"ExpirationDate\");\n\n return patch;\n }\n\n function handleFieldDate(patch, field) {\n if (patch.length > 0) {\n var filtered = patch.filter(function (p) {\n return p.op == \"replace\" && p.path === \"/\" + field;\n });\n if (filtered && filtered.length > 0) {\n var currentPatch = filtered[0];\n if (angular.equals(new Date(currentPatch.value), vm.ContractCopy[field])) {\n patch.splice(patch.indexOf(currentPatch), 1);\n }\n }\n }\n }\n\n function generatePatch() {\n var patch = JsonPatchUtil.generate(vm.Contract, vm.ContractCopy, vm.observer, _patch);\n patch = patch.reduce(function (newPatch, item) {\n if (item.path.startsWith('/Values')) {\n if (item.op === \"remove\") {\n newPatch.push(item);\n } else {\n var contractValue = item.value;\n if (contractValue.Id || contractValue.Value > 0) {\n newPatch.push(item);\n }\n }\n\n } else {\n newPatch.push(item);\n }\n return newPatch;\n }, []);\n _patch = angular.copy(patch);\n return patch;\n }\n\n init();\n\n function onSaveContractSuccess(response) {\n ToastUtil.showToastMessage($translate.instant(\"contract.save.success\"), ToastUtil.ToastType.SUCCESS);\n $state.go('contract-edit', {\n Id: response.Id\n });\n }\n\n function onSaveContractError(error) {\n patch = null;\n MessageUtil.onSaveError(error, 'contract.save.error.duplicated');\n }\n\n function init() {\n vm.BusinessId = null;\n vm.statusList = [ContractService.Status.CURRENT, ContractService.Status.EXPIRED, ContractService.Status.RESCINDED, ContractService.Status.APPROVAL_ROUTE];\n vm.typeList = [ContractService.Types.BUY_AND_SELL, ContractService.Types.LENDING, ContractService.Types.PRODUCT, ContractService.Types.RENTAL, ContractService.Types.SERVICE];\n initContractViewModel();\n vm.hintMsg = 'contract.placeholder.vendor';\n if (contractId && contractId > 0) {\n vm.label = \"label.edit.contract\";\n vm.State.canEditVendor = false;\n SourcingService.loadProfileContractModules(vm, $scope)\n .then(validateViewOrEditPermission)\n .catch(function () {\n ContractService.getById(contractId)\n .then(setViewModel);\n });\n } else {\n vm.label = \"new.title.contract\";\n }\n\n }\n\n function validateViewOrEditPermission() {\n if (SourcingService.hasApprovePermission(vm)) {\n if (!vm.profile.CanEdit) {\n vm.State = states.Consult;\n }\n getContract();\n } else {\n $state.go('not-authorized', {}, {});\n }\n }\n\n function getContract() {\n ContractService.getById(contractId)\n .then(setViewModel);\n }\n\n function initContractViewModel() {\n vm.Contract = {\n CreatedBy: USER,\n CreatedDate: new Date(),\n UpdatedBy: USER,\n UpdatedDate: new Date(),\n Vendor: null,\n ArchiveCode: null,\n Type: null,\n StartDate: new Date(),\n ExpirationDate: new Date(),\n Status: null,\n Owner: null,\n Area: null,\n Fixed: false,\n PaymentTerms: null,\n Remark: null,\n Object: null,\n Attachments: [],\n ActionStatus: [],\n Values: [],\n ContractNotifications: []\n };\n vm.HasTechnicalVisitApproved = false;\n vm.HasMilestoneApproved = false;\n vm.ContractValueGridRecords = [];\n fillContractValueGrid();\n }\n\n function setViewModel(contract) {\n vm.Contract.Id = contract.Id;\n vm.Contract.CreatedBy = mapUser(contract.CreatedBy);\n vm.Contract.UpdatedBy = mapUser(contract.UpdatedBy);\n vm.Contract.Owner = mapUser(contract.Owner);\n vm.Contract.CreatedDate = formatDateToViewModel(contract.CreatedDate);\n vm.Contract.UpdatedDate = formatDateToViewModel(contract.UpdatedDate);\n vm.Contract.StartDate = formatDateToViewModel(contract.StartDate);\n vm.Contract.ExpirationDate = formatDateToViewModel(contract.ExpirationDate);\n $rootScope.$broadcast('resetContractPeriod', {\n startDate: vm.Contract.StartDate,\n expirationDate: vm.Contract.ExpirationDate\n });\n\n vm.Contract.Vendor = {\n Id: contract.Vendor.Id,\n Title: contract.Vendor.Title,\n CodeSAP: contract.Vendor.CodeSAP,\n FantasyName: contract.Vendor.FantasyName,\n CsActive: contract.Vendor.CsActive\n };\n vm.onVendorSelected();\n\n if (!contract.Vendor.CsActive) {\n vm.hintMsg = 'contract.inactive.vendor'\n }\n\n vm.Contract.Remark = contract.Remark;\n vm.Contract.Attachments = contract.Attachments;\n vm.Contract.ActionStatus = contract.ActionStatus;\n vm.Contract.Object = removeHtmlTags(contract.Object);\n vm.Contract.Status = contract.Status;\n vm.Contract.Type = contract.Type;\n vm.Contract.Area = contract.Area;\n vm.Contract.Fixed = contract.Fixed;\n vm.Contract.PaymentTerms = contract.PaymentTerms;\n vm.Contract.HasTechnicalVisitApproved = contract.HasTechnicalVisitApproved;\n vm.Contract.ArchiveCode = contract.ArchiveCode;\n vm.Contract.ContractNotifications = contract.ContractNotifications;\n vm.Contract.Values = contract.Values;\n $rootScope.$broadcast('resetContractValues', {contractValues: vm.Contract.Values});\n\n vm.ContractCopy = angular.copy(vm.Contract);\n vm.observer = jsonpatch.observe(vm.Contract);\n }\n\n function removeHtmlTags(textHtml) {\n var div = $document[0].createElement(\"div\");\n div.innerHTML = textHtml;\n var text = div.textContent || div.innerText || \"\";\n return text;\n }\n\n function formatDateToViewModel(date) {\n var momentDate = moment(date, 'YYYY/MM/DD');\n return new Date(momentDate.year(), momentDate.month(), momentDate.date());\n }\n\n function mapUser(user) {\n return {Id: user.Id, Name: user.Name};\n }\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('ContractValueController', ContractValueController)\n .directive('contractValue', ContractValueDirective);\n\n function ContractValueDirective() {\n var directive = {\n bindToController: true,\n restrict: 'E',\n scope: {\n startDate: '=',\n expirationDate: '=',\n contractValues: '='\n },\n replace: true,\n templateUrl: \"app/sourcing/contract/contract-value.html\",\n controllerAs: 'ctrl',\n controller: 'ContractValueController'\n };\n return directive;\n }\n\n /* @ngInject */\n function ContractValueController($rootScope, $scope, moment) {\n var vm = this;\n\n var ContractValueMonthLength = 12;\n\n vm.ContractValueMonths = [];\n\n $rootScope.$on('fillContractValueGrid', function () {\n fillContractValueGrid();\n });\n\n $rootScope.$on('calculateYTD', function () {\n vm.contractValueGridRecords.forEach(calculateYTD);\n });\n\n $rootScope.$on('resetContractValues', function (event, args) {\n vm.contractValues = args.contractValues;\n fillContractValueGrid();\n vm.contractValueGridRecords.forEach(calculateYTD);\n });\n\n $rootScope.$on('resetContractPeriod', function (event, args) {\n vm.startDate = args.startDate;\n vm.expirationDate = args.expirationDate;\n fillContractValueGrid();\n });\n\n vm.financialEditing = false;\n\n vm.setFinancialEditing = function (editing) {\n if ($scope.contractValueForm.$invalid) {\n return;\n }\n vm.financialEditing = editing;\n }\n\n vm.contractValueGridRecords = [];\n\n vm.onContractValueChanged = function (gridRecord, contractValue) {\n if ($scope.contractValueForm.$invalid) {\n return;\n }\n calculateYTD(gridRecord);\n if (!vm.contractValues.some(function (el) {\n return moment(el.Date).isSame(contractValue.Date, 'day');\n })) {\n vm.contractValues.push(contractValue);\n }\n };\n\n init();\n\n function init() {\n for (var index = 1; index <= ContractValueMonthLength; index++) {\n vm.ContractValueMonths.push(\"P\" + index);\n }\n fillContractValueGrid();\n }\n\n function calculateYTD(contractValue) {\n contractValue.YTD = contractValue.Values\n .reduce(function (ytd, item) {\n ytd += item.Value;\n return ytd;\n }, 0);\n }\n\n function fillContractValueGrid() {\n var startYear = moment(vm.startDate).year(),\n endYear = moment(vm.expirationDate).year();\n include(startYear, endYear);\n exclude(startYear, endYear);\n vm.contractValueGridRecords.sort(sortByYear);\n }\n\n function exclude(startYear, endYear) {\n var i = vm.contractValueGridRecords.length;\n while (i--) {\n if (vm.contractValueGridRecords[i].Year > endYear) {\n vm.contractValues = vm.contractValues.filter(function (el) {\n return vm.contractValueGridRecords[i].Values.indexOf(el) < 0;\n });\n vm.contractValueGridRecords.splice(i, 1);\n }\n\n if (vm.contractValueGridRecords[i].Year < startYear) {\n vm.contractValues = vm.contractValues.filter(function (el) {\n return vm.contractValueGridRecords[i].Values.indexOf(el) < 0;\n });\n vm.contractValueGridRecords.splice(i, 1);\n }\n }\n }\n\n function findContractValueGridRecordByYear(year) {\n return vm.contractValueGridRecords.find(function (item) {\n return item.Year === year;\n });\n }\n\n function setContractValue(contractValue, financial) {\n var month = moment(contractValue.Date).month();\n var index = financial.Values.findIndex(function (element) {\n var elementMonth = angular.isString(element.Date) ? moment(element.Date).month() : element.Date.getMonth();\n if (elementMonth === month) {\n return true;\n }\n return false;\n });\n financial.Values[index] = contractValue;\n }\n\n function include(startYear, endYear) {\n while (startYear <= endYear) {\n var financial = findContractValueGridRecordByYear(startYear);\n if (angular.isUndefined(financial)) {\n var values = createContractValues(startYear);\n vm.contractValues = vm.contractValues.concat(values);\n vm.contractValueGridRecords.push({\n Year: startYear,\n Values: values,\n YTD: 0\n });\n } else {\n vm.contractValues\n .filter(function (contractValue) {\n return moment(contractValue.Date).year() === financial.Year;\n }).forEach(function (contractValue) {\n setContractValue(contractValue, financial);\n });\n financial.Values.forEach(setContractValueDisabled);\n }\n startYear++;\n }\n }\n\n function setContractValueDisabled(contractValue) {\n contractValue.Disabled = isContractValueDisabled(contractValue.Date);\n }\n\n function isContractValueDisabled(date) {\n var contractStartDate = moment(vm.startDate).startOf('month'),\n contractExpirationDate = moment(vm.expirationDate).startOf('month');\n return moment(date).startOf('month').isBefore(contractStartDate, 'day') || moment(date).startOf('month').isAfter(contractExpirationDate, 'day');\n }\n\n function createContractValues(year) {\n var values = [], startDate = moment().year(year).startOf('year'), endDate = moment().year(year).endOf('year');\n while (!startDate.isAfter(endDate, 'day')) {\n var date = angular.copy(startDate.toDate());\n values.push({\n Year: year,\n Date: date,\n Value: 0,\n Disabled: isContractValueDisabled(date)\n });\n startDate.add(1, 'month');\n }\n return values;\n }\n\n function sortByYear(a, b) {\n if (a.Year > b.Year) {\n return 1;\n }\n if (a.Year < b.Year) {\n return -1;\n }\n return 0;\n }\n\n }\n})();\n\n/*eslint no-undef: 0*/\n/*eslint angular/controller-as-vm: 0*/\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('ContractListController', ContractListController);\n\n function ContractListController($scope, $rootScope, $translate, $filter, $state, $window, $document, ContractService, ToastUtil, moment, SourcingService, AuthService, $interval, Idle) {\n\n var vm = this;\n vm.disableExport = true;\n var intervalEvent = null;\n var dataRefreshInterval = null;\n var HTTP_STATUS_CONFLICT = 409;\n var finalStatus = {\n CURRENT: 1,\n EXPIRED: 2,\n RESCINDED: 3,\n APPROVAL_ROUTE: 4\n };\n var dateNow = new Date();\n\n vm.contracts = [];\n vm.itensPerPageList = [\n { name: '5', value: 5, before: 0, after: 6 },\n { name: '10', value: 10, before: 5, after: 11 },\n { name: '20', value: 20, before: 10, after: 21 },\n { name: '30', value: 30, before: 20, after: 31 },\n { name: '40', value: 40, before: 30, after: 41 },\n { name: '50', value: 50, before: 40, after: 51 }];\n vm.itemPerPage = vm.itensPerPageList[0];\n vm.totalLista = 0;\n vm.searchParams = {\n Id: '',\n StartDate: '',\n FinalDate: '',\n Vendor: '',\n Status: '-1',\n ArchiveCode: '',\n OwnerId: '',\n Type: '-1',\n Page: 1,\n MaxPerPage: vm.itemPerPage.value,\n AreaId: '',\n View: 'list',\n StartYear: dateNow.getFullYear(),\n EndYear: dateNow.getFullYear()\n };\n vm.statusList = [ContractService.Status.CURRENT, ContractService.Status.EXPIRED, ContractService.Status.RESCINDED, ContractService.Status.APPROVAL_ROUTE];\n vm.typeList = [ContractService.Types.BUY_AND_SELL, ContractService.Types.LENDING, ContractService.Types.PRODUCT, ContractService.Types.RENTAL, ContractService.Types.SERVICE];\n vm.extraFilters = {\n FilterByCodeSAPOrTitle: true\n };\n vm.labels = [\"P1\", \"P2\", \"P3\", \"P4\", \"P5\", \"P6\", \"P7\", \"P8\", \"P9\", \"P10\", \"P11\", \"P12\"];\n vm.colors = ['#5081BC', // Blue\n '#C1524B', // Red\n '#9CBA56', // Green\n '#837690', // Wine\n '#86B1BA', // Ciano\n '#FFA64D', // Orange,\n '#663300',\n '#EDE02D',\n '#F73E3B',\n '#024F4F',\n '#6049BC',\n '#9B044B',\n '#F7721E',\n '#3F6162',\n '#322765',\n '#D80461',\n '#A35A56',\n '#03DFDF',\n '#8B5FFF',\n '#680433',\n '#F79B6B',\n '#278783',\n '#0B09AD',\n '#3F011C'];\n vm.series = [];\n vm.data = [];\n vm.lineOptions = {\n elements: { line: { tension: 0, fill: false, borderWidth: 4 }, point: { radius: 7 } },\n tooltips: {\n enabled: true,\n mode: 'index',\n position: 'nearest'\n },\n scales: {\n yAxes: [{\n scaleLabel: {\n display: true,\n fontSize: 18\n }\n }],\n xAxes: [{\n ticks: {\n fontSize: 16,\n display: true,\n padding: 15\n }\n }\n ]\n },\n title: {\n display: true,\n text: 'Avaliação Fornecedor Por Categoria - {Categoria ou Total}',\n fontSize: 20\n },\n legend: {\n display: true\n }\n };\n vm.GraphicMonthYears = [];\n vm.currentSlide = 0;\n\n\n Array.prototype.groupBy = function (prop) {\n return this.reduce(function (groups, item) {\n var val = item[prop];\n groups[val] = groups[val] || [];\n groups[val].push(item);\n return groups;\n }, {});\n };\n\n vm.clearSearchFields = function () {\n vm.searchParams = {\n Id: '',\n StartDate: '',\n FinalDate: '',\n Vendor: '',\n Status: '-1',\n ArchiveCode: '',\n OwnerId: '',\n Type: '-1',\n Page: 1,\n MaxPerPage: vm.itemPerPage.value,\n AreaId: '',\n View: angular.copy(vm.searchParams.View),\n StartYear: dateNow.getFullYear(),\n EndYear: dateNow.getFullYear()\n };\n };\n\n vm.resolveStatusCss = function (status) {\n var result = \"\";\n\n switch (status) {\n case finalStatus.APPROVAL_ROUTE:\n result = 'label label-ongoing';\n break;\n case finalStatus.CURRENT:\n result = 'label label-approved';\n break;\n case finalStatus.RESCINDED:\n result = 'label label-rescind';\n break;\n case finalStatus.EXPIRED:\n result = 'label label-rejected';\n break;\n }\n\n return result;\n };\n\n vm.shouldShow = function (item) {\n if (vm.totalLista > 0 && item != undefined) {\n return vm.totalLista >= item.value || (vm.totalLista < item.after && vm.totalLista > item.before);\n }\n return false;\n };\n\n vm.changeItemsPerPage = function () {\n if (vm.itemPerPage == null) {\n vm.itemPerPage = vm.itensPerPageList[0];\n }\n search(1, vm.itemPerPage.value);\n };\n\n vm.onPageChange = function () {\n search(vm.searchParams.Page, vm.searchParams.MaxPerPage);\n };\n\n vm.searchContract = function () {\n if (vm.searchParams.View == \"chartYear\" || vm.searchParams.View == \"chartMonth\") {\n if (vm.searchParams.StartYear == null || vm.searchParams.EndYear == null) {\n return false;\n }\n\n if ((vm.searchParams.EndYear - vm.searchParams.StartYear) < 0) {\n ToastUtil.showToastMessage($translate.instant(\"contract.view.graphic.years.invalid\"), ToastUtil.ToastType.WARN);\n return false;\n }\n\n if ((vm.searchParams.EndYear - vm.searchParams.StartYear) > 5) {\n ToastUtil.showToastMessage($translate.instant(\"contract.view.graphic.years.many\"), ToastUtil.ToastType.WARN);\n return false;\n }\n }\n\n vm.itemPerPage = vm.itensPerPageList[0];\n search(1, vm.itemPerPage.value);\n };\n\n vm.search = function () {\n if (sessionStorage.getItem(\"searchParams\")) {\n vm.searchParams = JSON.parse(sessionStorage.getItem(\"searchParams\"));\n vm.searchParams.View = vm.searchParams.View ? vm.searchParams.View : \"list\";\n sessionStorage.removeItem(\"searchParams\");\n vm.itensPerPageList.forEach(function (element) {\n if (element.value == vm.searchParams.MaxPerPage) {\n vm.itemPerPage = element;\n return;\n }\n });\n }\n var searchParams = buildSearchParam();\n\n ContractService.search(searchParams)\n .then(function (response) {\n vm.contracts = response.resultList;\n vm.totalLista = response.total;\n vm.disableExport = !vm.profile.CanExport || vm.totalLista == 0;\n\n if (vm.searchParams.View === 'chartYear') {\n setViewModelGraphicYear();\n } else if (vm.searchParams.View === 'chartMonth') {\n setViewModelGraphicMonth();\n } else {\n setViewModel();\n }\n })\n .catch(function (error) {\n if (error && error.status) {\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"error.contract.search\"), ToastUtil.ToastType.ERROR);\n }\n }\n });\n };\n\n vm.edit = function (id) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n SourcingService.editContract(id, vm.profile);\n };\n\n vm.componentDevelopmentList = function () {\n $state.go('component-development-list', {});\n };\n\n vm.createVendor = function () {\n $state.go('vendor-list', {});\n };\n\n vm.createVisit = function () {\n $state.go('visit-list', {});\n };\n\n vm.createMilestone = function () {\n $state.go('milestone-list'), {};\n };\n\n vm.createAvaliation = function () {\n $state.go('avaliation-list', {});\n };\n\n vm.contractList = function () {\n $state.go('contract-list', {});\n };\n\n vm.create = function () {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n SourcingService.createContract(vm);\n };\n\n vm.delete = function (id) {\n ContractService.delete(id)\n .then(function () {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go($state.current, {}, {\n reload: true\n });\n ToastUtil.showToastMessage($translate.instant(\"contract.remove.success\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(function (error) {\n if (error === 'not authorized') {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n } else {\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if (error.status === HTTP_STATUS_CONFLICT) {\n ToastUtil.showToastMessage($translate.instant(\"contract.remove.error.conflict\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"contract.remove.error\"), ToastUtil.ToastType.ERROR);\n }\n }\n\n });\n\n };\n\n vm.exportToExcel = function () {\n if (!validateExportPermission()) {\n return;\n }\n\n var searchParams = buildSearchParam();\n\n SourcingService.exportContract(vm, searchParams, $translate.use())\n .then(function (response) {\n\n var date = moment().format(\"DD_MM_YYYY_HH_mm_ss\");\n\n var newFIle = new Blob([response], {\n type: 'application/vnd.ms-excel'\n });\n var fileURL = URL.createObjectURL(newFIle);\n var a = $document[0].createElement(\"a\");\n $document[0].body.appendChild(a);\n a.style = \"display: none\";\n a.href = fileURL;\n a.download = $translate.instant('contract.report.name') + AuthService.getBusinessName() + \"_\" + date + \".xls\";\n a.click();\n }).catch(function (error) {\n if (error && error.status) {\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"service.load.error\"), ToastUtil.ToastType.ERROR);\n }\n }\n });\n };\n\n vm.export = function (id) {\n if (!validateExportPermission()) {\n return;\n }\n\n ContractService.export(id, $translate.use()).then(function (response) {\n var date = moment().format(\"DD_MM_YYYY_HH_mm_ss\");\n\n var newFIle = new Blob([response], {\n type: 'application/octet-stream'\n });\n var fileURL = URL.createObjectURL(newFIle);\n var a = $document[0].createElement(\"a\");\n $document[0].body.appendChild(a);\n a.style = \"display: none\";\n a.href = fileURL;\n a.download = \"Report_Contract_Vendor[\" + id + \"]_\" + date + \".pdf\";\n a.click();\n }).catch(function (error) {\n if (error && error.status) {\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"service.load.error\"), ToastUtil.ToastType.ERROR);\n }\n }\n });\n };\n\n vm.viewAsGraphicYear = function () {\n vm.searchParams.View = \"chartYear\";\n if (vm.searchParams.StartYear == null || vm.searchParams.EndYear == null) {\n vm.searchParams.StartYear = dateNow.getFullYear();\n vm.searchParams.EndYear = dateNow.getFullYear();\n }\n\n if ((vm.searchParams.EndYear - vm.searchParams.StartYear) < 0) {\n vm.searchParams.StartYear = dateNow.getFullYear();\n vm.searchParams.EndYear = dateNow.getFullYear();\n }\n\n if ((vm.searchParams.EndYear - vm.searchParams.StartYear) > 5) {\n vm.searchParams.StartYear = dateNow.getFullYear();\n vm.searchParams.EndYear = dateNow.getFullYear();\n }\n vm.search();\n };\n\n vm.viewAsGraphicMonth = function () {\n vm.searchParams.View = \"chartMonth\";\n if (vm.searchParams.StartYear == null || vm.searchParams.EndYear == null) {\n vm.searchParams.StartYear = dateNow.getFullYear();\n vm.searchParams.EndYear = dateNow.getFullYear();\n }\n\n if ((vm.searchParams.EndYear - vm.searchParams.StartYear) < 0) {\n vm.searchParams.StartYear = dateNow.getFullYear();\n vm.searchParams.EndYear = dateNow.getFullYear();\n }\n\n if ((vm.searchParams.EndYear - vm.searchParams.StartYear) > 5) {\n vm.searchParams.StartYear = dateNow.getFullYear();\n vm.searchParams.EndYear = dateNow.getFullYear();\n }\n vm.search();\n };\n\n vm.viewAsList = function () {\n vm.searchParams.View = \"list\";\n\n if (vm.searchParams.StartYear == null || vm.searchParams.EndYear == null) {\n vm.searchParams.StartYear = dateNow.getFullYear();\n vm.searchParams.EndYear = dateNow.getFullYear();\n }\n\n if ((vm.searchParams.EndYear - vm.searchParams.StartYear) < 0) {\n vm.searchParams.StartYear = dateNow.getFullYear();\n vm.searchParams.EndYear = dateNow.getFullYear();\n }\n\n if ((vm.searchParams.EndYear - vm.searchParams.StartYear) > 5) {\n vm.searchParams.StartYear = dateNow.getFullYear();\n vm.searchParams.EndYear = dateNow.getFullYear();\n }\n\n vm.itemPerPage = vm.itensPerPageList[0];\n search(1, vm.itemPerPage.value);\n };\n\n vm.resetIntervalEvent = function () {\n if (intervalEvent != null) {\n $interval.cancel(intervalEvent);\n setIntervalEvent();\n }\n };\n\n function setIntervalEvent() {\n intervalEvent = 0;\n }\n\n function setViewModel() {\n if (vm.contracts) {\n for (var i = 0, len = vm.contracts.length; i < len; i++) {\n var contract = vm.contracts[i], expirationDate = moment(contract.ExpirationDate), today = moment(),\n status = null, type = null;\n\n contract.expired = today.isAfter(expirationDate, 'day') && contract.Status !== ContractService.Status.EXPIRED.Id;\n status = vm.statusList.find(function (s) {\n return s.Id === contract.Status;\n });\n\n if (status) {\n contract.StatusDescription = $translate.instant(status.Title);\n }\n\n type = vm.typeList.find(function (c) {\n return c.Id === contract.Type;\n });\n\n if (type) {\n contract.TypeDescription = $translate.instant(type.Title);\n }\n\n if (angular.isUndefined(contract.Vendor) || contract.Vendor === null || contract.Vendor === \"\") {\n contract.Vendor = \"-\"\n }\n }\n }\n }\n\n function setViewModelGraphicYear() {\n if (vm.contracts) {\n generateCharDataYear();\n var chart_area = angular.element($document[0].getElementById('chartYear'));\n $document.scrollToElementAnimated(chart_area, 60, 800);\n }\n }\n\n function setViewModelGraphicMonth() {\n if (vm.contracts) {\n generateCharDataMonth();\n var chart_area = angular.element($document[0].getElementById('area-grafics'));\n $document.scrollToElementAnimated(chart_area, 60, 800);\n }\n }\n\n function buildSearchParam() {\n var searchParams = {\n Id: vm.searchParams.Id,\n Vendor: vm.searchParams.Vendor,\n StartDate: null,\n FinalDate: null,\n Status: vm.searchParams.Status,\n Page: vm.searchParams.Page,\n MaxPerPage: vm.searchParams.MaxPerPage,\n ArchiveCode: null,\n OwnerId: null,\n Type: null,\n AreaId: null,\n View: null,\n StartYear: null,\n EndYear: null\n };\n\n angular.forEach(searchParams, function (value, key) {\n searchParams[key] = copy(vm.searchParams[key]);\n });\n\n searchParams.AreaId = searchParams.AreaId ? searchParams.AreaId.Id : null;\n searchParams.OwnerId = searchParams.OwnerId ? searchParams.OwnerId.Id : null;\n searchParams.StartDate = searchParams.StartDate ? moment(searchParams.StartDate).format('DD/MM/YYYY') : searchParams.StartDate;\n searchParams.FinalDate = searchParams.FinalDate ? moment(searchParams.FinalDate).format('DD/MM/YYYY') : searchParams.FinalDate;\n\n return searchParams;\n }\n\n function copy(value) {\n return !value ? null : angular.copy(value);\n }\n\n function search(page, max) {\n vm.searchParams.Page = page;\n vm.searchParams.MaxPerPage = max;\n vm.search();\n }\n\n function init() {\n SourcingService.loadProfileContractModules(vm, $scope)\n .then(function () {\n vm.disableExport = !vm.profile.CanExport;\n if (vm.profile.CanView && SourcingService.hasApprovePermission(vm)) {\n vm.search();\n } else {\n $state.go('not-authorized', {}, {});\n }\n })\n .catch(function (error) {\n var msg = error.data && error.data.Message ? error.data.Message : $filter('translate')('error.contract.search');\n ToastUtil.showToastMessage($translate.instant(msg), ToastUtil.ToastType.ERROR);\n });\n\n Idle.unwatch();\n\n setDataRequestInterval();\n }\n\n function validateExportPermission() {\n if (!vm.profile.CanExport) {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n return false;\n }\n\n return true;\n }\n\n function generateCharDataYear() {\n var contracts = angular.copy(vm.contracts);\n\n var data = contracts.map(function (item) {\n return [item[\"P1\"], item[\"P2\"], item[\"P3\"], item[\"P4\"], item[\"P5\"], item[\"P6\"], item[\"P7\"], item[\"P8\"], item[\"P9\"], item[\"P10\"], item[\"P11\"], item[\"P12\"]];\n });\n vm.labels = [\n $translate.instant('contract.month.jan'), $translate.instant('contract.month.fev'),\n $translate.instant('contract.month.mar'), $translate.instant('contract.month.apr'),\n $translate.instant('contract.month.may'), $translate.instant('contract.month.jun'),\n $translate.instant('contract.month.jul'), $translate.instant('contract.month.aug'),\n $translate.instant('contract.month.sep'), $translate.instant('contract.month.oct'),\n $translate.instant('contract.month.nov'), $translate.instant('contract.month.dec')];\n vm.series = generateSeries(contracts);\n vm.data = data;\n\n vm.lineOptions.title.text = $translate.instant(\"contract.change.view.graphic.year.title\") + \" FY \" + vm.searchParams.StartYear + \" x YTD \" + vm.searchParams.EndYear;\n vm.lineOptions.scales.xAxes[0].ticks.display = true;\n vm.lineOptions.tooltips.intersect = true;\n }\n\n vm.downloadChart = function (canvasChartId) {\n\n\n var d = (canvasChartId === 'canvasChartYear') ? \"chartToExport\":canvasChartId;\n\n html2canvas(document.getElementById(d), {\n onrendered: function (canvas) {\n // document.body.appendChild(canvas);\n\n var date = moment().format(\"DDMMYYYY_HHmmss\");\n var file_name = '';\n var canvasChartElement = canvas;\n var imgChartYear = canvasChartElement.toDataURL(\"image/png\");\n var downloadChart = document.createElement(\"a\");\n\n if (canvasChartId === \"canvasChartYear\") {\n file_name = $translate.instant(\"contract.change.view.graphic.year.title\") + \" FY \" + vm.searchParams.StartYear + \" x YTD \" + vm.searchParams.EndYear + \" - \" + date + \".png\";\n } else {\n file_name = $translate.instant(\"contract.change.view.graphic.month.title\") + \" - \" + date + \".png\";\n }\n\n downloadChart.href = imgChartYear;\n downloadChart.target = \"_blank\";\n downloadChart.download = file_name;\n downloadChart.click();\n downloadChart.remove();\n\n }\n });\n }\n\n function generateCharDataMonth() {\n var contracts = angular.copy(vm.contracts);\n vm.labels = [\n $translate.instant('contract.month.jan'), $translate.instant('contract.month.fev'),\n $translate.instant('contract.month.mar'), $translate.instant('contract.month.apr'),\n $translate.instant('contract.month.may'), $translate.instant('contract.month.jun'),\n $translate.instant('contract.month.jul'), $translate.instant('contract.month.aug'),\n $translate.instant('contract.month.sep'), $translate.instant('contract.month.oct'),\n $translate.instant('contract.month.nov'), $translate.instant('contract.month.dec')];\n vm.GraphicMonthYears = [];\n var grouppedByYear = contracts.groupBy('year');\n\n for (var key in grouppedByYear) {\n\n var graphicMonthYear = $filter('filter')(contracts, { year: key });\n\n vm.series = graphicMonthYear.map(function (item) {\n return item[\"vendor\"] + ' / ' + item[\"year\"];\n });\n\n var dataValues = graphicMonthYear.map(function (item) {\n return [item[\"P1\"], item[\"P2\"], item[\"P3\"], item[\"P4\"], item[\"P5\"], item[\"P6\"], item[\"P7\"], item[\"P8\"], item[\"P9\"], item[\"P10\"], item[\"P11\"], item[\"P12\"]];\n });\n\n var vendorData = [];\n var j = 0;\n\n for (var i = 0; i < 12; i++) {\n vendorData[i] = [];\n for (var k = 0; k < dataValues.length; k++) {\n vendorData[i][k] = dataValues[k][j];\n }\n\n j++;\n }\n\n vm.data = vendorData;\n vm.lineOptions.title.text = key + \" - \" + $translate.instant(\"contract.change.view.graphic.month.title\");\n vm.lineOptions.scales.xAxes[0].ticks.display = true;\n vm.lineOptions.scales.xAxes[0].ticks.suggestedMin = 0;\n vm.lineOptions.scales.xAxes[0].ticks.beginAtZero = true;\n vm.lineOptions.tooltips.intersect = false;\n\n vm.GraphicMonthYears.push({\n HEADER: key,\n labels: angular.copy(vm.labels),\n series: angular.copy(vm.series),\n data: angular.copy(dataValues),\n lineOptions: angular.copy(vm.lineOptions)\n });\n }\n }\n\n function generateSeries(contracts) {\n return Array.from(new Set(contracts.map(function (contracts) {\n return contracts.year;\n })));\n }\n\n function getDefaultLanguage() {\n return $window.localStorage.defaultLanguage;\n }\n\n function setDataRequestInterval() {\n dataRefreshInterval = 0;\n }\n\n $scope.$on('$destroy', function () {\n Idle.watch();\n\n if (dataRefreshInterval) {\n $interval.cancel(dataRefreshInterval);\n }\n });\n\n $scope.$watch(getDefaultLanguage, function () {\n if (vm.searchParams.View === 'chartYear') {\n generateCharDataYear();\n } else if (vm.searchParams.View === 'chartMonth') {\n generateCharDataMonth();\n }\n });\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('ComponentRemarkController', ComponentRemarkController)\n .directive('componentRemark', ComponentRemarkDirective);\n\n function ComponentRemarkDirective() {\n return {\n bindToController: true,\n restrict: 'E',\n replace: true,\n templateUrl: \"app/sourcing/component_development/component-remark.html\",\n controllerAs: 'ctrl',\n controller: 'ComponentRemarkController'\n };\n\n }\n /* @ngInject */\n function ComponentRemarkController($scope) {\n var vm = this;\n vm.value = \"\";\n vm.remarkInvalid = false;\n\n vm.getSize = function () {\n return $scope.parentDialogSize;\n };\n\n vm.isConfirmDisabled = function () {\n return !vm.value || vm.value.length < 3;\n };\n\n vm.close = function () {\n $scope.$close('cancel');\n $scope.$dismiss();\n };\n\n vm.confirm = function () {\n if(vm.value === null || angular.isUndefined(vm.value) || vm.value === \"\"){\n vm.remarkInvalid = true;\n return;\n }\n $scope.parentDialog(vm.value);\n $scope.$close('ok');\n };\n\n vm.onRemarkChanged = function(){\n vm.remarkInvalid = false;\n }\n\n }\n})();\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(SourcingTranslate);\n\n function SourcingTranslate($translateProvider) {\n $translateProvider.translations('en', {\n 'component.development.identification': 'Component Development Identification',\n 'new.title.component.development': 'New Component Development',\n 'title.component.development': 'Component Development',\n 'component.development.approved.error': 'It is necessary to close the ICQ stage to approve the component.',\n 'component.development.approved.supplierApprovalSheet.error': 'It is necessary Review ON to approve the component.',\n 'component.development.id.label': 'Component ID: ',\n 'component.development.id': 'ID',\n 'component.development.partnumber': 'Part Number',\n 'component.development.current.step': 'Current Phase',\n 'component.development.spent.days': 'Days in Phase',\n 'component.development.department': 'Department',\n 'component.development.department.area': 'Department/Area',\n 'component.development.requester': 'Requester',\n 'component.development.sourcing.responsible': 'Sourcing Responsible',\n 'component.development.vendor': 'Vendor',\n 'component.development.project': 'Project',\n 'component.development.status': 'Status',\n 'component.development.status.inprogress': 'In Progress',\n 'component.development.status.onhold': 'On Hold',\n 'component.development.status.approved': 'Approved',\n 'component.development.status.reject': 'Reject',\n 'component.development.status.completed': 'Completed',\n 'component.development.status.canceled': 'Canceled',\n 'component.development.step.status.approved': 'Approved',\n 'component.development.step.status.inprogress': 'In Progress',\n 'component.development.step.status.closed': 'Closed',\n 'component.development.step.status.reject': 'Reject',\n 'component.development.placehoder.name': 'Search By Name',\n 'component.development.placehoder.part.number': 'Part Number',\n 'component.development.placehoder.id': 'Search By Id',\n 'error.component.development.search': 'An error occurred when trying to load a list of Components Development.',\n 'component.development.remove.success': 'Component Development was successfully removed',\n 'component.development.remove.error.conflict': 'The Component Development can not be removed because it is being used by the system.',\n 'component.development.remove.error': 'An error occurred when trying to remove the Component Development',\n 'label.new.component.development': 'New Component Development',\n 'component.development.placeholder.id': 'Search by ID',\n 'component.development.placeholder.status': 'Search by status',\n 'component.development.list.notfound': 'No Component Development found',\n 'component.development.placeholder.vendor': 'Search by code SAP or vendor name',\n 'component.development.update.success': 'Component Development was successfully updated',\n 'component.development.save.success': 'Component Development was successfully saved',\n 'label.edit.component.development': 'Component Development Editing',\n 'component.development.meterial.description': 'Material Description',\n 'component.development.price.kpcs': 'Price/Kpcs (USD)',\n 'component.development.vendorprice.duplicated': 'An vendor already exists.',\n 'component.development.vendor.price': 'Vendors - Price/Kpcs (USD)',\n 'component.development.values.empty': 'An Vendor / Price/Kpcs is required.',\n 'component.development.okNok': 'OK / NOK',\n 'component.development.remark': 'Remark',\n 'component.development.labtest.ecr.mco.title': 'Identification (Lab Tests, ECR and MCO)',\n 'component.development.labtest': 'Lab Tests',\n 'component.development.labtest.information': 'Samples must be submitted to lab tests to confirm raw material in accordance with specification.',\n 'component.development.ecr': 'ECR',\n 'component.development.eco': 'ECO',\n 'component.development.ecr.information': 'ECR must be created in engineering system.',\n 'component.development.number': 'Number',\n 'component.development.open.date': 'Opening Date',\n 'component.development.open.by': 'Opened By',\n 'component.development.mco': 'MCO',\n 'component.development.openingdate.error': 'The Opening Date from #type must be less than or equal today.',\n 'component.development.remark.title': 'Cancellation Remark',\n 'component.development.vendorprice.vendor.required': 'Vendor is required',\n 'component.development.vendorprice.price.required': 'Price is required',\n 'component.tab.identification': 'Identification',\n 'component.tab.iqc': 'IQC',\n 'component.tab.trail.run': 'Trial Run',\n 'component.tab.pilot': 'Pilot Run',\n 'component.tab.test.plan': 'Test Plan',\n 'component.sample.title': 'Sample Received',\n 'component.sample.date.label': 'Received Date',\n 'component.approval.iqc.title': 'IQC Approval',\n 'component.approval.trail.run.title': 'Trial Run Approval',\n 'component.approval.pilot.title': 'Pilot Approval',\n 'component.approval.test.plan.title': 'Test Plan Approval',\n 'component.approval.date.label': 'Approval Date',\n 'component.approval.participants.label': 'List of Participants',\n 'component.step.status.inprogress': 'In progress',\n 'component.step.status.rejected': 'Rejected',\n 'component.step.status.approved': 'Approved',\n 'component.step.reject.button.label': 'Reject',\n 'component.step.close.button.label': 'Close',\n 'component.step.approve.button.label': 'Approve',\n 'component.sample.quantity': 'Quantity',\n 'component.sample.trackingnumber': 'Tracking Number',\n 'component.sample.componentengineer': 'Global Component Engineer',\n 'component.sample.sourcingengineer': 'Global Sourcing Engineer',\n 'component.sample.receiver': 'Delivered to',\n 'component.sample.report.received.label': 'Report Received',\n 'component.step.update.success': 'Component Development Step was successfully updated',\n 'component.step.save.success': 'Component Development Step was successfully saved',\n 'component.step.closed.success': 'Component Development Step was successfully closed',\n 'component.step.remark.dialog.title': 'Alteration Remark',\n 'component.step.closed.remark': 'Do you wish to close this step?',\n 'component.step.closed.remark.show': 'Closing Remark',\n 'component.step.reject.last': 'This is the last available round. Do you wish to continue?',\n 'componentstep.type.unavailable': 'Step $1 is currently unavailable.',\n 'error.component.step': 'An error occurred while trying to load the component step.',\n 'component.step.participants.required': 'You need to add at least 01 participant.',\n 'component.approval.testplan.senddate.label': 'Send Date',\n 'component.approval.testplan.sampleDateLabel.label': 'Send Date Approval',\n 'component.approval.testplan.deadline.label': 'Deadline to conclusion',\n 'component.step.approval.user.required': 'Approver required',\n 'component.sample.testplan.title': 'Sample Sent',\n 'component.development.dueDate': 'Due Date',\n 'component.development.sd': 'SD #',\n 'component.development.sd.hint': 'Development / ID request number SQMS approval',\n 'component.development.priority': 'Priority',\n 'component.development.priority.low': 'Low',\n 'component.development.priority.medium': 'Medium',\n 'component.development.priority.high': 'High',\n 'component.development.supplierapprovalsheet': 'Review',\n 'component.development.reviewed': 'Reviewed',\n 'component.development.pending': 'Pending',\n 'component.development.commodity': 'Commodity',\n 'component.development.typematerial': 'Type Material',\n 'component.development.developmentreason': 'Development Reason',\n 'component.development.report': 'Report_Component_development',\n 'component.step.dates.invalid': 'Approval Date is less than Received Date',\n 'component.step.dates.test_plan.invalid': 'Send Date is less than Send Date Approval',\n 'iqc.approved.by': 'Approved By',\n 'component.step.required.fields': 'Enter required tab fields: ',\n 'component.send.email': 'Notification submission',\n 'component.label.no': 'No',\n 'component.label.yes': 'Yes',\n 'component.placeholder.supplierapprovalsheet': 'Search by Status Review',\n 'component.export.label': {\n btn: {\n xls: 'Exportar planilha',\n pdf: 'Exportar PDF'\n },\n idenfication: {\n all: 'Identification',\n summary: 'Summary',\n partNumber: 'PART NUMBER',\n createdBy: 'CREATED BY',\n createdDate: 'CREATED DATE',\n updatedBy: 'UPDATED BY',\n updatedDate: 'UPDATED DATE',\n dueDate: 'DUE DATE',\n sd: 'SD #',\n priority: 'PRIORITY',\n commodity: 'COMMODITY',\n review: 'REVIEW',\n typeMaterial: 'TYPE MATERIAL',\n developmentReason: 'DEVELOPMENT REASON',\n status: 'STATUS',\n department: 'DEPARTMENT',\n requester: 'REQUESTER',\n sourcingResponsible: 'SOURCING RESPONSIBLE',\n project: 'PROJECT',\n materialDescription: 'MATERIAL DESCRIPTION',\n remark: 'REMARKS',\n vendorAndPrice: 'VENDOR AND PRICE/KPCS',\n labTests: 'LAB TESTS',\n ecr: 'ECR',\n mco: 'MCO',\n eco: 'ECO'\n },\n stage: {\n all: 'Stage',\n round: 'ROUND',\n status: 'STATUS',\n qtyDaysInPhase: 'QTY DAYS IN PHASE',\n receiptDate: 'RECEIPT DATE',\n qtySample: 'QTY SAMPLE',\n trackingNumber: 'TRACKING NUMBER',\n globalComp: 'GLOBAL COMP. ENGINEER',\n globalSourc: 'GLOBAL SOURC. ENGINEER',\n deliveredTo: 'DELIVERED TO'\n },\n stageApproval: {\n all: 'Stage Approval',\n approvalDate: 'APPROVAL DATE',\n approvedBy: 'APPROVED BY',\n participants: 'PARTICIPANTS (EXCEPT IQC)',\n trackingNumber: 'TRACKING NUMBER APPROVAL TEST PLAN',\n qty: 'QTY (EXCLUSIVE TEST PLAN)',\n deadline: 'DEADLINE TO CONCLUSION (EXCLUSIVE TEST PLAN)',\n globalComp: 'GLOBAL COMPONENT ENGINEER (EXCLUSIVE TEST PLAN)'\n }\n }\n });\n $translateProvider.translations('pt', {\n 'component.development.identification': 'Identificação de Desenvolvimento de Componente',\n 'new.title.component.development': 'Novo Desenvolvimento de Componente',\n 'title.component.development': 'Desenvolvimento de Componente',\n 'component.development.approved.error': 'É necessario fechar etapa de ICQ para realizar aprovação do componente.',\n 'component.development.approved.supplierApprovalSheet.error': 'É necessario Revisado ON para realizar aprovação do componente.',\n 'component.development.id.label': 'ID Componente:',\n 'component.development.id': 'ID',\n 'component.development.partnumber': 'Número da Peça',\n 'component.development.current.step': 'Etapa atual',\n 'component.development.spent.days': 'Dias gastos',\n 'component.development.department': 'Departamento',\n 'component.development.department.area': 'Departamento/Área',\n 'component.development.requester': 'Solicitante',\n 'component.development.sourcing.responsible': 'Responsável do Sourcing',\n 'component.development.vendor': 'Fornecedor',\n 'component.development.project': 'Projeto',\n 'component.development.status': 'Situação',\n 'component.development.status.inprogress': 'Em Progresso',\n 'component.development.status.onhold': 'Em Espera',\n 'component.development.status.approved': 'Aprovado',\n 'component.development.status.reject': 'Rejeitado',\n 'component.development.status.canceled': 'Cancelado',\n 'component.development.step.status.approved': 'Aprovado',\n 'component.development.step.status.inprogress': 'Em Progresso',\n 'component.development.step.status.closed': 'Fechado',\n 'component.development.step.status.reject': 'Rejeitado',\n 'component.development.placehoder.name': 'Busca Por Nome',\n 'component.development.placehoder.part.number': 'Número da Peça',\n 'component.development.placehoder.id': 'Busca Por Id',\n 'component.development.placeholder.status': 'Busca Pela Situação',\n 'component.step.closed.remark.show': 'Observação final',\n 'component.development.placeholder.vendor': 'Busca pelo código SAP ou nome do fornecedor',\n 'error.component.development.search': 'Um erro ocorreu ao tentar carregar a lista de Desenvolvimento de Componente.',\n 'component.development.remove.success': 'Desenvolvimento de Componente foi removido com sucesso',\n 'component.development.remove.error.conflict': 'O Desenvolvimento de Componente não pode ser removido pois está sendo usado pelo sistema.',\n 'component.development.remove.error': 'Um erro ocorreu ao tentar remover o Desenvolvimento de Componente',\n 'label.new.component.development': 'Novo Desenvolvimento de Componente',\n 'component.development.list.notfound': 'Nenhum Desenvolvimento de Componente encontrado',\n 'component.development.update.success': 'Desenvolvimento de Componente foi atualizado com sucesso.',\n 'component.development.save.success': 'Desenvolvimento de Componente foi salvo com sucesso.',\n 'label.edit.component.development': 'Edição de Desenvolvimento de Componente',\n 'component.development.meterial.description': 'Descrição do Material',\n 'component.development.price.kpcs': 'Preço/Kpcs (USD)',\n 'component.development.vendorprice.duplicated': 'Já existe o fornecedor informado.',\n 'component.development.vendor.price': 'Fornecedores - Preço/Kpcs (USD)',\n 'component.development.values.empty': 'Ao menos um Fornecedor / Preço/Kpcs é obrigatório.',\n 'component.development.okNok': 'OK / NOK',\n 'component.development.remark': 'Observação',\n 'component.development.labtest.ecr.mco.title': 'Identificação (Lab Tests, ECR and MCO)',\n 'component.development.labtest': 'Testes Laboratoriais',\n 'component.development.labtest.information': 'As amostras devem ser submetidas a testes de laboratório para confirmar a matéria prima de acordo com a especificação.',\n 'component.development.ecr': 'ECR',\n 'component.development.eco': 'ECO',\n 'component.development.ecr.information': 'ECR precisa ser criado no sistema de engenharia.',\n 'component.development.number': 'Número',\n 'component.development.open.date': 'Data de Abertura',\n 'component.development.open.by': 'Aberto Por',\n 'component.development.mco': 'MCO',\n 'component.development.openingdate.error': 'A Data de Abertura de #type deve ser menor ou igual a data de hoje.',\n 'component.development.remark.title': 'Observação de Cancelamento',\n 'component.development.vendorprice.vendor.required': 'Fornecedor é obrigatório',\n 'component.development.vendorprice.price.required': 'Preço é obrigatório',\n 'component.tab.identification': 'Identificação',\n 'component.tab.iqc': 'IQC',\n 'component.tab.trail.run': 'Trial Run',\n 'component.tab.pilot': 'Piloto',\n 'component.tab.test.plan': 'Plano de Teste',\n 'component.sample.title': 'Amostra Recebida',\n 'component.sample.date.label': 'Data Recebida',\n 'component.approval.iqc.title': 'Aprovação IQC',\n 'component.approval.trail.run.title': 'Aprovação Trial Run',\n 'component.approval.pilot.title': 'Aprovação Piloto',\n 'component.approval.test.plan.title': 'Aprovação Plano de Teste',\n 'component.approval.date.label': 'Data de Aprovação',\n 'component.approval.participants.label': 'Lista de Participantes',\n 'component.step.status.inprogress': 'Em andamento',\n 'component.step.status.rejected': 'Rejeitado',\n 'component.step.status.approved': 'Approvado',\n 'component.step.reject.button.label': 'Rejeitar',\n 'component.step.close.button.label': 'Fechar',\n 'component.step.approve.button.label': 'Aprovar',\n 'component.sample.quantity': 'Quantidade',\n 'component.sample.trackingnumber': 'Número de Rastreio',\n 'component.sample.componentengineer': 'Engenheiro Global de Componente',\n 'component.sample.sourcingengineer': 'Engenheiro Global de Fornecimento',\n 'component.sample.receiver': 'Entregue para',\n 'component.sample.report.received.label': 'Relatório Recebido',\n 'component.step.update.success': 'Etapa do Desenvolvimento de Componente atualizada com sucesso.',\n 'component.step.save.success': 'Etapa do Desenvolvimento de Componente salva com sucesso.',\n 'component.step.closed.success': 'Etapa do Desenvolvimento de Componente fechada com sucesso.',\n 'component.step.remark.dialog.title': 'Observação de Alteração',\n 'component.step.closed.remark': 'Deseja fechar este passo?',\n 'component.step.reject.last': 'Este é o último round disponível. Deseja continuar?',\n 'componentstep.type.unavailable': 'A etapa $1 está indisponível no momento.',\n 'error.component.step': 'Ocorreu um erro ao tentar carregar a etapa de desenvolvimento.',\n 'component.step.participants.required': 'Você precisa adicionar ao menos um participante.',\n 'component.approval.testplan.senddate.label': 'Data de Envio',\n 'component.approval.testplan.sampleDateLabel.label': 'Data de Envio Aprovação',\n 'component.approval.testplan.deadline.label': 'Data Limite para Conclusão',\n 'component.step.approval.user.required': 'O usuário aprovador é obrigatório.',\n 'component.sample.testplan.title': 'Amostra Enviada',\n 'component.development.dueDate': 'Data de Vencimento',\n 'component.development.sd': 'SD #',\n 'component.development.sd.hint': 'Número da solicitação de Desenvolvimento/ID Aprovação SQMS',\n 'component.development.priority': 'Prioridade',\n 'component.development.priority.low': 'Baixa',\n 'component.development.priority.medium': 'Média',\n 'component.development.priority.high': 'Alta',\n 'component.development.supplierapprovalsheet': 'Revisado',\n 'component.development.pending': 'Pendente',\n 'component.development.commodity': 'Mercadoria',\n 'component.development.typematerial': 'Tipo de Material',\n 'component.development.developmentreason': 'Razão de Desenvolvimento',\n 'component.development.report': 'Relatório_Desenvolvimento_Component',\n 'component.step.dates.invalid': 'Data de Aprovação menor que Data Recebida',\n 'component.step.dates.test_plan.invalid': 'Data de Envio menor que Data de Envio Aprovação',\n 'iqc.approved.by': 'Aprovado por',\n 'component.step.required.fields': 'Informe os campos obrigatórios da aba: ',\n 'component.send.email': 'Envio de notificação',\n 'component.label.no': 'Não',\n 'component.label.yes': 'Sim',\n 'component.development.reviewed': 'Revisado',\n 'component.placeholder.supplierapprovalsheet': 'Busca por Situação Revisado',\n 'component.export.label': {\n btn: {\n xls: 'Exportar planilha',\n pdf: 'Exportar PDF'\n },\n idenfication: {\n all: 'Identificação',\n summary: 'Sumário',\n partNumber: 'PART NUMBER',\n createdBy: 'CRIADO POR',\n createdDate: 'DATA DE CRIAÇÃO',\n updatedBy: 'ATUALIZADO POR',\n updatedDate: 'DATA DE ATUALIZAÇÃO',\n dueDate: 'DATA DE VENCIMENTO',\n sd: 'SD #',\n priority: 'PRIORIDADE',\n commodity: 'COMMODITY',\n review: 'REVISADO',\n typeMaterial: 'TIPO DE MATERIAL',\n developmentReason: 'RAZÃO DO DESENVOLVIMENTO',\n status: 'SITUAÇÃO',\n department: 'DEPARTAMENTO',\n requester: 'SOLICITANTE',\n sourcingResponsible: 'RESPONSÁVEL SOURCING',\n project: 'PROJETO',\n materialDescription: 'DESCRIÇÃO DO MATERIAL',\n remark: 'OBSERVAÇÃO',\n vendorAndPrice: 'FORNECEDOR E PREÇO/KPCS',\n labTests: 'TESTES LAB',\n ecr: 'ECR',\n mco: 'MCO',\n eco: 'ECO'\n },\n stage: {\n all: 'Etapa',\n round: 'ROUND',\n status: 'SITUAÇÃO',\n qtyDaysInPhase: 'QTD DE DIAS NA ETAPA',\n receiptDate: 'DATA RECEBIDA',\n qtySample: 'QUANTIDADE DA AMOSTRA',\n trackingNumber: 'TRACKING NUMBER',\n globalComp: 'ENG. GLOBAL DE COMPONENTE',\n globalSourc: 'ENG. GLOBAL DE FORNECIMENTO',\n deliveredTo: 'ENTREGUE PARA'\n },\n stageApproval: {\n all: 'Etapa de Aprovação',\n approvalDate: 'DATA DE APROVAÇÃO',\n approvedBy: 'APROVADO POR',\n participants: 'PARTICIPANTES (EXCETO IQC)',\n trackingNumber: 'TRACKING NUMBER APPROVAL TEST PLAN',\n qty: 'QTD (EXCLUSIVO DO PLANO DE TESTE)',\n deadline: 'PRAZO PARA CONCLUSÃO (EXCLUSIVO DO PLANO DE TESTE)',\n globalComp: 'ENG. GLOBAL DE COMPONENTE (EXCLUSIVO DO PLANO DE TESTE)'\n }\n }\n });\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .factory('ComponentDevelopmentService', ComponentDevelopmentService);\n\n var BASE = '/componentDevelopment/';\n\n function ComponentDevelopmentService($injector, $q, ConfigurationService, ComponentStepService, $state) {\n var ComponentDevelopmentStatus = null;\n var Status = {\n IN_PROGRESS: {\n Id: 1,\n Title: 'component.development.status.inprogress'\n },\n ON_HOLD: {\n Id: 5,\n Title: 'component.development.status.onhold'\n },\n APPROVED: {\n Id: 2,\n Title: 'component.development.status.approved'\n },\n REJECT: {\n Id: 3,\n Title: 'component.development.status.reject'\n },\n CANCELED: {\n Id: 4,\n Title: 'component.development.status.canceled'\n }\n };\n\n return {\n Status: Status,\n\n search: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + \"list\", {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n export: function (filter, language) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + 'export/' + language,\n {\n params : filter,\n responseType: 'arraybuffer'\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n }\n , function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n exportPDF: function (filter, language) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + 'export-pdf/' + language,\n {\n params : filter,\n responseType: 'arraybuffer'\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n }\n , function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getById: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + 'byId/' + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getLastStepApproved: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + 'byId/' + id + '/lastStepApproved', {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getStepsCounts: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + 'byId/' + id + '/stepsCounts/', {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n save: function (component) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + BASE, component, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n delete: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + BASE + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n update: function (id, component) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.patch(ConfigurationService.getServiceHost() + BASE + id, component)\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n goToComponentDevelopmentList: function(){\n $state.go('component-development-list');\n },\n\n setComponentDevelopmentStatus: function (status) {\n ComponentDevelopmentStatus = status;\n },\n\n getComponentDevelopmentStatus: function () {\n return ComponentDevelopmentStatus;\n }\n }\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(ComponentDevelopmentRoute);\n\n function ComponentDevelopmentRoute($stateProvider) {\n $stateProvider.state('component-development-list', {\n url: '/sourcing/component',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/sourcing/component_development/component-development-list.html',\n controller: 'ComponentDevelopmentListController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.sourcing'\n },\n authorize: true\n });\n\n $stateProvider.state('component-development-create', {\n url: '/sourcing/component/create',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/sourcing/component_development/component-development-edit.html',\n controller: 'ComponentDevelopmentEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.sourcing'\n },\n authorize: true\n });\n\n $stateProvider.state('component-development-edit', {\n url: '/sourcing/component/edit/:Id',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/sourcing/component_development/component-development-edit.html',\n controller: 'ComponentDevelopmentEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.sourcing'\n },\n authorize: true\n });\n\n $stateProvider.state('component-development-iqc', {\n url: '/sourcing/component/edit/:Id/iqc',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/sourcing/component_development/steps/component-step.html',\n controller: 'ComponentStepController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n titleLabel: 'new.title.component.development',\n componentStepType: 1\n },\n authorize: true\n });\n\n $stateProvider.state('component-development-trail-run', {\n url: '/sourcing/component/edit/:Id/trail-run',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/sourcing/component_development/steps/component-step.html',\n controller: 'ComponentStepController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n titleLabel: 'new.title.component.development',\n componentStepType: 2\n },\n authorize: true\n });\n\n $stateProvider.state('component-development-pilot', {\n url: '/sourcing/component/edit/:Id/pilot',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/sourcing/component_development/steps/component-step.html',\n controller: 'ComponentStepController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n titleLabel: 'new.title.component.development',\n componentStepType: 3\n },\n authorize: true\n });\n\n $stateProvider.state('component-development-test-plan', {\n url: '/sourcing/component/edit/:Id/test-plan',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/sourcing/component_development/steps/component-step.html',\n controller: 'ComponentStepController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n titleLabel: 'new.title.component.development',\n componentStepType: 4\n },\n authorize: true\n });\n }\n})();\n/*eslint no-undef: 0*/\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('ComponentDevelopmentListController', ComponentDevelopmentListController);\n\n function ComponentDevelopmentListController($scope, $translate, $filter, $state, ComponentDevelopmentService, ToastUtil, moment, SourcingService, $document, ComponentStepService, $uibModal) {\n\n var vm = this;\n\n var HTTP_STATUS_CONFLICT = 409;\n\n vm.components = [];\n\n vm.statusList = ComponentDevelopmentService.Status;\n\n vm.itensPerPageList = [\n {name: '5', value: 5, before: 0, after: 6},\n {name: '10', value: 10, before: 5, after: 11},\n {name: '20', value: 20, before: 10, after: 21},\n {name: '30', value: 30, before: 20, after: 31},\n {name: '40', value: 40, before: 30, after: 41},\n {name: '50', value: 50, before: 40, after: 51}];\n\n vm.itemPerPage = vm.itensPerPageList[0];\n\n vm.totalLista = 0;\n\n vm.disableExport = true;\n\n vm.searchParams = {\n Id: '',\n PartNumber: '',\n AreaId: '',\n Requester: '',\n Responsible: '',\n Vendor: '',\n ProjectId: '',\n Status: '-1',\n DevelopmentReason: '',\n StartDueDate: null,\n EndDueDate: null,\n Page: 1,\n MaxPerPage: vm.itemPerPage.value\n };\n\n vm.profile = {\n CanAdd: false,\n CanEdit: false,\n CanDelete: false,\n CanView: false,\n CanApprove: false,\n CanExport: false,\n CanConsult: false\n };\n\n vm.extraFilters = {\n FilterByCodeSAPOrTitle: true\n }\n\n vm.clearSearchFields = function () {\n vm.searchParams = {\n Id: '',\n PartNumber: '',\n AreaId: '',\n Requester: '',\n Responsible: '',\n Vendor: '',\n ProjectId: '',\n Status: '-1',\n DevelopmentReason: '',\n StartDueDate: null,\n EndDueDate: null,\n Page: 1,\n MaxPerPage: vm.itemPerPage.value\n };\n }\n\n vm.shouldShow = function (item) {\n if (vm.totalLista > 0 && item != undefined) {\n return vm.totalLista >= item.value || (vm.totalLista < item.after && vm.totalLista > item.before);\n }\n return false;\n }\n\n vm.changeItemsPerPage = function () {\n if (vm.itemPerPage == null) {\n vm.itemPerPage = vm.itensPerPageList[0];\n }\n search(1, vm.itemPerPage.value);\n };\n\n vm.onPageChange = function () {\n search(vm.searchParams.Page, vm.searchParams.MaxPerPage);\n };\n\n vm.searchComponents = function () {\n vm.itemPerPage = vm.itensPerPageList[0];\n search(1, vm.itemPerPage.value);\n }\n\n vm.search = function () {\n if (sessionStorage.getItem(\"searchParams\")) {\n vm.searchParams = JSON.parse(sessionStorage.getItem(\"searchParams\"));\n sessionStorage.removeItem(\"searchParams\");\n\n vm.searchParams.StartDueDate = formatDateToViewModel(vm.searchParams.StartDueDate);\n vm.searchParams.EndDueDate = formatDateToViewModel(vm.searchParams.EndDueDate);\n\n vm.itensPerPageList.forEach(function (element) {\n if (element.value == vm.searchParams.MaxPerPage) {\n vm.itemPerPage = element;\n return;\n }\n });\n }\n var searchParams = buildSearchParam();\n\n ComponentDevelopmentService.search(searchParams)\n .then(function (response) {\n vm.components = response.resultList;\n vm.totalLista = response.total;\n setViewModel();\n })\n .catch(function (error) {\n if (error && error.status) {\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"error.component.development.search\"), ToastUtil.ToastType.ERROR);\n }\n }\n });\n };\n\n vm.edit = function (id) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n SourcingService.editComponentDevelopment(id, vm.profile);\n };\n\n vm.createVendor = function () {\n $state.go('vendor-list', {});\n }\n\n vm.createVisit = function () {\n $state.go('visit-list', {});\n }\n\n vm.createMilestone = function () {\n $state.go('milestone-list'), {};\n }\n\n vm.createAvaliation = function () {\n $state.go('avaliation-list', {});\n }\n\n vm.createContract = function () {\n $state.go('contract-list', {});\n }\n\n vm.componentDevelopmentList = function () {\n $state.go('component-development-list', {});\n }\n\n vm.create = function () {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n SourcingService.createComponentDevelopment(vm);\n };\n\n vm.delete = function (id) {\n ComponentDevelopmentService.delete(id)\n .then(function () {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go($state.current, {}, {\n reload: true\n });\n ToastUtil.showToastMessage($translate.instant(\"component.development.remove.success\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(function (error) {\n if (error === 'not authorized') {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n } else {\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if (error.status === HTTP_STATUS_CONFLICT) {\n ToastUtil.showToastMessage($translate.instant(\"component.development.remove.error.conflict\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"component.development.remove.error\"), ToastUtil.ToastType.ERROR);\n }\n }\n\n });\n\n };\n\n function serialize(obj, prefix) {\n var str = [], p;\n for (p in obj) {\n if (obj.hasOwnProperty(p)) {\n var k = prefix ? prefix + \"[\" + p + \"]\" : p, v = obj[p];\n str.push((v !== null && typeof v === \"object\") ? serialize(v, k) : k + \"=\" + v);\n }\n }\n return str.join(\"&\");\n }\n\n vm.exportPdf = function (fields) {\n if (!vm.disableExport) {\n\n var searchParams = buildSearchParam();\n var params = Object.assign({}, searchParams, fields);\n\n vm.disableExport = true;\n\n ComponentDevelopmentService.exportPDF(params, $translate.use())\n .then(function (response) {\n var date = moment().format(\"DD_MM_YYYY_HH_mm_ss\");\n\n var newFIle = new Blob([response], {\n type: 'application/octet-stream'\n });\n var fileURL = URL.createObjectURL(newFIle);\n var a = $document[0].createElement(\"a\");\n $document[0].body.appendChild(a);\n a.style = \"display: none\";\n a.href = fileURL;\n a.download = $translate.instant('component.development.report') + \"_\" + date + \".pdf\";\n a.click();\n vm.disableExport = false;\n }).catch(function () {\n ToastUtil.showToastMessage($translate.instant(\"service.load.error\"), ToastUtil.ToastType.ERROR);\n vm.disableExport = false;\n });\n }\n }\n\n vm.exportXls = function (fields) {\n if (!vm.disableExport) {\n\n var searchParams = buildSearchParam();\n var params = Object.assign({}, searchParams, fields);\n\n vm.disableExport = true;\n\n ComponentDevelopmentService.export(params, $translate.use())\n .then(function (response) {\n var date = moment().format(\"DD_MM_YYYY_HH_mm_ss\");\n\n var newFIle = new Blob([response], {\n type: 'application/vnd.ms-excel'\n });\n var fileURL = URL.createObjectURL(newFIle);\n var a = $document[0].createElement(\"a\");\n $document[0].body.appendChild(a);\n a.style = \"display: none\";\n a.href = fileURL;\n a.download = $translate.instant('component.development.report') + \"_\" + date + \".xls\";\n a.click();\n vm.disableExport = false;\n\n }).catch(function () {\n ToastUtil.showToastMessage($translate.instant(\"service.load.error\"), ToastUtil.ToastType.ERROR);\n vm.disableExport = false;\n });\n }\n };\n\n vm.export = function (fields) {\n if (fields.pdf) {\n vm.exportPdf(fields)\n } else {\n vm.exportXls(fields)\n }\n };\n\n vm.openToExport = function () {\n if (!vm.disableExport) {\n var modalInstance = $uibModal.open({\n animation: true,\n size: 'lg',\n ariaLabelledBy: 'modal-title',\n ariaDescribedBy: 'modal-body',\n templateUrl: 'app/sourcing/component_development/component-development-export-modal.html',\n controller: 'ComponentDevelopmentExportModalController',\n controllerAs: 'ctrl'\n });\n\n modalInstance.result.then(function (options) {\n if (options) {\n vm.export(options)\n }\n });\n }\n }\n\n vm.getType = function (id) {\n return ComponentStepService.getTypeById(id);\n }\n\n function setViewModel() {\n if (vm.components) {\n for (var i = 0, len = vm.components.length; i < len; i++) {\n var component = vm.components[i];\n\n var status = resolveStatus(component.Status);\n component.StatusDescription = status.Title;\n component.StatusClass = status.ClassCss;\n\n if (angular.isUndefined(component.Vendor) || component.Vendor === null || component.Vendor === \"\") {\n component.Vendor = \"-\"\n }\n }\n }\n\n if (vm.components !== null && vm.components.length > 0) {\n vm.disableExport = !angular.copy(vm.profile.CanExport);\n } else {\n vm.disableExport = true;\n }\n }\n\n function buildSearchParam() {\n var searchParams = {\n Id: vm.searchParams.Id,\n PartNumber: vm.searchParams.PartNumber,\n AreaId: null,\n Requester: null,\n Responsible: null,\n Vendor: vm.searchParams.Vendor,\n ProjectId: null,\n Status: vm.searchParams.Status,\n DevelopmentReason: null,\n StartDueDate: null,\n EndDueDate: null,\n Supplierapprovalsheet: null,\n Page: vm.searchParams.Page,\n MaxPerPage: vm.searchParams.MaxPerPage\n };\n\n angular.forEach(searchParams, function (value, key) {\n searchParams[key] = copy(vm.searchParams[key]);\n });\n\n searchParams.AreaId = searchParams.AreaId ? searchParams.AreaId.Id : null;\n searchParams.ProjectId = searchParams.ProjectId ? searchParams.ProjectId.Id : null;\n searchParams.StartDueDate = searchParams.StartDueDate ? moment(searchParams.StartDueDate).format('DD/MM/YYYY') : searchParams.StartDueDate;\n searchParams.EndDueDate = searchParams.EndDueDate ? moment(searchParams.EndDueDate).format('DD/MM/YYYY') : searchParams.EndDueDate;\n\n return searchParams;\n }\n\n function copy(value) {\n return !value ? null : angular.copy(value);\n }\n\n function search(page, max) {\n vm.searchParams.Page = page;\n vm.searchParams.MaxPerPage = max;\n vm.search();\n }\n\n function init() {\n SourcingService.loadProfileComponentDevelopmentModules(vm, $scope)\n .then(function () {\n vm.profile = angular.copy(vm.profile);\n\n if (vm.profile.CanView) {\n vm.search();\n } else {\n $state.go('not-authorized', {}, {});\n }\n })\n .catch(function (error) {\n var msg = error.data && error.data.Message ? error.data.Message : $filter('translate')('error.component.development.search');\n ToastUtil.showToastMessage($translate.instant(msg), ToastUtil.ToastType.ERROR);\n });\n }\n\n function resolveStatus(status) {\n var result = {Title: '', ClassCss: ''};\n\n switch (status) {\n case vm.statusList.IN_PROGRESS.Id:\n result.ClassCss = 'label label-pending';\n result.Title = vm.statusList.IN_PROGRESS.Title;\n break;\n case vm.statusList.ON_HOLD.Id:\n result.ClassCss = 'label label-pending';\n result.Title = vm.statusList.ON_HOLD.Title;\n break;\n case vm.statusList.CANCELED.Id:\n result.ClassCss = 'label label-rejected';\n result.Title = vm.statusList.CANCELED.Title;\n break;\n case vm.statusList.APPROVED.Id:\n result.ClassCss = 'label label-approved';\n result.Title = vm.statusList.APPROVED.Title;\n break;\n case vm.statusList.REJECT.Id:\n result.ClassCss = 'label label-rejected';\n result.Title = vm.statusList.REJECT.Title;\n break;\n }\n\n return result;\n }\n\n function formatDateToViewModel(date) {\n if (date === undefined || date === null || date === \"\")\n return null;\n\n var momentDate = moment(date, 'YYYY/MM/DD');\n return new Date(momentDate.year(), momentDate.month(), momentDate.date());\n }\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('ComponentDevelopmentExportModalController', ComponentDevelopmentExportModalController);\n\n /** @ngInject */\n function ComponentDevelopmentExportModalController($uibModalInstance) {\n var vm = this;\n vm.allSelected = false;\n vm.summary = false;\n vm.options = {\n exportAll: false,\n exportSummary: false,\n identification: {\n partNumber: false,\n createdBy: false,\n createdDate: false,\n updatedBy: false,\n updatedDate: false,\n dueDate: false,\n sd: false,\n priority: false,\n commodity: false,\n review: false,\n typeMaterial: false,\n developmentReason: false,\n developmentStatus: false,\n department: false,\n requester: false,\n sourcingResponsible: false,\n project: false,\n materialDescription: false,\n remark: false,\n price: false,\n labTests: false,\n ecr: false,\n mco: false,\n eco: false\n },\n stage: {\n all: false,\n round: false,\n phaseStatus: false,\n qtyDaysInPhase: false,\n receiptDate: false,\n qtySample: false,\n trackingNumber: false,\n globalCompEng: false,\n globalSourcEng: false,\n deliveredTo: false\n },\n stageApproval: {\n all: false,\n approvalDate: false,\n approvalBy: false,\n participants: false,\n trackingNumberApproval: false,\n qty: false,\n deadline: false,\n globalCompEngExclusive: false\n }\n };\n vm.optionsInitialData = angular.copy(vm.options);\n vm.export = function () {\n vm.options.exportAll = vm.allSelected;\n vm.options.exportSummary = vm.summary;\n $uibModalInstance.close(vm.options);\n };\n\n vm.cancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n vm.toggleAll = function () {\n vm.toggleSection('identification', true);\n vm.toggleSection('stage', true);\n vm.toggleSection('stageApproval', true);\n vm.options.exportSummary = false;\n vm.summary = false;\n };\n\n vm.toggleSummary = function () {\n vm.options = angular.copy(vm.optionsInitialData);\n vm.allSelected = false;\n vm.options.exportAll = false;\n vm.options.identification.partNumber = true;\n vm.options.identification.materialDescription = true;\n vm.options.identification.dueDate = true;\n vm.options.identification.sd = true;\n vm.options.identification.priority = true;\n vm.options.identification.developmentReason = true;\n vm.options.identification.developmentStatus = true;\n vm.options.identification.sourcingResponsible = true;\n vm.options.identification.project = true;\n vm.options.identification.project = true;\n vm.options.stage.phaseStatus = true;\n vm.options.identification.ecr = true;\n vm.options.identification.mco = true;\n vm.options.identification.eco = true;\n };\n\n vm.sectionOptionClicked = function () {\n vm.allSelected = true;\n for (var section in vm.options) {\n for (var option in vm.options[section]) {\n if (option !== 'all' && !vm.options[section][option]) {\n vm.allSelected = false\n }\n }\n vm.checkToggleSection(section)\n }\n };\n\n vm.checkToggleSection = function (section) {\n vm.options[section]['all'] = true\n for (var option in vm.options[section]) {\n if (option !== 'all' && !vm.options[section][option]) {\n vm.options[section]['all'] = false\n }\n }\n };\n\n vm.checkToggleAll = function () {\n vm.allSelected = vm.options['identification']['all'] && vm.options['stage']['all'] && vm.options['stageApproval']['all'];\n };\n\n vm.toggleSection = function (section, forAll) {\n var select = true;\n if (!forAll && vm.options[section]['all']) {\n select = false;\n }\n if (forAll && vm.allSelected) {\n select = false\n }\n for (var option in vm.options[section]) {\n vm.options[section][option] = !select;\n vm.options[section]['all'] = !select;\n }\n if (!forAll) {\n vm.checkToggleAll();\n }\n }\n\n vm.optionSelected = function () {\n if (vm.allSelected) {\n return true\n }\n for (var section in vm.options) {\n for (var option in vm.options[section]) {\n if (vm.options[section][option]) {\n return true\n }\n }\n }\n return false\n }\n }\n})();\n\n/*eslint no-undef: 0*/\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('ComponentDevelopmentEditController', ComponentDevelopmentEditController);\n\n function ComponentDevelopmentEditController($window, $scope, $translate, $state, MessageUtil, ToastUtil, moment, JsonPatchUtil,\n DialogControllerTemplate, SourcingService, ComponentDevelopmentService, ComponentStepService) {\n\n var vm = this, _patch = null,\n USER = {Id: parseInt($window.localStorage.userID), Name: $window.localStorage.aliasAqms},\n componentId = parseInt($state.params.Id);\n\n vm.editorConfig = {\n sanitize: false,\n toolbar: [{\n name: 'basicStyling',\n items: ['bold', 'italic', 'underline', 'strikethrough', 'subscript', 'superscript', '-', 'leftAlign', 'centerAlign', 'rightAlign', 'blockJustify', '-']\n },\n {\n name: 'paragraph',\n items: ['orderedList', 'unorderedList', 'outdent', 'indent', '-']\n },\n {\n name: 'doers',\n items: ['removeFormatting', 'undo', 'redo', '-']\n },\n {\n name: 'colors',\n items: ['fontColor', 'backgroundColor', '-']\n },\n {\n name: 'styling',\n items: ['font', 'size']\n }\n ]\n };\n\n vm.profile = {\n CanAdd: false,\n CanEdit: false,\n CanDelete: false,\n CanView: false,\n CanApprove: false,\n CanExport: false,\n CanConsult: false\n };\n\n vm.Tabs = ComponentStepService.Tabs;\n vm.StepsInComponent = null;\n vm.Notifications = [];\n\n if (componentId && componentId > 0) {\n vm.ComponentPath = \"edit/\" + componentId;\n } else {\n vm.ComponentPath = \"create\";\n }\n\n vm.MessageError = null;\n\n vm.Value = {\n Vendor: null,\n Price: null\n };\n\n Array.prototype.groupBy = function (prop) {\n return this.reduce(function (groups, item) {\n var val = item[prop];\n groups[val] = groups[val] || [];\n groups[val].push(item);\n return groups;\n }, {});\n };\n\n vm.onVendorSelected = function () {\n if (angular.isDefined(vm.Value) && vm.Value !== \"\") {\n var value = angular.copy(vm.Value);\n vm.Value.Vendor = {\n Id: value.Vendor.Id,\n Title: value.Vendor.Title,\n CodeSAP: value.Vendor.CodeSAP,\n FantasyName: value.Vendor.FantasyName\n };\n }\n };\n\n vm.onAreaSelected = function () {\n if (angular.isDefined(vm.Component.Area) && vm.Component.Area !== \"\") {\n var area = angular.copy(vm.Component.Area);\n vm.Component.Area = {Id: area.Id, Title: area.Title, CsActive: area.CsActive};\n }\n };\n\n vm.onProjectSelected = function () {\n if (angular.isDefined(vm.Component.Project) && vm.Component.Project !== \"\") {\n var project = angular.copy(vm.Component.Project);\n vm.Component.Project = {Id: project.Id, Title: project.Title, CsActive: project.CsActive};\n }\n };\n\n vm.addValue = function () {\n if (angular.isUndefined(vm.Value.Vendor) || vm.Value.Vendor === null || vm.Value.Vendor == \"\") {\n ToastUtil.showToastMessage($translate.instant(\"component.development.vendorprice.vendor.required\"), ToastUtil.ToastType.WARN);\n return;\n }\n if (angular.isUndefined(vm.Value.Price) || vm.Value.Price === null) {\n ToastUtil.showToastMessage($translate.instant(\"component.development.vendorprice.price.required\"), ToastUtil.ToastType.WARN);\n return;\n }\n if (ValueExists()) {\n ToastUtil.showToastMessage($translate.instant(\"component.development.vendorprice.duplicated\"), ToastUtil.ToastType.WARN);\n } else {\n vm.Component.Values.push(angular.copy(vm.Value));\n vm.Value.Vendor = null;\n vm.Value.Price = null;\n }\n };\n\n vm.deleteValue = function (index) {\n vm.Component.Values.splice(index, 1);\n };\n\n vm.saveOrUpdate = function () {\n vm.MessageError = null;\n if (canSaveForm()) {\n if (componentId && componentId > 0) {\n showConfirmDialog(false);\n } else {\n save();\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(vm.MessageError), ToastUtil.ToastType.WARN);\n }\n };\n\n vm.changeReview = function () {\n return ( vm.Component === null || vm.Component === undefined || vm.Component.Status === undefined || vm.Component.Status === null || vm.Component.Status <= ComponentDevelopmentService.Status.IN_PROGRESS.Id)\n\n };\n\n vm.disabled = function () {\n if (vm.Component === null || vm.Component === undefined || vm.Component.Status === undefined || vm.Component.Status === null)\n return false;\n\n if (vm.profile.CanApprove) {\n return false;\n }\n\n if (componentId && componentId > 0) {\n if (vm.profile.CanConsult && !vm.profile.CanEdit) {\n return true;\n }\n if (vm.Component.Status === ComponentDevelopmentService.Status.IN_PROGRESS.Id || vm.Component.Status === ComponentDevelopmentService.Status.ON_HOLD.Id) {\n return false;\n } else {\n return true;\n }\n }\n };\n\n function validateOpenDate(openDate) {\n var dateNow = new Date();\n return (openDate > dateNow);\n }\n\n function canSaveForm() {\n if (vm.Component.Values.length == 0) {\n vm.MessageError = $translate.instant(\"component.development.values.empty\");\n return false;\n }\n if (angular.isDefined(vm.Component.ECR) && angular.isDefined(vm.Component.ECR.OpeningDate) && (vm.Component.ECR.OpeningDate != null)) {\n if (validateOpenDate(vm.Component.ECR.OpeningDate)) {\n vm.MessageError = $translate.instant(\"component.development.openingdate.error\").replace(\"#type\", \"ECR\");\n return false;\n }\n }\n if (angular.isDefined(vm.Component.MCO) && angular.isDefined(vm.Component.MCO.OpeningDate) && (vm.Component.MCO.OpeningDate != null)) {\n if (validateOpenDate(vm.Component.MCO.OpeningDate)) {\n vm.MessageError = $translate.instant(\"component.development.openingdate.error\").replace(\"#type\", \"MCO\");\n return false;\n }\n }\n if (angular.isDefined(vm.Component.ECO) && angular.isDefined(vm.Component.ECO.OpeningDate) && (vm.Component.ECO.OpeningDate != null)) {\n if (validateOpenDate(vm.Component.ECO.OpeningDate)) {\n vm.MessageError = $translate.instant(\"component.development.openingdate.error\").replace(\"#type\", \"ECO\");\n return false;\n }\n }\n\n if (!vm.Tabs.ICQ.closed && vm.Component.Status === ComponentDevelopmentService.Status.APPROVED.Id) {\n vm.MessageError = $translate.instant(\"component.development.approved.error\");\n return false;\n }\n\n // if (vm.Component.SupplierApprovalSheet === false && vm.Component.Status === ComponentDevelopmentService.Status.APPROVED.Id) {\n // vm.MessageError = $translate.instant(\"component.development.approved.supplierApprovalSheet.error\");\n // return false;\n // }\n\n return true;\n }\n\n function ValueExists() {\n return vm.Component.Values.some(function (vp) {\n return (vp.Vendor.Id === vm.Value.Vendor.Id);\n });\n }\n\n function save() {\n setViewModel(vm.Component);\n var component = angular.copy(vm.Component);\n\n if (component.SD === \"\" || component.SD === null)\n delete vm.Component.SD;\n\n if (vm.Notifications.length > 0) {\n vm.Notifications.forEach(function (item) {\n vm.Component.Notifications.forEach(function (notification, index) {\n if (notification.ExternalEmail.Email == item.ExternalEmail.Email) {\n vm.Component.Notifications.splice(index, 1);\n }\n });\n });\n vm.Notifications.forEach(function (item) {\n vm.Component.Notifications.push(item);\n });\n }\n\n ComponentDevelopmentService.save(component)\n .then(onSaveComponentDevelopmentSuccess)\n .catch(onSaveComponentDevelopmentError);\n }\n\n function update(ChangeNotice) {\n if (angular.isDefined(ChangeNotice) && ChangeNotice != null && ChangeNotice != \"\") {\n vm.Component.ChangeNotice = ChangeNotice;\n }\n\n vm.patch = formatComponentToUpdate();\n vm.patch.push({\"op\": \"replace\", \"path\": \"/Updater\", \"value\": {Id: USER.Id, Name: USER.Name}});\n\n ComponentDevelopmentService.update(componentId, vm.patch)\n .then(function () {\n _patch = null;\n vm.patch = null;\n ToastUtil.showToastMessage($translate.instant(\"component.development.update.success\"), ToastUtil.ToastType.SUCCESS);\n\n ComponentDevelopmentService.getStepsCounts(vm.Component.Id).then(function (responseSteps) {\n vm.StepsInComponent = responseSteps;\n tabsRule();\n });\n })\n .catch(onSaveComponentDevelopmentError);\n }\n\n function formatComponentToUpdate() {\n var updated = vm.Component.Updater;\n\n vm.Component.Updater = {\n Id: updated.Id, Name: updated.Name\n };\n\n if (angular.isDefined(vm.Component.ECR) && vm.Component.ECR !== null) {\n if (angular.isUndefined(vm.Component.ECR.OpeningDate) || vm.Component.ECR.OpeningDate == null) {\n delete vm.Component.ECR.OpeningDate;\n }\n if (angular.isUndefined(vm.Component.ECR.OpenedBy)) {\n delete vm.Component.ECR.OpenedBy;\n }\n if (angular.isUndefined(vm.Component.ECR.Number)) {\n delete vm.Component.ECR.Number;\n }\n if (angular.isUndefined(vm.Component.ECR.OpeningDate) && angular.isUndefined(vm.Component.ECR.OpenedBy) && angular.isUndefined(vm.Component.ECR.Number)) {\n vm.Component.ECR = undefined;\n }\n } else {\n vm.Component.ECR = undefined;\n }\n\n if (angular.isDefined(vm.Component.MCO) && vm.Component.MCO !== null) {\n if (angular.isUndefined(vm.Component.MCO.OpeningDate) || vm.Component.MCO.OpeningDate == null) {\n delete vm.Component.MCO.OpeningDate;\n }\n if (angular.isUndefined(vm.Component.MCO.OpenedBy)) {\n delete vm.Component.MCO.OpenedBy;\n }\n if (angular.isUndefined(vm.Component.MCO.Number)) {\n delete vm.Component.MCO.Number;\n }\n if (angular.isUndefined(vm.Component.MCO.OpeningDate) && angular.isUndefined(vm.Component.MCO.OpenedBy) && angular.isUndefined(vm.Component.MCO.Number)) {\n vm.Component.MCO = undefined;\n }\n } else {\n vm.Component.MCO = undefined;\n }\n\n if (angular.isDefined(vm.Component.ECO) && vm.Component.ECO !== null) {\n if (angular.isUndefined(vm.Component.ECO.OpeningDate) || vm.Component.ECO.OpeningDate == null) {\n delete vm.Component.ECO.OpeningDate;\n }\n if (angular.isUndefined(vm.Component.ECO.OpenedBy)) {\n delete vm.Component.ECO.OpenedBy;\n }\n if (angular.isUndefined(vm.Component.ECO.Number)) {\n delete vm.Component.ECO.Number;\n }\n if (angular.isUndefined(vm.Component.ECO.OpeningDate) && angular.isUndefined(vm.Component.ECO.OpenedBy) && angular.isUndefined(vm.Component.ECO.Number)) {\n vm.Component.ECO = undefined;\n }\n } else {\n vm.Component.ECO = undefined;\n }\n\n if (vm.Component.SD === \"\" || vm.Component.SD === null)\n delete vm.Component.SD;\n\n if (vm.Component.Project === \"\")\n vm.Component.Project = null;\n\n if (vm.Notifications.length > 0) {\n vm.Notifications.forEach(function (item) {\n vm.Component.Notifications.forEach(function (notification, index) {\n if (notification.ExternalEmail.Email == item.ExternalEmail.Email) {\n vm.Component.Notifications.splice(index, 1);\n }\n });\n });\n vm.Notifications.forEach(function (item) {\n vm.Component.Notifications.push(item);\n });\n }\n\n var patch = generatePatch();\n\n handleFieldDate(patch, \"CreationDate\");\n handleFieldDate(patch, \"UpdateDate\");\n handleFieldDate(patch, \"OpeningDate\");\n\n return patch;\n }\n\n function handleFieldDate(patch, field) {\n if (patch.length > 0) {\n var filtered = patch.filter(function (p) {\n return p.op == \"replace\" && p.path === \"/\" + field;\n });\n if (filtered && filtered.length > 0) {\n var currentPatch = filtered[0];\n if (angular.equals(new Date(currentPatch.value), vm.ComponentCopy[field])) {\n patch.splice(patch.indexOf(currentPatch), 1);\n }\n }\n }\n }\n\n function generatePatch() {\n var patch = JsonPatchUtil.generate(vm.Component, vm.ComponentCopy, vm.observer, _patch);\n patch = patch.reduce(function (newPatch, item) {\n newPatch.push(item);\n return newPatch;\n }, []);\n _patch = angular.copy(patch);\n return patch;\n }\n\n function onSaveComponentDevelopmentSuccess(response) {\n ToastUtil.showToastMessage($translate.instant(\"component.development.save.success\"), ToastUtil.ToastType.SUCCESS);\n ComponentDevelopmentService.setComponentDevelopmentStatus(vm.Component.Status);\n vm.Component.Id = response.Id;\n componentId = vm.Component.Id;\n vm.ComponentPath = \"edit/\" + vm.Component.Id;\n\n ComponentDevelopmentService.getStepsCounts(vm.Component.Id).then(function (responseSteps) {\n vm.StepsInComponent = responseSteps;\n tabsRule();\n });\n }\n\n function onSaveComponentDevelopmentError(error) {\n patch = null;\n MessageUtil.onSaveError(error, 'component.development.save.error.duplicated');\n }\n\n function validateViewOrEditPermission() {\n if (vm.profile.CanView || vm.profile.CanEdit || vm.profile.CanConsult) {\n getComponentDevelopment();\n } else {\n $state.go('not-authorized', {}, {});\n }\n }\n\n function getComponentDevelopment() {\n ComponentDevelopmentService.getById(componentId)\n .then(function (component) {\n setViewModel(component);\n });\n }\n\n function initComponentDevelopmentViewModel() {\n vm.Component = {\n Creator: USER,\n CreationDate: new Date(),\n Updater: USER,\n UpdateDate: new Date(),\n Values: [],\n Status: null,\n Requester: null,\n Responsible: null,\n Area: null,\n Project: null,\n MaterialDescription: null,\n LabTest: false,\n LabTestRemark: null,\n ECR: null,\n MCO: null,\n DueDate: null,\n SD: null,\n Priority: 0,\n SupplierApprovalSheet: 0,\n Commodity: null,\n DevelopmentReason: null,\n TypeMaterial: null,\n Remark: null,\n ChangeNotice: null,\n Attachments: [],\n AttachmentsLabTests: [],\n NotificationDescription: null,\n Notifications: []\n };\n }\n\n function setViewModel(component) {\n vm.Component.Id = angular.isDefined(component.Id) && component.Id !== null ? component.Id : undefined;\n vm.Component.Creator = mapUser(component.Creator);\n vm.Component.Updater = mapUser(component.Updater);\n vm.Component.CreationDate = formatDateToViewModel(component.CreationDate);\n vm.Component.UpdateDate = formatDateToViewModel(component.UpdateDate);\n vm.Component.Area = mapArea(component.Area);\n\n vm.Component.Values = component.Values;\n\n vm.Component.Requester = component.Requester;\n vm.Component.Responsible = component.Responsible;\n vm.Component.Project = angular.isDefined(component.Project) && component.Project !== null && component.Project !== \"\" ? mapProject(component.Project) : undefined;\n vm.Component.PartNumber = angular.isDefined(component.PartNumber) && component.PartNumber !== null && component.PartNumber !== \"\" ? component.PartNumber : undefined;\n vm.Component.Status = component.Status;\n vm.Component.MaterialDescription = component.MaterialDescription;\n vm.Component.LabTest = component.LabTest;\n vm.Component.LabTestRemark = component.LabTestRemark;\n vm.Component.SD = component.SD;\n vm.Component.DueDate = formatDateToViewModel(component.DueDate);\n vm.Component.Priority = component.Priority;\n vm.Component.SupplierApprovalSheet = component.SupplierApprovalSheet;\n vm.Component.Commodity = component.Commodity;\n vm.Component.TypeMaterial = component.TypeMaterial;\n vm.Component.DevelopmentReason = component.DevelopmentReason;\n vm.Component.Remark = component.Remark;\n vm.Component.ChangeNotice = component.ChangeNotice;\n vm.Component.Attachments = component.Attachments;\n vm.Component.AttachmentsLabTests = component.AttachmentsLabTests;\n vm.Component.NotificationDescription = component.NotificationDescription;\n vm.Component.Notifications = component.Notifications;\n\n if (angular.isDefined(component.ECR) && component.ECR !== null) {\n vm.Component.ECR = {\n Number: angular.isDefined(component.ECR.Number) && component.ECR.Number !== null ? component.ECR.Number : undefined,\n OpenedBy: angular.isDefined(component.ECR.OpenedBy) && component.ECR.OpenedBy !== null ? component.ECR.OpenedBy : undefined,\n OpeningDate: angular.isDefined(component.ECR.OpeningDate) && component.ECR.OpeningDate !== null ? formatDateToViewModel(component.ECR.OpeningDate) : undefined\n };\n if (angular.isUndefined(vm.Component.ECR.OpeningDate) || vm.Component.ECR.OpeningDate == null) {\n delete vm.Component.ECR.OpeningDate;\n }\n if (angular.isUndefined(vm.Component.ECR.OpenedBy)) {\n delete vm.Component.ECR.OpenedBy;\n }\n if (angular.isUndefined(vm.Component.ECR.Number)) {\n delete vm.Component.ECR.Number;\n }\n if (angular.isUndefined(vm.Component.ECR.OpeningDate) && angular.isUndefined(vm.Component.ECR.OpenedBy) && angular.isUndefined(vm.Component.ECR.Number)) {\n vm.Component.ECR = undefined;\n }\n } else {\n vm.Component.ECR = undefined;\n }\n\n if (angular.isDefined(component.MCO) && component.MCO !== null) {\n vm.Component.MCO = {\n Number: angular.isDefined(component.MCO.Number) && component.MCO.Number !== null ? component.MCO.Number : undefined,\n OpenedBy: angular.isDefined(component.MCO.OpenedBy) && component.MCO.OpenedBy !== null ? component.MCO.OpenedBy : undefined,\n OpeningDate: angular.isDefined(component.MCO.OpeningDate) && component.MCO.OpeningDate !== null ? formatDateToViewModel(component.MCO.OpeningDate) : undefined\n }\n if (angular.isUndefined(vm.Component.MCO.OpeningDate) || vm.Component.MCO.OpeningDate == null) {\n delete vm.Component.MCO.OpeningDate;\n }\n if (angular.isUndefined(vm.Component.MCO.OpenedBy)) {\n delete vm.Component.MCO.OpenedBy;\n }\n if (angular.isUndefined(vm.Component.MCO.Number)) {\n delete vm.Component.MCO.Number;\n }\n if (angular.isUndefined(vm.Component.MCO.OpeningDate) && angular.isUndefined(vm.Component.MCO.OpenedBy) && angular.isUndefined(vm.Component.MCO.Number)) {\n vm.Component.MCO = undefined;\n }\n } else {\n vm.Component.MCO = undefined;\n }\n\n if (angular.isDefined(component.ECO) && component.ECO !== null) {\n vm.Component.ECO = {\n Number: angular.isDefined(component.ECO.Number) && component.ECO.Number !== null ? component.ECO.Number : undefined,\n OpenedBy: angular.isDefined(component.ECO.OpenedBy) && component.ECO.OpenedBy !== null ? component.ECO.OpenedBy : undefined,\n OpeningDate: angular.isDefined(component.ECO.OpeningDate) && component.ECO.OpeningDate !== null ? formatDateToViewModel(component.ECO.OpeningDate) : undefined\n }\n if (angular.isUndefined(vm.Component.ECO.OpeningDate) || vm.Component.ECO.OpeningDate == null) {\n delete vm.Component.ECO.OpeningDate;\n }\n if (angular.isUndefined(vm.Component.ECO.OpenedBy)) {\n delete vm.Component.ECO.OpenedBy;\n }\n if (angular.isUndefined(vm.Component.ECO.Number)) {\n delete vm.Component.ECO.Number;\n }\n if (angular.isUndefined(vm.Component.ECO.OpeningDate) && angular.isUndefined(vm.Component.ECO.OpenedBy) && angular.isUndefined(vm.Component.ECO.Number)) {\n vm.Component.ECO = undefined;\n }\n } else {\n vm.Component.ECO = undefined;\n }\n\n ComponentDevelopmentService.setComponentDevelopmentStatus(vm.Component.Status);\n\n vm.ComponentCopy = angular.copy(vm.Component);\n vm.observer = jsonpatch.observe(vm.Component);\n\n if (componentId && componentId > 0) {\n ComponentDevelopmentService.getStepsCounts(vm.Component.Id)\n .then(function (response) {\n vm.StepsInComponent = response;\n tabsRule();\n });\n } else {\n ComponentStepService.resetTabs();\n }\n }\n\n function tabsRule() {\n ComponentStepService.resetTabs();\n\n if (componentId && componentId > 0) {\n\n var groupByType = vm.StepsInComponent.groupBy('Type');\n\n for (var key in groupByType) {\n var tab = ComponentStepService.getTabByTypeId(groupByType[key][0].Type);\n if (tab !== null) {\n tab.rounds = groupByType[key][0].Rounds;\n tab.closed = groupByType[key][0].Closed;\n }\n }\n\n if (vm.Component.Status === ComponentDevelopmentService.Status.IN_PROGRESS.Id || vm.Component.Status === ComponentDevelopmentService.Status.ON_HOLD.Id) {\n vm.Tabs.ICQ.enabled = true;\n\n if (vm.Tabs.ICQ.rounds > 0 && vm.Tabs.ICQ.closed) {\n vm.Tabs.TrailRun.enabled = true;\n vm.Tabs.PilotRun.enabled = true;\n vm.Tabs.TestPlan.enabled = true;\n }\n\n } else {\n if (vm.Tabs.ICQ.rounds > 0) {\n vm.Tabs.ICQ.enabled = true;\n }\n if (vm.Tabs.TrailRun.rounds > 0) {\n vm.Tabs.TrailRun.enabled = true;\n }\n if (vm.Tabs.PilotRun.rounds > 0) {\n vm.Tabs.PilotRun.enabled = true;\n }\n if (vm.Tabs.TestPlan.rounds > 0) {\n vm.Tabs.TestPlan.enabled = true;\n }\n }\n }\n }\n\n function formatDateToViewModel(date) {\n var momentDate = moment(date, 'YYYY/MM/DD');\n return new Date(momentDate.year(), momentDate.month(), momentDate.date());\n }\n\n function mapUser(user) {\n return {Id: user.Id, Name: user.Name};\n }\n\n function mapArea(area) {\n return {Id: area.Id, Title: area.Title, CsActive: area.CsActive};\n }\n\n function mapProject(project) {\n return {Id: project.Id, Title: project.Title, CsActive: project.CsActive};\n }\n\n function showConfirmDialog(isRemarkOptional) {\n var directive = isRemarkOptional ? '' : '';\n var message = 'component.development.remark';\n DialogControllerTemplate.showWithCloseListener('component.step.remark.dialog.title', message, directive, update);\n }\n\n function init() {\n ComponentStepService.resetTabs();\n\n vm.BusinessId = null;\n vm.statusList = ComponentDevelopmentService.Status;\n initComponentDevelopmentViewModel();\n\n SourcingService.loadProfileComponentDevelopmentModules(vm, $scope)\n .then(function () {\n vm.profile = angular.copy(vm.profile);\n\n if (componentId && componentId > 0) {\n vm.label = \"label.edit.component.development\";\n validateViewOrEditPermission();\n } else {\n vm.label = \"new.title.component.development\";\n vm.Component.Status = ComponentDevelopmentService.Status.IN_PROGRESS.Id;\n ComponentDevelopmentService.setComponentDevelopmentStatus(null);\n }\n });\n }\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('AvaliationService', AvaliationService);\n\n var RESOURCE_BASE = '/vendor/avaliation/';\n\n /** @ngInject */\n function AvaliationService($injector, $q, ConfigurationService) {\n\n return {\n\n save: function (avaliation) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + RESOURCE_BASE, avaliation, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n\n return deferred.promise;\n },\n\n listAvaliations: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + RESOURCE_BASE + \"list\", {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n downloadAll: function (filter, language) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + RESOURCE_BASE + 'export-all/' + language,\n {\n params: filter,\n responseType: 'arraybuffer'\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n }\n , function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n listAvaliationByVendor: function (vendorId) {\n return this.listAvaliations({\n VendorId: vendorId\n });\n },\n\n delete: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + RESOURCE_BASE + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getById: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + RESOURCE_BASE + 'byId/' + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n update: function (id, milestone) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.patch(ConfigurationService.getServiceHost() + RESOURCE_BASE + id, milestone)\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n };\n }\n})();\n\n/*eslint angular/controller-as-vm: 0*/\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('AvaliationListController', AvaliationListController);\n\n function AvaliationListController($scope, $log, $translate, $filter, $state, $window, SourcingService, AvaliationService, ToastUtil, moment, DialogController, $document, AuthService) {\n\n var vm = this;\n var HTTP_STATUS_CONFLICT = 409;\n var dateNow = new Date();\n\n vm.profile = {\n canAdd: false,\n canEdit: false,\n canDelete: false,\n canView: false,\n hasLoad: false,\n canApprove: false,\n canExport: false\n };\n vm.isOpen = true;\n vm.view = \"list\";\n vm.ViewBy = 0;\n\n vm.CategoryList = [\n {name: 'avaliations.label.price', value: 'Price'},\n {name: 'avaliations.label.quality', value: 'Quality'},\n {name: 'avaliations.label.logistics', value: 'Logistics'},\n {name: 'avaliations.label.technology', value: 'Technology'}\n ];\n\n vm.Category = -1;\n vm.avaliations = [];\n vm.chartAvaliations = [];\n vm.itensPerPageList = [\n {name: '5', value: 5, before: 0, after: 6},\n {name: '10', value: 10, before: 5, after: 11},\n {name: '20', value: 20, before: 10, after: 21},\n {name: '30', value: 30, before: 20, after: 31},\n {name: '40', value: 40, before: 30, after: 41},\n {name: '50', value: 50, before: 40, after: 51}];\n vm.itemPerPage = vm.itensPerPageList[0];\n vm.totalLista = 0;\n vm.searchParams = {\n Id: '',\n Vendor: '',\n Keyword: '',\n StartYear: dateNow.getFullYear(),\n EndYear: dateNow.getFullYear(),\n Frequency: 1,\n Page: 1,\n MaxPerPage: vm.itemPerPage.value\n };\n vm.frequencyList = [\n {name: 'avaliations.label.month', value: 1},\n {name: 'avaliations.label.quarter', value: 2},\n {name: 'avaliations.label.semester', value: 3}\n ];\n vm.labels = [];\n vm.series = [];\n vm.data = [];\n vm.lineOptions = {\n elements: {line: {tension: 0, fill: false, borderWidth: 4}, point: {radius: 7}},\n scales: {\n yAxes: [{\n ticks: {\n beginAtZero: true,\n max: 10,\n fontSize: 16,\n padding: 15\n },\n scaleLabel: {\n display: true,\n labelString: 'Total',\n fontSize: 18\n }\n }],\n xAxes: [{\n ticks: {\n fontSize: 16,\n padding: 15\n },\n scaleLabel: {\n display: true,\n labelString: 'Year/Frequency',\n fontSize: 18\n }\n }\n ]\n },\n title: {\n display: true,\n text: 'Avaliação Fornecedor Por Categoria - {Categoria ou Total}',\n fontSize: 20\n },\n legend: {\n display: true\n }\n };\n vm.disableExport = true;\n\n Array.prototype.groupBy = function (prop) {\n return this.reduce(function (groups, item) {\n var val = item[prop];\n groups[val] = groups[val] || [];\n groups[val].push(item);\n return groups;\n }, {});\n };\n\n vm.getDescriptionToDelete = function (avaliation) {\n var item = avaliation.Vendor + \" - \" + avaliation.Year;\n return $translate.instant('avaliation.remove.confirm').replace(\"#item\", item).replace(\"#year\", avaliation.Year);\n };\n\n vm.clearSearchFields = function () {\n vm.searchParams.Id = '';\n vm.searchParams.Vendor = '';\n vm.searchParams.Keyword = '';\n vm.searchParams.StartYear = dateNow.getFullYear();\n vm.searchParams.EndYear = dateNow.getFullYear();\n vm.searchParams.Frequency = 1;\n vm.Category = '-1';\n };\n\n vm.openChartAvaliation = function () {\n DialogController.show('avaliations.chart.title', '', vm);\n };\n\n vm.viewAsGraphic = function () {\n vm.view = \"graphic\";\n vm.searchAvaliation();\n };\n\n vm.viewAsList = function () {\n vm.view = \"list\";\n vm.itemPerPage = vm.itensPerPageList[0];\n search(1, vm.itemPerPage.value);\n };\n\n vm.shouldShow = function (item) {\n if (vm.totalLista > 0 && item !== undefined) {\n return vm.totalLista >= item.value || (vm.totalLista < item.after && vm.totalLista > item.before);\n }\n return false;\n };\n\n vm.changeItemsPerPage = function () {\n vm.searchParams.Page = 1;\n };\n\n vm.onPageChange = function () {\n vm.search();\n };\n\n vm.searchAvaliation = function () {\n if (vm.view === 'graphic') {\n vm.search();\n } else {\n vm.itemPerPage = vm.itensPerPageList[0];\n search(1, vm.itemPerPage.value);\n }\n };\n\n vm.search = function () {\n //vm.chartAvaliations\n vm.disableExport = true;\n if (sessionStorage.getItem(\"searchParams\")) {\n vm.searchParams = JSON.parse(sessionStorage.getItem(\"searchParams\"));\n sessionStorage.removeItem(\"searchParams\");\n vm.itensPerPageList.forEach(function (element) {\n if (element.value === vm.searchParams.MaxPerPage) {\n vm.itemPerPage = element;\n return;\n }\n });\n }\n validStartYearEndYear();\n\n var searchParams = angular.copy(vm.searchParams);\n\n if (vm.view === 'graphic') {\n searchParams.Frequency = vm.frequencyList[0].value;\n }\n\n SourcingService.searchAvaliations(vm, searchParams, $scope)\n .then(function (response) {\n vm.avaliations = response.resultList;\n vm.totalLista = response.total;\n\n if(vm.totalLista > 0)\n vm.disableExport = false;\n })\n .catch(function (error) {\n if (error && error.status) {\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"error.avaliations.search\"), ToastUtil.ToastType.ERROR);\n }\n }\n });\n\n searchParams = angular.copy(vm.searchParams);\n\n if (vm.view === 'graphic') {\n searchParams.Page = 0;\n searchParams.MaxPerPage = 0;\n SourcingService.searchAvaliations(vm, searchParams, $scope)\n .then(function (response) {\n vm.chartAvaliations = response.resultList;\n vm.disableExport = true;\n generateCharData();\n var chart_area = angular.element($document[0].getElementById('chart'));\n $document.scrollToElementAnimated(chart_area, 60, 800);\n })\n .catch(function (error) {\n if (error && error.status) {\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"error.avaliations.search\"), ToastUtil.ToastType.ERROR);\n }\n }\n });\n }\n };\n\n vm.edit = function (item) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n SourcingService.editAvaliation(item.Id, vm);\n };\n\n vm.componentDevelopmentList = function () {\n $state.go('component-development-list', {});\n };\n\n vm.createVendor = function () {\n $state.go('vendor-list', {});\n };\n\n vm.createVisit = function () {\n $state.go('visit-list', {});\n };\n\n vm.createMilestone = function () {\n $state.go('milestone-list'), {};\n };\n\n vm.contractList = function () {\n $state.go('contract-list', {});\n };\n\n vm.create = function () {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n SourcingService.createAvaliation(vm);\n };\n\n vm.delete = function (avaliations) {\n\n SourcingService.removeAvaliation(vm, avaliations.Id)\n .then(function () {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go($state.current, {}, {\n reload: true\n });\n ToastUtil.showToastMessage($translate.instant(\"avaliations.remove.success\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(function (error) {\n if (error === 'not authorized') {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n } else {\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if (error.status === HTTP_STATUS_CONFLICT) {\n ToastUtil.showToastMessage($translate.instant(\"avaliations.remove.error.conflict\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"avaliations.remove.error\"), ToastUtil.ToastType.ERROR);\n }\n }\n\n });\n };\n\n vm.getFrequencyName = function () {\n return getFrequency(vm.frequencyList, vm.searchParams.Frequency)[0].name;\n };\n\n vm.exportToExcel = function () {\n if (!vm.disableExport) {\n vm.disableExport = true;\n\n AvaliationService.downloadAll(vm.searchParams, $translate.use())\n .then(function (response) {\n var date = moment().format(\"DD_MM_YYYY_HH_mm_ss\");\n var newFIle = new Blob([response], {\n type: 'application/vnd.ms-excel'\n });\n var fileURL = URL.createObjectURL(newFIle);\n var a = $document[0].createElement(\"a\");\n $document[0].body.appendChild(a);\n a.style = \"display: none\";\n a.href = fileURL;\n a.download = $translate.instant('avaliation.report.name') + AuthService.getBusinessName() + \"_\" + date + \".xls\";\n a.click();\n vm.disableExport = false;\n }).catch(function (error) {\n vm.disableExport = false;\n if (error && error.status) {\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"service.load.error\"), ToastUtil.ToastType.ERROR);\n }\n }\n });\n }\n };\n\n function getFrequency(frequencys, value) {\n var record = frequencys.filter(function (frequency) {\n return frequency.value === value;\n });\n return record;\n }\n\n function generateCharData() {\n if (vm.ViewBy === 0 || angular.isDefined(vm.Category.value)) {\n var viewType = !vm.ViewBy || vm.ViewBy === 0 ? 'Total' : vm.Category.value,\n avaliations = angular.copy(vm.chartAvaliations);\n\n var ticksMax = Math.max.apply(Math,avaliations.map(function(item){return item[viewType];}));\n avaliations.sort(sortByYear);\n\n var labels = generateLabels(avaliations),\n series = generateSeries(avaliations),\n data = [],\n groupedByVendor = avaliations.groupBy('Vendor');\n\n for (var key in groupedByVendor) {\n var vendorData = Array(labels.length).fill(null),\n vendorAvaliations = groupedByVendor[key];\n\n vendorAvaliations.forEach(function (avaliation) {\n var search = mapToLabel(avaliation), index = labels.indexOf(search);\n vendorData[index] = avaliation[viewType];\n });\n\n data.push(vendorData);\n }\n\n vm.colors = ['Blue', 'Red', 'Green', 'Blue', 'Yellow', 'Dark Grey'];\n vm.series = series;\n vm.labels = labels;\n vm.data = data;\n\n vm.lineOptions.title.text = $translate.instant('avaliations.vendor.by.' + viewType.toLowerCase());\n vm.lineOptions.scales.yAxes[0].scaleLabel.labelString = $translate.instant('label.' + viewType.toLowerCase());\n vm.lineOptions.scales.yAxes[0].ticks.max = ticksMax;\n\n vm.lineOptions.scales.xAxes[0].scaleLabel.labelString = $translate.instant('avaliations.chart.labelx') + ' / ' + $translate.instant(vm.getFrequencyName());\n\n } else {\n ToastUtil.showToastMessage($translate.instant('avaliation.chart.generate.message.alert'), ToastUtil.ToastType.WARN);\n }\n }\n\n function mapToLabel(el) {\n return el.Year + \"/\" + el.Frequency;\n }\n\n function generateSeries(avals) {\n return Array.from(new Set(avals.map(function (aval) {\n return aval.Vendor;\n })));\n }\n\n function generateLabels(avals) {\n return Array.from(new Set(avals.map(mapToLabel)));\n }\n\n function sortByYear(a, b) {\n if (a.Year > b.Year) {\n return 1;\n }\n if (a.Year < b.Year) {\n return -1;\n }\n return 0;\n }\n\n function validStartYearEndYear() {\n if ((vm.searchParams.StartYear && vm.searchParams.EndYear) && (vm.searchParams.EndYear < vm.searchParams.StartYear)) {\n ToastUtil.showToastMessage($translate.instant(\"avaliations.start.year.less.end.year\"), ToastUtil.ToastType.WARN);\n }\n }\n\n function search(page, max) {\n vm.searchParams.Page = page;\n vm.searchParams.MaxPerPage = max;\n vm.search();\n }\n\n function init() {\n SourcingService.loadProfileSupplierEvaluationModules(vm, $scope)\n .then(function () {\n if (SourcingService.hasApproveAndViewPermission(vm)) {\n vm.search();\n }\n })\n .catch(function (error) {\n var msg = error.data && error.data.Message ? error.data.Message : $filter('translate')('error.avaliations.search');\n ToastUtil.showToastMessage($translate.instant(msg), ToastUtil.ToastType.ERROR);\n });\n }\n\n function getDefaultLanguage(){\n return $window.localStorage.defaultLanguage;\n }\n\n $scope.$watch(getDefaultLanguage, function(){\n if(vm.view === 'graphic')\n generateCharData();\n });\n\n init();\n }\n})();\n\n/*eslint no-undef: 0*/\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('AvaliationController', AvaliationController);\n\n function AvaliationController($scope, $window, $state, $translate, $log, AvaliationService, ToastUtil, VendorService, JsonPatchUtil, DialogController, moment) {\n\n var vm = this, _patch = null, states = {};\n var DefaultState = {\n showSaveButton: true,\n canEdit: true,\n editing: false\n }\n var USER = {\n Id: parseInt($window.localStorage.userID),\n Name: $window.localStorage.aliasAqms\n };\n var avaliationId = $state.params.Id;\n var dateNow = new Date();\n\n vm.State = DefaultState;\n vm.vendorList = [];\n vm.extraFilters = {\n WithMilestoneApproved: true\n }\n vm.label = \"label.new.avaliation\";\n vm.Avaliation = {\n Vendor: null,\n CreatedBy: USER,\n UpdatedBy: null,\n CreatedDate: new Date(),\n UpdatedDate: new Date(),\n Scores: [\n {Month: 1, Price: 0, Quality: 0, Logistics: 0, Technology: 0, Total: 0, Remark: null},\n {Month: 2, Price: 0, Quality: 0, Logistics: 0, Technology: 0, Total: 0, Remark: null},\n {Month: 3, Price: 0, Quality: 0, Logistics: 0, Technology: 0, Total: 0, Remark: null},\n {Month: 4, Price: 0, Quality: 0, Logistics: 0, Technology: 0, Total: 0, Remark: null},\n {Month: 5, Price: 0, Quality: 0, Logistics: 0, Technology: 0, Total: 0, Remark: null},\n {Month: 6, Price: 0, Quality: 0, Logistics: 0, Technology: 0, Total: 0, Remark: null},\n {Month: 7, Price: 0, Quality: 0, Logistics: 0, Technology: 0, Total: 0, Remark: null},\n {Month: 8, Price: 0, Quality: 0, Logistics: 0, Technology: 0, Total: 0, Remark: null},\n {Month: 9, Price: 0, Quality: 0, Logistics: 0, Technology: 0, Total: 0, Remark: null},\n {Month: 10, Price: 0, Quality: 0, Logistics: 0, Technology: 0, Total: 0, Remark: null},\n {Month: 11, Price: 0, Quality: 0, Logistics: 0, Technology: 0, Total: 0, Remark: null},\n {Month: 12, Price: 0, Quality: 0, Logistics: 0, Technology: 0, Total: 0, Remark: null}\n ],\n Year: dateNow.getFullYear()\n };\n vm.ScoreEdit = false;\n\n vm.saveOrUpdate = function () {\n if (avaliationId && avaliationId > 0) {\n update();\n } else {\n save();\n }\n }\n\n vm.setScoreEditing = function (edit) {\n if (!edit) {\n vm.ScoreEdit = true;\n return;\n }\n if ($scope.avaliationForm.$invalid) {\n return;\n }\n vm.ScoreEdit = false;\n };\n\n $window.maxCheck = function (object) {\n if (object.value.length > object.maxLength)\n object.value = object.value.slice(0, object.maxLength);\n if (object.value > 10)\n object.value = 0;\n else if (object.value < 0)\n object.value = 0;\n };\n\n $window.isNumeric = function (evt) {\n var theEvent = evt || $window.event;\n var key = theEvent.keyCode || theEvent.which;\n key = String.fromCharCode(key);\n var regex = /[0-9]|\\./;\n if (!regex.test(key)) {\n theEvent.returnValue = false;\n if (theEvent.preventDefault) theEvent.preventDefault();\n }\n };\n\n function save() {\n if (canSave()) {\n AvaliationService.save(convertAvaliation())\n .then(function () {\n ToastUtil.showToastMessage($translate.instant(\"avaliation.save.success\"), ToastUtil.ToastType.SUCCESS);\n $state.go('avaliation-list');\n })\n .catch(onSaveAvaliationError);\n } else if (vm.Avaliation.Scores.length == 0) {\n ToastUtil.showToastMessage($translate.instant('error.avaliation.score.empty'), ToastUtil.ToastType.WARN);\n }\n }\n\n function update() {\n if (canSave()) {\n vm.Avaliation.UpdatedBy = USER;\n var patch = formatAvaliationToSave();\n if (patchIsNotEmpty(patch)) {\n patch.push({\"op\": \"replace\", \"path\": \"/CreatedBy\", \"value\": vm.Avaliation.CreatedBy});\n AvaliationService.update(avaliationId, patch)\n .then(function () {\n _patch = null;\n ToastUtil.showToastMessage($translate.instant(\"avaliation.update.success\"), ToastUtil.ToastType.SUCCESS);\n $state.go('avaliation-list');\n })\n .catch(onSaveAvaliationError);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"avaliation.update.success\"), ToastUtil.ToastType.SUCCESS);\n $state.go('avaliation-list');\n }\n } else if (vm.Avaliation.Scores.length == 0) {\n ToastUtil.showToastMessage($translate.instant('error.avaliation.score.empty'), ToastUtil.ToastType.WARN);\n }\n }\n\n function generatePatch() {\n var patch = JsonPatchUtil.generate(vm.Avaliation, vm.AvaliationCopy, vm.observer, _patch);\n if (patchIsNotEmpty(patch)) {\n removePatchOperation(patch, \"/CreatedDate\");\n removePatchOperation(patch, \"/UpdatedDate\");\n }\n _patch = angular.copy(patch);\n return patch;\n }\n\n function removePatchOperation(patch, path) {\n var filtered = patch.filter(function (item) {\n return item.path === path;\n });\n if (filtered && filtered.length > 0) {\n patch.splice(patch.indexOf(filtered[0]), 1);\n }\n }\n\n function patchIsNotEmpty(patch) {\n return patch && patch.length > 0;\n }\n\n function formatAvaliationToSave() {\n var updated = vm.Avaliation.UpdatedBy, vendor = vm.Avaliation.Vendor;\n\n vm.Avaliation.UpdatedBy = {\n Id: updated.Id, Name: updated.Name\n }\n\n vm.Avaliation.Vendor = {\n Id: vendor.Id,\n Title: vendor.Title,\n CodeSAP: vendor.CodeSAP,\n FantasyName: vendor.FantasyName\n };\n\n var patch = generatePatch();\n\n if (patch && patch.length > 0) {\n patch.push({\"op\": \"replace\", \"path\": \"/UpdatedDate\", \"value\": vm.Avaliation.UpdatedDate});\n }\n\n return patch;\n }\n\n function canSave() {\n var scoreValid = false;\n\n vm.Avaliation.Scores.forEach(function (score) {\n if(!scoreValid) {\n if (score.Total > 0) {\n scoreValid = true;\n } else {\n scoreValid = false;\n }\n }\n });\n\n\n if(!scoreValid) {\n ToastUtil.showToastMessage($translate.instant(\"avaliations.score.error\"), ToastUtil.ToastType.ERROR);\n return false;\n }\n\n var vendor = vm.Avaliation ? vm.Avaliation.Vendor : null;\n var existAvaliationScores = vm.Avaliation ? vm.Avaliation.Scores ? vm.Avaliation.Scores.length > 0 : false : false;\n return $scope.avaliationForm.$valid && vendor != null && vendor.Id > 0 && existAvaliationScores;\n }\n\n function init() {\n\n VendorService.listVendors()\n .then(function (response) {\n vm.vendorList = response.resultList;\n if (avaliationId && avaliationId > 0) {\n vm.label = 'label.edit.avaliation';\n\n AvaliationService.getById(avaliationId)\n .then(setViewModel);\n } else {\n vm.Avaliation.CreatedBy = USER;\n vm.Avaliation.UpdatedBy = USER;\n }\n });\n\n }\n\n function initStates() {\n states = {\n Default: DefaultState,\n Editing: initEditingState()\n }\n }\n\n function initEditingState() {\n var editingState = angular.copy(vm.State);\n editingState.editing = true;\n return editingState;\n }\n\n function setViewModel(Avaliation) {\n vm.Avaliation.CreatedBy = {Id: Avaliation.CreatedBy.Id, Name: Avaliation.CreatedBy.Name};\n vm.Avaliation.UpdatedBy = {Id: Avaliation.UpdatedBy.Id, Name: Avaliation.UpdatedBy.Name};\n vm.Avaliation.Vendor = {\n Id: Avaliation.Vendor.Id,\n Title: Avaliation.Vendor.Title,\n CodeSAP: Avaliation.Vendor.CodeSAP,\n FantasyName: Avaliation.Vendor.FantasyName\n };\n vm.Avaliation.Year = Avaliation.Year;\n vm.Avaliation.Scores = Avaliation.Scores;\n\n // A data está sempre vindo no formato PT-BR\n var createdDate = moment(Avaliation.CreatedDate, 'YYYY/MM/DD');\n var updatedDate = moment(Avaliation.UpdatedDate, 'YYYY/MM/DD');\n vm.Avaliation.CreatedDate = createdDate.toDate();\n vm.Avaliation.UpdatedDate = updatedDate.toDate();\n\n vm.AvaliationCopy = angular.copy(vm.Avaliation);\n vm.observer = jsonpatch.observe(vm.Avaliation);\n\n vm.State = states.Editing;\n\n }\n\n function onSaveAvaliationError(error) {\n if (error.status === 404) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.generic\"), ToastUtil.ToastType.ERROR);\n return;\n }\n var serverMsg = error.data ? error.data.Message : 'Network error';\n var errorMsg;\n\n if (error.data && error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n return;\n }\n } else if (serverMsg.indexOf(\"#errorMessage\") !== -1) {\n serverMsg = serverMsg.replace(\"#errorMessage\", \"\");\n var message = $translate.instant('error.avaliation.duplicated');\n message = message.replace(\"$description\", serverMsg);\n errorMsg = message;\n } else {\n errorMsg = $translate.instant(serverMsg)\n }\n\n ToastUtil.showToastMessage($translate.instant(errorMsg), ToastUtil.ToastType.ERROR);\n }\n\n function convertAvaliation() {\n var avaliation = angular.copy(vm.Avaliation);\n var created = avaliation.CreatedBy, updated = avaliation.UpdatedBy, vendor = avaliation.Vendor;\n avaliation.CreatedBy = {Id: created.Id, Name: created.Name};\n avaliation.UpdatedBy = {Id: updated.Id, Name: updated.Name};\n avaliation.Vendor = {\n Id: vendor.Id,\n Title: vendor.Title,\n CodeSAP: vendor.CodeSAP,\n FantasyName: vendor.FantasyName\n };\n return avaliation;\n }\n\n initStates();\n init();\n }\n\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('EnvironmentalService', EnvironmentalService);\n\n var BASE = '/environmental/';\n\n /** @ngInject */\n function EnvironmentalService($state, $window, $injector, $q, ToastUtil, $translate, ConfigurationService, AuthService, DefaultService) {\n\n var Status = [], Protocols = [];\n\n Status = [{Value: true, Title: 'sgi.label.license.status.active'}, {\n Value: false,\n Title: 'sgi.label.license.status.inactive'\n }];\n\n Protocols = [{Value: true, Title: 'sgi.label.license.has.protocol.yes'}, {\n Value: false,\n Title: 'sgi.label.license.has.protocol.no'\n }];\n\n function validateEditOrViewPermission(vm) {\n return !!(vm.profile.CanView || vm.profile.CanEdit);\n\n }\n\n function validateDeletePermission(vm) {\n return !(vm.profile.hasLoad && !vm.profile.CanDelete);\n\n }\n\n function validateAddPermission(vm) {\n return !(vm.profile.hasLoad && !vm.profile.CanAdd);\n\n }\n\n return {\n\n getStatus: function () {\n return Status;\n },\n\n getProtocols: function () {\n return Protocols;\n },\n\n loadProfileModules: function (vm, $scope) {\n var profileModule = {};\n\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.moduleSgi;\n\n return DefaultService.loadModules(profileModule)\n .then(function (response) {\n vm.profile = angular.copy(response);\n vm.profile.hasLoad = true;\n });\n },\n\n editEnvironmental: function (vm, id, internal) {\n if (validateEditOrViewPermission(vm)) {\n $state.go(internal === true ? 'internal-environmental-edit' : 'environmental-edit', {\n Id: id\n });\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n },\n\n save: function (environmental) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + BASE, environmental, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getById: function (Id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + 'byId/' + Id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n list: function (searchParams) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE, {\n params: searchParams\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n create: function (vm, internal) {\n if (!validateAddPermission(vm)) {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n return;\n }\n $state.go(internal === true ? 'internal-environmental-create' : 'environmental-create', {});\n },\n\n delete: function (vm, indirect, id, licenseId) {\n if (!validateDeletePermission(vm)) {\n return $q.reject('not authorized');\n }\n\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + BASE + \"/\" + indirect + \"/\" + id + \"/\" + licenseId, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n\n };\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('EnvironmentalListController', EnvironmentalListController);\n\n function EnvironmentalListController($rootScope, $scope, $state, $stateParams, $document, ToastUtil, $translate, FileService, EnvironmentalService, moment) {\n\n $rootScope.$state = $state;\n $rootScope.$stateParams = $stateParams;\n\n var HTTP_STATUS_CONFLICT = 409;\n var vm = this;\n var dateNow = moment(new Date()).format('YYYY-MM-DD');\n\n vm.profile = {\n CanAdd: false,\n CanEdit: false,\n CanDelete: false,\n CanView: false,\n CanApprove: false,\n CanExport: false,\n CanConsult: false\n };\n vm.itensPerPageList = [\n { name: '5', value: 5, before: 0, after: 6 },\n { name: '10', value: 10, before: 5, after: 11 },\n { name: '20', value: 20, before: 10, after: 21 },\n { name: '30', value: 30, before: 20, after: 31 },\n { name: '40', value: 40, before: 30, after: 41 },\n { name: '50', value: 50, before: 40, after: 51 }];\n vm.itemPerPage = vm.itensPerPageList[0].value;\n vm.Status = EnvironmentalService.getStatus();\n vm.Protocols = EnvironmentalService.getProtocols();\n vm.licenseTypes = [];\n vm.searchParams = {\n Internal: $stateParams.internal,\n Id: '',\n Vendor: '',\n LicenseTypeId: null,\n AreaId: null,\n Status: '-1',\n Protocol: '-1',\n EmissionStart: '',\n EmissionEnd: '',\n ExpirationStart: '',\n ExpirationEnd: '',\n Page: 1,\n MaxPerPage: 5\n };\n vm.environmentalList = [];\n vm.totalList = 0;\n\n vm.clearSearchFields = function () {\n vm.searchParams.Internal = $stateParams.internal;\n vm.searchParams.Id = '';\n vm.searchParams.Vendor = '';\n vm.searchParams.LicenseTypeId = null;\n vm.searchParams.AreaId = null;\n vm.searchParams.Status = '-1';\n vm.searchParams.Protocol = '-1';\n vm.searchParams.EmissionStart = '';\n vm.searchParams.EmissionEnd = '';\n vm.searchParams.ExpirationStart = '';\n vm.searchParams.ExpirationEnd = '';\n };\n\n vm.create = function () {\n EnvironmentalService.create(vm, $stateParams.internal);\n };\n\n vm.search = function () {\n\n if (sessionStorage.getItem(\"searchParams\")) {\n vm.searchParams = JSON.parse(sessionStorage.getItem(\"searchParams\"));\n sessionStorage.removeItem(\"searchParams\");\n }\n\n var searchParams = buildSearchParam();\n\n EnvironmentalService.list(searchParams)\n .then(function (response) {\n vm.environmentalList = response.resultList;\n vm.totalLista = response.total;\n })\n .catch(function (error) {\n if (error && error.status) {\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"sgi.environmental.error.search\"), ToastUtil.ToastType.ERROR);\n }\n }\n });\n };\n\n vm.goToEnvironmental = function () {\n $state.go('environmental-list', {});\n };\n\n vm.goToInternalEnvironmental = function () {\n $state.go('internal-environmental-list', {});\n };\n\n vm.edit = function(environmental){\n if (!vm.profile.CanEdit) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n return;\n }\n\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n\n EnvironmentalService.editEnvironmental(vm, environmental, $stateParams.internal);\n };\n\n vm.delete = function (indirect, id, licenseId) {\n if (!vm.profile.CanDelete) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n return;\n }\n\n EnvironmentalService.delete(vm, indirect, id, licenseId)\n .then(function () {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go($state.current, {}, {\n reload: true\n });\n ToastUtil.showToastMessage($translate.instant(\"sgi.environmental.remove.success\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(function (error) {\n if (error === 'not authorized') {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n } else {\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if (error.status === HTTP_STATUS_CONFLICT) {\n ToastUtil.showToastMessage($translate.instant(\"sgi.environmental.remove.error.conflict\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"sgi.environmental.remove.error\"), ToastUtil.ToastType.ERROR);\n }\n }\n });\n };\n\n vm.downloadFile = function(attachments) {\n attachments.forEach( function (item) {\n downloadFile(item);\n });\n };\n\n vm.licenseDueDateColor = function (item) {\n var expirationDate = moment(item.ExpirationDate).format('YYYY-MM-DD');\n if (moment(expirationDate).isBefore(dateNow) && (item.CsActive === true && item.ProtocolActive === false)) {\n return \"license-due-date-red\";\n } else if (moment(expirationDate).isBefore(dateNow) && (item.CsActive === true && item.ProtocolActive === true)) {\n return \"license-due-date-orange\";\n }\n }\n\n vm.getFilesName = function(attachments) {\n var list = \"\";\n attachments.forEach( function (item) { list += item.FileName+\"
\"; });\n return list;\n };\n\n vm.onPageChange = function () {\n search(vm.searchParams.Page, vm.searchParams.MaxPerPage);\n };\n\n vm.contacsVendor = function (contacs) {\n var list = \"\";\n \n contacs.forEach( function (item) { \n list += \"
\"+ item.ContactUs + \" - \" + item.Phone;\n \n if(item.Department !== null)\n list += \" - \" + item.Department;\n else\n list += \" - N/A\"\n \n if(item.Email !== null)\n list += \" - \" + item.Email;\n else\n list += \" - N/A\"\n\n list += \"
\";\n });\n\n return list;\n };\n\n function search(page, max) {\n vm.searchParams.Page = page;\n vm.searchParams.MaxPerPage = max;\n vm.search();\n }\n\n function buildSearchParam() {\n var searchParams = {\n Internal: $stateParams.internal,\n Id: vm.searchParams.Id,\n Vendor: vm.searchParams.Vendor,\n LicenseTypeId: null,\n AreaId: null,\n Status: vm.searchParams.Status,\n Protocol: vm.searchParams.Protocol,\n EmissionStart: null,\n EmissionEnd: null,\n ExpirationStart: null,\n ExpirationEnd: null,\n Page: vm.searchParams.Page,\n MaxPerPage: vm.searchParams.MaxPerPage\n };\n\n angular.forEach(searchParams, function (value, key) {\n searchParams[key] = copy(vm.searchParams[key]);\n });\n\n searchParams.Status = vm.searchParams.Status;\n searchParams.Protocol = vm.searchParams.Protocol;\n searchParams.AreaId = searchParams.AreaId ? searchParams.AreaId.Id : null;\n searchParams.LicenseTypeId = searchParams.LicenseTypeId ? searchParams.LicenseTypeId.Id : null;\n searchParams.EmissionStart = searchParams.EmissionStart ? moment(searchParams.EmissionStart).format('DD/MM/YYYY') : searchParams.EmissionStart;\n searchParams.EmissionEnd = searchParams.EmissionEnd ? moment(searchParams.EmissionEnd).format('DD/MM/YYYY') : searchParams.EmissionEnd;\n searchParams.ExpirationStart = searchParams.ExpirationStart ? moment(searchParams.ExpirationStart).format('DD/MM/YYYY') : searchParams.ExpirationStart;\n searchParams.ExpirationEnd = searchParams.ExpirationEnd ? moment(searchParams.ExpirationEnd).format('DD/MM/YYYY') : searchParams.ExpirationEnd;\n return searchParams;\n }\n\n function copy(value) {\n return !value ? null : angular.copy(value);\n }\n\n function downloadFile(file) {\n FileService.download(file).then(function (response) {\n var newFIle = new Blob([response], {\n });\n\n var fileURL = URL.createObjectURL(newFIle);\n\n var a = $document[0].createElement(\"a\");\n $document[0].body.appendChild(a);\n a.style = \"display: none\";\n a.href = fileURL;\n a.download = file.FileName;\n a.click();\n }).catch(function () {\n });\n }\n\n function init() {\n\n EnvironmentalService.loadProfileModules(vm, $scope)\n .then(function () {\n vm.profile = angular.copy(vm.profile);\n });\n\n vm.search();\n }\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('EnvironmentalEditController', EnvironmentalEditController);\n\n function EnvironmentalEditController($rootScope, $scope, $state, $stateParams, $window, $q, ToastUtil, $translate, $filter, EnvironmentalService, LicenseService, MessageUtil, moment) {\n $rootScope.$state = $state;\n $rootScope.$stateParams = $stateParams;\n\n var vm = this, environmentalId = parseInt($state.params.Id), NOW = new Date(),\n USER = {Id: parseInt($window.localStorage.userID), Name: $window.localStorage.aliasAqms};\n\n var HTTP_STATUS_CONFLICT = 409;\n \n vm.profile = {\n CanAdd: false,\n CanEdit: false,\n CanDelete: false,\n CanView: false,\n CanApprove: false,\n CanExport: false,\n CanConsult: false\n };\n vm.Status = EnvironmentalService.getStatus();\n vm.Environmental = {\n Id: 0,\n CreatedBy: USER,\n CreatedDate: NOW,\n UpdatedBy: USER,\n UpdatedDate: NOW,\n Internal: $stateParams.internal,\n Vendor: null,\n Area: null,\n Description: '',\n Licenses: []\n };\n vm.LicenseDirect = setViewModelLicenseDirect();\n vm.LicenseIndirect = setViewModelLicenseIndirect();\n vm.formIndirectSubmit = false;\n vm.formDirectSubmit = false;\n vm.EditLicenseDirect = false;\n vm.EditLicenseIndirect = false;\n\n vm.goToList = function () {\n if ($stateParams.internal) {\n $state.go('internal-environmental-list', {});\n } else {\n var environmental = angular.copy(vm.Environmental);\n if (environmentalId && environmentalId > 0 && environmental.Licenses.length === 0) {\n ToastUtil.showToastMessage($translate.instant(\"sgi.vendor.error.license.direct.required\"), ToastUtil.ToastType.WARN);\n return;\n }\n $state.go('environmental-list', {});\n }\n };\n\n vm.getTitlePage = function () {\n if (environmentalId && environmentalId > 0) {\n return $stateParams.internal === false ? \"sgi.label.license.edit\" : \"sgi.label.internal.license.edit\";\n } else {\n return $stateParams.internal === false ? \"sgi.label.license.new\" : \"sgi.label.internal.license.new\";\n }\n };\n\n vm.buttonSaveClick = function () {\n vm.formIndirectSubmit = false;\n vm.formDirectSubmit = false;\n };\n\n vm.addLicense = function (Indirect, License) {\n var license = angular.copy(License);\n\n if (!licenseValidForm(license)) {\n Indirect === true ? vm.formIndirectSubmit = true : vm.formDirectSubmit = true;\n return;\n } else {\n Indirect === true ? vm.formIndirectSubmit = false : vm.formDirectSubmit = false;\n }\n if (validateEmissionDateAndExpirationDate(license.EmissionDate, license.ExpirationDate)) {\n if (Indirect) {\n license.Vendor = {\n Id: vm.LicenseIndirect.Vendor.Id,\n Title: vm.LicenseIndirect.Vendor.Title,\n FantasyName: vm.LicenseIndirect.Vendor.FantasyName\n };\n }\n\n vm.Environmental.Licenses.push(license);\n Indirect === true ? vm.LicenseIndirect = setViewModelLicenseIndirect() : vm.LicenseDirect = setViewModelLicenseDirect();\n }\n };\n\n vm.removeItem = function (item) {\n var index = vm.Environmental.Licenses.indexOf(item);\n if(item.Id && item.Id > 0)\n {\n if (!vm.profile.CanDelete) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n return;\n }\n LicenseService.delete(item.Id)\n .then(function () {\n vm.Environmental.Licenses.splice(index, 1);\n ToastUtil.showToastMessage($translate.instant(\"sgi.environmental.remove.success\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(function (error) {\n if (error === 'not authorized') {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n } else {\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if (error.status === HTTP_STATUS_CONFLICT) {\n ToastUtil.showToastMessage($translate.instant(\"sgi.environmental.remove.error.conflict\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"sgi.environmental.remove.error\"), ToastUtil.ToastType.ERROR);\n }\n }\n }); \n } else {\n vm.Environmental.Licenses.splice(index, 1);\n }\n };\n\n vm.editItem = function (item) {\n var license = angular.copy(item);\n\n license.index = vm.Environmental.Licenses.indexOf(item);\n\n license.ExpirationDate = moment(license.ExpirationDate, 'YYYY/MM/DD').toDate();\n license.EmissionDate = moment(license.EmissionDate, 'YYYY/MM/DD').toDate();\n\n if (license.Indirect) {\n vm.EditLicenseIndirect = true;\n vm.LicenseIndirect = license;\n } else {\n vm.EditLicenseDirect = true;\n vm.LicenseDirect = license;\n }\n };\n\n vm.updateItem = function (item) {\n var license = angular.copy(item);\n var index = license.index;\n\n if (!licenseValidForm(license)) {\n license.Indirect === true ? vm.formIndirectSubmit = true : vm.formDirectSubmit = true;\n return;\n } else {\n license.Indirect === true ? vm.formIndirectSubmit = false : vm.formDirectSubmit = false;\n }\n if (!validateEmissionDateAndExpirationDate(license.EmissionDate, license.ExpirationDate)) {\n return;\n }\n\n if (license.Indirect)\n license.Vendor = {Id: license.Vendor.Id, Title: license.Vendor.Title, FantasyName: license.Vendor.FantasyName};\n\n vm.Environmental.Licenses.splice(index, 1);\n delete license.index;\n\n vm.Environmental.Licenses.push(license);\n\n if (item.Indirect) {\n vm.EditLicenseIndirect = false;\n vm.LicenseIndirect = setViewModelLicenseIndirect();\n } else {\n vm.EditLicenseDirect = false;\n vm.LicenseDirect = setViewModelLicenseDirect();\n }\n };\n\n vm.onVendorSelected = function () {\n if ($filter('filter')(vm.Environmental.Licenses, vm.Environmental.Vendor.FantasyName).length > 0) {\n ToastUtil.showToastMessage($translate.instant(\"sgi.vendor.error.license.duplicated\"), ToastUtil.ToastType.WARN);\n vm.Environmental.Vendor = null;\n }\n };\n\n vm.onVendorLicenseSelected = function () {\n if (vm.Environmental.Vendor.FantasyName === vm.LicenseIndirect.Vendor.FantasyName) {\n ToastUtil.showToastMessage($translate.instant(\"sgi.vendor.error.license.indirect\"), ToastUtil.ToastType.WARN);\n vm.LicenseIndirect.Vendor = null;\n }\n };\n\n vm.isRequired = function () {\n if ($stateParams.internal) {\n return true;\n } else {\n if ($filter('filter')(vm.Environmental.Licenses, {Indirect: false}).length === 0)\n return true;\n }\n };\n\n vm.isRequiredVendor = function (form, license) {\n if (form && (license.Vendor === \"\" || license.Vendor === null))\n return true\n };\n\n vm.isRequiredLicenseType = function (form, license) {\n if (form && (license.LicenseType === \"\" || license.LicenseType === null))\n return true\n };\n\n vm.isRequiredNumber = function (form, license) {\n if (form && (license.Number === \"\" || license.Number === null))\n return true\n };\n\n vm.isRequiredEmissionDate = function (form, license) {\n if (form && (license.EmissionDate === undefined || license.EmissionDate === null || license.EmissionDate === \"\"))\n return true\n };\n\n vm.isRequiredExpirationDate = function (form, license) {\n if (form && (license.ExpirationDate === undefined || license.ExpirationDate === null || license.ExpirationDate === \"\"))\n return true\n };\n\n vm.saveOrUpdate = function () {\n save();\n };\n\n function licenseValidForm(license) {\n if (license.LicenseType === \"\") {\n return false;\n } else if (license.Vendor === \"\") {\n return false;\n } else if (license.Number === null || license.Number === \"\") {\n return false;\n } else if (license.EmissionDate === \"\" || license.EmissionDate === null) {\n return false;\n } else if (license.ExpirationDate === \"\" || license.EmissionDate === null) {\n return;\n } else {\n return true;\n }\n }\n\n function save() {\n var environmental = angular.copy(vm.Environmental);\n if ($stateParams.internal) {\n var license = angular.copy(vm.LicenseDirect);\n if (validateEmissionDateAndExpirationDate(license.EmissionDate, license.ExpirationDate)) {\n environmental.Licenses.push(license);\n } else {\n return;\n }\n } else {\n environmental.Vendor = {\n Id: vm.Environmental.Vendor.Id,\n Title: vm.Environmental.Vendor.Title,\n FantasyName: vm.Environmental.Vendor.FantasyName\n };\n\n if (environmental.Licenses.length === 0) {\n ToastUtil.showToastMessage($translate.instant(\"sgi.vendor.error.license.direct.required\"), ToastUtil.ToastType.WARN);\n return;\n }\n }\n\n if(environmentalId && environmentalId > 0) {\n environmental.UpdatedBy = USER;\n }\n\n EnvironmentalService.save(environmental)\n .then(onSaveSuccess)\n .catch(onSaveError);\n }\n\n function onSaveSuccess() {\n ToastUtil.showToastMessage($translate.instant(\"sgi.environmental.save.success\"), ToastUtil.ToastType.SUCCESS);\n $state.go($stateParams.internal === false ? 'environmental-list' : 'internal-environmental-list');\n }\n\n function onSaveError(error) {\n if(error.data.Message === \"basic.save.same.name.error\" )\n {\n ToastUtil.showToastMessage($translate.instant(\"sgi.vendor.error.license.number.exists\") + error.data.Description, ToastUtil.ToastType.WARN);\n return;\n }\n MessageUtil.onSaveError(error, 'contract.save.error.duplicated');\n }\n\n function validateEmissionDateAndExpirationDate(licenseEmissionDate, licenseExpirationDate) {\n var emissionDate = moment(licenseEmissionDate), expirationDate = moment(licenseExpirationDate);\n if (moment(emissionDate).isAfter(expirationDate)) {\n ToastUtil.showToastMessage($translate.instant(\"sgi.environmental.dates.invalid\"), ToastUtil.ToastType.WARN);\n return false;\n }\n return true;\n }\n\n function setViewModelLicenseDirect() {\n var newLicense = {\n Indirect: false,\n LicenseType: null,\n Vendor: null,\n Number: null,\n EmissionDate: NOW,\n ExpirationDate: NOW,\n Remark: '',\n ProtocolActive: false,\n CsActive: true,\n Attachments: []\n };\n\n if (environmentalId && environmentalId > 0) {\n newLicense.Environmental = {Id: environmentalId};\n }\n\n return newLicense;\n }\n\n function setViewModelLicenseIndirect() {\n var newLicense = {\n Indirect: true,\n LicenseType: null,\n Vendor: null,\n Number: null,\n EmissionDate: NOW,\n ExpirationDate: NOW,\n Remark: '',\n ProtocolActive: false,\n CsActive: true,\n Attachments: []\n };\n\n if (environmentalId && environmentalId > 0) {\n newLicense.Environmental = {Id: environmentalId};\n }\n\n return newLicense;\n }\n\n function setViewModel(Environmental) {\n vm.Environmental = {\n Id: Environmental.Id,\n Internal: Environmental.Internal,\n CreatedBy: {Id: Environmental.CreatedBy.Id, Name: Environmental.CreatedBy.Name},\n CreatedDate: moment(Environmental.CreatedDate, 'YYYY/MM/DD').toDate(),\n UpdatedBy: {Id: Environmental.UpdatedBy.Id, Name: Environmental.UpdatedBy.Name},\n UpdatedDate: moment(Environmental.UpdatedDate, 'YYYY/MM/DD').toDate(),\n Description: Environmental.Description,\n Licenses: Environmental.Licenses,\n Company: Environmental.Company\n };\n\n if (Environmental.Vendor != null)\n vm.Environmental.Vendor = {Id: Environmental.Vendor.Id, FantasyName: Environmental.Vendor.FantasyName, Title: Environmental.Vendor.Title};\n\n if (Environmental.Area != null)\n vm.Environmental.Area = {Id: Environmental.Area.Id, Title: Environmental.Area.Title};\n\n if (vm.Environmental.Internal) {\n Environmental.Licenses[0].EmissionDate = moment(Environmental.Licenses[0].EmissionDate, 'YYYY/MM/DD').toDate();\n Environmental.Licenses[0].ExpirationDate = moment(Environmental.Licenses[0].ExpirationDate, 'YYYY/MM/DD').toDate();\n vm.LicenseDirect = angular.copy(Environmental.Licenses[0]);\n vm.Environmental.Licenses = [];\n }\n vm.environmentalCopy = angular.copy(vm.Environmental);\n }\n\n function init() {\n\n EnvironmentalService.loadProfileModules(vm, $scope)\n .then(function () {\n vm.profile = angular.copy(vm.profile);\n\n if (environmentalId && environmentalId > 0) {\n EnvironmentalService.getById(environmentalId)\n .then(setViewModel);\n } else {\n if (!vm.profile.CanAdd) {\n $state.go('not-authorized', {});\n }\n }\n });\n\n }\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(TestOrtTypeTranslate);\n\n /** @ngInject */\n function TestOrtTypeTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'title.test.ort.type': 'ORT Type',\n 'test.ort.type.name.id.label': 'Name or Id',\n 'test.ort.type.name.id.placeholder': 'Search by name or id',\n 'test.ort.type.table.testinspection.label': 'Test Inspection Type',\n 'test.ort.type.table.business.label': 'Business',\n 'test.ort.type.delete.success': 'ORT Type successfully removed.',\n 'test.ort.type.delete.error': 'An error occurred when try to remove ORT Type.',\n 'test.ort.type.new.label': 'New ORT Type',\n 'test.ort.type.edit.label': 'Edit ORT Type',\n 'test.ort.type.select.business.label': 'Select a Business',\n 'test.ort.type.identification.label': 'ORT type Identification',\n 'test.ort.type.subtype.identification.label': 'Subtype Identification',\n 'test.ort.type.save.success': 'ORT Type successfully saved.',\n 'test.ort.type.save.error': 'An error occurred when try to save ORT Type.',\n 'test.ort.type.load.error': 'An error occurred when try to load ORT Type.',\n 'test.ort.type.validation.company': 'There is already an ort type with this Inspection Type.',\n 'test.ort.type.search.error': 'There was an error loading ort Type data.',\n 'test.ort.type.subtype.label': 'Subtype',\n 'test.ort.type.subtype.placeholder.label': 'Select a subtype name',\n 'test.ort.type.subtype.duplicated.error.msg': 'A subtype with this name already exists',\n 'test.ort.type.deleted.failed': 'This ORT Type can not be deleted. There are one or more associated records.',\n 'test.sub.type.settings.deleted.failed': 'Esse SubType não pode ser excluído. Há um ou mais registros associados.'\n });\n\n $translateProvider.translations('pt', {\n 'title.test.ort.type': 'Tipo ORT',\n 'test.ort.type.name.id.label': 'Nome ou Id',\n 'test.ort.type.name.id.placeholder': 'Pesquisar por nome ou id',\n 'test.ort.type.table.testinspection.label': 'Tipo de Inspeção de Teste',\n 'test.ort.type.table.business.label': 'Negócio',\n 'test.ort.type.delete.success': 'Tipo ORT removido com sucesso.',\n 'test.ort.type.delete.error': 'Ocorreu um erro ao tentar remover o Tipo ORT.',\n 'test.ort.type.new.label': 'Novo Tipo ORT',\n 'test.ort.type.edit.label': 'Editar Tipo ORT',\n 'test.ort.type.select.business.label': 'Selecione um Negócio',\n 'test.ort.type.identification.label': 'Identificação do Tipo ORT',\n 'test.ort.type.subtype.identification.label': 'Identificação do Subtipo',\n 'test.ort.type.save.success': 'Tipo ORT salvo com sucesso.',\n 'test.ort.type.save.error': 'Ocorreu um erro ao tentar salvar o Tipo ORT.',\n 'test.ort.type.load.error': 'Ocorreu um erro ao tentar carregar o Tipo ORT.',\n 'test.ort.type.validation.company': 'Já existe um tipo ort com este Tipo de Inspeção.',\n 'test.ort.type.search.error': 'Ocorreu um erro ao carregar os dados do Tipo ORT.',\n 'test.ort.type.subtype.label': 'Subtipo',\n 'test.ort.type.subtype.placeholder.label': 'Selecione o nome do subtipo',\n 'test.ort.type.subtype.duplicated.error.msg': 'Já existe um subtipo com esse nome',\n 'test.ort.type.deleted.failed': 'Esse ORT Type não pode ser excluído. Há um ou mais registros associados.',\n 'test.sub.type.settings.deleted.failed': 'Esse Subtipo não pode ser excluído. Há um ou mais registros associados.'\n });\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('TestOrtTypeService', TestOrtTypeService);\n\n /** @ngInject */\n function TestOrtTypeService($window, $injector, $q, ConfigurationService) {\n var BASE = \"/test-ort-type\";\n return {\n listAll: function (filtro) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + '/', {\n params: filtro\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n save: function (testOrtType) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + BASE + \"/\", testOrtType, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n loadById: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + '/loadById/' + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n delete: function (Id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + BASE + '/' + Id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n };\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(TestOrtTypeRouter);\n\n /** @ngInject */\n function TestOrtTypeRouter($stateProvider) {\n\n $stateProvider.state('test-ort-type-list', {\n url: '/settings/test-ort-type',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/settings/test_ort_type/test-ort-type-list.html',\n controller: 'TestOrtTypeListController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'label.settings'\n },\n authorize: true\n });\n\n $stateProvider.state('test-ort-type-create', {\n url: '/settings/test-ort-type/create',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/settings/test_ort_type/test-ort-type-edit.html',\n controller: 'TestOrtTypeEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'label.settings'\n },\n authorize: true\n });\n\n $stateProvider.state('test-ort-type-edit', {\n url: '/settings/test-ort-type/edit/:Id',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/settings/test_ort_type/test-ort-type-edit.html',\n controller: 'TestOrtTypeEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'label.settings'\n },\n authorize: true\n });\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('TestOrtTypeListController', TestOrtTypeListController);\n\n function TestOrtTypeListController(ListModel, TestOrtTypeService, $document, $translate, $state, ToastUtil, $scope, moment, $log) {\n\n var vm = this;\n\n vm.testOrtTypeList = [];\n vm.listModelValues = {};\n vm.totalList = 0;\n\n vm.searchParams = {\n IdOrName: null,\n Page: 1,\n MaxPerPage: 5\n };\n\n vm.clearFields = function () {\n vm.searchParams.IdOrName = null;\n setFoucusElement('#idSearch');\n };\n\n vm.search = function() {\n vm.searchParams.Page = 1;\n vm.searchParams.MaxPerPage = 5;\n vm.searchTestOrtType()\n }\n\n vm.searchTestOrtType = function () {\n if (sessionStorage.getItem(\"searchParams\")) {\n vm.searchParams = JSON.parse(sessionStorage.getItem(\"searchParams\"));\n sessionStorage.removeItem(\"searchParams\");\n }\n TestOrtTypeService.listAll(vm.searchParams)\n .then(\n function (response) {\n vm.testOrtTypeList = response.resultList;\n vm.totalList = response.total;\n\n initListViewModel(vm.testOrtTypeList);\n\n setFoucusElement('#idSearch');\n })\n .catch(\n function (error) {\n if (error.status !== $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"test.ort.type.search.error\"), ToastUtil.ToastType.ERROR);\n }\n vm.clearFields();\n setFoucusElement('#idSearch');\n });\n };\n \n vm.create = function () {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('test-ort-type-create', {});\n }\n\n vm.filter = function (keyEvent) {\n if (keyEvent.which === 13)\n vm.searchTestOrtType();\n };\n\n function edit(id) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('test-ort-type-edit', {\n Id: id\n });\n }\n\n function initListViewModel(items) {\n\n var idStyle = \"width: 5%;\";\n var nameStyle = \"width: 50%;\";\n //PROPERTIES PARAMS: header: *, rowAttr: *, isHighlight: *, valueFn: *, style: *, cssClass: *, cssClassFn:\n var properties = [\n ListModel.getProperties(\"label.id\", \"Id\", false, null, idStyle, null, null),\n ListModel.getProperties(\"test.ort.type.table.testinspection.label\", \"Name\", true, null, nameStyle, null, null),\n ListModel.getProperties(\"label.status.header\", \"CsActive\", false, getCsActiveLabel, \"\", null, getCsActiveCss, null)\n ];\n //Build menu: menuType: *, identificationKey: *, descriptionKey: *, actionFn: *\n var actionMenuItems = [\n ListModel.getActionMenuItem(ListModel.ActionMenuEnum.EDIT, \"Id\", null, edit),\n ListModel.getActionMenuItem(ListModel.ActionMenuEnum.DELETE, \"Id\", \"Name\", deleteIqcType)\n ];\n //Get parent Action Menu: menuItems: *, type: *\n var actionMenu = ListModel.getActionMenu(actionMenuItems, ListModel.ActionMenuTypeEnum.INLINE)\n vm.listModelValues = ListModel.getListModel(properties, items, actionMenu);\n }\n\n function getCsActiveLabel(csActive) {\n var statusKey = \"label.inactive\";\n if (csActive == true || csActive == \"true\") {\n statusKey = \"label.active\";\n }\n\n return statusKey;\n }\n\n function getCsActiveCss(csActive) {\n var result = \"\";\n if (csActive == true || csActive == \"true\") {\n result = 'ng-binding label aqms-label-active';\n } else {\n result = 'ng-binding label aqms-label-inactive';\n }\n\n return result;\n }\n\n function setFoucusElement(element) {\n if (element) {\n var input = $document[0].querySelector(element);\n if (input !== null) {\n input.focus();\n }\n }\n }\n\n function deleteIqcType(id) {\n TestOrtTypeService.delete(id).then(\n function (response) {\n if (response) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go($state.current, {}, {\n reload: true\n });\n ToastUtil.showToastMessage($translate.instant(\"test.ort.type.delete.success\"), ToastUtil.ToastType.SUCCESS);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"test.ort.type.delete.error\"), ToastUtil.ToastType.WARN);\n }\n }).catch(function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if (error.status === $scope.HttpStatusCodeConflict) {\n ToastUtil.showToastMessage($translate.instant(\"test.ort.type.deleted.failed\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.delete.generic\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function init() {\n vm.searchTestOrtType();\n }\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('TestOrtTypeEditController', TestOrtTypeEditController);\n\n function TestOrtTypeEditController($state, ToastUtil, $translate,\n $log, $stateParams, $scope, AuthService, DefaultService, TestOrtTypeService) {\n\n var vm = this;\n\n\n vm.statusList = [{\n id: 1,\n Name: 'label.active'\n }, {\n id: 0,\n Name: 'label.inactive'\n }];\n\n\n vm.testOrtType = {\n CsActive: 1\n };\n\n\n vm.save = function () {\n TestOrtTypeService.save(vm.testOrtType).then(\n function () {\n $state.go('test-ort-type-list');\n ToastUtil.showToastMessage($translate.instant(\"test.ort.type.save.success\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(\n function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if (error.status === $scope.HttpStatusCodeConflict) {\n $state.go('test-ort-type-list');\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n } else {\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n if (error.data.Message == 'msg.same.name.error') {\n ToastUtil.showToastMessage($translate.instant('test.ort.type.validation.company'), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n }\n }\n });\n };\n\n\n function loadById(id) {\n TestOrtTypeService.loadById(id)\n .then(\n function (response) {\n vm.testOrtType = angular.copy(response);\n vm.testOrtType.CsActive = vm.testOrtType.CsActive == true ? 1 : 0;\n }\n ).catch(\n function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"test.ort.type.load.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n\n\n function init() {\n if ($stateParams.Id) {\n loadById($stateParams.Id);\n }\n }\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(ShiftTranslate);\n\n /** @ngInject */\n function ShiftTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'settings.shift.page.name.label': 'Shift',\n 'settings.shift.name.label': 'Name',\n 'settings.shift.table.company.label': 'Company',\n 'settings.shift.status.label': 'Status',\n 'settings.shift.search.hint.status.label': 'All Status',\n 'settings.shift.btn.new.label': 'New Shift',\n 'settings.shift.edit.label': 'Edit Shift',\n 'settings.shift.search.name.hint.msg': 'Search by name',\n 'settings.shift.placeholder.name': 'Enter the name of the shift',\n 'settings.shift.list.error': 'Error on load shift list.',\n 'shift.same.name.error': 'A record with the same name already exists.',\n 'settings.shift.edit.name.required.msg': 'Name field is required.',\n 'settings.shift.edit.area.acordion.title': 'Support Areas',\n 'settings.shift.edit.identification.acordion.title': 'Shift Identification',\n 'settings.shift.edit.save.error.msg': 'Error on save shift.',\n 'settings.shift.edit.save.success.msg': 'Shift successfully saved.',\n 'settings.shift.delete.success.msg': 'Shift successfully removed.',\n 'settings.shift.delete.error.msg': 'Error on shift remove.',\n 'settings.shift.deleted.failed': 'This shift could not be deleted. There are one or more associated records.',\n 'settings.shift.starting.time.label': 'Start time',\n 'settings.shift.time.interval.label': 'Break time',\n 'settings.shift.final.time.label': 'End time',\n 'settings.shift.placeholder.starting.time': 'Ex.: 08:00',\n 'settings.shift.placeholder.time.interval': 'Ex.: 12:00',\n 'settings.shift.placeholder.final.time': 'Ex.: 17:00'\n });\n\n $translateProvider.translations('pt', {\n 'settings.shift.page.name.label': 'Turno',\n 'settings.shift.name.label': 'Nome',\n 'settings.shift.table.company.label': 'Empresa',\n 'settings.shift.status.label': 'Situação',\n 'settings.shift.search.hint.status.label': 'Todas as Situações',\n 'settings.shift.btn.new.label': 'Novo Turno',\n 'settings.shift.edit.label': 'Editar Turno',\n 'settings.shift.search.name.hint.msg': 'Buscar por nome',\n 'settings.shift.placeholder.name': 'Informe o nome do turno',\n 'settings.shift.list.error': 'Ocorreu um erro ao carregar a lista de turnos.',\n 'shift.same.name.error': 'Já existe um registro com o mesmo nome.',\n 'settings.shift.edit.name.required.msg': 'O campo nome é obrigatório.',\n 'settings.shift.edit.area.acordion.title': 'Áreas de Suporte',\n 'settings.shift.edit.identification.acordion.title': 'Identificação do Turno',\n 'settings.shift.edit.save.error.msg': 'Ocorreu um erro ao salvar o turno.',\n 'settings.shift.edit.save.success.msg': 'Turno salvo com sucesso.',\n 'settings.shift.delete.success.msg': 'Turno removido com sucesso.',\n 'settings.shift.delete.error.msg': 'Ocorreu um erro ao tentar remover o turno.',\n 'settings.shift.deleted.failed': 'Não foi possível deletar esse turno. Existe um ou mais registros associados.',\n 'settings.shift.starting.time.label': 'Hora de início',\n 'settings.shift.time.interval.label': 'Hora do intervalo',\n 'settings.shift.final.time.label': 'Hora de término',\n 'settings.shift.placeholder.starting.time': 'Ex.: 08:00',\n 'settings.shift.placeholder.time.interval': 'Ex.: 12:00',\n 'settings.shift.placeholder.final.time': 'Ex.: 17:00'\n });\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('ShiftService', ShiftService);\n\n /** @ngInject */\n function ShiftService($window, $injector, $q, ConfigurationService) {\n var BASE = \"/shift/\";\n return {\n\n listAllShift: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + \"list\", {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getById: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + 'byId/' + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n save: function (shift) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + BASE, shift, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n delete: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + BASE + \"/\" + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n };\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(ShiftRouter);\n\n /** @ngInject */\n function ShiftRouter($stateProvider) {\n\n $stateProvider.state('shift-list', {\n url: '/settings/shift',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/settings/shift/shift-list.html',\n controller: 'ShiftListController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n type: null,\n menuName: 'label.settings'\n },\n authorize: true\n });\n\n\n $stateProvider.state('shift-edit', {\n url: '/settings/shift/edit/:id',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/settings/shift/shift-edit.html',\n controller: 'ShiftEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'label.settings'\n },\n authorize: true\n });\n\n $stateProvider.state('shift-create', {\n url: '/settings/shift/create',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/settings/shift/shift-edit.html',\n controller: 'ShiftEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'label.settings'\n },\n authorize: true\n });\n\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('ShiftListController', ShiftListController);\n\n function ShiftListController($scope, $state, $log, $translate, ShiftService, ToastUtil, ListModel) {\n\n var vm = this;\n vm.searchParams = {\n Title: '',\n Page: 1,\n MaxPerPage: 5\n };\n vm.shiftList = [];\n vm.totalList = 0;\n\n vm.listModelValues = {};\n\n vm.search = function() {\n vm.searchParams.Page = 1;\n vm.searchParams.MaxPerPage = 5;\n vm.searchShift()\n }\n\n vm.searchShift = function () {\n if (sessionStorage.getItem(\"searchParams\")) {\n vm.searchParams = JSON.parse(sessionStorage.getItem(\"searchParams\"));\n sessionStorage.removeItem(\"searchParams\");\n }\n ShiftService.listAllShift(angular.copy(vm.searchParams)).then(function (response) {\n vm.shiftList = angular.copy(response.resultList);\n vm.totalList = response.total;\n initListViewModel(angular.copy(response.resultList));\n\n }).catch(function (error) {\n $log.log(error);\n if (error.status !== $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"settings.shift.list.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n };\n\n vm.create = function () {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('shift-create', {});\n }\n\n vm.setStatusInSearchParams = function () {\n var value = \"\";\n if (vm.statusModel.value === true) {\n value = 1;\n } else if (vm.statusModel.value === false) {\n value = 0;\n }\n vm.searchParams.Status = value;\n };\n\n vm.clearSearchParams = function () {\n vm.searchParams.Title = \"\";\n };\n\n vm.edit = function (id) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('shift-edit', {\n id: id\n });\n };\n\n vm.delete = function (id) {\n ShiftService.delete(id).then(function () {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n ToastUtil.showToastMessage($translate.instant(\"settings.shift.delete.success.msg\"), ToastUtil.ToastType.SUCCESS);\n vm.searchShift();\n }).catch(function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(\"settings.shift.delete.error.msg\"), ToastUtil.ToastType.ERROR);\n }\n }\n });\n };\n\n function init() {\n vm.searchShift();\n }\n\n function initListViewModel(items) {\n var idStyle = \"width: 5%;\";\n var nameStyle = \"width: 25%;\";\n var statusStyle = \"width: 10%;\";\n //PROPERTIES PARAMS: header, rowAttr, isHighlight, valueFn, style, cssClass, cssClassFn:\n var properties = [\n ListModel.getProperties(\"label.id\", \"Id\", false, null, idStyle, null, null),\n ListModel.getProperties(\"settings.shift.name.label\", \"Title\", true, null, nameStyle, null, null),\n ListModel.getProperties(\"settings.shift.starting.time.label\", \"StartingTime\", false, null, \"\", null, null),\n ListModel.getProperties(\"settings.shift.time.interval.label\", \"TimeInterval\", false, null, \"\", null, null),\n ListModel.getProperties(\"settings.shift.final.time.label\", \"FinalTime\", false, null, \"\", null, null),\n ListModel.getProperties(\"settings.shift.status.label\", \"CsActive\", false, getStatusLabel, statusStyle, null, getCsActiveCss)\n ];\n //Build menu: menuType: *, identificationKey: *, descriptionKey: *, actionFn: *\n var actionMenuItems = [\n ListModel.getActionMenuItem(ListModel.ActionMenuEnum.EDIT, \"Id\", null, vm.edit),\n ListModel.getActionMenuItem(ListModel.ActionMenuEnum.DELETE, \"Id\", \"Title\", vm.delete)\n ];\n //Get parent Action Menu: menuItems: *, type: *\n var actionMenu = ListModel.getActionMenu(actionMenuItems, ListModel.ActionMenuTypeEnum.INLINE)\n vm.listModelValues = ListModel.getListModel(properties, items, actionMenu);\n }\n\n function getStatusLabel(CsActive) {\n var statusKey = \"label.inactive\";\n if (CsActive == true || CsActive == \"true\") {\n statusKey = \"label.active\";\n }\n\n return statusKey;\n }\n\n function getCsActiveCss(csActive) {\n var result = \"\";\n if (csActive == true || csActive == \"true\") {\n result = 'ng-binding label aqms-label-active';\n } else {\n result = 'ng-binding label aqms-label-inactive';\n }\n\n return result;\n }\n\n init();\n }\n})();\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('ShiftEditController', ShiftEditController);\n\n function ShiftEditController($log, $state, $scope, $stateParams, $translate, ShiftService,\n ToastUtil, AuthService, moment) {\n\n var vm = this;\n vm.idToEdit = null;\n\n vm.statusList = [{\n name: 'label.active',\n id: 1\n }, {\n name: 'label.inactive',\n id: 0\n }];\n\n vm.shift = {\n CsActive: 1,\n Title: '',\n StartingTime: '',\n TimeInterval: '',\n FinalTime: ''\n };\n\n vm.saveShift = function () {\n ShiftService.save(angular.copy(vm.shift)).then(function () {\n $state.go('shift-list');\n ToastUtil.showToastMessage($translate.instant(\"settings.shift.edit.save.success.msg\"), ToastUtil.ToastType.SUCCESS);\n }).catch(function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(\"settings.shift.edit.save.error.msg\"), ToastUtil.ToastType.ERROR);\n }\n }\n });\n };\n\n function init() {\n vm.idToEdit = $stateParams.id;\n if (vm.idToEdit) {\n getById();\n }\n }\n\n function getById() {\n ShiftService.getById(vm.idToEdit).then(function (response) {\n vm.shift = angular.copy(response);\n vm.shift.CsActive = vm.shift.CsActive ? vm.statusList[0].id : vm.statusList[1].id;\n vm.validateTimeInterval();\n }).catch(function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"settings.shift.edit.save.error.msg\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n vm.validateTimeInterval = function () {\n if (vm.shift.StartingTime && vm.shift.FinalTime && vm.shift.TimeInterval) {\n if (moment(vm.shift.StartingTime, 'hh:mm').isBefore(moment(vm.shift.FinalTime, 'hh:mm'))) {\n setValidity('timeInterval', moment(vm.shift.TimeInterval, 'hh:mm').isBetween(moment(vm.shift.StartingTime, 'hh:mm'), moment(vm.shift.FinalTime, 'hh:mm')));\n } else {\n var finalTime = moment(vm.shift.FinalTime, 'hh:mm').add(1, 'days');\n var startingTime = moment(vm.shift.StartingTime, 'hh:mm');\n var timeInterval = moment(vm.shift.TimeInterval, 'hh:mm');\n \n if (moment(vm.shift.StartingTime, 'hh:mm').isAfter(moment(vm.shift.TimeInterval, 'hh:mm'))) {\n timeInterval = moment(vm.shift.TimeInterval, 'hh:mm').add(1, 'days');\n }\n\n setValidity('timeInterval', timeInterval.isBetween(moment(startingTime), moment(finalTime)));\n }\n }\n };\n\n function setValidity(input, valid) {\n $scope.shiftForm[input][input].$setValidity('timeConflict', valid, $scope.shiftForm[input][input]);\n }\n\n init();\n\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(SettingsTranslate);\n\n /** @ngInject */\n function SettingsTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'label.new.project': 'New Project',\n 'label.edit.project': 'Project Editing',\n 'title.project': 'Project',\n 'project.placeholder.name.id': 'Search by name or id',\n 'label.clear.button': 'Clear',\n 'placeholder.search.button': 'Search',\n 'project.label.active': 'Active',\n 'project.label.inactive': 'Inactive',\n 'label.address': 'Address',\n 'project.not.found': 'No companies found.',\n 'project.identification': 'Project Identification',\n 'project.label.name': 'Name',\n 'project.label.name.id': 'Name or Id',\n 'project.label.business': 'Business',\n 'project.label.status': 'Status',\n 'project.label.logo': 'Logo',\n 'project.label.client': 'Client',\n 'project.placeholder.name': 'Enter the project name',\n 'project.placeholder.address': 'Enter the business address',\n 'project.placeholder.contact': 'Enter project contact',\n 'project.save.success':'Project saved successfully.',\n 'error.project.search': 'There was an error loading while loading project data.',\n 'project.deleted.success': \"Project was successfully deleted.\",\n 'project.deleted.failed': 'This project could not be deleted. There are one or more associated records.',\n 'project.save.failed': 'There was an error trying to save the project',\n 'client.acordion.title': 'Client Identification',\n 'label.business': 'Business',\n 'project.placeholder.company': 'Select a company',\n 'project.placeholder.business': 'Select a business',\n 'project.validation.company.required': 'Company is required.',\n 'project.validation.business.required': 'Business is required.'\n });\n\n $translateProvider.translations('pt', {\n 'label.new.project': 'Novo Projeto',\n 'label.edit.project': 'Edição de Projeto',\n 'title.project': 'Projeto',\n 'project.placeholder.name.id': 'Pesquisar por nome ou id',\n 'label.clear.button': 'Limpar',\n 'placeholder.search.button': 'Pesquisa',\n 'project.label.active': 'Ativo',\n 'project.label.inactive': 'Inativo',\n 'label.address': 'Endereço',\n 'project.not.found': 'Nenhum projeto encontrado.',\n 'project.identification': 'Identificação de projeto',\n 'project.label.name': 'Nome',\n 'project.label.name.id': 'Nome ou Id',\n 'project.label.business': 'Negócio',\n 'project.label.status': 'Status',\n 'project.label.logo': 'Logo',\n 'project.label.client': 'Cliente',\n 'project.placeholder.name': 'Digite o nome do projeto',\n 'project.placeholder.address': 'Digite o endereço da projeto',\n 'project.placeholder.contact': 'Digite o contato da projeto',\n 'project.save.success':'Projeto salvo com sucesso.',\n 'error.project.search': 'Ocorreu um erro ao carregar os dados do projeto.',\n 'project.deleted.success': \"Projeto excluído com sucesso\",\n 'project.deleted.failed': 'Não foi possível deletar esse projeto. Existe um ou mais registros associados.',\n 'project.save.failed': 'Ocorreu um erro ao tentar salvar o projeto',\n 'client.acordion.title': 'Identificação de Cliente',\n 'label.business': 'Negócio',\n 'project.placeholder.company': 'Selecione uma empresa',\n 'project.placeholder.business': 'Selecione um negócio',\n 'project.validation.company.required': 'Empresa é obrigatório.',\n 'project.validation.business.required': 'Negócio é obrigatório.'\n });\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('ProjectService', ProjectService);\n\n /** @ngInject */\n function ProjectService($injector, $q, ConfigurationService) {\n\n var BASE = \"/project\";\n\n return {\n listAll: function (filtro) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + '/', {\n params: filtro\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n save: function (project) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + BASE + \"/\", project, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n loadById: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + '/loadById/' + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n delete: function (Id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + BASE + '/' + Id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n deleteAssociation: function (IdProject, IdClient) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + BASE + '/deleteAssociation/' + IdProject + '/' + IdClient, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n };\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(ProjectRouter);\n\n /** @ngInject */\n function ProjectRouter($stateProvider) {\n\n $stateProvider.state('project-list', {\n url: '/settings/project',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/settings/project/project-list.html',\n controller: 'ProjectListController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'label.settings'\n },\n authorize: true\n });\n\n $stateProvider.state('project-create', {\n url: '/settings/project/create',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/settings/project/project.html',\n controller: 'ProjectController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'label.settings'\n },\n authorize: true\n });\n\n $stateProvider.state('project-edit', {\n url: '/settings/project/edit/:Id',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/settings/project/project.html',\n controller: 'ProjectController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'label.settings'\n },\n authorize: true\n });\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('ProjectController', ProjectController);\n\n function ProjectController(ModelService, ProjectService, $state, ToastUtil, $translate, $log, $stateParams, $scope, BusinessService) {\n\n var vm = this;\n\n vm.businesss = [];\n\n vm.statusList = [{\n id: 1,\n Name: 'project.label.active'\n }, {\n id: 0,\n Name: 'project.label.inactive'\n }];\n\n vm.project = {\n Title: null,\n CsActive: 1,\n Business: null,\n BusinessComboBox: null,\n ProjectClients: [],\n Clients: []\n };\n\n vm.save = function () {\n ProjectService.save(vm.project)\n .then(\n function () {\n $state.go('project-list');\n ToastUtil.showToastMessage($translate.instant(\"project.save.success\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(\n function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if (error.status === $scope.HttpStatusCodeConflict) {\n $state.go('project-list');\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n } else {\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n }\n }\n });\n };\n\n vm.canSave = function () {\n var canSave = false;\n\n if (vm.project.Title && vm.project.Clients.length && vm.project.BusinessComboBox) {\n canSave = true;\n }\n\n return canSave;\n };\n\n function loadById(id) {\n ProjectService.loadById(id)\n .then(\n function (response) {\n vm.project = angular.copy(response);\n var index = vm.businesss.map(function (x) {\n return x.Id;\n }).indexOf(vm.project.BusinessComboBox.Id);\n vm.project.BusinessComboBox = vm.businesss[index];\n\n if(vm.project.CsActive)\n {\n vm.project.CsActive = vm.statusList[0].id;\n }\n else\n {\n vm.project.CsActive = vm.statusList[1].id;\n }\n\n }\n ).catch(\n function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"error.project.search\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function loadBusiness() {\n BusinessService.listByCompany().then(function (response) {\n vm.businesss = angular.copy(response);\n }).catch(function (error) {\n $log.log(error);\n if (error.data) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function init() {\n loadBusiness();\n if ($stateParams.Id) {\n loadById($stateParams.Id);\n }\n }\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('ProjectListController', ProjectListController);\n\n function ProjectListController($window, $location, $anchorScroll, ProjectService, $document,\n $translate, $state, ToastUtil, $scope, moment, $log, AuthService) {\n\n var vm = this;\n vm.itensPerPageList = [\n {name: '5', value: 5, before: 0, after: 6}, \n {name: '10', value: 10, before: 5, after: 11}, \n {name: '20', value: 20, before: 10, after: 21}, \n {name: '30', value: 30, before: 20, after: 31}, \n {name: '40', value: 40, before: 30, after: 41}, \n {name: '50', value: 50, before: 40, after: 51}]\n\n vm.itemPerPage = vm.itensPerPageList[0];\n \n vm.projectList = [];\n vm.totalList = 0;\n vm.searchParams = {\n IdOrName: null,\n Page: 1,\n MaxPerPage: vm.itemPerPage.value\n };\n\n vm.shouldShow = function (item) {\n if(vm.totalList > 0 && item != undefined) {\n return vm.totalList >= item.value || (vm.totalList < item.after && vm.totalList > item.before);\n }\n return false;\n }\n \n vm.changeItemsPerPage = function() {\n if ( vm.itemPerPage == null ) {\n vm.itemPerPage = vm.itensPerPageList[0];\n }\n vm.searchParams.Page = 1;\n vm.searchParams.MaxPerPage = vm.itemPerPage.value;\n vm.searchProject()\n }\n\n vm.search = function() {\n vm.itemPerPage = vm.itensPerPageList[0];\n vm.searchParams.Page = 1;\n vm.searchParams.MaxPerPage = vm.itemPerPage.value;\n vm.searchProject()\n }\n\n vm.clearFields = function () {\n vm.searchParams.IdOrName = null;\n setFoucusElement('#idSearch');\n }\n\n vm.searchProject = function () {\n if (sessionStorage.getItem(\"searchParams\")) {\n vm.searchParams = JSON.parse(sessionStorage.getItem(\"searchParams\"));\n sessionStorage.removeItem(\"searchParams\");\n vm.itensPerPageList.forEach(function(element) {\n if (element.value == vm.searchParams.MaxPerPage) {\n vm.itemPerPage = element;\n return;\n }\n })\n }\n ProjectService.listAll(vm.searchParams)\n .then(\n function (response) {\n vm.projectList = response.resultList;\n vm.totalList = response.total;\n\n setFoucusElement('#idSearch');\n })\n .catch(\n function (error) {\n if (error.status !== $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"error.project.search\"), ToastUtil.ToastType.ERROR);\n }\n vm.clearFields();\n setFoucusElement('#idSearch');\n });\n };\n\n vm.create = function () {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('project-create', {});\n }\n\n function setFoucusElement(element) {\n if (element) {\n var input = $document[0].querySelector(element);\n if (input !== null) {\n input.focus();\n }\n }\n }\n\n vm.filter = function (keyEvent) {\n if (keyEvent.which === 13)\n vm.searchProject();\n };\n\n vm.edit = function (id) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('project-edit', {\n Id: id\n });\n };\n\n vm.delete = function (id) {\n ProjectService.delete(id).then(\n function (response) {\n if (response) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go($state.current, {}, {\n reload: true\n });\n ToastUtil.showToastMessage($translate.instant(\"project.deleted.success\"), ToastUtil.ToastType.SUCCESS);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"project.deleted.failed\"), ToastUtil.ToastType.WARN);\n }\n }).catch(function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n }\n else if(error.status == $scope.HttpStatusCodeConflict){\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n else{\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n }\n });\n };\n\n vm.validateSys = function () {\n return AuthService.isSysAdmin();\n }\n\n function init() {\n vm.searchProject();\n }\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(SettingsTranslate);\n\n /** @ngInject */\n function SettingsTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'label.new.production.line': 'New Production Line',\n 'label.edit.production.line': 'Production Line Editing',\n 'label.name.id': 'Name or Id',\n 'title.production.line': 'Production Line',\n 'production.line.placeholder.name.id': 'Search by name or id',\n 'label.clear.button': 'Clear',\n 'placeholder.search.button': 'Search',\n 'production.line.label.active': 'Active',\n 'production.line.label.inactive': 'Inactive',\n 'production.line.not.found': 'No production lines found.',\n 'production.line.label.business': 'Business',\n 'input.station.directive.placeholder': 'Enter station name',\n 'input.station.label': 'Station',\n 'production.line.section.acordion.title': 'Station Identification',\n 'production.line.label.section': 'Section/Line',\n 'production.line.label.status': 'Status',\n 'production.line.label.limited': 'Limited production',\n 'production.line.identification': 'Production Line Identification',\n 'production.line.placeholder.section': 'Select section',\n 'production.line.placeholder.business': 'Select a business',\n 'production.line.validation.section.required': 'Section is required.',\n 'production.line.validation.business.required': 'Business is required.',\n 'production.line.validation.section.business': 'There is already a production line with this Section and Business.',\n 'production.line.save.success': 'Production Line saved successfully.',\n 'error.production.line.search': 'There was an error loading Production Line data.',\n 'production.line.deleted.success': 'Production Line deleted successfully.',\n 'input.station.directive.station.alread.inlist.warn' : 'A station with this name already exists.',\n 'production.line.deleted.failed': 'This production line could not be deleted. There are one or more associated records.',\n 'production.line.station.deleted.failed': 'This station could not be removed. There are one or more associated records.'\n });\n\n $translateProvider.translations('pt', {\n 'label.new.production.line': 'Nova Linha de Produção',\n 'label.edit.production.line': 'Edição da Linha de Produção',\n 'label.name.id': 'Nome ou Id',\n 'title.production.line': 'Linha de Produção',\n 'production.line.placeholder.name.id': 'Pesquisar por nome ou id',\n 'label.clear.button': 'Limpar',\n 'placeholder.search.button': 'Pesquisa',\n 'production.line.label.active': 'Ativo',\n 'production.line.label.inactive': 'Inativo',\n 'production.line.not.found': 'Nenhuma linha de produção encontrada.',\n 'production.line.label.business': 'Negócio',\n 'input.station.directive.placeholder': 'Digite o nome da estação',\n 'input.station.label': 'Estação',\n 'production.line.section.acordion.title': 'Identificação da Estação',\n 'production.line.label.section': 'Seção/Linha',\n 'production.line.label.status': 'Status',\n 'production.line.label.limited': 'Produção limitada',\n 'production.line.identification': 'Identificação de Linha de Produção',\n 'production.line.placeholder.section': 'Selecione uma seção',\n 'production.line.placeholder.business': 'Selecione um negócio',\n 'production.line.validation.section.required': 'Seção é obrigatório.',\n 'production.line.validation.business.required': 'Negócio é obrigatório.',\n 'production.line.validation.section.business': 'Já existe uma linha de produção com esta Seção e Negócio.',\n 'production.line.save.success': 'Linha de Produção salva com sucesso.',\n 'error.production.line.search': 'Ocorreu um erro ao carregar os dados da Linha de Produção.',\n 'production.line.deleted.success': 'Linha de Produção excluída com sucesso.',\n 'input.station.directive.station.alread.inlist.warn' : 'Já existe uma estação com esse nome.',\n 'production.line.deleted.failed': 'Não foi possível deletar esta linha de produção. Existe um ou mais registros associados.',\n 'production.line.station.deleted.failed': 'Não foi possível remover esta estação. Existe um ou mais registros associados.'\n });\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('ProductionLineService', ProductionLineService);\n\n /** @ngInject */\n function ProductionLineService($window, $injector, $q, ConfigurationService) {\n var BASE = \"/production-line\";\n return {\n listAll: function (filtro) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + '/', {\n params: filtro\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n save: function (productionLine) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + BASE + \"/\", productionLine, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n loadById: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + '/loadById/' + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n delete: function (Id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + BASE + '/' + Id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n validateStationAssociation: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + '/validateStationAssociation/' + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n };\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(ProductionLineRouter);\n\n /** @ngInject */\n function ProductionLineRouter($stateProvider) {\n\n $stateProvider.state('production-line-list', {\n url: '/settings/production-line',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/settings/production_line/production-line-list.html',\n controller: 'ProductionLineListController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'label.settings'\n },\n authorize: true\n });\n\n $stateProvider.state('production-line-create', {\n url: '/settings/production-line/create',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/settings/production_line/production-line.html',\n controller: 'ProductionLineController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'label.settings'\n },\n authorize: true\n });\n\n $stateProvider.state('production-line-edit', {\n url: '/settings/production-line/edit/:Id',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/settings/production_line/production-line.html',\n controller: 'ProductionLineController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'label.settings'\n },\n authorize: true\n });\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('ProductionLineController', ProductionLineController);\n\n function ProductionLineController($state, ToastUtil, $translate,\n $log, $stateParams, $scope, AuthService, DefaultService, ProductionLineService, $q) {\n\n var vm = this;\n\n vm.businesss = [];\n\n vm.sections = [];\n\n vm.statusList = [{\n id: 1,\n Name: 'production.line.label.active'\n }, {\n id: 0,\n Name: 'production.line.label.inactive'\n }];\n\n vm.productionLine = {\n CsActive: 1,\n Section: null,\n Business: null,\n Company: null,\n Stations: []\n };\n\n vm.save = function () {\n ProductionLineService.save(vm.productionLine).then(\n function () {\n $state.go('production-line-list');\n ToastUtil.showToastMessage($translate.instant(\"production.line.save.success\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(\n function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if (error.status === $scope.HttpStatusCodeConflict) {\n $state.go('production-line-list');\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n } else {\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n if (error.data.Message == 'msg.same.name.error') {\n ToastUtil.showToastMessage($translate.instant('production.line.validation.section.business'), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n }\n }\n });\n };\n\n vm.canSave = function () {\n var canSave = false;\n\n if (vm.productionLine.Stations && vm.productionLine.Stations.length &&\n vm.productionLine.Section && vm.productionLine.Business) {\n canSave = true;\n }\n\n return canSave;\n };\n\n function loadById(id) {\n ProductionLineService.loadById(id)\n .then(\n function (response) {\n vm.productionLine = angular.copy(response);\n setBusinessToEdit();\n }\n ).catch(\n function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"error.production.line.search\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n\n function setBusinessToEdit() {\n if(vm.businesss != null && vm.businesss.length > 0 && vm.productionLine != null && vm.productionLine.Id > 0) {\n var index = vm.businesss.map(function (x) {\n return x.Id;\n }).indexOf(vm.productionLine.Business.Id);\n vm.productionLine.Business = vm.businesss[index];\n }\n }\n\n\n function loadBusiness() {\n DefaultService.loadBussiness().then(function (response) {\n vm.businesss = angular.copy(response);\n setBusinessToEdit();\n }).catch(function (error) {\n $log.log(error);\n if (error.data) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n vm.validateStationAssociation = function(id) {\n var validate = true;\n\n var promisseProductionLine = ProductionLineService.validateStationAssociation(id.id)\n .then(function (response) {\n validate = response;\n }).catch(function (error) {\n $log.log(error);\n if (error.data) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n }\n });\n\n $q.all([promisseProductionLine]).then(function(){\n return validate;\n });\n };\n\n\n function init() {\n loadBusiness();\n if ($stateParams.Id) {\n loadById($stateParams.Id);\n }\n }\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('ProductionLineListController', ProductionLineListController);\n\n function ProductionLineListController($window, $location, $anchorScroll, ProductionLineService, $document,\n $translate, $state, ToastUtil, $scope, moment, $log, AuthService) {\n\n var vm = this;\n vm.itensPerPageList = [\n {name: '5', value: 5, before: 0, after: 6}, \n {name: '10', value: 10, before: 5, after: 11}, \n {name: '20', value: 20, before: 10, after: 21}, \n {name: '30', value: 30, before: 20, after: 31}, \n {name: '40', value: 40, before: 30, after: 41}, \n {name: '50', value: 50, before: 40, after: 51}]\n\n vm.itemPerPage = vm.itensPerPageList[0];\n\n vm.projectList = [];\n vm.totalList = 0;\n vm.searchParams = {\n IdOrName: null,\n Page: 1,\n MaxPerPage: vm.itemPerPage.value\n };\n\n vm.shouldShow = function (item) {\n if(vm.totalList > 0 && item != undefined) {\n return vm.totalList >= item.value || (vm.totalList < item.after && vm.totalList > item.before);\n }\n return false;\n }\n \n vm.changeItemsPerPage = function() {\n if ( vm.itemPerPage == null ) {\n vm.itemPerPage = vm.itensPerPageList[0];\n }\n vm.searchParams.Page = 1;\n vm.searchParams.MaxPerPage = vm.itemPerPage.value;\n vm.searchProject()\n }\n\n vm.search = function() {\n vm.itemPerPage = vm.itensPerPageList[0];\n vm.searchParams.Page = 1;\n vm.searchParams.MaxPerPage = vm.itemPerPage.value;\n vm.searchProject()\n }\n\n vm.clearFields = function () {\n vm.searchParams.IdOrName = null;\n setFoucusElement('#idSearch');\n }\n\n vm.searchProject = function () {\n if (sessionStorage.getItem(\"searchParams\")) {\n vm.searchParams = JSON.parse(sessionStorage.getItem(\"searchParams\"));\n sessionStorage.removeItem(\"searchParams\");\n vm.itensPerPageList.forEach(function(element) {\n if (element.value == vm.searchParams.MaxPerPage) {\n vm.itemPerPage = element;\n return;\n }\n })\n }\n ProductionLineService.listAll(vm.searchParams)\n .then(\n function (response) {\n vm.projectList = response.resultList;\n vm.totalList = response.total;\n\n setFoucusElement('#idSearch');\n })\n .catch(\n function (error) {\n if (error.status !== $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"error.production.line.search\"), ToastUtil.ToastType.ERROR);\n }\n vm.clearFields();\n setFoucusElement('#idSearch');\n });\n };\n\n vm.create = function () {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('production-line-create', {});\n }\n\n function setFoucusElement(element) {\n if (element) {\n var input = $document[0].querySelector(element);\n if (input !== null) {\n input.focus();\n }\n }\n }\n\n vm.filter = function (keyEvent) {\n if (keyEvent.which === 13)\n vm.searchProject();\n };\n\n vm.edit = function (id) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n \n $state.go('production-line-edit', {\n Id: id\n });\n };\n\n vm.delete = function (id) {\n ProductionLineService.delete(id).then(\n function (response) {\n if (response) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n \n $state.go($state.current, {}, {\n reload: true\n });\n ToastUtil.showToastMessage($translate.instant(\"production.line.deleted.success\"), ToastUtil.ToastType.SUCCESS);\n }\n }).catch(function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if (error.status === $scope.HttpStatusCodeConflict) {\n ToastUtil.showToastMessage($translate.instant(\"production.line.deleted.failed\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.delete.generic\"), ToastUtil.ToastType.ERROR);\n }\n });\n };\n\n vm.validateSys = function () {\n return AuthService.isSysAdmin();\n }\n\n function init() {\n vm.searchProject();\n }\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(PartIqcTypeTranslate);\n\n /** @ngInject */\n function PartIqcTypeTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'title.part.iqc.type': 'Iqc Type',\n 'part.iqc.type.name.id.label': 'Name or Id',\n 'part.iqc.type.name.id.placeholder': 'Search by name or id',\n 'part.iqc.type.table.partinspection.label': 'Part Inspection Type',\n 'part.iqc.type.table.business.label': 'Business',\n 'part.iqc.type.delete.success': 'Iqc Type successfully removed.',\n 'part.iqc.type.delete.error': 'An error occurred when try to remove Iqc Type.',\n 'part.iqc.type.new.label': 'New IQC Type',\n 'part.iqc.type.edit.label': 'Edit Iqc Type',\n 'part.iqc.type.select.business.label': 'Select a Business',\n 'part.iqc.type.identification.label': 'Iqc type Identification',\n 'part.iqc.type.subtype.identification.label': 'Subtype Identification',\n 'part.iqc.type.save.success': 'Iqc Type successfully saved.',\n 'part.iqc.type.save.error': 'An error occurred when try to save Iqc Type.',\n 'part.iqc.type.load.error': 'An error occurred when try to load Iqc Type.',\n 'part.iqc.type.validation.company': 'There is already an iqc type with this Inspection Type.',\n 'part.iqc.type.search.error': 'There was an error loading Iqc Type data.',\n 'part.iqc.type.subtype.label': 'Subtype',\n 'part.iqc.type.subtype.placeholder.label': 'Select a subtype name',\n 'part.iqc.type.subtype.duplicated.error.msg': 'A subtype with this name already exists',\n 'part.type.settings.deleted.failed': 'This IQC Type can not be deleted. There are one or more associated records.',\n 'part.sub.type.settings.deleted.failed': 'This SubType can not be deleted. There are one or more associated records.'\n });\n\n $translateProvider.translations('pt', {\n 'title.part.iqc.type': 'Tipo Iqc',\n 'part.iqc.type.name.id.label': 'Nome ou Id',\n 'part.iqc.type.name.id.placeholder': 'Pesquisar por nome ou id',\n 'part.iqc.type.table.partinspection.label': 'Tipo de Inspeção de Peça',\n 'part.iqc.type.table.business.label': 'Negócio',\n 'part.iqc.type.delete.success': 'Tipo Iqc removido com sucesso.',\n 'part.iqc.type.delete.error': 'Ocorreu um erro ao tentar remover o Tipo Iqc.',\n 'part.iqc.type.new.label': 'Novo Tipo IQC',\n 'part.iqc.type.edit.label': 'Editar Tipo Iqc',\n 'part.iqc.type.select.business.label': 'Selecione um Negócio',\n 'part.iqc.type.identification.label': 'Identificação do Tipo Iqc',\n 'part.iqc.type.subtype.identification.label': 'Identificação do Subtipo',\n 'part.iqc.type.save.success': 'Tipo Iqc salvo com sucesso.',\n 'part.iqc.type.save.error': 'Ocorreu um erro ao tentar salvar o Tipo Iqc.',\n 'part.iqc.type.load.error': 'Ocorreu um erro ao tentar carregar o Tipo Iqc.',\n 'part.iqc.type.validation.company': 'Já existe um tipo iqc com este Tipo de Inspeção.',\n 'part.iqc.type.search.error': 'Ocorreu um erro ao carregar os dados do Tipo Iqc.',\n 'part.iqc.type.subtype.label': 'Subtipo',\n 'part.iqc.type.subtype.placeholder.label': 'Selecione o nome do subtipo',\n 'part.iqc.type.subtype.duplicated.error.msg': 'Já existe um subtipo com esse nome',\n 'part.type.settings.deleted.failed': 'Esse IQC Type não pode ser excluído. Há um ou mais registros associados.',\n 'part.sub.type.settings.deleted.failed': 'Esse SubType não pode ser excluído. Há um ou mais registros associados.'\n });\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('PartIqcTypeService', PartIqcTypeService);\n\n /** @ngInject */\n function PartIqcTypeService($window, $injector, $q, ConfigurationService) {\n var BASE = \"/part-iqc-type\";\n return {\n listAll: function (filtro) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + '/', {\n params: filtro\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n save: function (partIqcType) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + BASE + \"/\", partIqcType, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n loadById: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + '/loadById/' + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n delete: function (Id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + BASE + '/' + Id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n };\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(PartIqcTypeRouter);\n\n /** @ngInject */\n function PartIqcTypeRouter($stateProvider) {\n\n $stateProvider.state('part-iqc-type-list', {\n url: '/settings/part-iqc-type',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/settings/part_iqc_type/part-iqc-type-list.html',\n controller: 'PartIqcTypeListController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'label.settings'\n },\n authorize: true\n });\n\n $stateProvider.state('part-iqc-type-create', {\n url: '/settings/part-iqc-type/create',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/settings/part_iqc_type/part-iqc-type-edit.html',\n controller: 'PartIqcTypeEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'label.settings'\n },\n authorize: true\n });\n\n $stateProvider.state('part-iqc-type-edit', {\n url: '/settings/part-iqc-type/edit/:Id',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/settings/part_iqc_type/part-iqc-type-edit.html',\n controller: 'PartIqcTypeEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'label.settings'\n },\n authorize: true\n });\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('PartIqcTypeListController', PartIqcTypeListController);\n\n function PartIqcTypeListController(ListModel, PartIqcTypeService, $document,\n $translate, $state, ToastUtil, $scope, moment, $log) {\n\n var vm = this;\n\n vm.partIqcTypeList = [];\n vm.listModelValues = {};\n vm.totalList = 0;\n\n vm.searchParams = {\n IdOrName: null,\n Page: 1,\n MaxPerPage: 5\n };\n\n vm.clearFields = function () {\n vm.searchParams.IdOrName = null;\n setFoucusElement('#idSearch');\n }\n\n vm.search = function() {\n vm.searchParams.Page = 1;\n vm.searchParams.MaxPerPage = 5;\n vm.searchPartIqcType()\n }\n\n vm.searchPartIqcType = function () {\n if (sessionStorage.getItem(\"searchParams\")) {\n vm.searchParams = JSON.parse(sessionStorage.getItem(\"searchParams\"));\n sessionStorage.removeItem(\"searchParams\");\n }\n PartIqcTypeService.listAll(vm.searchParams)\n .then(\n function (response) {\n vm.partIqcTypeList = response.resultList;\n vm.totalList = response.total;\n\n initListViewModel(vm.partIqcTypeList);\n\n setFoucusElement('#idSearch');\n })\n .catch(\n function (error) {\n if (error.status !== $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"part.iqc.type.search.error\"), ToastUtil.ToastType.ERROR);\n }\n vm.clearFields();\n setFoucusElement('#idSearch');\n });\n };\n\n vm.filter = function (keyEvent) {\n if (keyEvent.which === 13)\n vm.searchPartIqcType();\n };\n\n vm.create = function () {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('part-iqc-type-create', {});\n }\n\n function edit(id) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('part-iqc-type-edit', {\n Id: id\n });\n }\n\n function initListViewModel(items) {\n\n var idStyle = \"width: 5%;\";\n var nameStyle = \"width: 50%;\";\n //PROPERTIES PARAMS: header: *, rowAttr: *, isHighlight: *, valueFn: *, style: *, cssClass: *, cssClassFn:\n var properties = [\n ListModel.getProperties(\"label.id\", \"Id\", false, null, idStyle, null, null),\n ListModel.getProperties(\"part.iqc.type.table.partinspection.label\", \"Name\", true, null, nameStyle, null, null),\n ListModel.getProperties(\"label.status.header\", \"CsActive\", false, getCsActiveLabel, \"\", null, getCsActiveCss, null)\n ];\n //Build menu: menuType: *, identificationKey: *, descriptionKey: *, actionFn: *\n var actionMenuItems = [\n ListModel.getActionMenuItem(ListModel.ActionMenuEnum.EDIT, \"Id\", null, edit),\n ListModel.getActionMenuItem(ListModel.ActionMenuEnum.DELETE, \"Id\", \"Name\", deleteIqcType)\n ];\n //Get parent Action Menu: menuItems: *, type: *\n var actionMenu = ListModel.getActionMenu(actionMenuItems, ListModel.ActionMenuTypeEnum.INLINE)\n vm.listModelValues = ListModel.getListModel(properties, items, actionMenu);\n }\n\n function getCsActiveLabel(csActive) {\n var statusKey = \"label.inactive\";\n if (csActive == true || csActive == \"true\") {\n statusKey = \"label.active\";\n }\n\n return statusKey;\n }\n\n function getCsActiveCss(csActive) {\n var result = \"\";\n if (csActive == true || csActive == \"true\") {\n result = 'ng-binding label aqms-label-active';\n } else {\n result = 'ng-binding label aqms-label-inactive';\n }\n\n return result;\n }\n\n function setFoucusElement(element) {\n if (element) {\n var input = $document[0].querySelector(element);\n if (input !== null) {\n input.focus();\n }\n }\n }\n\n function deleteIqcType(id) {\n PartIqcTypeService.delete(id).then(\n function (response) {\n if (response) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go($state.current, {}, {\n reload: true\n });\n ToastUtil.showToastMessage($translate.instant(\"part.iqc.type.delete.success\"), ToastUtil.ToastType.SUCCESS);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"part.iqc.type.delete.error\"), ToastUtil.ToastType.WARN);\n }\n }).catch(function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if (error.status === $scope.HttpStatusCodeConflict) {\n ToastUtil.showToastMessage($translate.instant(\"part.type.settings.deleted.failed\"), ToastUtil.ToastType.WARN);\n } \n else {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.delete.generic\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function init() {\n vm.searchPartIqcType();\n }\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('PartIqcTypeEditController', PartIqcTypeEditController);\n\n function PartIqcTypeEditController($state, ToastUtil, $translate,\n $log, $stateParams, $scope, AuthService, DefaultService, PartIqcTypeService) {\n\n var vm = this;\n\n vm.statusList = [{\n id: 1,\n Name: 'label.active'\n }, {\n id: 0,\n Name: 'label.inactive'\n }];\n\n vm.partIqcType = {\n CsActive: 1\n }\n\n vm.save = function () {\n PartIqcTypeService.save(vm.partIqcType).then(\n function () {\n $state.go('part-iqc-type-list');\n ToastUtil.showToastMessage($translate.instant(\"part.iqc.type.save.success\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(\n function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if (error.status === $scope.HttpStatusCodeConflict) {\n $state.go('part-iqc-type-list');\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n } else {\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n if (error.data.Message == 'msg.same.name.error') {\n ToastUtil.showToastMessage($translate.instant('part.iqc.type.validation.company'), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n }\n }\n });\n };\n\n function loadById(id) {\n PartIqcTypeService.loadById(id)\n .then(\n function (response) {\n vm.partIqcType = angular.copy(response);\n vm.partIqcType.CsActive = vm.partIqcType.CsActive == true ? 1 : 0;\n }\n ).catch(\n function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"part.iqc.type.load.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function init() {\n if ($stateParams.Id) {\n loadById($stateParams.Id);\n }\n }\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(ModelTranslate);\n\n /** @ngInject */\n function ModelTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n\n 'title.model.and.variant': 'Models and Variants',\n 'title.model.new': 'New Model',\n 'title.model.edit': 'Edit Model',\n 'title.model.modelVariantIdentification' : 'Model Identification',\n 'title.model.variant' : 'Variant Identification',\n 'placeholder.model.name.id': 'Search by title or id',\n 'placeholder.model.title': 'Insert a title...',\n 'placeholder.model.variant' : 'Enter the variant code...',\n 'label.clean.button': 'Clean',\n 'label.search.button': 'Search',\n 'label.new.model.button': 'New Model',\n 'label.active.button': 'Active',\n 'label.variant': 'Variant',\n 'label.csActive': 'Active',\n 'label.csInactive': 'Inactive',\n 'label.model.title' : 'Title',\n 'label.model.title.id' : 'Title or Id',\n 'label.model.variant.code' : 'Variant code',\n 'msg.error.models.search' : 'An error occurred when try to load models.',\n 'msg.error.model.search' : 'An error occurred when try to load model.',\n 'msg.error.model.save' : 'An error occurred when try to save a model.',\n 'msg.error.model.delete' : 'An error occurred when try to delete a model.',\n 'msg.error.model.already.updated' : 'An error occurred when try to save a model. The item has already updated.',\n 'msg.error.model.delete.has.associations': 'This model could not be deleted. There are one or more associated records.',\n 'msg.error.variant.delete.has.associations': 'This variant could not be deleted. There are one or more associated records.',\n 'msg.error.variant.delete': 'An error occurred when try to delete a variant.',\n 'msg.validation.model.title.required' : 'Title Model is required.',\n 'msg.validation.model.variants.required' : 'A variant is required.',\n 'msg.validation.model.variant.must.have.one' : 'The variant can not be deleted. The model must have at least one variant.',\n 'msg.validation.model.variant.already.exist' : 'The variant already exist.',\n 'msg.validation.model.delete.has.associations' : 'This model has an association with client #client, do you really want to remove the model?',\n 'msg.success.model.save' : 'The model was saved with success.',\n 'msg.success.model.edit' : 'The model was edited with success.',\n 'msg.success.model.deleted' : 'The model was deleted with success.',\n 'msg.model.not.found' : 'No models found.',\n 'msg.validation.variant.associated.another.model' : 'It is variant to be associated with another model.'\n });\n\n $translateProvider.translations('pt', {\n 'title.model.and.variant': 'Modelos e Variantes',\n 'title.model.new': 'Novo Modelo',\n 'title.model.edit': 'Editar Modelo',\n 'title.model.modelVariantIdentification' : 'Identificação de Modelo',\n 'title.model.variant' : 'Identificação de Variante',\n 'placeholder.model.name.id': 'Pesquisar por título ou id',\n 'placeholder.model.title': 'Insira um título...',\n 'placeholder.model.variant' : 'Insira o código da variante...',\n 'label.clean.button': 'Limpar',\n 'label.search.button': 'Buscar',\n 'label.new.model.button': 'Novo Modelo',\n 'label.active.button': 'Ativo',\n 'label.variant': 'Variante',\n 'label.csActive': 'Ativo',\n 'label.csInactive': 'Inativo',\n 'label.model.title' : 'Título',\n 'label.model.title.id' : 'Título ou Id',\n 'label.model.variant.code' : 'Código da variante',\n 'msg.error.models.search' : 'Ocorreu um erro ao pesquisar os modelos.',\n 'msg.error.model.search' : 'Ocorreu um erro ao pesquisar o modelo.',\n 'msg.error.model.save' : 'Ocorreu um erro ao salvar o modelo.',\n 'msg.error.model.delete' : 'Ocorreu um erro ao excluir o modelo.',\n 'msg.error.model.already.updated' : 'Ocorreu um erro ao salvar o modelo. O item foi modificado anteriormente.',\n 'msg.error.model.delete.has.associations': 'Este modelo não pôde ser excluído. Há um ou mais registros associados.',\n 'msg.validation.model.title.required' : 'Título do modelo é obrigatório.',\n 'msg.validation.model.variants.required' : 'Variante é obrigatória.',\n 'msg.validation.model.variant.must.have.one' : 'A variante não pode ser excluída. O modelo deve ter pelo menos uma variante.',\n 'msg.validation.model.variant.already.exist' : 'A variante já existe',\n 'msg.validation.model.delete.has.associations' : 'Este modelo possui associação com o cliente #client, você realmente deseja remover o Modelo?',\n 'msg.error.variant.delete.has.associations': 'Esta variante não pôde ser excluída. Há um ou mais registros associados.',\n 'msg.error.variant.delete': 'Ocorreu um erro ao excluir a variante.',\n 'msg.success.model.save' : 'O modelo foi salvo com sucesso.',\n 'msg.success.model.edit' : 'O modelo foi editado com sucesso.',\n 'msg.success.model.deleted' : 'O modelo foi excluído com sucesso.',\n 'msg.model.not.found' : 'Nenhum modelo encontrado.',\n 'msg.validation.variant.associated.another.model' : 'Está variante estar associada a outro modelo.'\n });\n }\n})();\n\n/**\n * Created by anderson.lins on 10/05/2017.\n */\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .factory('ModelService', ModelService);\n\n /** @ngInject */\n function ModelService($injector, $q, ConfigurationService) {\n var BASE = \"/model/\";\n return {\n listModelsWithNoClients: function () {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + 'byNoClients')\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n listModelsWithoutClients: function () {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + 'byNoClients')\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n saveModel: function (model) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + BASE, model)\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n listAllModels: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + 'all', {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getModelById: function (Id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n $http.get(ConfigurationService.getServiceHost() + BASE + Id)\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n deleteModel: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + BASE + id)\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n deleteVariant: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + BASE + 'variant/'+ id)\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n sameNameVariant: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + 'sameNameVariant', {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n }\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(ModelRouter);\n\n /** @ngInject */\n function ModelRouter($stateProvider) {\n\n $stateProvider.state('model-list', {\n url: '/settings/model',\n views: {\n 'company-view' : {},\n 'main-view' : {\n templateUrl: 'app/settings/model/model-list.html',\n controller: 'ModelListController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'label.settings'\n },\n authorize: true\n });\n\n $stateProvider.state('model-create', {\n url: '/settings/model/create',\n views: {\n 'company-view' : {},\n 'main-view' : {\n templateUrl: 'app/settings/model/model-edit.html',\n controller: 'ModelController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'label.settings'\n },\n authorize: true\n });\n\n $stateProvider.state('model-edit', {\n url: '/settings/model/edit/:Id',\n views: {\n 'company-view' : {},\n 'main-view' : {\n templateUrl: 'app/settings/model/model-edit.html',\n controller: 'ModelController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'label.settings'\n },\n authorize: true\n });\n }\n})();\n\n/**\n * Created by anderson.lins on 12/05/2017.\n */\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('ModelController', ModelController);\n\n function ModelController(ModelService, $scope, $state, ToastUtil, $translate, $log, $stateParams) {\n\n var vm = this;\n\n vm.statusList = [{\n id: 1,\n Name: 'label.csActive'\n }, {\n id: 0,\n Name: 'label.csInactive'\n }];\n\n vm.showAddbt = true;\n vm.showEditbt = false;\n vm.VariantTemp = '';\n\n vm.Page = 1;\n\n vm.Model = {\n Title: '',\n CsActive: 1,\n Company: {},\n Variants: [],\n CreatedDate: ''\n };\n\n vm.idToEdit = '';\n\n var saving = false;\n\n vm.init = function () {\n\n if ($stateParams.Id) {\n vm.idToEdit = $stateParams.Id;\n getModelById($stateParams.Id);\n }\n\n };\n\n function getModelById() {\n ModelService.getModelById($stateParams.Id)\n .then(\n function (response) {\n vm.Model = angular.copy(response);\n\n if (vm.Model.CsActive) {\n vm.Model.CsActive = 1;\n } else {\n vm.Model.CsActive = 0;\n }\n }\n )\n .catch(\n function (error) {\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.model.search\"), ToastUtil.ToastType.ERROR);\n }\n }\n );\n }\n\n vm.addVariant = function (variant) {\n if (vm.showAddbt) {\n var variantTemp = angular.copy(variant);\n if (variantTemp && variantTemp.Code.length > 0) {\n if (!variantAlreadyExist(variantTemp)) {\n variantAlreadyExistBack(variantTemp, false);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"msg.validation.model.variant.already.exist\"), ToastUtil.ToastType.WARN);\n }\n }\n } else {\n vm.editVariant(variant);\n }\n\n };\n\n vm.initEditVariant = function (variant) {\n vm.VariantTemp = angular.copy(variant);\n vm.VariantTemp.$$hashKey = variant.$$hashKey;\n\n vm.showAddbt = false;\n vm.showEditbt = true;\n };\n\n vm.editVariant = function (variant) {\n if (!variantAlreadyExist(variant)) {\n variantAlreadyExistBack(variant, true);\n } else {\n vm.showAddbt = true;\n vm.showEditbt = false;\n vm.VariantTemp = '';\n ToastUtil.showToastMessage($translate.instant(\"msg.validation.model.variant.already.exist\"), ToastUtil.ToastType.WARN);\n }\n };\n\n function variantAlreadyExistBack(variant, edit) {\n var filter = {\n Title: variant.Code,\n DependencyFilterId: vm.Model.Id\n }\n ModelService.sameNameVariant(filter)\n .then(function (response) {\n\n if (!response) {\n\n if (edit) {\n angular.forEach(vm.Model.Variants, function (value) {\n if (vm.VariantTemp.Id && vm.VariantTemp.Id != '' && value.Id == vm.VariantTemp.Id) {\n value.Code = vm.VariantTemp.Code;\n } else if (value.$$hashKey == vm.VariantTemp.$$hashKey) {\n value.Code = vm.VariantTemp.Code;\n }\n });\n } else {\n vm.Model.Variants.push(angular.copy(vm.VariantTemp));\n }\n\n } else {\n ToastUtil.showToastMessage($translate.instant(\"msg.validation.variant.associated.another.model\"), ToastUtil.ToastType.WARN);\n }\n\n vm.showAddbt = true;\n vm.showEditbt = false;\n vm.VariantTemp = '';\n\n }).catch(\n function (error) {\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.model.search\"), ToastUtil.ToastType.ERROR);\n }\n }\n );\n }\n\n function variantAlreadyExist(variant) {\n var alreadyExist = false;\n\n angular.forEach(vm.Model.Variants, function (value) {\n if (value.Code.toLowerCase() == variant.Code.toLowerCase()) {\n alreadyExist = true;\n }\n });\n\n return alreadyExist;\n }\n\n vm.deleteVariantFromList = function (variant) {\n\n if(!(vm.Model.Variants.length > 1)){\n ToastUtil.showToastMessage($translate.instant('msg.validation.model.variant.must.have.one'), ToastUtil.ToastType.WARN);\n return;\n }\n\n if(angular.isDefined(variant) && variant.Id > 0){\n ModelService.deleteVariant(variant.Id)\n .then(function(){\n angular.forEach(vm.Model.Variants, function (value, key) {\n if (variant.Id) {\n if (value.Id == variant.Id) {\n vm.Model.Variants.splice(key, 1);\n }\n }\n })\n })\n .catch(function(error){\n $log.log(error);\n\n if (error.status === $scope.HttpStatusCodeConflict) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n else if(error.status != $scope.HttpStatusUnauthorized){\n ToastUtil.showToastMessage($translate.instant(\"msg.error.variant.delete\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n else{\n angular.forEach(vm.Model.Variants, function (value, key) {\n if (value.Code == variant.Code) {\n vm.Model.Variants.splice(key, 1);\n }\n })\n }\n };\n\n vm.save = function () {\n if (!vm.canSave())\n return false;\n\n saving = true;\n\n ModelService.saveModel(vm.Model)\n .then(\n function () {\n $state.go('model-list');\n ToastUtil.showToastMessage($translate.instant(\"msg.success.model.save\"), ToastUtil.ToastType.SUCCESS);\n saving = false;\n }\n )\n .catch(\n function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if (error.status === $scope.HttpStatusCodeConflict) {\n $state.go('model-list');\n ToastUtil.showToastMessage($translate.instant(\"msg.error.model.already.updated\"), ToastUtil.ToastType.WARN);\n } else if (error.data && error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.model.save\"), ToastUtil.ToastType.ERROR);\n }\n saving = false;\n });\n };\n\n vm.canSave = function () {\n return vm.validateTitle() && vm.Model.Variants.length > 0 && !saving\n };\n\n vm.validateTitle = function () {\n if (vm.Model.Title)\n return true;\n };\n\n vm.init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('ModelListController', ModelListController);\n\n function ModelListController(ModelService, $document, $translate, $state, ToastUtil, $scope, $log, AuthService) {\n\n var vm = this;\n\n vm.itensPerPageList = [\n {name: '5', value: 5, before: 0, after: 6}, \n {name: '10', value: 10, before: 5, after: 11}, \n {name: '20', value: 20, before: 10, after: 21}, \n {name: '30', value: 30, before: 20, after: 31}, \n {name: '40', value: 40, before: 30, after: 41}, \n {name: '50', value: 50, before: 40, after: 51}]\n\n vm.itemPerPage = vm.itensPerPageList[0];\n\n vm.modelList = [];\n vm.totalList = 0;\n vm.searchParams = {\n IdOrName: null,\n Page: 1,\n MaxPerPage: vm.itemPerPage.value\n };\n\n\n vm.shouldShow = function (item) {\n if(vm.totalList > 0 && item != undefined) {\n return vm.totalList >= item.value || (vm.totalList < item.after && vm.totalList > item.before);\n }\n return false;\n }\n \n vm.changeItemsPerPage = function() {\n if ( vm.itemPerPage == null ) {\n vm.itemPerPage = vm.itensPerPageList[0];\n }\n vm.searchParams.Page = 1;\n vm.searchParams.MaxPerPage = vm.itemPerPage.value;\n vm.searchModel()\n }\n\n vm.search = function() {\n vm.itemPerPage = vm.itensPerPageList[0];\n vm.searchParams.Page = 1;\n vm.searchParams.MaxPerPage = vm.itemPerPage.value;\n vm.searchModel()\n }\n\n vm.clearFields = function () {\n vm.searchParams.IdOrName = '';\n setFocusElement('#idSearch');\n };\n\n vm.searchModel = function () {\n if (sessionStorage.getItem(\"searchParams\")) {\n vm.searchParams = JSON.parse(sessionStorage.getItem(\"searchParams\"));\n sessionStorage.removeItem(\"searchParams\");\n vm.itensPerPageList.forEach(function(element) {\n if (element.value == vm.searchParams.MaxPerPage) {\n vm.itemPerPage = element;\n return;\n }\n })\n }\n ModelService.listAllModels(vm.searchParams)\n .then(\n function (response) {\n vm.modelList = concatVariantsNames(response.resultList);\n vm.totalList = response.total;\n\n setFocusElement('#idSearch');\n })\n .catch(\n function (error) {\n if (error.status !== $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.models.search\"), ToastUtil.ToastType.ERROR);\n }\n vm.clearFields();\n setFocusElement('#idSearch');\n });\n };\n\n vm.create = function () {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('model-create', {});\n }\n\n function concatVariantsNames(modelList){\n angular.forEach(modelList, function (model){\n\n var variantsNames = '';\n\n angular.forEach(model.Variants, function(variant){\n if(variantsNames.length > 0){\n variantsNames = variantsNames + ' - ' + variant.Code;\n }\n else{\n variantsNames = variant.Code;\n }\n });\n\n model.VariantNames = variantsNames;\n });\n\n return modelList;\n }\n\n function setFocusElement(element) {\n if (element) {\n var input = $document[0].querySelector(element);\n if (input !== null) {\n input.focus();\n }\n }\n }\n\n vm.filter = function (keyEvent) {\n if (keyEvent.which === 13)\n vm.searchModel();\n };\n\n vm.edit = function (id) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('model-edit', {\n Id: id\n });\n };\n\n vm.delete = function (id) {\n ModelService.deleteModel(id)\n .then(\n function () {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go($state.current, {}, {\n reload: true\n });\n ToastUtil.showToastMessage($translate.instant(\"msg.success.model.deleted\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(function (error) {\n $log.log(error);\n\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n }\n else if(error.status == $scope.HttpStatusCodeConflict){\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n else{\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n }\n\n });\n };\n\n vm.getDeleteCustomDescription = function(item) {\n if(item.Client && item.Client.Title.length > 0){\n return $translate.instant('msg.validation.model.delete.has.associations').replace(\"#client\", item.Client.Title);\n }\n else{\n var message = $translate.instant('msg.confirm.remove');\n return message.replace(\"$description\", item.Title);\n }\n };\n\n vm.init = function () {\n vm.searchModel();\n };\n\n vm.validateSys = function () {\n return AuthService.isSysAdmin();\n }\n\n vm.init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(SettingsTranslate);\n\n /** @ngInject */\n function SettingsTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'label.new.company': 'New Company',\n 'label.edit.company': 'Company Editing',\n 'title.company': 'Manage Companies',\n 'company.placeholder.name.id': 'Search by name or id',\n 'placeholder.clean.button': 'Clean',\n 'placeholder.search.button': 'Search',\n 'company.label.active': 'Active',\n 'company.label.inactive': 'Inactive',\n 'label.address': 'Address',\n 'company.not.found': 'No companies found.',\n 'company.identification': 'Company Identification',\n 'company.label.name': 'Name',\n 'company.label.address': 'Address',\n 'company.label.contact': 'Phone',\n 'company.label.status': 'Status',\n 'company.label.logo': 'Logo',\n 'company.placeholder.name': 'Enter the company name',\n 'company.placeholder.address': 'Enter company address',\n 'company.placeholder.contact': 'Enter phone number',\n 'company.save.success': 'Company saved successfully.',\n 'error.company.search': 'There was an error loading while loading company data.',\n 'company.deleted.success': \"Company was successfully deleted.\",\n 'company.deleted.failed': 'This company could not be deleted. There are one or more associated records.',\n 'company.save.failed': 'There was an error trying to save the company',\n 'company.validation.address.required': 'Address is required.',\n 'company.validation.contact.required': 'Contact is required.',\n 'company.save.fail.duplicate': 'An error occurred while trying to save the company. A company with the registered name already exists.',\n 'company.identification.business': 'Business Identification',\n 'company.identification.admin': 'Administrator Identification',\n 'company.label.login': 'Login',\n 'company.label.email': 'Email',\n 'company.label.reenviar.senha': 'Resend Password',\n 'company.label.name.area': 'Area',\n 'company.label.name.business': 'Business',\n 'company.placeholder.login': 'Enter administrator login',\n 'company.placeholder.email': 'Enter administrator email',\n 'company.placeholder.name.area': 'Enter the area',\n 'company.placeholder.name.business': 'Enter business',\n 'company.resend.password.error': 'There was an error sending email.',\n 'company.user.notfound.error': \"The user was not found. Contact your system administrator.\",\n 'company.resend.password.success': \"Password successfully sent.\",\n 'validation.email.invalid': 'Invalid email.',\n 'hint.settings.company.help.business': 'This is the first business area of your company. For example, for a company that works with IT solutions can be divided into the area of business Hardware and Software.',\n 'hint.settings.company.help.area': 'This is your company\\'s first support area. For example, for a company that works with IT solutions can be divided into support area Quality, Human Resources and Facilities.'\n });\n\n $translateProvider.translations('pt', {\n 'label.new.company': 'Nova Empresa',\n 'label.edit.company': 'Edição de Empresa',\n 'title.company': 'Gerenciar Empresas',\n 'company.placeholder.name.id': 'Pesquisar por nome ou id',\n 'placeholder.clean.button': 'Limpar',\n 'placeholder.search.button': 'Buscar',\n 'company.label.active': 'Ativa',\n 'company.label.inactive': 'Inativa',\n 'label.address': 'Endereço',\n 'company.not.found': 'Nenhuma empresa encontrada.',\n 'company.identification': 'Identificação de Empresa',\n 'company.label.name': 'Nome',\n 'company.label.address': 'Endereço',\n 'company.label.contact': 'Telefone',\n 'company.label.status': 'Status',\n 'company.label.logo': 'Logotipo',\n 'company.placeholder.name': 'Digite o nome da empresa',\n 'company.placeholder.address': 'Digite o endereço da empresa',\n 'company.placeholder.contact': 'Digite o número de telefone',\n 'company.save.success': 'Empresa salva com sucesso.',\n 'error.company.search': 'Ocorreu um erro ao carregar ao carregar os dados da empresa.',\n 'company.deleted.success': \"Empresa excluída com sucesso\",\n 'company.deleted.failed': 'Não foi possível deletar essa empresa. Existe um ou mais registros associados.',\n 'company.save.failed': 'Ocorreu um erro ao tentar salvar a empresa',\n 'company.validation.address.required': 'Endereço é obrigatório.',\n 'company.validation.contact.required': 'Contato é obrigatório.',\n 'company.save.fail.duplicate': 'Ocorreu um erro ao tentar salvar a empresa. Já existe uma empresa com o nome cadastrado.',\n 'company.identification.business': 'Identificação de Negócio',\n 'company.identification.admin': 'Identificação de Administrador',\n 'company.label.login': 'Login',\n 'company.label.email': 'Email',\n 'company.label.reenviar.senha': 'Reenviar Senha',\n 'company.label.name.area': 'Área',\n 'company.label.name.business': 'Negócio',\n 'company.placeholder.login': 'Digite o login do administrador',\n 'company.placeholder.email': 'Digite o email do administrador',\n 'company.placeholder.name.area': 'Digite a área',\n 'company.placeholder.name.business': 'Digite o negócio',\n 'company.resend.password.error': 'Ocorreu um erro ao enviar E-mail.',\n 'company.user.notfound.error': \"O usuário não foi encontrado. Entre em contato com o Administrador do sistema.\",\n 'company.resend.password.success': \"Senha enviada com sucesso.\",\n 'validation.email.invalid': 'Email inválido.',\n 'hint.settings.company.help.business': 'Esta é a primeira área de negócio de sua empresa. Por exemplo, para uma Empresa que trabalha com soluçoes de TI pode ser divido em área de negócio Hardware e Software.',\n 'hint.settings.company.help.area': 'Esta é a primeira área de suporte de sua empresa. Por exemplo, para uma Empresa que trabalha com soluçoes de TI pode ser divido em área de suporte Qualidade, Recursos Humanos e Facilidades. '\n });\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('CompanyService', CompanyService);\n\n /** @ngInject */\n function CompanyService($injector, $q, ConfigurationService) {\n var BASE = \"/company\";\n return {\n listAll: function (filtro) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + '/', {\n params: filtro\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n save: function (company) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + BASE + \"/\", company, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n loadById: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + '/loadById/' + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n delete: function (Id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + BASE + '/' + Id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n resendPassword: function (user) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + BASE + \"/resend-password/\", user, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n };\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(CompanyRouter);\n\n /** @ngInject */\n function CompanyRouter($stateProvider) {\n\n $stateProvider.state('company-list', {\n url: '/settings/company',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/settings/company/company-list.html',\n controller: 'CompanyListController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'label.settings'\n },\n authorize: true\n });\n\n $stateProvider.state('company-create', {\n url: '/settings/company/create',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/settings/company/company.html',\n controller: 'CompanyController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'label.settings'\n },\n authorize: true\n });\n\n $stateProvider.state('company-edit', {\n url: '/settings/company/edit/:Id',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/settings/company/company.html',\n controller: 'CompanyController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'label.settings'\n },\n authorize: true\n });\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('CompanyController', CompanyController);\n\n function CompanyController(ModelService, CompanyService, $state, ToastUtil, $translate, $log, $stateParams,\n $scope, FileService) {\n\n var vm = this;\n\n vm.open = false;\n vm.toggleTooltip = function (action) {\n if(action) {\n vm.open = true;\n } else {\n vm.open = false;\n }\n }\n\n vm.statusList = [{\n id: 1,\n Name: 'company.label.active'\n }, {\n id: 0,\n Name: 'company.label.inactive'\n }];\n\n vm.logo = [];\n\n vm.company = {\n Name: null,\n CsActive: 1,\n Path: null,\n FileName: null,\n Address: null,\n Contact: null,\n UpdatedRegister: null,\n Business: null,\n Area: null,\n User: {\n Email: null,\n Login: null\n }\n };\n\n function init() {\n if ($stateParams.Id) {\n loadById($stateParams.Id);\n }\n }\n\n vm.save = function () {\n\n if (vm.logo.length) {\n vm.company.Path = vm.logo[0].Path;\n vm.company.FileName = vm.logo[0].FileName;\n } else {\n vm.company.Path = null;\n vm.company.FileName = null;\n }\n\n CompanyService.save(vm.company)\n .then(\n function () {\n $state.go('company-list');\n ToastUtil.showToastMessage($translate.instant(\"company.save.success\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(\n function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if (error.status === $scope.HttpStatusCodeConflict) {\n $state.go('company-list');\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n }\n });\n };\n\n vm.canSave = function () {\n var canSave = false;\n\n if (vm.company.Name && vm.company.Address && vm.company.Contact &&\n vm.company.User.Login && vm.company.User.Email && vm.company.Business && vm.company.Area) {\n canSave = true;\n }\n\n return canSave;\n };\n\n function loadById(id) {\n CompanyService.loadById(id)\n .then(\n function (response) {\n vm.company = angular.copy(response);\n if (vm.company.Path) {\n vm.logo.push({\n 'Path': vm.company.Path,\n 'FileName': vm.company.FileName\n });\n FileService.download(vm.logo[0]).then(function (response) {\n var newFIle = new Blob([response], {});\n vm.logo[0].FileBlob = URL.createObjectURL(newFIle);\n vm.logo[0].Size = newFIle.size;\n }).catch(function (error) {\n $log.log(error);\n });\n }\n }\n ).catch(\n function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"error.company.search\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n vm.resendPassword = function () {\n if (vm.company.User.Email) {\n CompanyService.resendPassword(vm.company.User)\n .then(\n function () {\n ToastUtil.showToastMessage($translate.instant(\"company.resend.password.success\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(\n function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if (error.data.Message) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant('company.resend.password.error'), ToastUtil.ToastType.ERROR);\n }\n });\n }\n }\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('CompanyListController', CompanyListController);\n\n function CompanyListController($window, $location, $anchorScroll, CompanyService, $document,\n $translate, $state, ToastUtil, $scope, moment, $log, AuthService) {\n\n var vm = this;\n\n vm.itensPerPageList = [\n {name: '5', value: 5, before: 0, after: 6}, \n {name: '10', value: 10, before: 5, after: 11}, \n {name: '20', value: 20, before: 10, after: 21}, \n {name: '30', value: 30, before: 20, after: 31}, \n {name: '40', value: 40, before: 30, after: 41}, \n {name: '50', value: 50, before: 40, after: 51}]\n\n vm.itemPerPage = vm.itensPerPageList[0];\n \n vm.companyList = [];\n vm.totalList = 0;\n vm.searchParams = {\n IdOrName: null,\n Page: 1,\n MaxPerPage: vm.itemPerPage.value\n };\n\n vm.clearFields = function () {\n vm.searchParams.IdOrName = null;\n setFoucusElement('#idSearch');\n }\n\n vm.shouldShow = function (item) {\n if(vm.totalList > 0 && item != undefined) {\n return vm.totalList >= item.value || (vm.totalList < item.after && vm.totalList > item.before);\n }\n return false;\n }\n \n vm.changeItemsPerPage = function() {\n if ( vm.itemPerPage == null ) {\n vm.itemPerPage = vm.itensPerPageList[0];\n }\n vm.searchParams.Page = 1;\n vm.searchParams.MaxPerPage = vm.itemPerPage.value;\n vm.searchCompany()\n }\n \n vm.create = function () {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('company-create', {});\n }\n\n vm.search = function() {\n vm.itemPerPage = vm.itensPerPageList[0];\n vm.searchParams.Page = 1;\n vm.searchParams.MaxPerPage = vm.itemPerPage.value;\n vm.searchCompany()\n }\n\n vm.searchCompany = function () {\n if (sessionStorage.getItem(\"searchParams\")) {\n vm.searchParams = JSON.parse(sessionStorage.getItem(\"searchParams\"));\n sessionStorage.removeItem(\"searchParams\");\n vm.itensPerPageList.forEach(function(element) {\n if (element.value == vm.searchParams.MaxPerPage) {\n vm.itemPerPage = element;\n return;\n }\n })\n }\n CompanyService.listAll(vm.searchParams)\n .then(\n function (response) {\n vm.companyList = response.resultList;\n vm.totalList = response.total;\n\n setFoucusElement('#idSearch');\n })\n .catch(\n function (error) {\n if (error.status !== $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"error.company.search\"), ToastUtil.ToastType.ERROR);\n }\n vm.clearFields();\n setFoucusElement('#idSearch');\n });\n };\n\n function setFoucusElement(element) {\n if (element) {\n var input = $document[0].querySelector(element);\n if (input !== null) {\n input.focus();\n }\n }\n }\n\n vm.filter = function (keyEvent) {\n if (keyEvent.which === 13)\n vm.searchCompany();\n };\n\n vm.edit = function (id) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('company-edit', {\n Id: id\n });\n };\n\n vm.delete = function (id) {\n CompanyService.delete(id).then(\n function (response) {\n if (response) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go($state.current, {}, {\n reload: true\n });\n ToastUtil.showToastMessage($translate.instant(\"company.deleted.success\"), ToastUtil.ToastType.SUCCESS);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"company.deleted.failed\"), ToastUtil.ToastType.WARN);\n }\n }).catch(function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.delete.generic\"), ToastUtil.ToastType.ERROR);\n }\n });\n };\n\n vm.phoneFormat = function (phone) {\n\n if (phone) {\n var formato = new RegExp(\"^([0-9]{2})([0-9]{4,5})([0-9]{4})$\", \"gi\"),\n tamanho = 11;\n phone = phone.replace(/\\D/g, \"\");\n\n if (phone.length > tamanho) {\n phone = phone.substring(0, tamanho);\n }\n\n if (formato.test(phone)) {\n phone = phone.replace(formato, \"($1) $2-$3\");\n }\n }\n return phone;\n }\n\n vm.init = function () {\n vm.searchCompany();\n };\n\n vm.validateSys = function () {\n return AuthService.isSysAdmin();\n }\n\n vm.init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(ClientTranslate);\n\n /** @ngInject */\n function ClientTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'settings.client.page.name.label': 'Client',\n 'settings.client.table.name.label': 'Name',\n 'settings.client.table.status.label': 'Status',\n 'settings.client.table.model.name.label' : 'Model',\n 'settings.client.search.hint.status.label': 'All Status',\n 'settings.client.btn.new.label': 'New Client',\n 'settings.client.edit.label': 'Edit Client',\n 'settings.client.search.name.hint.msg': 'Search by name',\n 'settings.client.list.error': 'Error on load client list.',\n 'settings.client.placeholder.name' : 'Enter the name of the client',\n 'settings.client.edit.name.required.msg': 'Name field is required.',\n 'settings.client.edit.name.model.variant.acordion.title': 'Models and Variants',\n 'settings.client.edit.identification.acordion.title': 'Client Identification',\n 'settings.client.edit.save.error.msg': 'Error on save client.',\n 'settings.client.edit.save.success.msg': 'Client successfully saved.',\n 'settings.client.delete.success.msg': 'Client successfully removed.',\n 'settings.client.delete.error.msg': 'Error on client remove.',\n 'msg.error.client.delete.has.associations' : 'This client could not be deleted. There are one or more associated records.',\n 'settings.client.table.description.label': 'Description',\n 'settings.client.table.initDate.label': 'Due Date Initial',\n 'settings.client.table.finalDate.label': 'Due Date Final',\n 'settings.client.search.description.hint.msg': 'Search by description'\n });\n\n $translateProvider.translations('pt', {\n 'settings.client.page.name.label': 'Cliente',\n 'settings.client.table.name.label': 'Nome',\n 'settings.client.table.status.label': 'Situação',\n 'settings.client.table.model.name.label' : 'Modelo',\n 'settings.client.search.hint.status.label': 'Todas as Situações',\n 'settings.client.btn.new.label': 'Novo Cliente',\n 'settings.client.edit.label': 'Editar Cliente',\n 'settings.client.search.name.hint.msg': 'Buscar por nome',\n 'settings.client.list.error': 'Ocorreu um erro ao carregar a lista de clientes.',\n 'settings.client.placeholder.name' : 'Informe o nome do cliente',\n 'settings.client.edit.name.required.msg': 'O campo nome é obrigatório.',\n 'settings.client.edit.name.model.variant.acordion.title': 'Modelos e Variantes',\n 'settings.client.edit.identification.acordion.title': 'Identificação do Cliente',\n 'settings.client.edit.save.error.msg': 'Ocorreu um erro ao salvar o cliente.',\n 'settings.client.edit.save.success.msg': 'Cliente salvo com sucesso.',\n 'settings.client.delete.success.msg': 'Cliente removido com sucesso.',\n 'settings.client.delete.error.msg': 'Ocorreu um erro ao tentar remover o cliente.',\n 'msg.error.client.delete.has.associations': 'Este cliente não pôde ser excluído. Há um ou mais registros associados.',\n 'settings.client.table.description.label': 'Description',\n 'settings.client.table.initDate.label': 'Due Date Initial',\n 'settings.client.table.finalDate.label': 'Due Date Final',\n 'settings.client.search.description.hint.msg': 'Search by description'\n });\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('ClientService', ClientService);\n\n /** @ngInject */\n function ClientService($window, $injector, $q, ConfigurationService) {\n return {\n\n listAllClients: function (filtro) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n var domain = \"/settings-client\";\n\n $http.get(ConfigurationService.getServiceHost() + domain + '/', {\n params: filtro,\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getClientById: function (Id) {\n var domain = \"/settings-client\";\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n $http.get(ConfigurationService.getServiceHost() + domain + '/byId/' + Id, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n saveClient: function (client) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n var domain = \"/settings-client\";\n\n $http.post(ConfigurationService.getServiceHost() + domain, client, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n\n delete: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n var domain = \"/settings-client\";\n\n $http.delete(ConfigurationService.getServiceHost() + domain + '/' + id, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n listClients: function () {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n var domain = \"/settings-client/all\";\n\n $http.get(ConfigurationService.getServiceHost() + domain, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n\n };\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(ClientRouter);\n\n /** @ngInject */\n function ClientRouter($stateProvider) {\n\n $stateProvider.state('settings-client-list', {\n url: '/settings/client',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/settings/client/client-list.html',\n controller: 'ClientListController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n type: null,\n menuName: 'label.settings'\n },\n authorize: true\n });\n\n\n $stateProvider.state('settings-client-edit', {\n url: '/settings/client/edit/:id',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/settings/client/client-edit.html',\n controller: 'ClientEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'label.settings'\n },\n authorize: true\n });\n\n $stateProvider.state('settings-client-create', {\n url: '/settings/client/create',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/settings/client/client-edit.html',\n controller: 'ClientEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'label.settings'\n },\n authorize: true\n });\n\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('ClientListController', ClientListController);\n\n function ClientListController($scope, $state, $log, $translate, ClientService, ToastUtil, ListModel, AuthService) {\n\n var vm = this;\n vm.Model = \"\";\n vm.clientList = [];\n vm.totalList = 0;\n\n vm.listModelValues = {};\n\n vm.itensPerPageList = [\n {name: '5', value: 5, before: 0, after: 6},\n {name: '10', value: 10, before: 5, after: 11},\n {name: '20', value: 20, before: 10, after: 21},\n {name: '30', value: 30, before: 20, after: 31},\n {name: '40', value: 40, before: 30, after: 41},\n {name: '50', value: 50, before: 40, after: 51}]\n\n vm.itemPerPage = vm.itensPerPageList[0];\n\n vm.statusList = [{\n id: \"\",\n Name: 'settings.client.search.hint.status.label'\n }, {\n id: 1,\n Name: 'label.active'\n }, {\n id: 2,\n Name: 'label.inactive'\n }];\n\n vm.searchParams = {\n IdOrTitle: '',\n Version: '',\n Status: vm.statusList[0].id,\n Page: 1,\n MaxPerPage: vm.itemPerPage.value\n };\n\n vm.searchClients = function () {\n if (sessionStorage.getItem(\"searchParams\")) {\n vm.searchParams = JSON.parse(sessionStorage.getItem(\"searchParams\"));\n sessionStorage.removeItem(\"searchParams\");\n vm.itensPerPageList.forEach(function(element) {\n if (element.value == vm.searchParams.MaxPerPage) {\n vm.itemPerPage = element;\n return;\n }\n })\n }\n if (!vm.Model) {\n vm.searchParams.ModelId = \"\";\n } else {\n vm.searchParams.ModelId = vm.Model.Id;\n }\n\n ClientService.listAllClients(angular.copy(vm.searchParams))\n .then(\n function (response) {\n vm.clientList = angular.copy(response.Clients);\n vm.totalList = response.TotalItems;\n\n initListViewModel(angular.copy(response.Clients));\n })\n .catch(function (error) {\n\n $log.log(error);\n\n if (error.status !== $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"settings.client.list.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n };\n\n vm.clearSearchParams = function () {\n vm.searchParams.Title = \"\";\n vm.searchParams.ModelId = \"\";\n vm.Model = \"\";\n vm.searchParams.Status = vm.statusList[0].id;\n };\n\n vm.search = function () {\n vm.searchParams.Page = 1;\n vm.searchParams.MaxPerPage = 5;\n vm.searchClients();\n }\n\n vm.create = function () {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('settings-client-create', {});\n }\n\n vm.edit = function (id) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n\n $state.go('settings-client-edit', {\n id: id\n });\n };\n\n\n vm.delete = function (id) {\n ClientService.delete(id).then(function () {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n\n ToastUtil.showToastMessage($translate.instant(\"settings.client.delete.success.msg\"), ToastUtil.ToastType.SUCCESS);\n vm.searchClients();\n }).catch(function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n } else if (error.status == $scope.HttpStatusCodeConflict) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"settings.client.delete.error.msg\"), ToastUtil.ToastType.ERROR);\n }\n });\n };\n\n vm.modelSelectedEvent = function () {\n if (!vm.Model) {\n vm.searchParams.ModelId = \"\";\n } else {\n vm.searchParams.ModelId = vm.Model.Id;\n }\n }\n\n function init() {\n vm.searchClients();\n }\n\n function initListViewModel(items) {\n\n var idStyle = \"width: 15%;\";\n var nameStyle = \"width: 30%;\";\n //PROPERTIES PARAMS: header: *, rowAttr: *, isHighlight: *, valueFn: *, style: *, cssClass: *, cssClassFn:\n var properties = [\n ListModel.getProperties(\"label.id\", \"Id\", false, null, idStyle, null, null),\n ListModel.getProperties(\"settings.client.table.name.label\", \"Title\", true, null, nameStyle, null, null),\n ListModel.getProperties(\"settings.client.table.model.name.label\", \"ModelName\", false, null, nameStyle, null, null),\n ListModel.getProperties(\"settings.client.table.status.label\", \"CsActive\", false, getStatusLabel, \"\", null, getCsActiveCss)\n ];\n //Build menu: menuType: *, identificationKey: *, descriptionKey: *, actionFn: *\n var actionMenuItems = [\n ListModel.getActionMenuItem(ListModel.ActionMenuEnum.EDIT, \"Id\", null, vm.edit),\n ListModel.getActionMenuItem(ListModel.ActionMenuEnum.DELETE, \"Id\", \"Title\", vm.delete)\n ];\n //Get parent Action Menu: menuItems: *, type: *\n var actionMenu = ListModel.getActionMenu(actionMenuItems, ListModel.ActionMenuTypeEnum.INLINE)\n vm.listModelValues = ListModel.getListModel(properties, items, actionMenu);\n }\n\n function getStatusLabel(status) {\n var statusKey = \"label.inactive\";\n if (status == 1) {\n statusKey = \"label.active\";\n }\n\n return statusKey;\n }\n\n function getCsActiveCss(csActive) {\n var result = \"\";\n if (csActive == true || csActive == \"true\") {\n result = 'ng-binding label aqms-label-active';\n } else {\n result = 'ng-binding label aqms-label-inactive';\n }\n\n return result;\n }\n\n vm.validateSys = function () {\n return AuthService.isSysAdmin();\n }\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('ClientEditController', ClientEditController);\n\n function ClientEditController($log, $state, $scope, $stateParams, $translate, ClientService, ToastUtil) {\n\n var vm = this;\n vm.idToEdit = null;\n vm.client = {\n CsActive : 1\n };\n vm.statusList = [{key: 'label.active', value: true},{key: 'label.inactive', value: false}];\n vm.statusModel = vm.statusList[0];\n\n vm.isModelAssociationDisabled = false;\n\n vm.saveClient = function() {\n\n if(vm.canSaveBusiness()){\n\n vm.client.CsActive = vm.statusModel.value;\n\n ClientService.saveClient(angular.copy(vm.client))\n .then(function () {\n $state.go('settings-client-list');\n ToastUtil.showToastMessage($translate.instant(\"settings.client.edit.save.success.msg\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(function (error) {\n $log.log(error);\n\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n }\n else if (error.status === $scope.HttpStatusCodeConflict) {\n $state.go('model-list');\n ToastUtil.showToastMessage($translate.instant(\"msg.error.model.already.updated\"), ToastUtil.ToastType.WARN);\n }\n else if(error.data && error.data.ToastType == 1)\n {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n else {\n ToastUtil.showToastMessage($translate.instant(\"settings.client.edit.save.error.msg\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n };\n\n vm.canSaveBusiness = function() {\n var canSave = true;\n if( angular.isUndefined(vm.client.Title) || vm.client.Title == \"\" ){\n canSave = false;\n }\n if(angular.isUndefined(vm.client.Models) || vm.client.Models.length == 0 ) {\n canSave = false;\n }\n\n return canSave;\n };\n\n vm.setStatusInSearchParams = function() {\n var value = \"\";\n if(vm.statusModel.value === true){\n value = 1;\n } else if(vm.statusModel.value === false) {\n value = 0;\n }\n\n vm.client.CsActive = value;\n };\n\n function init() {\n vm.idToEdit = $stateParams.id;\n if( vm.idToEdit ){\n loadClientToEdit();\n }\n }\n\n function loadClientToEdit(){\n ClientService.getClientById(vm.idToEdit).then(function (response) {\n vm.client = angular.copy(response);\n\n if(vm.client.CsActive){\n vm.statusModel = vm.statusList[0]\n vm.client.CsActive = 1;\n }else{\n vm.statusModel = vm.statusList[1]\n vm.client.CsActive = 0;\n }\n\n }).catch(function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"settings.client.edit.save.error.msg\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(CalendarTranslate);\n\n /** @ngInject */\n function CalendarTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'settings.language': 'en',\n 'calendar.not.found': 'Day Off not found',\n 'settings.calendar.page.name.label': 'Calendar',\n 'settings.business.table.name.label': 'Name',\n 'settings.business.table.company.label': 'Company',\n 'settings.business.table.status.label': 'Status',\n 'settings.calendar.description': 'Description',\n 'settings.label.type': 'Type',\n 'settings.label.specific': 'Specific',\n 'settings.label.fixed': 'Fixed',\n 'settings.label.date': 'Date',\n 'settings.label.startdate': 'Initial Date',\n 'settings.label.enddate': 'End Date',\n 'settings.label.month': 'Month',\n 'settings.label.day': 'Day',\n 'settings.calendar.btn.new.label': 'New Day Off',\n 'settings.calendar.edit.label': 'Edit Day Off',\n 'settings.calendar.search.type.placeholder': 'Search by Type',\n 'settings.calendar.search.description.placeholder' : 'Search by description',\n 'settings.calendar.description.placeholder': 'Enter the description of the Day off',\n 'settings.calendar.search.month.placeholder': 'Search the Month',\n 'settings.calendar.search.day.placeholder': 'Search the Day',\n 'settings.calendar.type.placeholder': 'Enter a type of the Day off',\n 'msg.error.calendar.search': 'Error on load calendar list.',\n 'calendar.same.date.error': 'A record with the same date already exists.',\n 'settings.business.edit.name.required.msg': 'Name field is required.',\n 'settings.business.edit.area.acordion.title': 'Support Areas',\n 'settings.calendar.edit.identification.acordion.title': 'Calendar Identification',\n 'settings.business.edit.save.error.msg': 'Error on save business.',\n 'settings.calendar.edit.save.success.msg': 'Day off successfully saved.',\n 'settings.calendar.delete.success.msg': 'Day off successfully removed.',\n 'settings.business.delete.error.msg': 'Error on business remove.',\n 'settings.business.deleted.failed': 'This business could not be deleted. There are one or more associated records.',\n 'settings.calendar.name.validation.minlength': 'This field must have at least 3 characters.'\n });\n\n $translateProvider.translations('pt', {\n 'settings.language': 'pt',\n 'calendar.not.found': 'Dia de Folga não encontrados',\n 'settings.calendar.page.name.label': 'Calendário',\n 'settings.business.table.name.label': 'Nome',\n 'settings.business.table.company.label': 'Empresa',\n 'settings.business.table.status.label': 'Situação',\n 'settings.calendar.description': 'Descrição',\n 'settings.label.type': 'Tipo',\n 'settings.label.specific': 'Específico',\n 'settings.label.fixed': 'Fixo',\n 'settings.label.date': 'Data',\n 'settings.label.startdate': 'Data Inicial',\n 'settings.label.enddate': 'Data Final',\n 'settings.label.month': 'Mês',\n 'settings.label.day': 'Dia',\n 'calendar.same.date.error': 'Já existe uma folga cadastrada com esta data.',\n 'msg.error.calendar.search': 'Ocorreu um erro ao tentar listar dias de folga',\n 'settings.calendar.search.type.placeholder': 'Busque por um Tipo',\n 'settings.calendar.search.description.placeholder' : 'Busque por uma descrição',\n 'settings.calendar.description.placeholder' : 'Informe uma descrição do dia de folga',\n 'settings.calendar.search.month.placeholder': 'Selecione um Mês',\n 'settings.calendar.search.day.placeholder': 'Selecione o Dia',\n 'settings.calendar.type.placeholder' : 'Informe um tipo para o dia de folga',\n 'settings.business.search.hint.status.label': 'Todas as Situações',\n 'settings.calendar.btn.new.label': 'Novo Dia de Folga',\n 'settings.calendar.edit.label': 'Editar Dia de Folga',\n 'settings.calendar.edit.save.error.msg': 'Ocorreu um erro ao salvar o Dia de Folga.',\n 'settings.calendar.edit.save.success.msg': 'Dia de Folga salvo com sucesso.',\n 'settings.calendar.delete.success.msg': 'Dia de Folga removido com sucesso.',\n 'settings.calendar.delete.error.msg': 'Ocorreu um erro ao tentar remover o Dia de Folga.',\n 'settings.calendar.deleted.failed': 'Não foi possível deletar esse Dia de Folga. Existe um ou mais registros associados.',\n 'settings.calendar.name.validation.minlength': 'Este campo deve ter pelo menos 3 caracteres.',\n 'settings.calendar.edit.identification.acordion.title': 'Identificação do calendário'\n });\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('CalendarService', CalendarService);\n\n /** @ngInject */\n function CalendarService($window, $injector, $q, ConfigurationService) {\n var BASE = \"/calendar\";\n return {\n listAllCalendars: function (filtro) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n $http.get(ConfigurationService.getServiceHost() + BASE + '/',\n {\n params : filtro\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getCalendarById: function (Id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n $http.get(ConfigurationService.getServiceHost() + BASE + '/' + Id, {headers: {'Authorization': $window.localStorage.aqmsToken}})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n saveCalendar: function (client) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + BASE, client, {headers: {'Authorization': $window.localStorage.aqmsToken}})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n }\n , function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n delete: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + BASE + '/' + id, {headers: {'Authorization': $window.localStorage.aqmsToken}})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getLeadTimeByPeriod: function (dtFinal, dtInitial) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n $http.get(ConfigurationService.getServiceHost() + BASE + '/lead-time/',\n {\n params : {'dtInitial': dtInitial, 'dtFinal': dtFinal}\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n\n };\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(CalendarRouter);\n\n /** @ngInject */\n function CalendarRouter($stateProvider) {\n\n $stateProvider.state('settings-calendar-list', {\n url: '/settings/calendar',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/settings/calendar/calendar-list.html',\n controller: 'CalendarListController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n type: null,\n menuName: 'label.settings'\n },\n authorize: true\n });\n\n\n $stateProvider.state('settings-calendar-edit', {\n url: '/settings/calendar/edit/:Id',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/settings/calendar/calendar-edit.html',\n controller: 'CalendarEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'label.settings'\n },\n authorize: true\n });\n\n $stateProvider.state('settings-calendar-create', {\n url: '/settings/calendar/create',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/settings/calendar/calendar-edit.html',\n controller: 'CalendarEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'label.settings'\n },\n authorize: true\n });\n\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('CalendarListController', CalendarListController);\n\n function CalendarListController($scope, $state, $log, $translate, CalendarService, ToastUtil, ListModel, AuthService, moment, $window) {\n\n var vm = this;\n vm.listaDeObjetos = [];\n\n vm.itensPerPageList = [\n {name: '5', value: 5, before: 0, after: 6},\n {name: '10', value: 10, before: 5, after: 11},\n {name: '20', value: 20, before: 10, after: 21},\n {name: '30', value: 30, before: 20, after: 31},\n {name: '40', value: 40, before: 30, after: 41},\n {name: '50', value: 50, before: 40, after: 51}];\n\n vm.itemPerPage = vm.itensPerPageList[0];\n\n vm.calendarList = [];\n vm.totalList = 0;\n\n vm.typeList = [{\n Title: 'settings.label.fixed',\n Value: 1\n }, {\n Title: 'settings.label.specific',\n Value: 2\n }];\n\n vm.searchParams = {\n Description: '',\n Type: '',\n StartDate: '',\n EndDate: '',\n Page: 1,\n MaxPerPage: 5\n };\n\n vm.create = function () {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('settings-calendar-create', {});\n };\n\n vm.search = function () {\n vm.searchParams.Page = 1;\n vm.searchParams.MaxPerPage = 5;\n vm.searchCalendar()\n };\n\n function buildSearchParam() {\n var searchParamsCopy = angular.copy(vm.searchParams);\n\n if (vm.searchParams.StartDate != undefined && vm.searchParams.StartDate != '') {\n searchParamsCopy.StartDate = moment(angular.copy(searchParamsCopy.StartDate)).format('DD/MM/YYYY');\n } else {\n searchParamsCopy.StartDate = '';\n }\n\n if (vm.searchParams.EndDate != undefined && vm.searchParams.EndDate != '') {\n searchParamsCopy.EndDate = moment(angular.copy(searchParamsCopy.EndDate)).format('DD/MM/YYYY');\n } else {\n searchParamsCopy.EndDate = '';\n }\n\n if (angular.isUndefined(vm.searchParams.Type) || vm.searchParams.Type == null) {\n searchParamsCopy.Type = -1;\n }\n\n return searchParamsCopy;\n }\n\n vm.searchCalendar = function () {\n if (sessionStorage.getItem(\"searchParams\")) {\n vm.searchParams = JSON.parse(sessionStorage.getItem(\"searchParams\"));\n sessionStorage.removeItem(\"searchParams\");\n }\n var searchParams = buildSearchParam();\n\n CalendarService.listAllCalendars(angular.copy(searchParams)).then(function (response) {\n vm.calendarList = angular.copy(response.resultList);\n vm.calendarList.forEach(function (item) {\n var month = (item.Month + 1) < 10 ? '0' + (item.Month + 1) : item.Month + 1;\n var day = item.Day < 10 ? '0' + item.Day : item.Day;\n item.MonthDayEn = month + '/'+ day;\n item.MonthDayPt = day + '/' + month;\n });\n vm.totalList = response.total;\n\n }).catch(function (error) {\n $log.log(error);\n if (error.status !== $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.calendar.search\"), ToastUtil.ToastType.ERROR);\n }\n });\n };\n\n function getDefaultLanguage(){\n return $window.localStorage.defaultLanguage;\n }\n\n $scope.$watch(getDefaultLanguage, function(){\n vm.currentLocale = $window.localStorage.defaultLanguage;\n });\n\n vm.clearSearchParams = function () {\n vm.searchParams.Description = \"\";\n vm.searchParams.Type = \"\";\n vm.searchParams.StartDate = \"\";\n vm.searchParams.EndDate = \"\";\n }\n\n vm.edit = function (id) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('settings-calendar-edit', {\n Id: id\n });\n }\n\n vm.delete = function (id) {\n\n console.log('id :>> ', id);\n\n CalendarService.delete(id).then(function () {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n ToastUtil.showToastMessage($translate.instant(\"settings.calendar.delete.success.msg\"), ToastUtil.ToastType.SUCCESS);\n vm.searchCalendar();\n }).catch(function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(\"settings.business.delete.error.msg\"), ToastUtil.ToastType.ERROR);\n }\n }\n });\n }\n\n function init() {\n sessionStorage.removeItem(\"searchParams\");\n vm.searchCalendar();\n }\n\n\n vm.getTypeLabel = function (type) {\n var typeKey = \"settings.label.fixed\";\n if (type == 2 || type == \"2\") {\n typeKey = \"settings.label.specific\";\n }\n return $translate.instant(typeKey);\n }\n\n vm.validateSys = function () {\n return AuthService.isSysAdmin();\n }\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('CalendarEditController', CalendarEditController);\n\n function CalendarEditController($log, $state, $scope, $stateParams, $translate, CalendarService,\n ToastUtil, moment, DefaultService) {\n\n var vm = this;\n vm.Months = [];\n vm.Days = [];\n vm.idToEdit = null;\n vm.calendarDayOff = {};\n\n vm.typeList = [{\n Title: 'settings.label.fixed',\n Value: 1\n }, {\n Title: 'settings.label.specific',\n Value: 2\n }];\n\n vm.saveCalendar = function () {\n if (vm.canSaveCalendar()) {\n CalendarService.saveCalendar(angular.copy(vm.calendarDayOff)).then(function () {\n $state.go('settings-calendar-list');\n ToastUtil.showToastMessage($translate.instant(\"settings.calendar.edit.save.success.msg\"), ToastUtil.ToastType.SUCCESS);\n\n }).catch(function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(\"settings.calendar.edit.save.error.msg\"), ToastUtil.ToastType.ERROR);\n }\n }\n });\n }\n };\n\n vm.canSaveCalendar = function () {\n var canSave = true;\n if (angular.isUndefined(vm.calendarDayOff.Description) || vm.calendarDayOff.Description == \"\") {\n canSave = false;\n }\n if (angular.isUndefined(vm.calendarDayOff.Type) || vm.calendarDayOff.Type == '') {\n canSave = false;\n }\n if ((vm.calendarDayOff.Type == 1 || vm.calendarDayOff.Type == '1')\n && (angular.isUndefined(vm.calendarDayOff.Day) || vm.calendarDayOff.Day == '')\n && (angular.isUndefined(vm.calendarDayOff.Month) || vm.calendarDayOff.Month == '') ) {\n canSave = false;\n }\n if ((vm.calendarDayOff.Type == 2 || vm.calendarDayOff.Type == '2')\n && (angular.isUndefined(vm.calendarDayOff.SpecificDate) || vm.calendarDayOff.SpecificDate == '') ) {\n canSave = false;\n }\n\n return canSave;\n };\n\n function pushDays(days) {\n vm.Days = [];\n for (var i = 1; i <= days; i++) {\n vm.Days.push(i);\n }\n }\n\n vm.getDays = function(monthChosed) {\n pushDays(moment().month(monthChosed).daysInMonth());\n }\n\n function init() {\n vm.Months = moment.months('MM');\n if ($stateParams.Id) {\n vm.idToEdit = $stateParams.Id;\n loadCalendarToEdit();\n }\n }\n\n function loadCalendarToEdit() {\n CalendarService.getCalendarById(vm.idToEdit).then(function (response) {\n vm.calendarDayOff = angular.copy(response);\n if ( vm.calendarDayOff.Type == 2 ) {\n vm.calendarDayOff.SpecificDate = moment(vm.calendarDayOff.SpecificDate, 'DD/MM/YYYY')._d;\n } else {\n vm.getDays(vm.calendarDayOff.Month);\n vm.calendarDayOff.Month = vm.calendarDayOff.Month.toString();\n }\n }).catch(function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"settings.calendar.edit.save.error.msg\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(BusinessTranslate);\n\n /** @ngInject */\n function BusinessTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'settings.business.page.name.label': 'Business',\n 'settings.business.table.name.label': 'Name',\n 'settings.business.table.company.label': 'Company',\n 'settings.business.table.status.label': 'Status',\n 'settings.business.search.hint.status.label': 'All Status',\n 'settings.business.btn.new.label': 'New Business',\n 'settings.business.edit.label': 'Edit Business',\n 'settings.business.search.name.hint.msg': 'Search by name',\n 'settings.business.placeholder.name' : 'Enter the name of the business',\n 'settings.business.list.error': 'Error on load business list.',\n 'business.same.name.error': 'A record with the same name already exists.',\n 'settings.business.edit.name.required.msg': 'Name field is required.',\n 'settings.business.edit.area.acordion.title': 'Support Areas',\n 'settings.business.edit.identification.acordion.title': 'Business Identification',\n 'settings.business.edit.save.error.msg': 'Error on save business.',\n 'settings.business.edit.save.success.msg': 'Business successfully saved.',\n 'settings.business.delete.success.msg': 'Business successfully removed.',\n 'settings.business.delete.error.msg': 'Error on business remove.',\n 'settings.business.deleted.failed': 'This business could not be deleted. There are one or more associated records.',\n 'settings.business.name.validation.minlength': 'This field must have at least 3 characters.'\n });\n\n $translateProvider.translations('pt', {\n 'settings.business.page.name.label': 'Negócio',\n 'settings.business.table.name.label': 'Nome',\n 'settings.business.table.company.label': 'Empresa',\n 'settings.business.table.status.label': 'Situação',\n 'settings.business.search.hint.status.label': 'Todas as Situações',\n 'settings.business.btn.new.label': 'Novo Negócio',\n 'settings.business.edit.label': 'Editar Negócio',\n 'settings.business.search.name.hint.msg': 'Buscar por nome',\n 'settings.business.placeholder.name' : 'Informe o nome do negócio',\n 'settings.business.list.error': 'Ocorreu um erro ao carregar a lista de negócios.',\n 'business.same.name.error': 'Já existe um registro com o mesmo nome.',\n 'settings.business.edit.name.required.msg': 'O campo nome é obrigatório.',\n 'settings.business.edit.area.acordion.title': 'Áreas de Suporte',\n 'settings.business.edit.identification.acordion.title': 'Identificação do Negócio',\n 'settings.business.edit.save.error.msg': 'Ocorreu um erro ao salvar o negócio.',\n 'settings.business.edit.save.success.msg': 'Negócio salvo com sucesso.',\n 'settings.business.delete.success.msg': 'Negócio removido com sucesso.',\n 'settings.business.delete.error.msg': 'Ocorreu um erro ao tentar remover o negócio.',\n 'settings.business.deleted.failed': 'Não foi possível deletar esse negócio. Existe um ou mais registros associados.',\n 'settings.business.name.validation.minlength': 'Este campo deve ter pelo menos 3 caracteres.'\n });\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('BusinessService', BusinessService);\n\n /** @ngInject */\n function BusinessService($window, $injector, $q, ConfigurationService) {\n var BASE = \"/business\";\n return {\n listByCompany: function () {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + '/listByCompany', {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n listAllBusiness: function (filtro) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n $http.get(ConfigurationService.getServiceHost() + BASE + '/',\n {\n params : filtro\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getBusinessById: function (Id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n $http.get(ConfigurationService.getServiceHost() + BASE + '/byId/' + Id, {headers: {'Authorization': $window.localStorage.aqmsToken}})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n saveBusiness: function (client) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + BASE, client, {headers: {'Authorization': $window.localStorage.aqmsToken}})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n }\n , function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n\n delete: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + BASE + '/' + id, {headers: {'Authorization': $window.localStorage.aqmsToken}})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n\n };\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(BusinessRouter);\n\n /** @ngInject */\n function BusinessRouter($stateProvider) {\n\n $stateProvider.state('settings-business-list', {\n url: '/settings/business',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/settings/business/business-list.html',\n controller: 'BusinessListController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n type: null,\n menuName: 'label.settings'\n },\n authorize: true\n });\n\n\n $stateProvider.state('settings-business-edit', {\n url: '/settings/business/edit/:id',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/settings/business/business-edit.html',\n controller: 'BusinessEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'label.settings'\n },\n authorize: true\n });\n\n $stateProvider.state('settings-business-create', {\n url: '/settings/business/create',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/settings/business/business-edit.html',\n controller: 'BusinessEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'label.settings'\n },\n authorize: true\n });\n\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('BusinessListController', BusinessListController);\n\n function BusinessListController($scope, $state, $log, $translate, BusinessService, ToastUtil, ListModel, AuthService) {\n\n var vm = this;\n vm.searchParams = {\n Name: '',\n Status: '',\n Page: 1,\n MaxPerPage: 5\n };\n vm.profileList = [];\n vm.totalList = 0;\n\n vm.listModelValues = {};\n\n vm.statusList = [{\n key: 'settings.client.search.hint.status.label',\n value: \"\"\n }, {\n key: 'label.active',\n value: true\n }, {\n key: 'label.inactive',\n value: false\n }];\n vm.statusModel = vm.statusList[0];\n\n vm.create = function () {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('settings-business-create', {});\n }\n\n vm.search = function () {\n vm.searchParams.Page = 1;\n vm.searchParams.MaxPerPage = 5;\n vm.searchBusiness()\n }\n\n vm.searchBusiness = function () {\n if (sessionStorage.getItem(\"searchParams\")) {\n vm.searchParams = JSON.parse(sessionStorage.getItem(\"searchParams\"));\n sessionStorage.removeItem(\"searchParams\");\n }\n BusinessService.listAllBusiness(angular.copy(vm.searchParams)).then(function (response) {\n vm.profileList = angular.copy(response.Businesses);\n vm.totalList = response.TotalItems;\n initListViewModel(angular.copy(response.Businesses));\n\n }).catch(function (error) {\n $log.log(error);\n if (error.status !== $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"settings.business.list.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n vm.setStatusInSearchParams = function () {\n var value = \"\";\n if (vm.statusModel.value === true) {\n value = 1;\n } else if (vm.statusModel.value === false) {\n value = 0;\n }\n vm.searchParams.Status = value;\n }\n\n vm.clearSearchParams = function () {\n vm.searchParams.Name = \"\";\n vm.searchParams.ModelId = \"\";\n vm.searchParams.Status = \"\";\n vm.statusModel = vm.statusList[0];\n }\n\n vm.edit = function (id) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('settings-business-edit', {\n id: id\n });\n }\n\n vm.delete = function (id) {\n BusinessService.delete(id).then(function () {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n ToastUtil.showToastMessage($translate.instant(\"settings.business.delete.success.msg\"), ToastUtil.ToastType.SUCCESS);\n vm.searchBusiness();\n }).catch(function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(\"settings.business.delete.error.msg\"), ToastUtil.ToastType.ERROR);\n }\n }\n });\n }\n\n function init() {\n sessionStorage.removeItem(\"searchParams\");\n vm.searchBusiness();\n }\n\n function initListViewModel(items) {\n var idStyle = \"width: 15%;\";\n var nameStyle = \"width: 30%;\";\n //PROPERTIES PARAMS: header, rowAttr, isHighlight, valueFn, style, cssClass, cssClassFn:\n var properties = [\n ListModel.getProperties(\"label.id\", \"Id\", false, null, idStyle, null, null),\n ListModel.getProperties(\"settings.client.table.name.label\", \"Name\", true, null, nameStyle, null, null),\n ListModel.getProperties(\"settings.client.table.status.label\", \"CsActive\", false, getStatusLabel, \"\", null, getCsActiveCss)\n ];\n //Build menu: menuType: *, identificationKey: *, descriptionKey: *, actionFn: *\n var actionMenuItems = [\n ListModel.getActionMenuItem(ListModel.ActionMenuEnum.EDIT, \"Id\", null, vm.edit),\n ListModel.getActionMenuItem(ListModel.ActionMenuEnum.DELETE, \"Id\", \"Name\", vm.delete)\n ];\n //Get parent Action Menu: menuItems: *, type: *\n var actionMenu = ListModel.getActionMenu(actionMenuItems, ListModel.ActionMenuTypeEnum.INLINE)\n vm.listModelValues = ListModel.getListModel(properties, items, actionMenu);\n }\n\n function getStatusLabel(CsActive) {\n var statusKey = \"label.inactive\";\n if (CsActive == true || CsActive == \"true\") {\n statusKey = \"label.active\";\n }\n\n return statusKey;\n }\n\n function getCsActiveCss(csActive) {\n var result = \"\";\n if (csActive == true || csActive == \"true\") {\n result = 'ng-binding label aqms-label-active';\n } else {\n result = 'ng-binding label aqms-label-inactive';\n }\n\n return result;\n }\n\n vm.validateSys = function () {\n return AuthService.isSysAdmin();\n }\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('BusinessEditController', BusinessEditController);\n\n function BusinessEditController($log, $state, $scope, $stateParams, $translate, BusinessService,\n ToastUtil, AuthService, DefaultService) {\n\n var vm = this;\n vm.idToEdit = null;\n vm.business = {};\n vm.statusList = [{\n key: 'label.active',\n value: true\n }, {\n key: 'label.inactive',\n value: false\n }];\n vm.statusModel = vm.statusList[0];\n\n vm.areaList = [];\n vm.selectedAreas = [];\n\n vm.isModelAssociationDisabled = false;\n\n vm.saveBusiness = function () {\n if (vm.canSaveBusiness()) {\n BusinessService.saveBusiness(angular.copy(vm.business)).then(function () {\n $state.go('settings-business-list');\n ToastUtil.showToastMessage($translate.instant(\"settings.business.edit.save.success.msg\"), ToastUtil.ToastType.SUCCESS);\n\n }).catch(function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(\"settings.business.edit.save.error.msg\"), ToastUtil.ToastType.ERROR);\n }\n }\n });\n }\n };\n\n vm.canSaveBusiness = function () {\n var canSave = true;\n if (angular.isUndefined(vm.business.Name) || vm.business.Name == \"\") {\n canSave = false;\n }\n if (angular.isUndefined(vm.business.Areas) || vm.business.Areas.length == 0) {\n canSave = false;\n }\n\n return canSave;\n };\n\n vm.areaChange = function () {\n vm.business.Areas = vm.areaList.filter(function (area) {\n return area.Selected;\n });\n };\n\n vm.isCheckAreaRequired = function() {\n return !vm.areaList.some(function (options) {\n return options.Selected;\n });\n }\n\n vm.setStatusInBusinessObj = function () {\n vm.business.CsActive = vm.statusModel.value;\n };\n\n function init() {\n vm.idToEdit = $stateParams.id;\n if (!vm.idToEdit) {\n vm.statusModel = vm.statusList[0];\n vm.setStatusInBusinessObj();\n }\n loadAreas();\n }\n\n function loadBusinessToEdit() {\n BusinessService.getBusinessById(vm.idToEdit).then(function (response) {\n vm.business = angular.copy(response);\n setStatusToEdit(vm.business.CsActive);\n setAreasToEdit();\n }).catch(function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"settings.business.edit.save.error.msg\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function setAreasToEdit() {\n if (vm.business != null && vm.business.Areas.length > 0 && vm.areaList.length > 0) {\n angular.forEach(vm.business.Areas, function (persisted) {\n angular.forEach(vm.areaList, function (area) {\n if (persisted.Id == area.Id) {\n area.Selected = true;\n }\n });\n });\n }\n }\n\n function loadAreas() {\n var searchParams = {\n };\n\n DefaultService.loadAreas(searchParams).then(function (response) {\n vm.areaList = angular.copy(response);\n if (vm.idToEdit) {\n loadBusinessToEdit();\n }\n }).catch(function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.listAreas\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function setStatusToEdit(status) {\n if (status === true) {\n vm.statusModel = vm.statusList[0];\n } else {\n vm.statusModel = vm.statusList[1];\n }\n }\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(ApprovalRouteTranslate);\n\n /** @ngInject */\n function ApprovalRouteTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'settings.approval_route.page.name.label': 'Approval Route',\n 'settings.approval_route.delete.success.msg': 'Approval Route successfully removed.',\n 'settings.approval_route.delete.error.msg': 'Error on Approval route remove.',\n 'settings.approval_route.table.label.name': 'Name',\n 'settings.approval_route.table.label.route': 'Route',\n 'settings.approval_route.btn.new.label': 'New Approval Route',\n 'settings.approval_route.edit.save.success.msg': 'Approval Route successfully saved.',\n 'settings.approval_route.edit.save.error.msg': 'Error on Approval Route save.',\n 'settings.approval_route.edit.label': 'Edit Approval Route',\n 'settings.approval_route.edit.identification.acordion.title': 'Approval Route identification',\n 'settings.approval_route.edit.name.list.cordion.title': 'Approval Route List',\n 'settings.approval_route.table.approver.name.label': 'Approver',\n 'load.all.approval_route.error': 'Error on load Approval Route',\n 'error.approval_route.search': 'Error on load Approval Routes',\n 'msg.error.approval_route.delete.has.associations': 'You cannot remove this Approval Route. There are one or more items associated with it'\n });\n\n $translateProvider.translations('pt', {\n 'settings.approval_route.page.name.label': 'Rotas de aprovação',\n 'settings.approval_route.delete.success.msg': 'Rota de Aprovação removida com sucesso.',\n 'settings.approval_route.delete.error.msg': 'Ocorreu um erro ao tentar remover a Rota de Aprovação.',\n 'settings.approval_route.table.label.name': 'Nome',\n 'settings.approval_route.table.label.route': 'Rota',\n 'settings.approval_route.btn.new.label': 'Nova Rota de Aprovação',\n 'settings.approval_route.edit.save.success.msg': 'Rota de Aprovação salva com sucesso.',\n 'settings.approval_route.edit.save.error.msg': 'Ocorreu um erro ao tentar salvar a Rota de Aprovação.',\n 'settings.approval_route.edit.label': 'Editar Rota de Aprovação',\n 'settings.approval_route.edit.identification.acordion.title': 'Identificação da Rota de Aprovação',\n 'settings.approval_route.edit.name.list.cordion.title': 'Lista da Rota de Aprovação',\n 'settings.approval_route.table.approver.name.label': 'Aprovador',\n 'load.all.approval_route.error': 'Erro ao carregar Rota de Aprovação',\n 'error.approval_route.search': 'Erro ao carregar Rotas de Aprovação',\n 'msg.error.approval_route.delete.has.associations': 'Essa Rota de Aprovação não pode ser removida. Existem um ou mais itens associados a ela',\n });\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('ApprovalRouteService', ApprovalRouteService);\n\n var domain = '/settings-approval-route/';\n\n /** @ngInject */\n function ApprovalRouteService($window, $injector, $q, ConfigurationService) {\n return {\n\n listApprovalRoutes: function (filtro) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + domain, {\n params: filtro,\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getClientById: function (Id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + domain + 'byId/' + Id, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n saveClient: function (data) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + domain, data, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n delete: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + domain + id, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n update: function (id, data) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.patch(ConfigurationService.getServiceHost() + domain + id, data)\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n };\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(ApprovalRoute);\n\n /** @ngInject */\n function ApprovalRoute($stateProvider) {\n\n $stateProvider.state('settings-approval-route-list', {\n url: '/settings/approval-route',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/settings/approval_route/approval-route-list.html',\n controller: 'ApprovalRouteListController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n type: null,\n menuName: 'label.settings'\n },\n authorize: true\n });\n\n\n $stateProvider.state('settings-approval-route-edit', {\n url: '/settings/approval-route/edit/:id',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/settings/approval_route/approval-route-edit.html',\n controller: 'ApprovalRouteEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'label.settings'\n },\n authorize: true\n });\n\n $stateProvider.state('settings-approval-route-create', {\n url: '/settings/approval-route/create',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/settings/approval_route/approval-route-edit.html',\n controller: 'ApprovalRouteEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'label.settings'\n },\n authorize: true\n });\n\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('ApprovalRouteListController', ApprovalRouteListController);\n\n function ApprovalRouteListController($scope, $state, $log, $translate, ApprovalRouteService, ToastUtil, ListModel, AuthService, $templateCache) {\n\n const vm = this;\n vm.isOpen = false;\n vm.Model = \"\";\n vm.itemsList = [];\n vm.totalList = 0;\n\n vm.listModelValues = {};\n\n vm.itensPerPageList = [\n {name: '5', value: 5, before: 0, after: 6},\n {name: '10', value: 10, before: 5, after: 11},\n {name: '20', value: 20, before: 10, after: 21},\n {name: '30', value: 30, before: 20, after: 31},\n {name: '40', value: 40, before: 30, after: 41},\n {name: '50', value: 50, before: 40, after: 51}]\n\n vm.itemPerPage = vm.itensPerPageList[0];\n\n vm.statusList = [{\n id: \"\",\n Name: 'search.hint.status.label'\n }, {\n id: 1,\n Name: 'label.active'\n }, {\n id: 2,\n Name: 'label.inactive'\n }];\n\n vm.searchParams = {\n Id: '',\n Title: '',\n CsActive: vm.statusList[0].id,\n Page: 1,\n MaxPerPage: vm.itemPerPage.value\n };\n\n vm.searchApprovalRoutes = function () {\n if (sessionStorage.getItem(\"searchParams\")) {\n vm.searchParams = JSON.parse(sessionStorage.getItem(\"searchParams\"));\n sessionStorage.removeItem(\"searchParams\");\n vm.itensPerPageList.forEach(function (element) {\n if (element.value == vm.searchParams.MaxPerPage) {\n vm.itemPerPage = element;\n return;\n }\n })\n }\n if (!vm.Model) {\n vm.searchParams.ModelId = \"\";\n } else {\n vm.searchParams.ModelId = vm.Model.Id;\n }\n\n ApprovalRouteService.listApprovalRoutes(angular.copy(vm.searchParams))\n .then(\n function (response) {\n vm.itemsList = angular.copy(response.resultList);\n vm.totalList = response.total;\n\n initListViewModel(angular.copy(response.resultList));\n })\n .catch(function (error) {\n\n $log.log(error);\n\n if (error.status !== $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"error.approval_route.search\"), ToastUtil.ToastType.ERROR);\n }\n });\n };\n\n vm.clearSearchParams = function () {\n vm.searchParams.Id = \"\";\n vm.searchParams.Title = \"\";\n vm.searchParams.CsActive = vm.statusList[0].id;\n };\n\n vm.search = function () {\n vm.searchParams.Page = 1;\n vm.searchParams.MaxPerPage = 5;\n vm.searchApprovalRoutes();\n }\n\n vm.create = function () {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('settings-approval-route-create', {});\n }\n\n vm.edit = function (id) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n\n $state.go('settings-approval-route-edit', {\n id: id\n });\n };\n\n\n vm.delete = function (id) {\n ApprovalRouteService.delete(id).then(function () {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n\n ToastUtil.showToastMessage($translate.instant(\"settings.approval_route.delete.success.msg\"), ToastUtil.ToastType.SUCCESS);\n vm.searchApprovalRoutes();\n }).catch(function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized || error.status === $scope.HttpStatusCodeConflict) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"settings.approval_route.delete.error.msg\"), ToastUtil.ToastType.ERROR);\n }\n });\n };\n\n function init() {\n vm.searchApprovalRoutes();\n $templateCache.put('approval-route-list-popover', '' +\n '' +\n '' +\n '')\n }\n\n function initListViewModel(items) {\n\n var idStyle = \"width: 15%;\";\n var nameStyle = \"width: 30%;\";\n //PROPERTIES PARAMS: header: *, rowAttr: *, isHighlight: *, valueFn: *, style: *, cssClass: *, cssClassFn:\n var properties = [\n ListModel.getProperties(\"label.id\", \"Id\", false, null, idStyle, null, null),\n ListModel.getProperties(\"settings.approval_route.table.label.name\", \"Title\", true, null, nameStyle, null, null),\n ListModel.getProperties(\"settings.approval_route.table.label.route\", \"ApprovalRouteList\", false, null, nameStyle, null, null, 'approval-route-list-popover'),\n ListModel.getProperties(\"label.status\", \"CsActive\", false, getStatusLabel, \"\", null, getCsActiveCss)\n ];\n //Build menu: menuType: *, identificationKey: *, descriptionKey: *, actionFn: *\n var actionMenuItems = [\n ListModel.getActionMenuItem(ListModel.ActionMenuEnum.EDIT, \"Id\", null, vm.edit),\n ListModel.getActionMenuItem(ListModel.ActionMenuEnum.DELETE, \"Id\", \"Title\", vm.delete)\n ];\n //Get parent Action Menu: menuItems: *, type: *\n var actionMenu = ListModel.getActionMenu(actionMenuItems, ListModel.ActionMenuTypeEnum.INLINE)\n vm.listModelValues = ListModel.getListModel(properties, items, actionMenu);\n }\n\n function getStatusLabel(status) {\n var statusKey = \"label.inactive\";\n if (status === true || status === 'true') {\n statusKey = \"label.active\";\n }\n\n return statusKey;\n }\n\n function getCsActiveCss(csActive) {\n var result = \"\";\n if (csActive === true || csActive === \"true\") {\n result = 'ng-binding label aqms-label-active';\n } else {\n result = 'ng-binding label aqms-label-inactive';\n }\n\n return result;\n }\n\n vm.validateSys = function () {\n return AuthService.isSysAdmin();\n }\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('ApprovalRouteEditController', ApprovalRouteEditController);\n\n function ApprovalRouteEditController($log, $state, $scope, $stateParams, $translate, ApprovalRouteService, JsonPatchUtil, ToastUtil) {\n\n var vm = this, _patch = null;\n vm.idToEdit = null;\n vm.approvalRoute = {\n CsActive : 1\n };\n vm.statusList = [{key: 'label.active', value: true},{key: 'label.inactive', value: false}];\n vm.statusModel = vm.statusList[0];\n\n vm.saveOrUpdate = function() {\n if (vm.idToEdit && vm.idToEdit > 0) {\n update();\n } else {\n save();\n }\n };\n\n function save() {\n if(vm.canSaveBusiness()){\n\n vm.approvalRoute.CsActive = vm.statusModel.value;\n\n ApprovalRouteService.saveClient(angular.copy(vm.approvalRoute))\n .then(function () {\n $state.go('settings-approval-route-list');\n ToastUtil.showToastMessage($translate.instant(\"settings.approval_route.edit.save.success.msg\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(function (error) {\n $log.log(error);\n\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n }\n else if(error.data && error.data.ToastType === 1)\n {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n else {\n ToastUtil.showToastMessage($translate.instant(\"settings.approval_route.edit.save.error.msg\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n };\n\n function update() {\n if(vm.canSaveBusiness()){\n\n vm.approvalRoute.CsActive = vm.statusModel.value;\n var patch = generatePatch();\n ApprovalRouteService.update(vm.approvalRoute.Id, patch)\n .then(function () {\n $state.go('settings-approval-route-list');\n ToastUtil.showToastMessage($translate.instant(\"settings.approval_route.edit.save.success.msg\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(function (error) {\n $log.log(error);\n\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n }\n else if(error.data && error.data.ToastType === 1)\n {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n else {\n ToastUtil.showToastMessage($translate.instant(\"settings.approval_route.edit.save.error.msg\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n };\n\n function generatePatch() {\n var patch = JsonPatchUtil.generate(vm.approvalRoute, vm.approvalRouteCopy, vm.observer, _patch);\n patch = patch.reduce(function (newPatch, item) {\n if (item.path.startsWith('/ApprovalRouteList')) {\n newPatch.push(item);\n } else {\n newPatch.push(item);\n }\n return newPatch;\n }, []);\n _patch = angular.copy(patch);\n return patch;\n }\n\n vm.canSaveBusiness = function() {\n var canSave = true;\n if( angular.isUndefined(vm.approvalRoute.Title) || vm.approvalRoute.Title === \"\" ){\n canSave = false;\n }\n return canSave;\n };\n\n vm.setStatusInSearchParams = function() {\n var value = \"\";\n if(vm.statusModel.value === true){\n value = 1;\n } else if(vm.statusModel.value === false) {\n value = 0;\n }\n\n vm.approvalRoute.CsActive = value;\n };\n\n function init() {\n vm.idToEdit = $stateParams.id;\n if( vm.idToEdit ){\n loadApprovalRouteToEdit();\n }\n }\n\n function loadApprovalRouteToEdit(){\n ApprovalRouteService.getClientById(vm.idToEdit).then(function (response) {\n vm.approvalRoute = angular.copy(response);\n\n if(vm.approvalRoute.CsActive){\n vm.statusModel = vm.statusList[0];\n vm.approvalRoute.CsActive = 1;\n }else{\n vm.statusModel = vm.statusList[1];\n vm.approvalRoute.CsActive = 0;\n }\n\n vm.approvalRouteCopy = angular.copy(vm.approvalRoute);\n vm.observer = jsonpatch.observe(vm.approvalRoute);\n }).catch(function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"settings.approval_route.edit.save.error.msg\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n init();\n }\n})();\n\n(function () {\n\n function ViewScrapFormController($scope) {\n\n var vm = this;\n var scope = $scope;\n\n vm.productionPlanScrap = {\n Id: null,\n Area: null,\n Station: null,\n Quantity: null,\n Reason: null,\n IsNew: null\n };\n\n function initView() {\n var model = $scope.modelDialog;\n if (model && !model.IsNewRegister) {\n vm.productionPlanScrap.Id = model.Id;\n vm.productionPlanScrap.Quantity = model.Quantity;\n vm.productionPlanScrap.Reason = model.Reason;\n vm.productionPlanScrap.Area = model.Area;\n vm.productionPlanScrap.Station = model.Station;\n vm.productionPlanScrap.CreatedByDRI = model.CreatedByDRI;\n vm.productionPlanScrap.IsNew = false;\n } else {\n vm.productionPlanScrap.Id = model.IdScrap;\n vm.productionPlanScrap.IsNew = true;\n }\n\n vm.productionPlanScrap.Section = model.Section;\n }\n\n vm.close = function () {\n scope.$dismiss('cancel');\n };\n\n initView();\n }\n\n function ViewScrapFormDirective() {\n return {\n restrict: 'E',\n replace: true,\n templateUrl: \"app/production_plan/scrap/view-scrap-form.html\",\n controllerAs: 'ctrl',\n controller: 'ViewScrapFormController'\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('ViewScrapFormController', ViewScrapFormController)\n .directive('viewScrapForm', ViewScrapFormDirective);\n})();\n\n(function () {\n\n function ScrapFormController($scope) {\n\n var vm = this;\n var scope = $scope;\n\n vm.productionPlanScrap = {\n Id: null,\n Area: null,\n Station: null,\n Quantity: null,\n Reason: null,\n IsNew: null\n };\n\n function initView() {\n var model = $scope.modelDialog;\n if (model && !model.IsNewRegister) {\n vm.productionPlanScrap.Id = model.Id;\n vm.productionPlanScrap.Quantity = model.Quantity;\n vm.productionPlanScrap.Reason = model.Reason;\n vm.productionPlanScrap.Area = model.Area;\n vm.productionPlanScrap.Station = model.Station;\n vm.productionPlanScrap.CreatedByDRI = model.CreatedByDRI;\n vm.productionPlanScrap.IsNew = false;\n } else {\n vm.productionPlanScrap.Id = model.IdScrap;\n vm.productionPlanScrap.IsNew = true;\n }\n\n vm.productionPlanScrap.Section = model.Section;\n }\n\n vm.close = function () {\n scope.$dismiss('cancel');\n };\n\n vm.save = function () {\n $scope.parentDialog.addScrapPlan(vm.productionPlanScrap);\n scope.$close('ok');\n };\n\n vm.validateDRI = function () {\n var isInValid = true;\n\n if (!vm.productionPlanScrap.CreatedByDRI) {\n isInValid = false;\n }\n\n if (angular.isString(vm.productionPlanScrap.CreatedByDRI)) {\n isInValid = false;\n }\n\n return isInValid;\n };\n\n initView();\n }\n\n function ScrapFormDirective() {\n return {\n restrict: 'E',\n replace: true,\n templateUrl: \"app/production_plan/scrap/scrap-form.html\",\n controllerAs: 'ctrl',\n controller: 'ScrapFormController'\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('ScrapFormController', ScrapFormController)\n .directive('scrapForm', ScrapFormDirective);\n})();\n\n(function () {\n\n function ViewOccurrenceFormController(ToastUtil, $translate, $log, $scope,\n EffectTypeService, TasktypeService, ModelService, DefaultService) {\n\n var vm = this;\n vm.isEdit = false;\n\n var hourMinutes = 2;\n var scope = $scope;\n\n vm.StatusId = {\n ONGOING: 0,\n CLOSED: 1\n }\n\n vm.statusProcessId = {\n PROCESSUNAVAILABLE: 0,\n PROCESSWITHRESTRICTIONS: 1,\n PROCESSNORMALLY: 2\n };\n\n vm.statusProcess = [{\n id: vm.statusProcessId.PROCESSNORMALLY,\n Name: 'production.plan.occurrence.process.normally'\n },\n {\n id: vm.statusProcessId.PROCESSWITHRESTRICTIONS,\n Name: 'production.plan.occurrence.process.restrictions'\n },\n {\n id: vm.statusProcessId.PROCESSUNAVAILABLE,\n Name: 'production.plan.occurrence.process.unavailable'\n }\n ];\n\n vm.productionPlanOccurrence = {\n Id: null,\n Area: null,\n Synthesis: undefined,\n Station: null,\n EffectTypes: [],\n Process: null,\n Hour: null,\n Minutes: null,\n HourInitial: null,\n DurationTime: null,\n Description: null,\n IsNew: null,\n Countermeasure: null,\n Status: null\n };\n\n vm.effects = [];\n vm.effectSelecteds = [];\n vm.reuse = null;\n vm.process = null;\n vm.station = null;\n\n function initView() {\n var model = $scope.modelDialog;\n if (model && !model.IsNewRegister) {\n vm.isEdit = true;\n vm.productionPlanOccurrence.Id = model.Id;\n vm.description = model.Description;\n vm.productionPlanOccurrence.Section = model.Section;\n vm.productionPlanOccurrence.Synthesis = model.Synthesis;\n vm.productionPlanOccurrence.Area = model.Area;\n vm.productionPlanOccurrence.Station = model.Station;\n vm.productionPlanOccurrence.Process = model.Process;\n vm.productionPlanOccurrence.EffectTypes = model.EffectTypes;\n vm.productionPlanOccurrence.IsNew = false;\n vm.productionPlanOccurrence.Status = model.Status;\n vm.productionPlanOccurrence.CreatedByDRI = model.CreatedByDRI;\n vm.productionPlanOccurrence.Countermeasure = model.Countermeasure;\n vm.productionPlanOccurrence.DurationTime = model.DurationTime === 0 ? null : model.DurationTime;\n vm.productionPlanOccurrence.HourInitial = model.HourInitial;\n\n if (vm.productionPlanOccurrence.Status === vm.StatusId.CLOSED) {\n vm.checkedClose = true;\n } else {\n vm.checkedClose = false;\n }\n\n loadStatusProcessEdit(vm.productionPlanOccurrence.Process);\n\n } else {\n vm.productionPlanOccurrence.Id = model.IdOccurrence;\n vm.productionPlanOccurrence.IsNew = true;\n vm.productionPlanOccurrence.Section = model.Section;\n vm.productionPlanOccurrence.Status = vm.StatusId.ONGOING;\n vm.productionPlanOccurrence.IsEmail = true;\n vm.productionPlanOccurrence.Process = -1;\n vm.checkedClose = false;\n loadDate();\n }\n\n loadEffects();\n }\n\n // Check close occurrence.\n vm.checkedCloseOccurrence = function () {\n if (vm.checkedClose) {\n vm.productionPlanOccurrence.Status = vm.StatusId.CLOSED;\n return true;\n } else {\n vm.productionPlanOccurrence.Status = vm.StatusId.ONGOING;\n return false;\n }\n };\n\n // Load date from server.\n function loadDate() {\n DefaultService.loadDate(hourMinutes).then(function (response) {\n vm.productionPlanOccurrence.HourInitial = response;\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n });\n }\n\n // Load effects.\n function loadEffects() {\n var searchParams = {\n Title: \"\",\n CsActive: 1\n };\n\n DefaultService.loadEffects(searchParams).then(function (response) {\n vm.effects = angular.copy(response);\n\n if (vm.isEdit) {\n loadEffectsEdit();\n }\n\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"error.effects\"), ToastUtil.ToastType.ERROR);\n });\n }\n\n // Set selected effect in edit.\n function loadEffectsEdit() {\n\n if (vm.productionPlanOccurrence.EffectTypes != undefined) {\n angular.forEach(vm.productionPlanOccurrence.EffectTypes, function (persistedValue) {\n var isItemInative = true;\n angular.forEach(vm.effects, function (value) {\n if (value.Id == persistedValue.Id) {\n vm.effectSelecteds.push(value.Id);\n isItemInative = false;\n }\n })\n\n if (isItemInative) {\n vm.effectSelecteds.push(persistedValue.Id);\n }\n })\n }\n }\n\n // Set selected status in edit.\n function loadStatusProcessEdit(id) {\n angular.forEach(vm.statusProcess, function (status) {\n if (status.id == id) {\n vm.process = status;\n }\n });\n }\n\n // Close modal occurrence.\n vm.close = function () {\n scope.$dismiss('cancel');\n };\n\n initView();\n }\n\n function ViewOccurrenceFormDirective() {\n return {\n restrict: 'E',\n replace: true,\n templateUrl: \"app/production_plan/occurrence/view-occurrence-form.html\",\n controllerAs: 'ctrl',\n controller: 'ViewOccurrenceFormController'\n };\n }\n angular.module('aqmsFrontend')\n .controller('ViewOccurrenceFormController', ViewOccurrenceFormController)\n .directive('viewOccurrenceForm', ViewOccurrenceFormDirective);\n})();\n\n(function () {\n\n function OccurrenceFormController(ToastUtil, $translate, $log, $scope,\n EffectTypeService, TasktypeService, ModelService, DefaultService) {\n\n var vm = this;\n vm.isEdit = false;\n vm.isShowReuse = false;\n vm.isShowCheckReuse = false;\n\n var scope = $scope;\n var hourMinutes = 2;\n var previousState = null;\n\n vm.StatusId = {\n ONGOING: 0,\n CLOSED: 1\n }\n\n vm.statusProcessId = {\n PROCESSUNAVAILABLE: 0,\n PROCESSWITHRESTRICTIONS: 1,\n PROCESSNORMALLY: 2\n };\n\n vm.statusProcess = [{\n id: vm.statusProcessId.PROCESSNORMALLY,\n Name: 'production.plan.occurrence.process.normally'\n },\n {\n id: vm.statusProcessId.PROCESSWITHRESTRICTIONS,\n Name: 'production.plan.occurrence.process.restrictions'\n },\n {\n id: vm.statusProcessId.PROCESSUNAVAILABLE,\n Name: 'production.plan.occurrence.process.unavailable'\n }\n ];\n\n vm.productionPlanOccurrence = {\n Id: null,\n Area: null,\n Synthesis: undefined,\n Station: null,\n EffectTypes: [],\n Process: null,\n Hour: null,\n Minutes: null,\n HourInitial: null,\n DurationTime: null,\n Description: null,\n IsNew: null,\n Countermeasure: null,\n Status: null\n };\n\n vm.effects = [];\n vm.effectSelecteds = [];\n vm.reuse = null;\n vm.process = null;\n vm.description = null;\n\n function initView() {\n var model = $scope.modelDialog;\n if (model && !model.IsNewRegister) {\n vm.isEdit = true;\n vm.productionPlanOccurrence.Id = model.Id;\n vm.description = model.Description;\n vm.productionPlanOccurrence.Synthesis = model.Synthesis;\n vm.productionPlanOccurrence.Area = model.Area;\n vm.productionPlanOccurrence.Station = model.Station;\n vm.productionPlanOccurrence.Process = model.Process;\n vm.productionPlanOccurrence.EffectTypes = model.EffectTypes;\n vm.productionPlanOccurrence.IsNew = false;\n vm.productionPlanOccurrence.Status = model.Status;\n vm.productionPlanOccurrence.CreatedByDRI = model.CreatedByDRI;\n vm.productionPlanOccurrence.Countermeasure = model.Countermeasure;\n vm.productionPlanOccurrence.DurationTime = model.DurationTime === 0 ? null : model.DurationTime;\n vm.productionPlanOccurrence.HourInitial = model.HourInitial;\n\n vm.productionPlanOccurrence.Section = model.Section;\n\n previousState = model.Status;\n\n if (vm.productionPlanOccurrence.Status === vm.StatusId.CLOSED) {\n vm.checkedClose = true;\n } else {\n vm.checkedClose = false;\n }\n\n loadStatusProcessEdit(vm.productionPlanOccurrence.Process);\n\n } else {\n vm.productionPlanOccurrence.Id = model.IdOccurrence;\n vm.productionPlanOccurrence.IsNew = true;\n vm.productionPlanOccurrence.Section = model.Section;\n vm.productionPlanOccurrence.Status = vm.StatusId.ONGOING;\n vm.productionPlanOccurrence.IsEmail = true;\n vm.productionPlanOccurrence.Process = -1;\n vm.checkedClose = false;\n loadDate();\n }\n\n loadEffects();\n\n if (model.ReuseOccurrences && model.ReuseOccurrences.length > 0) {\n vm.isShowCheckReuse = true;\n vm.reuseOccurrences = model.ReuseOccurrences;\n }\n }\n\n // Validates screen rules if there is occurrence that can be reused.\n vm.checkedReuseOccurrence = function () {\n if (vm.checkedReuse) {\n vm.isShowReuse = true;\n return true;\n } else {\n vm.isShowReuse = false;\n return false;\n }\n };\n\n // Check close occurrence.\n vm.checkedCloseOccurrence = function () {\n if (vm.checkedClose) {\n vm.productionPlanOccurrence.Status = vm.StatusId.CLOSED;\n return true;\n } else {\n vm.productionPlanOccurrence.Status = vm.StatusId.ONGOING;\n return false;\n }\n };\n\n // Load date from server.\n function loadDate() {\n DefaultService.loadDate(hourMinutes).then(function (response) {\n vm.productionPlanOccurrence.HourInitial = response;\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n });\n }\n\n // Load effects.\n function loadEffects() {\n var searchParams = {\n Title: \"\",\n CsActive: 1\n };\n\n DefaultService.loadEffects(searchParams).then(function (response) {\n vm.effects = angular.copy(response);\n if (!vm.effects.length) {\n $scope.occurrenceForm.$setValidity('noEffectType', false);\n }\n if (vm.isEdit) {\n loadEffectsEdit();\n }\n\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"error.effects\"), ToastUtil.ToastType.ERROR);\n });\n }\n\n // Set selected effect in edit.\n function loadEffectsEdit() {\n\n if (vm.productionPlanOccurrence.EffectTypes != undefined) {\n angular.forEach(vm.productionPlanOccurrence.EffectTypes, function (persistedValue) {\n var isItemInative = true;\n angular.forEach(vm.effects, function (value) {\n if (value.Id == persistedValue.Id) {\n vm.effectSelecteds.push(value.Id);\n isItemInative = false;\n }\n })\n\n if (isItemInative) {\n vm.effectSelecteds.push(persistedValue.Id);\n }\n })\n }\n }\n\n // Set selected status in edit.\n function loadStatusProcessEdit(id) {\n angular.forEach(vm.statusProcess, function (status) {\n if (status.id == id) {\n vm.process = status;\n }\n });\n }\n\n // Get selected effects.\n function getSelectedEffectTypes() {\n var effects = [];\n for (var indexSelected = 0; indexSelected < vm.effectSelecteds.length; indexSelected++) {\n for (var effIndex = 0; effIndex < vm.effects.length; effIndex++) {\n if (vm.effects[effIndex].Id == vm.effectSelecteds[indexSelected]) {\n effects.push(vm.effects[effIndex]);\n break;\n }\n }\n }\n return effects;\n }\n\n // Close modal occurrence.\n vm.close = function () {\n scope.$dismiss('cancel');\n };\n\n // Adds the occurrence to the production plan.\n vm.save = function () {\n\n if (vm.process) {\n vm.productionPlanOccurrence.Process = vm.process.id;\n }\n\n vm.productionPlanOccurrence.EffectTypes = getSelectedEffectTypes();\n vm.productionPlanOccurrence.Description = vm.description;\n\n if (vm.isEdit) {\n if (previousState === vm.productionPlanOccurrence.Status) {\n vm.productionPlanOccurrence.SendEmail = false;\n } else {\n vm.productionPlanOccurrence.SendEmail = true;\n }\n } else {\n vm.productionPlanOccurrence.SendEmail = true;\n }\n\n $scope.parentDialog.addOccurrencePlan(vm.productionPlanOccurrence);\n scope.$close('ok');\n };\n\n // Validates screen rules for the save button.\n vm.canSave = function () {\n var canSave = false;\n\n if (vm.area && vm.station && vm.description && vm.description.length > 2 &&\n vm.effectSelecteds && vm.effectSelecteds.length > 0 && vm.validateDRI()) {\n if (vm.checkedClose) {\n if (vm.productionPlanOccurrence.Countermeasure && vm.process && vm.productionPlanOccurrence.Countermeasure.length > 2 &&\n vm.productionPlanOccurrence.DurationTime && vm.productionPlanOccurrence.DurationTime > 0) {\n canSave = true;\n } else {\n canSave = false;\n }\n } else {\n canSave = true;\n }\n }\n\n return canSave;\n };\n\n // Save used when the user reuses an occurrence of the previous hour.\n vm.saveReuse = function () {\n var copyOccurrence = {};\n copyOccurrence.Id = vm.productionPlanOccurrence.Id;\n copyOccurrence.Session = vm.reuse.Section;\n copyOccurrence.Synthesis = vm.reuse.Synthesis;\n copyOccurrence.Area = vm.reuse.Area;\n copyOccurrence.Station = vm.reuse.Station;\n copyOccurrence.Process = vm.reuse.Process;\n copyOccurrence.EffectTypes = vm.reuse.EffectTypes;\n copyOccurrence.IsNew = true;\n copyOccurrence.Status = vm.StatusId.CLOSED;\n copyOccurrence.Description = vm.reuse.Description;\n copyOccurrence.CreatedByDRI = vm.reuse.CreatedByDRI;\n copyOccurrence.Countermeasure = vm.reuse.Countermeasure;\n copyOccurrence.DurationTime = vm.reuse.DurationTime;\n copyOccurrence.HourInitial = vm.reuse.HourInitial;\n copyOccurrence.SendEmail = false;\n\n $scope.parentDialog.addOccurrencePlan(copyOccurrence);\n scope.$close('ok');\n };\n\n // Validates screen rules for the save reuse button.\n vm.canSaveReuse = function () {\n var canSave = true;\n\n if (vm.isShowCheckReuse && !vm.reuse) {\n canSave = false;\n }\n\n return canSave;\n };\n\n // Set status da occurrence.\n vm.setStatusProcess = function (process) {\n vm.process = process;\n };\n\n // Validates if the DRI's is valid.\n vm.validateDRI = function () {\n var isInValid = true;\n\n if (!vm.productionPlanOccurrence.CreatedByDRI) {\n isInValid = false;\n }\n\n if (angular.isString(vm.productionPlanOccurrence.CreatedByDRI)) {\n isInValid = false;\n }\n\n return isInValid;\n };\n\n initView();\n }\n\n function OccurrenceFormDirective() {\n return {\n restrict: 'E',\n replace: true,\n templateUrl: \"app/production_plan/occurrence/occurrence-form.html\",\n controllerAs: 'ctrl',\n controller: 'OccurrenceFormController'\n };\n }\n angular.module('aqmsFrontend')\n .controller('OccurrenceFormController', OccurrenceFormController)\n .directive('occurrenceForm', OccurrenceFormDirective);\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('ProductionPlanEmailGroupController', ProductionPlanEmailGroupController);\n\n function ProductionPlanEmailGroupController(InputListEmailService, ToastUtil, AuthService,\n DefaultService, $state, $translate, $log, $scope) {\n\n var vm = this;\n\n var profilePermission = {\n CanAdd: false,\n CanEdit: false,\n CanDelete: false,\n CanView: false,\n CanApprove: false,\n CanExport: false\n }\n\n vm.filterModel = \"\";\n vm.emailToNotifyList = [];\n\n function init() {\n loadProfileModules();\n }\n\n function loadProfileModules() {\n var profileModule = {};\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.moduleProductionPlan;\n DefaultService.loadModules(profileModule).then(function (response) {\n profilePermission = angular.copy(response);\n\n if (!profilePermission.CanApprove) {\n $state.go('production-plan-list');\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n\n listEmails();\n\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n });\n }\n\n function listEmails() {\n InputListEmailService.listAllProductionPlanEmails().then(function (response) {\n vm.emailToNotifyList = angular.copy(response);\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant('production.plan.load.group.email.error.msg'),\n ToastUtil.ToastType.ERROR);\n });\n }\n\n init();\n }\n})();\n\n/**\n * Created by anderson.lins on 23/02/2017.\n */\n(function(){\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(UserTranslate);\n\n function UserTranslate($translateProvider){\n $translateProvider.translations('en', {\n 'dri.title' : 'User',\n 'dri.title.dris' : 'Users',\n 'dri.group.title' : 'User Group',\n 'dri.label' : 'User',\n 'dri.label.new.user' : 'New User',\n 'dri.label.edit.user' : 'Edit User',\n 'error.user.action.denied' : 'This action needs to be performed by another user.',\n 'label.user.name' : 'Full Name',\n 'label.group.new' : 'New Group',\n 'label.user.email' : 'Email',\n 'label.user.isTeamLeader' : 'Team Leader',\n 'label.user.userName' : 'Login',\n 'label.user.password' : 'Password',\n 'label.user.confirm.password' : 'Confirm Password',\n 'label.user.telegram' : 'Telegram Id',\n 'label.user.role' : 'Role',\n 'label.dri.login' : 'Login',\n 'label.user.group.name' : 'Name',\n 'label.user.area' : 'User Area',\n 'label.area' : 'Area',\n 'label.identification.user' : 'User Identification',\n 'label.identification.user.system' : 'System User Identification',\n 'label.identification.group' : 'Group Identification',\n 'label.identification.users.group' : 'Users Association',\n 'dri.label.group' : 'Users Group',\n 'dri.label.dri.name' : 'Name',\n 'dri.label.group.name' : 'Name',\n 'dri.label.dri.leader' : 'Team Leader',\n 'dri.label.dri.role' : 'Role',\n 'dri.label.dri.email' : 'Email',\n 'dri.label.dri.active' : 'Active',\n 'dri.btn.new' : 'New User',\n 'dri.btn.new.group' : 'New Group',\n 'dri.btn.edit.group' : 'Edit Group',\n 'dri.placeholder.search' : 'Search User by name',\n 'dri.group.placeholder.search' : 'Search Group by name',\n 'dri.placeholder.search.bygroup' : 'Search User by group',\n 'dri.placeholder.search.byrole' : 'Search User by role',\n 'placeholder.group.name' : 'Write the name of group...',\n 'placeholder.user.name' : 'Write the name of user...',\n 'placeholder.user.telegram' : 'Write the Telegram id...',\n 'placeholder.user.email' : 'Write the email of user...',\n 'placeholder.user.isTeamLeader' : 'User is team leader?',\n 'placeholder.user.isTeamLeaderNo' : 'Yes',\n 'placeholder.user.isTeamLeaderYes' : 'No',\n 'placeholder.user.userName' : 'Write the login of user. Ex: peter10, john.10, john.ryan',\n 'placeholder.user.password' : 'Write the password of user...',\n 'placeholder.user.confirm.password' : 'Confirm the password...',\n 'placeholder.user.role' : 'Enter the role of user...',\n 'dri.load.all.notFound' : 'No User found.',\n 'dri.group.load.all.notFound' : 'No User Group found.',\n 'dri.error.load.dris' : 'Error while trying to load User.',\n 'dri.label.yes.teamLeader' : 'Yes',\n 'dri.label.no.teamLeader' : 'No',\n 'dri.label.yes.active' : 'Yes',\n 'dri.label.no.active' : 'No',\n 'msg.group.save.success' : 'Group saved with success.',\n 'msg.user.save.success' : 'User saved with success.',\n 'msg.group.save.fail' : 'An error occurred when trying to save a new group, please contact your administrator.',\n 'msg.user.save.fail' : 'An error occurred when trying to save a new user, please contact your administrator.',\n 'hint.user.group.association' : 'Add members to group',\n 'error.user.duplicate': 'User ($name) already added to the list.',\n 'error.user.leader.duplicate' : 'Already exist a leader in the list.',\n 'validation.group.user.required' : 'You need to insert at least 01 user.',\n 'validation.email.required' : 'Email is required.',\n 'validation.email.pattern.required' : 'Email format is not valid.',\n 'validation.isTeamLeader.required' : 'Team Leader is required.',\n 'validation.userName.required' : 'Login is required.',\n 'validation.name.required' : 'Full Name is required.',\n 'validation.fullname.required' : 'Full Name is required, does not accept numbers and special characters.',\n 'validation.userName.pattern.required' : 'Login format is not valid. E.g: rick.ryes, rick12',\n 'validation.password.required' : 'Password is required.',\n 'validation.password.notequal.required' : 'Passwords must be the same.',\n 'validation.role.required' : 'Role is required.',\n 'validation.password.length.required' : 'The Password must have between 6 and 10 characters.',\n 'msg.group.search.fail' : 'No groups were found.',\n 'msg.user.search.fail' : 'No users were found.',\n 'group.deleted.success' : 'Group deleted with success.',\n 'group.deleted.fail' : 'An error occurred when trying to delete a group, please contact your administrator.',\n 'user.deleted.success' : 'User deleted with success.',\n 'user.deleted.fail' : 'An error occurred when trying to delete a user, please contact your administrator.',\n 'user.active.success' : 'The user has successfully activated.',\n 'user.active.fail' : 'An error occurred when trying to active the user, please contact your administrator.',\n 'user.disable.success' : 'The user has successfully disabled.',\n 'user.disable.fail' : 'An error occurred when trying to disable the user, please contact your administrator.',\n 'user.delete.task.association.error' : 'User can not be deleted, There are associations in the system.',\n 'group.delete.task.association.error' : 'Group can not be deleted, There are associations in the system.',\n 'msg.role' : 'Choose permissions to user.',\n 'label.quantity.user' : 'Number of users',\n 'validation.team.leader.required' : 'To save the group you need a team leader.',\n 'msg.user.duplicate.save.fail' : 'An error occurred when trying to save the user. Name, email or login already used.',\n 'msg.business.select': 'Select a business',\n 'msg.area.select': 'Select a Area',\n 'msg.profile.select': 'Select a profile',\n 'validation.business.required': 'Business is required.',\n 'validation.profile.required': 'Profile is required.',\n 'label.user.business' : 'Business',\n 'label.user.profile' : 'Profile',\n 'identification.not.found': 'No ID found.',\n 'msg.user.add.erro.profile': 'A profile associated with the business already exists.',\n 'msg.user.add.erro.area': 'Area already associated with the user',\n 'msg.user.no.area': 'An area is required',\n 'label.user.sysAdmin': 'System Administrator',\n 'msg.error.unique.sysadmin' : 'At least one system administrator is required.',\n 'msg.user.telegram.duplicate.save.fail' : 'An error occurred when trying to save the user. Telegram username already used for current company.'\n });\n\n $translateProvider.translations('pt', {\n 'dri.title' : 'Usuário',\n 'dri.title.dris' : 'Usuários',\n 'dri.group.title' : 'Grupo de Usuário',\n 'dri.label' : 'Usuário',\n 'dri.label.new.user' : 'Novo Usuário',\n 'dri.label.edit.user' : 'Editar Usuário',\n 'error.user.action.denied' : 'Essa ação precisa realizada por outro usuário.',\n 'label.user.name' : 'Nome Completo',\n 'label.user.email' : 'Email',\n 'label.user.isTeamLeader' : 'Líder de Time',\n 'label.user.userName' : 'Login',\n 'label.user.password' : 'Senha',\n 'label.user.confirm.password' : 'Confirmação de Senha',\n 'label.user.role' : 'Função',\n 'label.group.new' : 'Novo Grupo',\n 'label.dri.login' : 'Login',\n 'dri.label.group' : 'Grupo de Usuários',\n 'label.user.area' : 'Áreas do Usuário',\n 'label.area' : 'Área',\n 'label.identification.user' : 'Identificação do Usuário',\n 'label.identification.user.system' : 'Identificação do Usuário no Sistema',\n 'label.identification.group' : 'Identificação do Grupo',\n 'label.identification.users.group' : 'Associação de Usuários',\n 'label.user.group.name' : 'Nome',\n 'dri.label.dri.name' : 'Nome',\n 'dri.label.group.name' : 'Nome',\n 'dri.label.dri.leader' : 'Líder',\n 'dri.label.dri.role' : 'Role',\n 'dri.label.dri.email' : 'Email',\n 'dri.label.dri.active' : 'Ativo',\n 'dri.btn.new' : 'Novo Usuário',\n 'dri.btn.new.group' : 'Novo Grupo',\n 'dri.btn.edit.group' : 'Editar Grupo',\n 'dri.placeholder.search' : 'Buscar Usuário por nome',\n 'dri.group.placeholder.search' : 'Buscar Grupo de Usuários por nome',\n 'dri.placeholder.search.bygroup' : 'Buscar Usuário por grupo',\n 'dri.placeholder.search.byrole' : 'Buscar Usuário por role',\n 'placeholder.group.name' : 'Escreva o nome do grupo...',\n 'placeholder.user.name' : 'Escreva o nome do usuário...',\n 'placeholder.user.email' : 'Escreva o email do usuário...',\n 'placeholder.user.isTeamLeader' : 'Usuário é líder de time?',\n 'placeholder.user.isTeamLeaderNo' : 'Sim',\n 'placeholder.user.isTeamLeaderYes' : 'Não',\n 'placeholder.user.userName' : 'Escreva o login do usuário. Ex: peter10, john.10, john.ryan',\n 'placeholder.user.password' : 'Escreva a senha do usuário...',\n 'placeholder.user.confirm.password' : 'Confirme a senha...',\n 'placeholder.user.role' : 'Informe a função do usuário no sistema...',\n 'dri.load.all.notFound' : 'Nenhum Usuário encontrado.',\n 'dri.group.load.all.notFound' : 'Nenhum Grupo de usuário encontrado.',\n 'dri.error.load.dris' : 'Ocorreu um erro ao carregar os Usuários.',\n 'dri.label.yes.teamLeader' : 'Sim',\n 'dri.label.no.teamLeader' : 'Não',\n 'dri.label.yes.active' : 'Sim',\n 'dri.label.no.active' : 'Não',\n 'msg.group.save.success' : 'Grupo salvo com successo.',\n 'msg.user.save.success' : 'Usuário salvo com successo.',\n 'msg.group.save.fail' : 'Ocorreu um erro ao cadastrar novo grupo, entre em contato com o administrador.',\n 'msg.user.save.fail' : 'Ocorreu um erro ao cadastrar novo usuário, entre em contato com o administrador.',\n 'hint.user.group.association' : 'Adicione membros ao grupo',\n 'error.user.duplicate' : 'Usuário ($name) já adicionado na lista.',\n 'error.user.leader.duplicate' : 'Já existe um líder no grupo.',\n 'warn.user.password.length' : 'A senha deve ser entre 6 e 10 caracteres.',\n 'validation.group.user.required' : 'Você precisa inserir pelo menos 01 usuário ao grupo.',\n 'validation.email.required' : 'Email é obrigatório.',\n 'validation.email.pattern.required' : 'O formato de e-mail não é válido.',\n 'validation.isTeamLeader.required' : 'É obrigatório informar se o usuário é um líder de time.',\n 'validation.userName.required' : 'Login é obrigatório.',\n 'validation.name.required' : 'Nome Completo obrigatório.',\n 'validation.fullname.required' : 'Nome Completo obrigatório, não aceita números e/ou caracteres especiais.',\n 'validation.userName.pattern.required' : 'O formato do login não é válido. Ex: rick.ryes, rick12',\n 'validation.password.required' : 'Senha é obrigatória.',\n 'validation.password.notequal.required' : 'As senhas devem ser iguais.',\n 'validation.role.required' : 'Função é obrigatória.',\n 'validation.password.length.required' : 'A senha deve ter entre 6 e 10 caracteres.',\n 'msg.group.search.fail' : 'Nenhum grupo foi encontrado.',\n 'msg.user.search.fail' : 'Nenhum usuário foi encontrado.',\n 'group.deleted.success' : 'O grupo foi excluído com sucesso.',\n 'group.deleted.fail' : 'Ocorreu um erro ao excluir o grupo, entre em contato com o administrador.',\n 'user.deleted.success' : 'O usuário foi excluído com sucesso.',\n 'user.deleted.fail' : 'Ocorreu um erro ao excluir o usuário, entre em contato com o administrador.',\n 'user.active.success' : 'O usuário foi ativado com sucesso.',\n 'user.active.fail' : 'Ocorreu um erro ao ativar o usuário, entre em contato com o administrador.',\n 'user.desactive.success' : 'O usuário foi desativado com sucesso.',\n 'user.desactive.fail' : 'Ocorreu um erro ao desativar o usuário, entre em contato com o administrador.',\n 'user.delete.task.association.error' : 'O usuário não pode ser excluído, existem associações no sistema.',\n 'user.disable.success' : 'O usuário foi desabilitado com sucesso.',\n 'group.delete.task.association.error' : 'O grupo não pode ser excluído, existem associações no sistema.',\n 'msg.role' : 'Escolha as permissões do usuário.',\n 'label.quantity.user' : 'Quantidade de usuários',\n 'validation.team.leader.required' : 'Para salvar o grupo é necessário um líder de time.',\n 'msg.user.duplicate.save.fail' : 'Ocorreu um erro ao tentar salvar o usuário. Nome, email ou login já utilizado no sistema.',\n 'msg.business.select': 'Selecione um negócio',\n 'msg.profile.select': 'Selecione um perfil',\n 'validation.business.required': 'Negócio é obrigatório',\n 'validation.profile.required': 'Perfil é obrigatório.',\n 'label.user.business' : 'Negócio',\n 'msg.area.select': 'Selecione uma Área',\n 'label.user.telegram' : 'Usuário do Telegram',\n 'label.user.profile' : 'Perfil',\n 'identification.not.found': 'Nenhuma identificação encontrada.',\n 'msg.user.add.erro.profile': 'Já existe um perfil associado ao negócio.',\n 'msg.user.add.erro.area': 'Área já está associada ao usuário',\n 'msg.user.no.area': 'Área é obrigatório',\n 'placeholder.user.telegram' : 'Escreva o id do Telegram...',\n 'label.user.sysAdmin': 'Administrador do Sistema',\n 'msg.error.unique.sysadmin' : 'É necessário pelo menos um administrador de sistema.',\n 'msg.user.telegram.duplicate.save.fail' : 'Ocorreu um erro ao tentar salvar o usuário. Username do Telegram já utilizado para empresa atual.'\n });\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('UserService', UserService);\n\n /** @ngInject */\n function UserService($window, $injector, $q, ConfigurationService) {\n return {\n loadUser: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/user/' + id)\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n loadGroup: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/group/', {\n params: {\n Id: id\n },\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n loadUsers: function (filtro) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/user/', {\n params: filtro,\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n loadUsersGroup: function (filtro) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/groups/', {\n params: filtro,\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n loadLoggedDRI: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/user/' + id)\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n saveGroup: function (group) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + '/group/', group, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n saveUser: function (user) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + '/user/', user, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n validateUser: function (user) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + '/user/validate-user', user, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n activeUser: function (user) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + '/user/active/', user, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n deleteUser: function (register) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + '/user/', {\n params: register\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n deleteGroup: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + '/group/' + id, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n loadUserArea: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/user/' + id + '/area')\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n };\n }\n})();\n\n/**\n * Created by anderson.lins on 23/02/2017.\n */\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(UserRouter);\n\n function UserRouter($stateProvider) {\n\n $stateProvider.state('permission-user-list', {\n url: '/permissions/user',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/permissions/user/user-list.html',\n controller: 'UserListController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'label.permission'\n },\n authorize: true\n });\n\n $stateProvider.state('permission-user-create', {\n url: '/permissions/user/create/',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/permissions/user/user-edit.html',\n controller: 'UserEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'label.permission'\n },\n authorize: true\n });\n\n $stateProvider.state('permission-user-edit', {\n url: '/permissions/user/edit/:id',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/permissions/user/user-edit.html',\n controller: 'UserEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'label.permission'\n },\n authorize: true\n });\n }\n})();\n\n/**\n * Created by anderson.lins on 23/02/2017.\n */\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('UserListController', UserListController);\n\n\n function UserListController(UserService, AuthService, ToastUtil, $translate, $scope, $state, $log) {\n\n //public variables\n var vm = this;\n\n vm.DRIs = [];\n \n vm.itensPerPageList = [\n {name: '5', value: 5, before: 0, after: 6}, \n {name: '10', value: 10, before: 5, after: 11}, \n {name: '20', value: 20, before: 10, after: 21}, \n {name: '30', value: 30, before: 20, after: 31}, \n {name: '40', value: 40, before: 30, after: 41}, \n {name: '50', value: 50, before: 40, after: 51}]\n\n vm.itemPerPage = vm.itensPerPageList[0];\n\n vm.totalDRIList = 0;\n vm.searchParams = {\n Name: '',\n Page: 1,\n MaxPerPage: vm.itemPerPage.value\n };\n\n //public functions\n vm.init = _init;\n\n vm.edit = _edit;\n\n vm.delete = _delete;\n\n vm.loadUsers = _loadUsers;\n\n vm.clearSearchParams = _clearSearchParams;\n\n vm.resolveActive = _resolveActive;\n\n vm.resolveActiveCss = _getCsActiveCss;\n\n vm.changeStatus = _changeStatus;\n\n vm.shouldShow = function (item) {\n if(vm.totalDRIList > 0 && item != undefined) {\n return vm.totalDRIList >= item.value || (vm.totalDRIList < item.after && vm.totalDRIList > item.before);\n }\n return false;\n }\n \n vm.changeItemsPerPage = function() {\n if ( vm.itemPerPage == null ) {\n vm.itemPerPage = vm.itensPerPageList[0];\n }\n vm.searchParams.Page = 1;\n vm.searchParams.MaxPerPage = vm.itemPerPage.value;\n vm.loadUsers()\n }\n\n vm.search = function() {\n vm.itemPerPage = vm.itensPerPageList[0];\n vm.searchParams.Page = 1;\n vm.searchParams.MaxPerPage = vm.itemPerPage.value;\n vm.loadUsers()\n }\n\n vm.create = function () {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('permission-user-create', {});\n }\n //code run\n vm.init();\n\n //private functions\n function _init() {\n vm.loadUsers();\n }\n\n function _edit(user) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('permission-user-edit', {\n id: user.Id\n });\n }\n\n function _delete(id) {\n if (id == idUserLogged()) {\n ToastUtil.showToastMessage($translate.instant('error.user.action.denied'), ToastUtil.ToastType.WARN);\n return;\n }\n\n var register = {};\n register.Id = id;\n UserService.deleteUser(register)\n .then(function () {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go($state.current, {}, {\n reload: true\n });\n ToastUtil.showToastMessage($translate.instant(\"user.deleted.success\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function _loadUsers() {\n if (sessionStorage.getItem(\"searchParams\")) {\n vm.searchParams = JSON.parse(sessionStorage.getItem(\"searchParams\"));\n sessionStorage.removeItem(\"searchParams\");\n vm.itensPerPageList.forEach(function(element) {\n if (element.value == vm.searchParams.MaxPerPage) {\n vm.itemPerPage = element;\n return;\n }\n });\n }\n /*Search DRIs*/\n vm.searchParams.UserId = AuthService.getUserID();\n UserService.loadUsers(vm.searchParams)\n .then(function (response) {\n vm.DRIs = response.resultList;\n vm.totalDRIList = response.total;\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status !== $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant('dri.error.load.dris'), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function _clearSearchParams() {\n vm.searchParams.Name = '';\n }\n\n function _changeStatus(user) {\n\n if (user.Id == idUserLogged()) {\n ToastUtil.showToastMessage($translate.instant('error.user.action.denied'), ToastUtil.ToastType.WARN);\n return;\n }\n\n user.CsActive = !user.CsActive;\n\n UserService.activeUser(user)\n .then(function () {\n if (user.CsActive) {\n ToastUtil.showToastMessage($translate.instant('user.active.success'), ToastUtil.ToastType.SUCCESS);\n } else {\n ToastUtil.showToastMessage($translate.instant('user.disable.success'), ToastUtil.ToastType.SUCCESS);\n }\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go($state.current, {}, {\n reload: true\n });\n })\n .catch(function (error) {\n $log.log(error);\n if (!user.CsActive) {\n ToastUtil.showToastMessage($translate.instant('user.active.fail'), ToastUtil.ToastType.ERROR);\n } else {\n ToastUtil.showToastMessage($translate.instant('user.disable.fail'), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function idUserLogged() {\n return AuthService.getUserID();\n }\n\n function _resolveActive(value) {\n if (value) {\n return $translate.instant('label.active');\n } else {\n return $translate.instant('label.inactive');\n }\n }\n\n\n function _getCsActiveCss(csActive) {\n var result = \"\";\n if (csActive == true || csActive == \"true\") {\n result = 'ng-binding label aqms-label-active';\n } else {\n result = 'ng-binding label aqms-label-inactive';\n }\n\n return result;\n }\n\n\n }\n\n})();\n\n/**\n * Created by anderson.lins on 03/03/2017.\n */\n(function () {\n 'use strict'\n\n angular\n .module('aqmsFrontend')\n .controller('UserEditController', UserEditController);\n\n function UserEditController(UserService, AuthService, DefaultService, $window, $timeout,\n ToastUtil, $translate, $log, $state) {\n\n var vm = this;\n var oldLogin = null;\n var oldSysAdmin = null;\n\n // public fields.\n vm.User = {\n Name: '',\n Login: '',\n Password: '',\n Email: '',\n TelegramUsername: '',\n isTeamLeader: false,\n CsAdmin: false,\n CsActive: true,\n Areas: []\n };\n vm.areaList = [];\n vm.areasToAdd = [];\n\n vm.area = undefined;\n\n vm.profileManager = [];\n\n // public functions.\n vm.init = _init;\n\n vm.canSave = _canSave;\n\n vm.save = _save;\n\n vm.validateFullName = _validateFullName;\n\n vm.validateEmail = _validateEmail;\n\n vm.validateLogin = _validateLogin;\n\n vm.validateRole = _validateRole;\n\n vm.validatePassword = _validatePassword;\n\n vm.validateConfirmPassword = _validateConfirmPassword;\n\n vm.validatePasswords = _validatePasswords;\n\n //code run\n vm.init();\n\n\n vm.showRequiredInSystemUserPanel = function() {\n return vm.profileManager.length == 0;\n }\n\n vm.addProfile = function () {\n var manager = {};\n manager.Profile = vm.profile;\n manager.Business = vm.business;\n\n if(vm.profile && vm.business)\n {\n for (var i = 0; i < vm.profileManager.length; i++) {\n if (vm.profileManager[i].Business.Name === vm.business.Name) {\n ToastUtil.showToastMessageTime($translate.instant(\"msg.user.add.erro.profile\"), ToastUtil.ToastType.WARN, ToastUtil.constants.getTime2());\n return;\n }\n }\n\n vm.profileManager.push(manager);\n }\n };\n\n vm.validateAdd = function () {\n if (vm.profile && vm.business) {\n return true;\n }\n\n return false;\n };\n\n vm.validateAreaAdd = function () {\n if (vm.area)\n return true;\n return false;\n };\n\n\n vm.addArea = function() {\n if(vm.area)\n {\n var result = vm.areasToAdd.filter(function(t) {\n return t.Title === vm.area.Title;\n });\n if (result.length > 0) {\n ToastUtil.showToastMessageTime($translate.instant(\"msg.user.add.erro.area\"), ToastUtil.ToastType.WARN, ToastUtil.constants.getTime2());\n return;\n }\n\n vm.areasToAdd.push(vm.area);\n vm.area = undefined;\n }\n };\n\n vm.validateSys = function () {\n if (AuthService.isSysAdmin()) {\n return true;\n }\n return false;\n }\n\n vm.delete = function (index) {\n vm.profileManager.splice(index, 1);\n };\n\n vm.deleteArea = function (index) {\n vm.areasToAdd.splice(index, 1);\n }\n\n // private functions\n function _validateFullName() {\n if (vm.User.Name != undefined && vm.User.Name != '' && vm.User.Name.length > 0) {\n\n var result = vm.User.Name.split(\" \");\n\n if (result.length > 1) {\n\n var regex = /^[a-z\\u00C0-\\u00ffA-Z]+(\\s[a-z\\u00C0-\\u00ffA-Z]+)+$/;\n\n if (regex.test(vm.User.Name.trim())) {\n return true;\n }\n\n }\n }\n\n return false;\n }\n\n function _canSave() {\n if (vm.User != undefined && vm.User != '' &&\n _validateFullName() &&\n _validateEmail() &&\n _validateLogin() &&\n _validateRole() &&\n _validatePassword() &&\n _validatePasswords() &&\n _validateAreas()) {\n\n return true;\n }\n\n return false;\n }\n\n function _save() {\n if (!vm.canSave()) return;\n\n vm.User.Name = vm.User.Name.trim();\n vm.User.Email = vm.User.Email.trim();\n vm.User.Login = vm.User.Login.trim();\n vm.User.isTeamLeader = false;\n vm.User.Areas = [];\n vm.User.Areas = vm.areasToAdd;\n\n\n var isLogout = false;\n\n if (vm.User.Id == idUserLogged()) {\n if (oldLogin !== vm.User.Login) {\n isLogout = true;\n }\n if (oldSysAdmin !== vm.User.CsAdmin) {\n isLogout = true;\n }\n }\n\n vm.User.Permissions = vm.profileManager;\n vm.User.LastBusiness = AuthService.getLastBusiness();\n\n UserService.validateUser(vm.User)\n .then(function () {\n UserService.saveUser(vm.User)\n .then(function () {\n if (isLogout) {\n $timeout(logout, 1000);\n } else {\n $state.go('permission-user-list', {});\n }\n ToastUtil.showToastMessage($translate.instant(\"msg.user.save.success\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n }\n });\n })\n .catch(function (error) {\n $log.log(error);\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function logout()\n {\n AuthService.logout();\n $window.location.href = '/';\n }\n\n function idUserLogged() {\n return AuthService.getUserID();\n }\n\n function _loadUser(id) {\n UserService.loadUser(id)\n .then(function (response) {\n vm.User = response;\n vm.User.Password = '';\n vm.User.ConfirmPassword = '';\n vm.profileManager = vm.User.Permissions;\n vm.areasToAdd = vm.User.Areas;\n oldLogin = vm.User.Login;\n oldSysAdmin = vm.User.CsAdmin;\n })\n .catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"msg.user.search.fail\"), ToastUtil.ToastType.ERROR);\n });\n }\n\n function loadBusiness() {\n DefaultService.loadBussiness()\n .then(function (response) {\n vm.listBusiness = response;\n })\n .catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"msg.user.business.fail\"), ToastUtil.ToastType.ERROR);\n });\n }\n\n function loadProfile() {\n DefaultService.loadProfile()\n .then(function (response) {\n vm.listProfiles = response;\n })\n .catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"msg.user.profile.fail\"), ToastUtil.ToastType.ERROR);\n });\n }\n\n function _validateEmail() {\n if (vm.User.Email != undefined && vm.User.Email.length > 0) {\n var regex = /^[a-z0-9._]+@[a-z]+\\.[a-z.]{2,6}$/;\n if (regex.test(vm.User.Email.trim())) {\n return true;\n }\n }\n\n return false;\n }\n\n function _validatePassword() {\n if (vm.User.Id) {\n return true;\n } else {\n if (vm.User.Password != undefined && vm.User.Password != '' && vm.User.Password.length >= 6 && vm.User.Password.length <= 10) {\n return true;\n } else {\n return false;\n }\n }\n }\n\n function _validateConfirmPassword() {\n if (vm.User.Id) {\n return true;\n } else {\n if (vm.User.ConfirmPassword != undefined && vm.User.ConfirmPassword != '' && vm.User.ConfirmPassword.length >= 6 && vm.User.ConfirmPassword.length <= 10) {\n return true;\n } else {\n return false;\n }\n }\n }\n\n function _validatePasswords() {\n if (vm.User.Password != vm.User.ConfirmPassword) {\n return false;\n } else {\n return true;\n }\n }\n\n function _validateAreas() {\n if (!vm.User.CsAdmin && (!vm.areasToAdd || vm.areasToAdd.length == 0)) {\n ToastUtil.showToastMessageTime($translate.instant(\"msg.user.no.area\"), ToastUtil.ToastType.WARN, ToastUtil.constants.getTime2());\n return false;\n }\n return true;\n }\n\n function _validateLogin() {\n\n if (vm.User.Login != undefined && vm.User.Login != '') {\n var regex = /^[a-zA-Z0-9]+[.]{0,1}[a-zA-Z0-9]+$/;\n\n return regex.test(vm.User.Login);\n }\n\n return false;\n }\n\n function _validateRole() {\n\n if (vm.User.CsAdmin) {\n return true;\n }\n\n if (angular.isDefined(vm.profileManager) && vm.profileManager.length > 0) {\n return true;\n }\n return false;\n }\n\n vm.validateBusiness = function () {\n if (vm.business) {\n return true;\n }\n return false;\n };\n\n vm.validateProfile = function () {\n if (vm.profile) {\n return true;\n }\n return false;\n };\n\n function loadAreas() {\n var searchParams = {\n };\n\n DefaultService.loadAreas(searchParams).then(function (response) {\n vm.areaList = angular.copy(response);\n }).catch(function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.listAreas\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function _init() {\n loadBusiness();\n loadProfile();\n loadAreas();\n\n vm.idToEdit = $state.params.id;\n\n if (vm.idToEdit) {\n _loadUser(vm.idToEdit);\n }\n }\n }\n\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(BusinessTranslate);\n\n /** @ngInject */\n function BusinessTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'permission.profile.name': 'Name',\n 'permission.profile.company': 'Company',\n 'permission.profile.status': 'Status',\n 'permission.profile.btn.new.label': 'New Profile',\n 'permission.profile.btn.edit.label': 'Edit Profile',\n 'permission.profile.identification.title': 'Profile Identification',\n 'permission.profile.module.permission.title': 'Modules and Permissions',\n 'permission.profile.edit.name.required.msg': 'Field name is required.',\n 'permission.profile.load.module.error.msg': 'An error occurred when try to load modules.',\n 'permission.profile.load.profile.error.msg': 'An error occurred when try to load profile.',\n 'permission.profile.load.all.profile.error.msg': 'An error occurred when try to load profile list.',\n 'permission.profile.delete.profile.error.msg': 'An error occurred when try to remove profile.',\n 'permission.profile.delete.profile.success.msg': 'Profile successfully removed.',\n 'permission.profile.column.module.label': 'Module',\n 'permission.profile.column.create.label': 'Create',\n 'permission.profile.column.view.label': 'View',\n 'permission.profile.column.edit.label': 'Edit',\n 'permission.profile.column.delete.label': 'Delete',\n 'permission.profile.column.export.label': 'Export',\n 'permission.profile.column.approve.label': 'Approve',\n 'permission.profile.column.consult.label': 'Consult',\n 'permission.profile.column.select.all.label': 'Select All',\n 'permission.profile.option.all.label': 'All',\n 'permission.profile.option.none.label': 'None',\n 'permission.profile.save.profile.success.msg': 'Profile successfully saved.',\n 'permission.profile.save.profile.error.msg': 'An error occurred when try to save profile.',\n 'title.permission': 'Permissions',\n 'title.settings': 'Settings',\n 'title.preferences': 'Preferences',\n 'permission.profile.page.title': 'Profiles',\n 'profile.same.name.error': 'A record with the same name already exists.',\n 'profile.placeholder.name': 'Enter the profile name',\n 'profile.deleted.failed' : 'Profile can not be deleted. There are one or more associated records.',\n 'permission.profile.not.found':'Modules not found.'\n });\n\n $translateProvider.translations('pt', {\n 'permission.profile.name': 'Nome',\n 'permission.profile.company': 'Empresa',\n 'permission.profile.status': 'Situação',\n 'permission.profile.btn.new.label': 'Novo Perfil',\n 'permission.profile.btn.edit.label': 'Editar Perfil',\n 'permission.profile.identification.title': 'Identificação do Perfil',\n 'permission.profile.module.permission.title': 'Módulos e Permissões',\n 'permission.profile.edit.name.required.msg': 'O campo nome é obrigatório.',\n 'permission.profile.load.module.error.msg': 'Ocorreu um erro ao tentar carregar a lista de módulos.',\n 'permission.profile.load.profile.error.msg': 'Ocorreu um erro ao tentar carregar o profile.',\n 'permission.profile.load.all.profile.error.msg': 'Ocorreu um erro ao tentar carregar a lista de perfis.',\n 'permission.profile.delete.profile.error.msg': 'Ocorreu um erro ao tentar remover o perfil.',\n 'permission.profile.delete.profile.success.msg': 'Perfil removido com sucesso.',\n 'permission.profile.column.module.label': 'Módulo',\n 'permission.profile.column.create.label': 'Criar',\n 'permission.profile.column.view.label': 'Visualizar',\n 'permission.profile.column.edit.label': 'Editar',\n 'permission.profile.column.delete.label': 'Deletar',\n 'permission.profile.column.export.label': 'Exportar',\n 'permission.profile.column.approve.label': 'Aprovar',\n 'permission.profile.column.consult.label': 'Consultar',\n 'permission.profile.column.select.all.label': 'Selecionar Todos',\n 'permission.profile.option.all.label': 'Todos',\n 'permission.profile.option.none.label': 'Nenhum',\n 'permission.profile.save.profile.success.msg': 'Perfil salvo com sucesso.',\n 'permission.profile.save.profile.error.msg': 'Ocorreu um erro ao tentar salvar o profile.',\n 'title.permission': 'Permissões',\n 'title.settings': 'Configurações',\n 'title.preferences': 'Preferências',\n 'permission.profile.page.title': 'Perfis',\n 'profile.same.name.error': 'Já existe um registro com o mesmo nome.',\n 'profile.placeholder.name': 'Digite o nome do perfil',\n 'profile.deleted.failed' : 'Perfil não pode ser excluído. Há um ou mais registros associados.',\n 'permission.profile.not.found':'Nenhum Módulo encontrado.'\n });\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('ProfileService', ProfileService);\n\n /** @ngInject */\n function ProfileService($window, $injector, $q, ConfigurationService) {\n var domain = \"/profile-module\";\n return {\n\n listAllProfiles: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + domain + '/searchProfiles/',\n {\n params : filter,\n headers : {'Authorization': $window.localStorage.aqmsToken}\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getProfileById: function (Id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n $http.get(ConfigurationService.getServiceHost() + domain + '/getProfileById/' + Id, {headers: {'Authorization': $window.localStorage.aqmsToken}})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n saveProfile: function (profile) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + domain + \"/saveProfile/\", profile, {headers: {'Authorization': $window.localStorage.aqmsToken}})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n }\n , function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n\n delete: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + domain + '/deleteProfile/' + id, {headers: {'Authorization': $window.localStorage.aqmsToken}})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n listAllModules: function () {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + domain + '/listAllModules/',\n {\n headers : {'Authorization': $window.localStorage.aqmsToken}\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n\n };\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(ProfileRouter);\n\n /** @ngInject */\n function ProfileRouter($stateProvider) {\n\n $stateProvider.state('permissions-profile-list', {\n url: '/permissions/profile',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/permissions/profile/profile-list.html',\n controller: 'ProfileListController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n type: null,\n menuName: 'label.permission'\n },\n authorize: true\n });\n\n\n $stateProvider.state('permissions-profile-edit', {\n url: '/permissions/profile/edit/:id',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/permissions/profile/profile-edit.html',\n controller: 'ProfileEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'label.permission'\n },\n authorize: true\n });\n\n $stateProvider.state('permissions-profile-create', {\n url: '/permissions/profile/create',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/permissions/profile/profile-edit.html',\n controller: 'ProfileEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'label.permission'\n },\n authorize: true\n });\n\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('ProfileListController', ProfileListController);\n\n function ProfileListController($scope, $state, $log, $translate, ProfileService, ToastUtil, ListModel) {\n\n var vm = this;\n vm.searchParams = {\n Name: '',\n Status: '',\n Page: 1,\n MaxPerPage: 5\n };\n vm.profileList = [];\n vm.totalList = 0;\n\n vm.listModelValues = {};\n\n vm.statusList = [{\n key: 'settings.client.search.hint.status.label',\n value: \"\"\n }, {\n key: 'label.active',\n value: true\n }, {\n key: 'label.inactive',\n value: false\n }];\n vm.statusModel = vm.statusList[0];\n\n vm.search = function() {\n vm.searchParams.MaxPerPage = 5;\n vm.searchParams.Page = 1;\n vm.searchProfiles();\n }\n\n vm.searchProfiles = function () {\n if (sessionStorage.getItem(\"searchParams\")) {\n vm.searchParams = JSON.parse(sessionStorage.getItem(\"searchParams\"));\n sessionStorage.removeItem(\"searchParams\");\n }\n ProfileService.listAllProfiles(angular.copy(vm.searchParams)).then(function (response) {\n vm.profileList = angular.copy(response.Profiles);\n vm.totalList = response.Total;\n initListViewModel(angular.copy(response.Profiles));\n\n }).catch(function (error) {\n $log.log(error);\n if (error.status !== $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"permission.profile.load.all.profile.error.msg\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n vm.setStatusInSearchParams = function () {\n var value = \"\";\n if (vm.statusModel.value === true) {\n value = 1;\n } else if (vm.statusModel.value === false) {\n value = 0;\n }\n\n vm.searchParams.Status = value;\n }\n\n vm.create = function () {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('permissions-profile-create', {});\n }\n\n vm.clearSearchParams = function () {\n vm.searchParams.Name = \"\";\n vm.searchParams.ModelId = \"\";\n vm.searchParams.Status = \"\";\n vm.statusModel = vm.statusList[0];\n }\n\n vm.edit = function (id) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('permissions-profile-edit', {\n id: id\n });\n }\n\n vm.delete = function (id) {\n ProfileService.delete(id).then(function () {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n ToastUtil.showToastMessage($translate.instant(\"permission.profile.delete.profile.success.msg\"), ToastUtil.ToastType.SUCCESS);\n vm.searchProfiles();\n }).catch(function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if (error.status === $scope.HttpStatusCodeConflict) {\n ToastUtil.showToastMessage($translate.instant(\"profile.deleted.failed\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"permission.profile.delete.profile.error.msg\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function init() {\n sessionStorage.removeItem(\"searchParams\");\n vm.searchProfiles();\n }\n\n function initListViewModel(items) {\n\n var idStyle = \"width: 15%;\";\n var nameStyle = \"width: 30%;\";\n //PROPERTIES PARAMS: header: *, rowAttr: *, isHighlight: *, valueFn: *, style: *, cssClass: *, cssClassFn:\n var properties = [\n ListModel.getProperties(\"label.id\", \"Id\", false, null, idStyle, null, null),\n ListModel.getProperties(\"permission.profile.name\", \"Name\", true, null, nameStyle, null, null),\n ListModel.getProperties(\"permission.profile.status\", \"CsActive\", false, getStatusLabel, \"\", null, getCsActiveCss)\n ];\n //Build menu: menuType: *, identificationKey: *, descriptionKey: *, actionFn: *\n var actionMenuItems = [\n ListModel.getActionMenuItem(ListModel.ActionMenuEnum.EDIT, \"Id\", null, vm.edit),\n ListModel.getActionMenuItem(ListModel.ActionMenuEnum.DELETE, \"Id\", \"Name\", vm.delete)\n ];\n //Get parent Action Menu: menuItems: *, type: *\n var actionMenu = ListModel.getActionMenu(actionMenuItems, ListModel.ActionMenuTypeEnum.INLINE)\n vm.listModelValues = ListModel.getListModel(properties, items, actionMenu);\n }\n\n function getStatusLabel(status) {\n var statusKey = \"label.inactive\";\n if (status == true || status == \"true\") {\n statusKey = \"label.active\";\n }\n\n return statusKey;\n }\n\n function getCsActiveCss(csActive) {\n var result = \"\";\n if (csActive == true || csActive == \"true\") {\n result = 'ng-binding label aqms-label-active';\n } else {\n result = 'ng-binding label aqms-label-inactive';\n }\n\n return result;\n }\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('ProfileEditController', ProfileEditController);\n\n function ProfileEditController($log, $q, $state, $scope, $stateParams, $translate,\n DefaultService, ProfileService, ToastUtil) {\n\n var vm = this;\n vm.idToEdit = null;\n\n vm.statusList = [{\n key: 'label.active',\n value: true\n }, {\n key: 'label.inactive',\n value: false\n }];\n\n vm.statusModel = vm.statusList[0];\n\n vm.company = {};\n vm.moduleList = [];\n vm.profile = {};\n\n function canSaveProfile() {\n var canSave = false;\n if (angular.isDefined(vm.profile) && angular.isDefined(vm.profile.Name) &&\n vm.profile.Name != \"\" && validateCheckModule()) {\n canSave = true;\n }\n return canSave;\n }\n\n vm.setStatusInProfileObj = function () {\n vm.profile.CsActive = vm.statusModel.value;\n }\n\n vm.saveProfile = function () {\n if (canSaveProfile())\n ProfileService.saveProfile(vm.profileModuleListToEdit)\n .then(\n function () {\n $state.go('permissions-profile-list');\n ToastUtil.showToastMessage($translate.instant(\"permission.profile.save.profile.success.msg\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(\n function (error) {\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(\"permission.profile.save.profile.error.msg\"), ToastUtil.ToastType.ERROR);\n }\n }\n });\n }\n\n vm.setCompany = function () {\n vm.profile.Company = vm.company;\n }\n\n vm.selectAllChanged = function (item) {\n if (item.SelectAll === true) {\n setCheckStatus(item, true);\n } else {\n setCheckStatus(item, false);\n }\n }\n\n /**\n * If module is Permission, Settings or BasicTypes, only 'canAdd' Check must be shown.\n * @param item\n * @returns {boolean}\n */\n vm.canShowCheckBox = function (item) {\n var canShow = true;\n if (item.Module.Name == \"permission\" || item.Module.Name == \"settings\" || item.Module.Name == \"basictypes\"\n || item.Module.Name === \"logistics\") {\n canShow = false;\n }\n return canShow;\n }\n\n /**\n * If module is Permission, Settings or BasicTypes, only 'canAdd' Check must be shown.\n * @param item\n * @returns {boolean}\n */\n vm.canShowCheckBoxDelete = function (item) {\n var canShow = true;\n if (item.Module.Name == \"permission\" || item.Module.Name == \"settings\" || item.Module.Name == \"basictypes\"\n || item.Module.Name === \"logistics\" || item.Module.Name == \"fiscal\") {\n canShow = false;\n }\n return canShow;\n }\n /**\n * Show the consult permission option.\n * @param item\n * @returns {boolean}\n */\n vm.canShowCheckBoxConsult = function (item) {\n var moduleNames = [$scope.moduleProductionPlan, $scope.moduleSourcing, $scope.moduleComponentDevelopment, $scope.moduleContract, $scope.moduleAlert, $scope.moduleFinancial, $scope.moduleAcquisition];\n return moduleNames.indexOf(item.Module.Name) !== -1;\n }\n\n vm.handleSelectAllCheck = function (item) {\n if (isAllOptionsChecked(item)) {\n item.SelectAll = true;\n } else {\n item.SelectAll = false;\n }\n }\n\n\n vm.showRequiredInDivInput = function () {\n return !validateCheckModule();\n }\n\n function validateCheckModule() {\n var result = false;\n if (angular.isDefined(vm.profile) && vm.profileModuleListToEdit.length > 0) {\n angular.forEach(vm.profileModuleListToEdit, function (pfToEdit) {\n if (pfToEdit.CanAdd) {\n result = true;\n }\n if (pfToEdit.CanEdit) {\n result = true;\n }\n if (pfToEdit.CanView) {\n result = true;\n }\n if (pfToEdit.CanDelete) {\n result = true;\n }\n if (pfToEdit.CanExport) {\n result = true;\n }\n if (pfToEdit.CanConsult) {\n result = true;\n }\n });\n }\n return result;\n }\n\n function init() {\n\n vm.setStatusInProfileObj();\n var promisseCompany = loadUserCompany();\n var promisseModule = loadModules();\n vm.idToEdit = $stateParams.id;\n if (vm.idToEdit) {\n //Wait untill promisses return.\n $q.all([promisseCompany, promisseModule]).then(function () {\n loadProfileToEdit();\n });\n\n }\n }\n\n function loadUserCompany() {\n return DefaultService.loadUserCompanyById()\n .then(\n function (response) {\n vm.company = angular.copy(response);\n vm.setCompany();\n })\n .catch(\n function (error) {\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"error.company.search\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function loadProfileToEdit() {\n ProfileService.getProfileById(vm.idToEdit).then(function (response) {\n vm.profile = angular.copy(response);\n setStatusToEdit(vm.profile.CsActive);\n vm.setCompany();\n setProfileModuleToEdit();\n\n }).catch(function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"permission.profile.load.profile.error.msg\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function setProfileModuleToEdit() {\n if (angular.isDefined(vm.profile) && vm.profile.ProfileModules != null && vm.profile.ProfileModules.length > 0 && vm.profileModuleListToEdit.length > 0) {\n angular.forEach(vm.profile.ProfileModules, function (profileModule) {\n angular.forEach(vm.profileModuleListToEdit, function (pfToEdit) {\n\n if (profileModule.Module.Id == pfToEdit.Module.Id) {\n pfToEdit.CanAdd = profileModule.CanAdd;\n pfToEdit.CanEdit = profileModule.CanEdit;\n pfToEdit.CanView = profileModule.CanView;\n pfToEdit.CanDelete = profileModule.CanDelete;\n pfToEdit.CanExport = profileModule.CanExport;\n pfToEdit.CanApprove = profileModule.CanApprove;\n pfToEdit.CanConsult = profileModule.CanConsult;\n\n pfToEdit.SelectAll = isSelectAllChecked(pfToEdit);\n\n pfToEdit.CreatedDate = profileModule.CreatedDate;\n pfToEdit.UpdatedRegister = profileModule.UpdatedRegister;\n pfToEdit.Id = profileModule.Id;\n\n pfToEdit.Profile = vm.profile;\n\n }\n });\n });\n }\n }\n\n\n function isSelectAllChecked(item) {\n var isChecked = false;\n if (item.CanAdd === true && item.CanEdit === true && item.CanView === true &&\n item.CanDelete === true && item.CanExport === true && item.CanApprove === true) {\n\n isChecked = true;\n\n if (item.Module.Name == $scope.moduleProductionPlan) {\n if (item.CanConsult === false) {\n isChecked = false;\n }\n }\n }\n\n return isChecked;\n }\n\n function loadModules() {\n return ProfileService.listAllModules().then(function (response) {\n vm.moduleList = angular.copy(response);\n handleModuleList();\n }).catch(function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"permission.profile.load.module.error.msg\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function isAllOptionsChecked(item) {\n var isAllChecked = false;\n\n if (item.Module.Name == $scope.moduleProductionPlan) {\n if (item.CanAdd === true && item.CanEdit === true && item.CanView === true && item.CanDelete === true && item.CanExport === true && item.CanApprove === true && item.CanConsult === true) {\n isAllChecked = true;\n }\n } else {\n if (item.CanAdd === true && item.CanEdit === true && item.CanView === true && item.CanDelete === true && item.CanExport === true && item.CanApprove === true) {\n isAllChecked = true;\n }\n }\n\n return isAllChecked;\n }\n\n /**\n * Handle module List to add check options.\n */\n vm.profileModuleListToEdit = [];\n\n function handleModuleList() {\n if (angular.isDefined(vm.moduleList) && vm.moduleList.length > 0) {\n angular.forEach(vm.moduleList, function (module) {\n\n var item = {};\n\n item.Module = angular.copy(module);\n item.Profile = vm.profile;\n setCheckStatus(item, false);\n item.Sequence = module.Sequence;\n vm.profileModuleListToEdit.push(item);\n\n });\n }\n }\n\n function setCheckStatus(item, status) {\n item.CanAdd = status;\n item.CanEdit = status;\n item.CanView = status;\n item.CanDelete = status;\n item.CanExport = status;\n item.CanApprove = status;\n item.CanConsult = status;\n item.SelectAll = status;\n }\n\n function setStatusToEdit(status) {\n if (status === true) {\n vm.statusModel = vm.statusList[0];\n } else {\n vm.statusModel = vm.statusList[1];\n }\n }\n\n init();\n }\n})();\n\n/**\n * Created by anderson.lins on 23/02/2017.\n */\n(function(){\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(GroupTranslate);\n\n function GroupTranslate($translateProvider){\n $translateProvider.translations('en', {\n 'group.validation.business.required': 'It is necessary to select a business.',\n 'group.placeholder.business': 'Select a business',\n 'dri.title' : 'User',\n 'group.same.name.error' : 'A group with this name already exists',\n 'dri.title.dris' : 'Users',\n 'dri.group.title' : 'User Group',\n 'dri.label' : 'User',\n 'dri.label.new.user' : 'New User',\n 'dri.label.edit.user' : 'Edit User',\n 'error.user.action.denied' : 'This action needs to be performed by another user.',\n 'label.user.name' : 'Full Name',\n 'label.group.new' : 'New Group',\n 'label.user.email' : 'Email',\n 'label.user.isTeamLeader' : 'Team Leader',\n 'label.user.userName' : 'Login',\n 'label.user.password' : 'Password',\n 'label.user.confirm.password' : 'Confirm Password',\n 'label.user.role' : 'Role',\n 'label.dri.login' : 'Login',\n 'label.user.group.name' : 'Name',\n 'label.identification.user' : 'User Identification',\n 'label.identification.user.system' : 'System User Identification',\n 'label.identification.group' : 'Group Identification',\n 'label.identification.users.group' : 'Users Association',\n 'dri.label.group' : 'Users Group',\n 'dri.label.dri.name' : 'Name',\n 'dri.label.group.name' : 'Name',\n 'dri.label.dri.leader' : 'Team Leader',\n 'dri.label.dri.role' : 'Role',\n 'dri.label.dri.email' : 'Email',\n 'dri.label.dri.active' : 'Active',\n 'dri.btn.new' : 'New User',\n 'dri.btn.new.group' : 'New Group',\n 'dri.btn.edit.group' : 'Edit Group',\n 'dri.placeholder.search' : 'Search User by name',\n 'dri.group.placeholder.search' : 'Search Group by name',\n 'dri.placeholder.search.bygroup' : 'Search User by group',\n 'dri.placeholder.search.byrole' : 'Search User by role',\n 'placeholder.group.name' : 'Write the name of group...',\n 'placeholder.user.name' : 'Write the name of user...',\n 'placeholder.user.email' : 'Write the email of user...',\n 'placeholder.user.isTeamLeader' : 'User is team leader?',\n 'placeholder.user.isTeamLeaderNo' : 'Yes',\n 'placeholder.user.isTeamLeaderYes' : 'No',\n 'placeholder.user.userName' : 'Write the login of user. Ex: peter10, john.10, john.ryan',\n 'placeholder.user.password' : 'Write the password of user...',\n 'placeholder.user.confirm.password' : 'Confirm the password...',\n 'placeholder.user.role' : 'Enter the role of user...',\n 'dri.load.all.notFound' : 'No User found.',\n 'dri.group.load.all.notFound' : 'User Group not found.',\n 'dri.error.load.dris' : 'Error while trying to load User.',\n 'dri.label.yes.teamLeader' : 'Yes',\n 'dri.label.no.teamLeader' : 'No',\n 'dri.label.yes.active' : 'Yes',\n 'dri.label.no.active' : 'No',\n 'msg.group.save.success' : 'Group saved with success.',\n 'msg.user.save.success' : 'User saved with success.',\n 'msg.group.save.fail' : 'An error occurred when trying to save a new group, please contact your administrator.',\n 'msg.user.save.fail' : 'An error occurred when trying to save a new user, please contact your administrator.',\n 'hint.user.group.association' : 'Add members to group',\n 'error.user.duplicate': 'User ($name) already added to the list.',\n 'error.user.leader.duplicate' : 'Already exist a leader in the list.',\n 'validation.group.user.required' : 'You need to insert at least 01 user.',\n 'validation.email.required' : 'Email is required.',\n 'validation.email.pattern.required' : 'Email format is not valid.',\n 'validation.isTeamLeader.required' : 'Team Leader is required.',\n 'validation.userName.required' : 'Login is required.',\n 'validation.name.required' : 'Full Name is required.',\n 'validation.fullname.required' : 'Full Name is required, does not accept numbers and special characters.',\n 'validation.password.required' : 'Password is required.',\n 'validation.password.notequal.required' : 'Passwords must be the same.',\n 'validation.role.required' : 'Role is required.',\n 'validation.password.length.required' : 'The Password must have between 6 and 10 characters.',\n 'msg.group.search.fail' : 'No groups were found.',\n 'msg.user.search.fail' : 'No users were found.',\n 'group.deleted.success' : 'Group deleted with success.',\n 'group.deleted.fail' : 'An error occurred when trying to delete a group, please contact your administrator.',\n 'user.deleted.success' : 'User deleted with success.',\n 'user.deleted.fail' : 'An error occurred when trying to delete a user, please contact your administrator.',\n 'user.active.success' : 'The user has successfully activated.',\n 'user.active.fail' : 'An error occurred when trying to active the user, please contact your administrator.',\n 'user.disable.success' : 'The user has successfully disabled.',\n 'user.disable.fail' : 'An error occurred when trying to disable the user, please contact your administrator.',\n 'user.delete.task.association.error' : 'User can not be deleted, There are associations in the system.',\n 'group.delete.task.association.error' : 'Group can not be deleted, There are associations in the system.',\n 'msg.role' : 'Choose permissions to user.',\n 'label.quantity.user' : 'Number of users',\n 'validation.team.leader.required' : 'To save the group you need a team leader.',\n 'msg.user.duplicate.save.fail' : 'An error occurred when trying to save the user. Name, email or login already used.',\n 'msg.business.select': 'Select a business',\n 'msg.profile.select': 'Select a profile',\n 'validation.business.required': 'Business is required.',\n 'validation.profile.required': 'Profile is required.',\n 'label.user.business' : 'Business',\n 'label.user.profile' : 'Profile',\n 'identification.not.found': 'No ID found.',\n 'msg.user.add.erro.profile': 'A profile associated with the business already exists.',\n 'label.user.sysAdmin': 'System Administrator',\n 'msg.error.unique.sysadmin' : 'At least one system administrator is required.'\n });\n\n $translateProvider.translations('pt', {\n 'group.validation.business.required': 'É necessário selecionar um negócio.',\n 'group.placeholder.business': 'Selecione um negócio',\n 'dri.title' : 'Usuário',\n 'group.same.name.error' : 'Já existe um grupo com esse nome.',\n 'dri.title.dris' : 'Usuários',\n 'dri.group.title' : 'Grupo de Usuário',\n 'dri.label' : 'Usuário',\n 'dri.label.new.user' : 'Novo Usuário',\n 'dri.label.edit.user' : 'Editar Usuário',\n 'error.user.action.denied' : 'Essa ação precisa realizada por outro usuário.',\n 'label.user.name' : 'Nome Completo',\n 'label.user.email' : 'Email',\n 'label.user.isTeamLeader' : 'Líder de Time',\n 'label.user.userName' : 'Login',\n 'label.user.password' : 'Senha',\n 'label.user.confirm.password' : 'Confirmação de Senha',\n 'label.user.role' : 'Função',\n 'label.group.new' : 'Novo Grupo',\n 'label.dri.login' : 'Login',\n 'dri.label.group' : 'Grupo de Usuários',\n 'label.identification.user' : 'Identificação do Usuário',\n 'label.identification.user.system' : 'Identificação do Usuário no Sistema',\n 'label.identification.group' : 'Identificação do Grupo',\n 'label.identification.users.group' : 'Associação de Usuários',\n 'label.user.group.name' : 'Nome',\n 'dri.label.dri.name' : 'Nome',\n 'dri.label.group.name' : 'Nome',\n 'dri.label.dri.leader' : 'Líder',\n 'dri.label.dri.role' : 'Role',\n 'dri.label.dri.email' : 'Email',\n 'dri.label.dri.active' : 'Ativo',\n 'dri.btn.new' : 'Novo Usuário',\n 'dri.btn.new.group' : 'Novo Grupo',\n 'dri.btn.edit.group' : 'Editar Grupo',\n 'dri.placeholder.search' : 'Buscar Usuário por nome',\n 'dri.group.placeholder.search' : 'Buscar Grupo de Usuários por nome',\n 'dri.placeholder.search.bygroup' : 'Buscar Usuário por grupo',\n 'dri.placeholder.search.byrole' : 'Buscar Usuário por role',\n 'placeholder.group.name' : 'Escreva o nome do grupo...',\n 'placeholder.user.name' : 'Escreva o nome do usuário...',\n 'placeholder.user.email' : 'Escreva o email do usuário...',\n 'placeholder.user.isTeamLeader' : 'Usuário é líder de time?',\n 'placeholder.user.isTeamLeaderNo' : 'Sim',\n 'placeholder.user.isTeamLeaderYes' : 'Não',\n 'placeholder.user.userName' : 'Escreva o login do usuário. Ex: peter10, john.10, john.ryan',\n 'placeholder.user.password' : 'Escreva a senha do usuário...',\n 'placeholder.user.confirm.password' : 'Confirme a senha...',\n 'placeholder.user.role' : 'Informe a função do usuário no sistema...',\n 'dri.load.all.notFound' : 'Nenhum Usuário encontrado.',\n 'dri.group.load.all.notFound' : 'Nenhum Grupo de usuário encontrado.',\n 'dri.error.load.dris' : 'Ocorreu um erro ao carregar os Usuários.',\n 'dri.label.yes.teamLeader' : 'Sim',\n 'dri.label.no.teamLeader' : 'Não',\n 'dri.label.yes.active' : 'Sim',\n 'dri.label.no.active' : 'Não',\n 'msg.group.save.success' : 'Grupo salvo com successo.',\n 'msg.user.save.success' : 'Usuário salvo com successo.',\n 'msg.group.save.fail' : 'Ocorreu um erro ao cadastrar novo grupo, entre em contato com o administrador.',\n 'msg.user.save.fail' : 'Ocorreu um erro ao cadastrar novo usuário, entre em contato com o administrador.',\n 'hint.user.group.association' : 'Adicione membros ao grupo',\n 'error.user.duplicate' : 'Usuário ($name) já adicionado na lista.',\n 'error.user.leader.duplicate' : 'Já existe um líder no grupo.',\n 'warn.user.password.length' : 'A senha deve ser entre 6 e 10 caracteres.',\n 'validation.group.user.required' : 'Você precisa inserir pelo menos 01 usuário ao grupo.',\n 'validation.email.required' : 'Email é obrigatório.',\n 'validation.email.pattern.required' : 'O formato de e-mail não é válido.',\n 'validation.isTeamLeader.required' : 'É obrigatório informar se o usuário é um líder de time.',\n 'validation.userName.required' : 'Login é obrigatório.',\n 'validation.name.required' : 'Nome Completo obrigatório.',\n 'validation.fullname.required' : 'Nome Completo obrigatório, não aceita números e/ou caracteres especiais.',\n 'validation.password.required' : 'Senha é obrigatória.',\n 'validation.password.notequal.required' : 'As senhas devem que ser iguais.',\n 'validation.role.required' : 'Função é obrigatória.',\n 'validation.password.length.required' : 'A senha deve ter entre 6 e 10 caracteres.',\n 'msg.group.search.fail' : 'Nenhum grupo foi encontrado.',\n 'msg.user.search.fail' : 'Nenhum usuário foi encontrado.',\n 'group.deleted.success' : 'O grupo foi excluído com sucesso.',\n 'group.deleted.fail' : 'Ocorreu um erro ao excluir o grupo, entre em contato com o administrador.',\n 'user.deleted.success' : 'O usuário foi excluído com sucesso.',\n 'user.deleted.fail' : 'Ocorreu um erro ao excluir o usuário, entre em contato com o administrador.',\n 'user.active.success' : 'O usuário foi ativado com sucesso.',\n 'user.active.fail' : 'Ocorreu um erro ao ativar o usuário, entre em contato com o administrador.',\n 'user.desactive.success' : 'O usuário foi desativado com sucesso.',\n 'user.desactive.fail' : 'Ocorreu um erro ao desativar o usuário, entre em contato com o administrador.',\n 'user.delete.task.association.error' : 'O usuário não pode ser excluído, existem associações no sistema.',\n 'user.disable.success' : 'O usuário foi desabilitado com sucesso.',\n 'group.delete.task.association.error' : 'O grupo não pode ser excluído, existem associações no sistema.',\n 'msg.role' : 'Escolha as permissões do usuário.',\n 'label.quantity.user' : 'Quantidade de usuários',\n 'validation.team.leader.required' : 'Para salvar o grupo é necessário um líder de time.',\n 'msg.user.duplicate.save.fail' : 'Ocorreu um erro ao tentar salvar o usuário. Nome, email ou login já utilizado no sistema.',\n 'msg.business.select': 'Selecione um negócio',\n 'msg.profile.select': 'Selecione um perfil',\n 'validation.business.required': 'Negócio é obrigatório',\n 'validation.profile.required': 'Perfil é obrigatório.',\n 'label.user.business' : 'Negócio',\n 'label.user.profile' : 'Perfil',\n 'identification.not.found': 'Nenhuma identificação encontrada.',\n 'msg.user.add.erro.profile': 'Já existe um perfil associado ao negócio.',\n 'label.user.sysAdmin': 'Administrador do Sistema',\n 'msg.error.unique.sysadmin' : 'É necessário pelo menos um administrador de sistema.'\n });\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('GroupService', GroupService);\n\n /** @ngInject */\n function GroupService($window, $injector, $q, ConfigurationService) {\n return {\n loadGroup: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/group/' + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n loadUsersGroup: function (filtro) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/group/', {\n params: filtro\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n saveGroup: function (group) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + '/group/', group, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n deleteGroup: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + '/group/' + id, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n };\n }\n})();\n\n/**\n * Created by anderson.lins on 23/02/2017.\n */\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(GroupRouter);\n\n function GroupRouter($stateProvider) {\n\n $stateProvider.state('permission-group-list', {\n url: '/permissions/group/',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/permissions/group/group-list.html',\n controller: 'GroupListController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'label.permission'\n },\n authorize: true\n });\n\n $stateProvider.state('permission-group-create', {\n url: '/permissions/group/create',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/permissions/group/group-edit.html',\n controller: 'GroupEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'label.permission'\n },\n authorize: true\n });\n\n $stateProvider.state('permission-group-edit', {\n url: '/permissions/group/edit/:id',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/permissions/group/group-edit.html',\n controller: 'GroupEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'label.permission'\n },\n authorize: true\n });\n }\n})();\n\n/**\n * Created by anderson.lins on 24/02/2017.\n */\n(function () {\n 'use strict'\n\n angular.module('aqmsFrontend')\n .controller('GroupListController', GroupListController);\n\n function GroupListController(GroupService, AuthService, ToastUtil, $translate, $state, $log, $scope) {\n\n var vm = this;\n\n vm.itensPerPageList = [\n {name: '5', value: 5, before: 0, after: 6}, \n {name: '10', value: 10, before: 5, after: 11}, \n {name: '20', value: 20, before: 10, after: 21}, \n {name: '30', value: 30, before: 20, after: 31}, \n {name: '40', value: 40, before: 30, after: 41}, \n {name: '50', value: 50, before: 40, after: 51}]\n\n vm.itemPerPage = vm.itensPerPageList[0];\n\n vm.DRIsGroup = [];\n\n vm.totalDRIGroupList = 0;\n \n vm.searchParams = {\n CompanyId: null,\n BusinessId: null,\n Name: '',\n Page: 1,\n MaxPerPage: vm.itemPerPage.value\n };\n\n vm.init = _init;\n\n vm.edit = _edit;\n\n vm.delete = _delete;\n\n vm.loadUsersGroup = _loadUsersGroup;\n\n vm.clearSearchParams = _clearSearchParameters;\n\n vm.shouldShow = function (item) {\n if(vm.totalDRIGroupList > 0 && item != undefined) {\n return vm.totalDRIGroupList >= item.value || (vm.totalDRIGroupList < item.after && vm.totalDRIGroupList > item.before);\n }\n return false;\n }\n \n vm.changeItemsPerPage = function() {\n if ( vm.itemPerPage == null ) {\n vm.itemPerPage = vm.itensPerPageList[0];\n }\n vm.searchParams.Page = 1;\n vm.searchParams.MaxPerPage = vm.itemPerPage.value;\n vm.loadUsersGroup()\n }\n\n vm.search = function() {\n vm.itemPerPage = vm.itensPerPageList[0];\n vm.searchParams.Page = 1;\n vm.searchParams.MaxPerPage = vm.itemPerPage.value;\n vm.loadUsersGroup()\n }\n //code run\n vm.init();\n\n vm.create = function () {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('permission-group-create', {});\n }\n\n //private functions\n\n function _edit(group) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('permission-group-edit', {\n id: group.Id\n });\n }\n\n function _delete(id) {\n GroupService.deleteGroup(id)\n .then(function () {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go($state.current, {}, {\n reload: true\n });\n ToastUtil.showToastMessage($translate.instant(\"group.deleted.success\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(function (error) {\n $log.log(error);\n if(error.data)\n {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n }\n else\n {\n ToastUtil.showToastMessage($translate.instant('msg.error.delete.register'), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function _loadUsersGroup() {\n if (sessionStorage.getItem(\"searchParams\")) {\n vm.searchParams = JSON.parse(sessionStorage.getItem(\"searchParams\"));\n sessionStorage.removeItem(\"searchParams\");\n vm.itensPerPageList.forEach(function(element) {\n if (element.value == vm.searchParams.MaxPerPage) {\n vm.itemPerPage = element;\n return;\n }\n })\n }\n \n GroupService.loadUsersGroup(vm.searchParams)\n .then(function (response) {\n vm.DRIsGroup = response.resultList;\n vm.totalDRIGroupList = response.total;\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status !== $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant('dri.error.load.dris'), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function _clearSearchParameters() {\n vm.searchParams.Name = '';\n }\n\n function _init() {\n vm.loadUsersGroup();\n }\n }\n\n})();\n\n/**\n * Created by anderson.lins on 24/02/2017.\n */\n(function () {\n 'use strict'\n\n angular\n .module('aqmsFrontend')\n .controller('GroupEditController', GroupEditController);\n\n function GroupEditController(GroupService, AuthService, BusinessService, ToastUtil, $translate, $log, $state) {\n\n var vm = this;\n vm.editBusiness = null;\n vm.listBusiness = [];\n\n //public fields\n vm.Group = {\n Name: '',\n Users: []\n };\n\n vm.TempDRI = {};\n\n //public functions\n vm.init = _init;\n\n vm.canSave = _canSave;\n\n vm.save = _save;\n\n //code run\n vm.init();\n\n // private functions\n function _canSave() {\n if (vm.Group != undefined && vm.Group != '' &&\n vm.Group.Name != undefined && vm.Group.Name != '' &&\n angular.isDefined(vm.editBusiness) &&\n vm.Group.Users != undefined && vm.Group.Users.length > 0) {\n return true;\n }\n\n return false;\n }\n\n vm.showRequiredMenssageOnAssociations = function(){\n return vm.Group.Users.length == 0;\n }\n\n function _save() {\n if (!vm.canSave()) return;\n\n if (vm.Group.Users && vm.Group.Users.length > 0) {\n var isTeamLeader = false;\n var index;\n for (index = 0; index < vm.Group.Users.length; index++) {\n if (vm.Group.Users[index].TeamLeader) {\n isTeamLeader = true;\n }\n }\n\n if (!isTeamLeader) {\n ToastUtil.showToastMessage($translate.instant(\"validation.team.leader.required\"), ToastUtil.ToastType.WARN);\n return;\n }\n }\n\n vm.Group.CsActive = true;\n vm.Group.BusinessId = vm.editBusiness.Id;\n GroupService.saveGroup(angular.copy(vm.Group))\n .then(function () {\n $state.go('permission-group-list', {});\n ToastUtil.showToastMessage($translate.instant(\"msg.group.save.success\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(\"msg.group.save.fail\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function _loadGroup(id) {\n GroupService.loadGroup(id)\n .then(function (response) {\n vm.Group = response;\n angular.forEach(vm.listBusiness, function (value) {\n if (value.Id == vm.Group.BusinessId) {\n vm.editBusiness = value;\n }\n });\n })\n .catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"msg.group.search.fail\"), ToastUtil.ToastType.ERROR);\n });\n }\n\n function loadBusiness() {\n BusinessService.listByCompany().then(function (response) {\n vm.listBusiness = angular.copy(response);\n }).catch(function (error) {\n $log.log(error);\n if (error.data) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function _init() {\n vm.idToEdit = $state.params.id;\n loadBusiness();\n\n if (vm.idToEdit) {\n _loadGroup(vm.idToEdit);\n }\n }\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('PDCAEditPlanController', PDCAEditPlanController);\n\n function PDCAEditPlanController($log, $translate, $scope, $state, $stateParams, DefaultService, PDCAService,\n ToastUtil, AuthService, $sce, $document, moment) {\n\n var vm = this;\n\n var profilePermission = {\n CanAdd: false,\n CanEdit: false,\n CanDelete: false,\n CanView: false,\n CanExport: false\n };\n\n vm.pdcaType = {\n HowHappened: 0,\n WhyNotWasDetected: 1\n };\n\n vm.pdca = {\n Id: 0,\n Problem: '',\n GoalTarget: '',\n HowWhy1: '',\n WhyNot1: '',\n HowCause: '',\n WhyNotCause: '',\n Ishikawas: []\n };\n\n vm.StatusId = {\n ONGOING: 1,\n CLOSED: 2,\n EvaluationCycle: 3\n };\n\n\n\n vm.isIshikawaCauseRequired = function () {\n var isRequired = true;\n for (var i = 0; i < vm.ishikawaTypes.length; i++) {\n var item = vm.ishikawaTypes[i];\n if (item.listHowHappened.length > 0) {\n isRequired = false;\n break;\n }\n }\n return isRequired;\n };\n\n\n vm.isIshikawaWhyRequired = function () {\n var isRequired = true;\n for (var i = 0; i < vm.ishikawaTypes.length; i++) {\n var item = vm.ishikawaTypes[i];\n if (item.listWhyNot.length > 0) {\n isRequired = false;\n break;\n }\n }\n return isRequired;\n\n };\n\n\n /**\n * Configuration to Rich text editor toolbar.\n * @type {{sanitize: boolean, toolbar: [*]}}\n */\n vm.editorConfig = {\n sanitize: false,\n toolbar: [{\n name: 'basicStyling',\n items: ['bold', 'italic', 'underline', 'strikethrough', 'subscript', 'superscript', '-', 'leftAlign', 'centerAlign', 'rightAlign', 'blockJustify', '-']\n },\n {\n name: 'paragraph',\n items: ['orderedList', 'unorderedList', 'outdent', 'indent', '-']\n },\n {\n name: 'doers',\n items: ['removeFormatting', 'undo', 'redo', '-']\n },\n {\n name: 'colors',\n items: ['fontColor', 'backgroundColor', '-']\n },\n {\n name: 'styling',\n items: ['font', 'size']\n }\n ]\n\n };\n\n vm.ishikawaTypes = [];\n vm.list = [];\n\n function init() {\n vm.pdca.Id = $stateParams.Id;\n loadProfileModules();\n }\n\n function loadProfileModules() {\n var profileModule = {};\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.modulePdca;\n\n DefaultService.loadModules(profileModule).then(function (response) {\n profilePermission = angular.copy(response);\n\n if (!profilePermission.CanEdit) {\n $state.go('not-authorized', {});\n }\n\n loadIshikawaTypes();\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n });\n }\n\n vm.save = function () {\n\n if (vm.isSaving) {\n return;\n } else {\n vm.isSaving = true;\n }\n\n PDCAService.save(vm.pdca).then(function (response) {\n vm.isSaving = false;\n vm.pdca = response;\n ToastUtil.showToastMessage($translate.instant(\"msg.pdca.save.success\"), ToastUtil.ToastType.SUCCESS);\n\n }).catch(function (error) {\n $log.log(error);\n\n vm.isSaving = false;\n\n if (error.status === $scope.HttpStatusCodeConflict) {\n $state.go('pdca-list');\n ToastUtil.showToastMessage($translate.instant(\"msg.error.pdca.already.updated\"), ToastUtil.ToastType.WARN);\n } else if (error.data && error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n } else if (error.status != $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.pdca.save.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n };\n\n\n vm.canShowCauseAnalysis = function () {\n var canShow = true;\n if (vm.isIshikawaCauseRequired() || vm.isIshikawaWhyRequired()) {\n canShow = false;\n }\n\n return canShow;\n };\n\n function loadIshikawaTypes() {\n\n PDCAService.listAllIshikawaType().then(function (response) {\n vm.ishikawaTypes = angular.copy(response);\n\n angular.forEach(vm.ishikawaTypes, function (item) {\n item.listHowHappened = [];\n item.listWhyNot = [];\n });\n\n loadPDCA();\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.Message), ToastUtil.ToastType.ERROR);\n });\n }\n\n function fillIshikawas() {\n angular.forEach(vm.ishikawaTypes, function (type) {\n\n angular.forEach(vm.pdca.Ishikawas, function (ishikawa) {\n if (ishikawa.PDCAType == vm.pdcaType.HowHappened && ishikawa.IshikawaType.Id == type.Id) {\n type.listHowHappened.push(ishikawa);\n } else if (ishikawa.PDCAType == vm.pdcaType.WhyNotWasDetected && ishikawa.IshikawaType.Id == type.Id) {\n type.listWhyNot.push(ishikawa);\n }\n });\n\n });\n }\n\n function loadPDCA() {\n\n PDCAService.loadById(vm.pdca.Id).then(function (response) {\n vm.pdca = angular.copy(response);\n\n fillIshikawas();\n\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.Message), ToastUtil.ToastType.ERROR);\n });\n }\n\n vm.disableDoTab = function () {\n var disable = false;\n\n if (angular.isUndefined(vm.pdca.Problem) || vm.pdca.Problem == null || vm.pdca.Problem.length <= 0) {\n return true;\n }\n\n if (angular.isUndefined(vm.pdca.GoalTarget) || vm.pdca.GoalTarget == null || vm.pdca.GoalTarget.length <= 0) {\n return true;\n }\n\n if (angular.isUndefined(vm.pdca.HowWhy1) || vm.pdca.HowWhy1 == null || vm.pdca.HowWhy1.length <= 0) {\n return true;\n }\n\n if (angular.isUndefined(vm.pdca.WhyNot1) || vm.pdca.WhyNot1 == null || vm.pdca.WhyNot1.length <= 0) {\n return true;\n }\n\n if (angular.isUndefined(vm.pdca.HowCause) || vm.pdca.HowCause == null || vm.pdca.HowCause.length <= 0) {\n return true;\n }\n\n if (angular.isUndefined(vm.pdca.WhyNotCause) || vm.pdca.WhyNotCause == null || vm.pdca.WhyNotCause.length <= 0) {\n return true;\n }\n\n\n if (vm.isIshikawaWhyRequired() || vm.isIshikawaCauseRequired()) {\n disable = true;\n }\n\n\n return disable;\n };\n\n vm.disableCheckActTab = function () {\n var disable = false;\n var existTaskForCurrentCycle = false;\n\n if (angular.isUndefined(vm.pdca.ContainmentPlan) || vm.pdca.ContainmentPlan == null || vm.pdca.ContainmentPlan.length <= 0) {\n return true;\n }\n\n if (angular.isUndefined(vm.pdca.Tasks) || vm.pdca.Tasks.length <= 0) {\n return true;\n }\n\n angular.forEach(vm.pdca.Tasks, function (task) {\n if (angular.isUndefined(task.Id) || task.Id <= 0) {\n disable = true;\n }\n if (task.Status != 2 && task.Type == vm.taskTypes.CounterMeasure) {\n disable = true;\n }\n if (task.Cycle == vm.pdca.Cycle) {\n existTaskForCurrentCycle = true;\n }\n });\n\n if (!existTaskForCurrentCycle) {\n disable = true;\n }\n\n return disable;\n };\n\n vm.disableProblemField = function () {\n if (vm.pdca.Cycle > 1) {\n return true;\n }\n };\n\n vm.getHTML = function (text) {\n return $sce.trustAsHtml(text);\n };\n\n vm.disablePDCAEditing = function () {\n if (vm.pdca.Status == vm.StatusId.CLOSED || vm.pdca.Status == vm.StatusId.EvaluationCycle) {\n return true;\n } else {\n return false;\n }\n };\n\n vm.export = function (id) {\n if (profilePermission.CanExport) {\n if (!vm.exporting) {\n vm.exporting = true;\n\n PDCAService.export(id).then(function (response) {\n var newFile = new Blob([response], {\n type: 'application/application/vnd.openxmlformats-officedocument.wordprocessingml.document'\n });\n var fileURL = URL.createObjectURL(newFile);\n var date = moment().format(\"DD_MM_YYYY_HH_mm_ss\");\n var a = $document[0].createElement(\"a\");\n $document[0].body.appendChild(a);\n a.style = \"display: none\";\n a.href = fileURL;\n a.download = \"PDCA_\" + AuthService.getBusinessName() + \"_\" + date + \".docx\";\n\n a.click();\n vm.exporting = false;\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"service.load.error\"), ToastUtil.ToastType.ERROR);\n vm.exporting = false;\n });\n }\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n };\n\n vm.backToPdcaList = function () {\n $state.go('pdca-list', {});\n };\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(PdcaTaskTranslate);\n\n /** @ngInject */\n function PdcaTaskTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'pdca.task.directive.task.label': 'Task',\n 'pdca.task.directive.deadline.label': 'Deadline',\n 'pdca.task.directive.status.label': 'Status',\n 'pdca.task.directive.cycle.label': 'Cycle',\n 'pdca.task.directive.attachment.label': 'Attachment',\n 'pdca.task.directive.open.label': 'Open'\n\n\n });\n\n $translateProvider.translations('pt', {\n 'pdca.task.directive.task.label': 'Tarefa',\n 'pdca.task.directive.deadline.label': 'Data limite',\n 'pdca.task.directive.status.label': 'Situação',\n 'pdca.task.directive.cycle.label': 'Ciclo',\n 'pdca.task.directive.attachment.label': 'Anexo',\n 'pdca.task.directive.open.label': 'Aberto'\n\n\n });\n }\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *\n */\n function PdcaTaskController($scope, $document, moment, ToastUtil, $translate) {\n\n\n var vm = this;\n\n vm.StatusId = {\n OPEN: 0,\n ONGOING: 1,\n CLOSED: 2\n };\n\n\n\n vm.statusList = [\n {Id: vm.StatusId.OPEN, Name: 'pdca.task.directive.open.label'},\n {Id: vm.StatusId.ONGOING, Name: 'label.pdca.status.ongoing'},\n {Id: vm.StatusId.CLOSED, Name: 'label.pdca.status.closed'}\n ];\n\n var isEditingTask = false;\n\n\n vm.getStatusDescription = function (statusId) {\n var str = \"\";\n switch (statusId) {\n case vm.StatusId.OPEN:\n str = \"pdca.task.directive.open.label\";\n break;\n case vm.StatusId.ONGOING:\n str = \"label.pdca.status.ongoing\";\n break;\n case vm.StatusId.CLOSED:\n str = \"label.pdca.status.closed\";\n break;\n\n\n }\n\n return str;\n };\n\n vm.resolveStatusCss = function (status) {\n var result = \"\";\n\n switch (status) {\n case vm.StatusId.OPEN:\n result = 'ng-binding label label-info';\n break;\n case vm.StatusId.ONGOING:\n result = 'ng-binding label label-ongoing';\n break;\n case vm.StatusId.CLOSED:\n result = 'ng-binding label label-approved';\n break;\n }\n\n return result;\n };\n\n\n vm.taskObj = {\n TaskAttachments: [],\n Status: vm.StatusId.OPEN\n };\n\n vm.changeDRI = function () {\n if (vm.taskObj.DRI.IsGroup) {\n vm.taskObj.Group = vm.taskObj.DRI;\n vm.taskObj.User = null;\n } else {\n vm.taskObj.User = vm.taskObj.DRI;\n vm.taskObj.Group = null;\n }\n };\n\n vm.addTask = function () {\n if (vm.taskList != null && vm.taskList != undefined && validateFields()) {\n vm.taskObj.Deadline = moment(angular.copy(vm.taskObj.DeadlineTemp)).format('DD/MM/YYYY');\n vm.taskObj.Cycle = vm.pdcaCycle;\n vm.taskObj.Type = angular.copy(vm.taskType);\n\n vm.changeDRI();\n\n\n if (isEditingTask) {\n var oldTaskDeleted = false;\n\n angular.forEach(vm.taskList, function (task, key) {\n if ((task.Id != undefined && task.Id == vm.taskObj.Id) || (task.IdTemp != undefined && task.IdTemp == vm.taskObj.IdTemp)) {\n vm.taskList.splice(key, 1);\n oldTaskDeleted = true;\n }\n });\n\n if(!oldTaskDeleted){\n vm.taskObj = {\n TaskAttachments: [],\n Status: vm.StatusId.OPEN\n };\n isEditingTask = false;\n ToastUtil.showToastMessage($translate.instant(\"msg.error.pdca.task.already.updated\"), ToastUtil.ToastType.WARN);\n\n return;\n }\n\n } else {\n if (angular.isUndefined(vm.taskObj.IdTemp) && angular.isUndefined(vm.taskObj.Id)) {\n vm.taskObj.IdTemp = new Date().getTime();\n }\n }\n\n\n vm.taskList.push(angular.copy(vm.taskObj));\n\n vm.taskObj = {\n TaskAttachments: [],\n Status: vm.StatusId.OPEN\n };\n isEditingTask = false;\n }\n };\n\n function validateFields(){\n if(angular.isDefined(vm.taskObj.Title) && vm.taskObj.Title.length > 0\n && angular.isDefined(vm.taskObj.DRI) && angular.isDefined(vm.taskObj.DeadlineTemp) && vm.taskObj.DeadlineTemp != null){\n return true;\n }\n\n return false;\n }\n\n vm.editTask = function (item) {\n isEditingTask = true;\n vm.taskObj = angular.copy(item);\n\n if (angular.isDefined(vm.taskObj.Group) && vm.taskObj.Group != null && vm.taskObj.Group != '') {\n vm.taskObj.DRI = vm.taskObj.Group;\n vm.taskObj.DRI.IsGroup = true;\n } else {\n vm.taskObj.DRI = vm.taskObj.User;\n }\n\n var date = moment(angular.copy(vm.taskObj.Deadline), 'DD/MM/YYYY');\n vm.taskObj.DeadlineTemp = new Date(date.year(), date.month(), date.date());\n };\n\n vm.removeTask = function (item) {\n angular.forEach(vm.taskList, function (task, key) {\n if ((task.Id != undefined && task.Id == item.Id) || (task.IdTemp != undefined && task.IdTemp == item.IdTemp)) {\n vm.taskList.splice(key, 1);\n }\n });\n };\n\n function init() {\n if (angular.isUndefined(vm.accordionTitle)) {\n vm.accordionTitle = \"Set your title here!\";\n }\n if (angular.isUndefined(vm.accordionIsOpen)) {\n vm.accordionIsOpen = true;\n }\n if( angular.isUndefined(vm.isRequired) ){\n vm.isRequired = false;\n }\n }\n\n vm.getFormatedDate = function (date) {\n var dateFormated = moment.utc(date).format('DD/MM/YYYY');\n return dateFormated;\n };\n\n vm.canEdit = function(task){\n if(task.Cycle != vm.pdcaCycle){\n return false;\n }\n else{\n return true;\n }\n };\n\n init();\n }\n\n function PdcaTaskDirective() {\n return {\n restrict: 'E',\n replace: true,\n templateUrl: \"app/pdca/task/pdca-task.html\",\n controllerAs: 'ctrl',\n controller: 'PdcaTaskController',\n bindToController: true,\n scope: {\n accordionTitle: '@',\n accordionIsOpen: '=?',\n taskType: '=',\n pdcaCycle: '=',\n taskList: '=',\n disable: '=',\n formObj: '=',\n itemRequired: '=?'\n\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('PdcaTaskController', PdcaTaskController)\n .directive('pdcaTask', PdcaTaskDirective);\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('PDCAEditIdentificationController', PDCAEditIdentificationController);\n\n function PDCAEditIdentificationController($log, $translate, $scope, $state, $stateParams, moment, DefaultService, PDCAService, ToastUtil, AuthService, $document) {\n\n var vm = this;\n\n vm.StatusId = {\n ONGOING : 1,\n CLOSED: 2,\n EvaluationCycle: 3\n };\n\n vm.taskTypes ={\n CounterMeasure: 0,\n Act: 1\n };\n\n vm.statusList = [\n { id : vm.StatusId.ONGOING, Name : 'label.pdca.status.ongoing'},\n { id : vm.StatusId.CLOSED, Name : 'label.pdca.status.closed'},\n { id : vm.StatusId.EvaluationCycle, Name : 'label.pdca.status.evaluationcycle'}\n ];\n\n vm.pdca = {\n Id: 0,\n Cycle: 1,\n Status: vm.statusList[0].id\n };\n\n vm.idToEdit = -1;\n\n var profilePermission = {\n CanAdd: false,\n CanEdit: false,\n CanDelete: false,\n CanView: false,\n CanExport: false\n };\n\n function init() {\n loadProfileModules();\n }\n\n function loadProfileModules() {\n var profileModule = {};\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.modulePdca;\n\n DefaultService.loadModules(profileModule).then(function (response) {\n profilePermission = angular.copy(response);\n\n vm.idToEdit = $stateParams[\"Id\"];\n vm.setWeek();\n\n if (vm.idToEdit != -1 && vm.idToEdit != undefined) {\n\n if (!profilePermission.CanEdit) {\n $state.go('not-authorized', {});\n }\n\n PDCAService.loadById(vm.idToEdit).then(function (response) {\n vm.pdca = angular.copy(response);\n\n var date = getDateFromString(vm.pdca.Date, 'DD/MM/YYYY');\n vm.pdca.DateTemp = new Date(date.year(), date.month(), date.date());\n\n if (angular.isDefined(vm.pdca.Group) && vm.pdca.Group != null && vm.pdca.Group != '') {\n vm.pdca.DRI = vm.pdca.Group;\n vm.pdca.DRI.IsGroup = true;\n } else {\n vm.pdca.DRI = vm.pdca.User;\n }\n\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n });\n } else {\n if (!profilePermission.CanAdd) {\n $state.go('not-authorized', {});\n }\n }\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n });\n }\n\n /**\n * Create a Date Object from String.\n * @param dtString\n * @param formatter\n * @returns {*}\n */\n function getDateFromString(dtString, formatter) {\n return moment(dtString, formatter);\n }\n\n vm.goBack = function () {\n $state.go('pdca-list');\n };\n\n vm.save = function () {\n\n if(vm.isSaving){\n return;\n }\n else{\n vm.isSaving = true;\n }\n\n changeDRI();\n vm.pdca.Date = moment(vm.pdca.DateTemp).format('DD/MM/YYYY');\n vm.pdca.Business = {};\n vm.pdca.Business.Id = AuthService.getBusinessId();\n\n PDCAService.save(vm.pdca).then(function (response) {\n vm.isSaving = false;\n vm.pdca = response;\n\n var date = moment(angular.copy(vm.pdca.Date), 'DD/MM/YYYY');\n vm.pdca.DateTemp = new Date(date.year(), date.month(), date.date());\n\n ToastUtil.showToastMessage($translate.instant(\"msg.pdca.save.success\"), ToastUtil.ToastType.SUCCESS);\n if(!($state.current.url.indexOf(\"edit\") > -1)){\n $state.go('pdca-plan', {\n Id: vm.pdca.Id\n });\n }\n\n if (angular.isDefined(vm.pdca.Group) && vm.pdca.Group != null && vm.pdca.Group != '') {\n vm.pdca.DRI = vm.pdca.Group;\n vm.pdca.DRI.IsGroup = true;\n } else {\n vm.pdca.DRI = vm.pdca.User;\n }\n\n }).catch(function (error) {\n $log.log(error);\n\n vm.isSaving = false;\n\n if (error.status === $scope.HttpStatusCodeConflict) {\n $state.go('pdca-list');\n ToastUtil.showToastMessage($translate.instant(\"msg.error.pdca.already.updated\"), ToastUtil.ToastType.WARN);\n }\n else if(error.data && error.data.ToastType == 1){\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n else if(error.status != $scope.HttpStatusUnauthorized){\n ToastUtil.showToastMessage($translate.instant(\"msg.pdca.save.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n };\n\n function changeDRI(){\n if (vm.pdca.DRI.IsGroup) {\n vm.pdca.Group = vm.pdca.DRI;\n vm.pdca.User = null;\n } else {\n vm.pdca.User = vm.pdca.DRI;\n vm.pdca.Group = null;\n }\n }\n\n vm.setWeek = function () {\n vm.pdca.Week = moment(vm.pdca.DateTemp).isoWeek();\n };\n\n vm.disablePlanTab = function() {\n return vm.pdca.Id <= 0;\n };\n\n vm.disableDoTab = function(){\n var disable = false;\n\n if(!(vm.pdca.Id > 0)){\n return true;\n }\n\n if(angular.isUndefined(vm.pdca.Problem) || vm.pdca.Problem == null || vm.pdca.Problem.length <= 0){\n return true;\n }\n\n if(angular.isUndefined(vm.pdca.GoalTarget) || vm.pdca.GoalTarget == null || vm.pdca.GoalTarget.length <= 0){\n return true;\n }\n\n if(angular.isUndefined(vm.pdca.HowWhy1) || vm.pdca.HowWhy1 == null || vm.pdca.HowWhy1.length <= 0){\n return true;\n }\n\n if(angular.isUndefined(vm.pdca.WhyNot1) || vm.pdca.WhyNot1 == null || vm.pdca.WhyNot1.length <= 0){\n return true;\n }\n\n if(angular.isUndefined(vm.pdca.HowCause) || vm.pdca.HowCause == null || vm.pdca.HowCause.length <= 0){\n return true;\n }\n\n if(angular.isUndefined(vm.pdca.WhyNotCause) || vm.pdca.WhyNotCause == null || vm.pdca.WhyNotCause.length <= 0){\n return true;\n }\n\n angular.forEach(vm.ishikawaTypes, function(type){\n if(angular.isUndefined(type.listHowHappened) || type.listHowHappened.length <= 0){\n disable = true;\n }\n\n if(angular.isUndefined(type.listWhyNot) || type.listWhyNot.length <= 0){\n disable = true;\n }\n });\n\n return disable;\n };\n\n vm.disableCheckTab = function(){\n var disable = false;\n var existTaskForCurrentCycle = false;\n\n if(!(vm.pdca.Id > 0)){\n return true;\n }\n\n if(angular.isUndefined(vm.pdca.ContainmentPlan) || vm.pdca.ContainmentPlan == null || vm.pdca.ContainmentPlan.length <= 0){\n return true;\n }\n\n if (angular.isUndefined(vm.pdca.Tasks) || vm.pdca.Tasks.length <= 0) {\n return true;\n }\n\n angular.forEach(vm.pdca.Tasks, function (task) {\n if (task.Status != 2 && task.Type == vm.taskTypes.CounterMeasure) {\n disable = true;\n }\n if(task.Cycle == vm.pdca.Cycle){\n existTaskForCurrentCycle = true;\n }\n });\n\n if(!existTaskForCurrentCycle)\n {\n disable = true;\n }\n\n return disable;\n };\n\n vm.disablePDCAEditing = function(){\n if(vm.pdca.Status == vm.StatusId.CLOSED || vm.pdca.Status == vm.StatusId.EvaluationCycle){\n return true;\n }else{\n return false;\n }\n };\n\n vm.export = function (id) {\n if (profilePermission.CanExport) {\n if (!vm.exporting) {\n vm.exporting = true;\n\n PDCAService.export(id).then(function (response) {\n var newFile = new Blob([response], {\n type: 'application/application/vnd.openxmlformats-officedocument.wordprocessingml.document'\n });\n var fileURL = URL.createObjectURL(newFile);\n var date = moment().format(\"DD_MM_YYYY_HH_mm_ss\");\n var a = $document[0].createElement(\"a\");\n $document[0].body.appendChild(a);\n a.style = \"display: none\";\n a.href = fileURL;\n a.download = \"PDCA_\" + AuthService.getBusinessName() + \"_\" + date + \".docx\";\n\n a.click();\n vm.exporting = false;\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"service.load.error\"), ToastUtil.ToastType.ERROR);\n vm.exporting = false;\n });\n }\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n };\n\n vm.backToPdcaList = function(){\n $state.go('pdca-list', {});\n };\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('PDCAEditDoController', PDCAEditDoController);\n\n function PDCAEditDoController($log, $translate, $scope, $state, $stateParams, moment, DefaultService, PDCAService, ToastUtil, AuthService, $sce, $document) {\n\n var vm = this;\n\n var profilePermission = {\n CanAdd: false,\n CanEdit: false,\n CanDelete: false,\n CanView: false,\n CanExport: false\n };\n\n vm.taskTypes = {\n CounterMeasure: 0,\n Act: 1\n };\n\n vm.StatusId = {\n ONGOING : 1,\n CLOSED: 2,\n EvaluationCycle: 3\n };\n\n vm.pdca = {\n Id: 0,\n Tasks: [],\n TasksTemp: [],\n ContainmentPlan: ''\n };\n\n /**\n * Configuration to Rich text editor toolbar.\n * @type {{sanitize: boolean, toolbar: [*]}}\n */\n\n vm.editorConfig = {\n sanitize: false,\n toolbar: [\n {name: 'basicStyling', items: ['bold', 'italic', 'underline', 'strikethrough', 'subscript', 'superscript', '-', 'leftAlign', 'centerAlign', 'rightAlign', 'blockJustify', '-']},\n {name: 'paragraph', items: ['orderedList', 'unorderedList', 'outdent', 'indent', '-']},\n {name: 'doers', items: ['removeFormatting', 'undo', 'redo', '-']},\n {name: 'colors', items: ['fontColor', 'backgroundColor', '-']},\n {name: 'styling', items: ['font', 'size']}\n ]};\n\n\n function init() {\n vm.pdca.Id = $stateParams.Id;\n loadProfileModules();\n }\n\n function loadProfileModules() {\n var profileModule = {};\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.modulePdca;\n\n DefaultService.loadModules(profileModule).then(function (response) {\n profilePermission = angular.copy(response);\n\n if (!profilePermission.CanEdit) {\n $state.go('not-authorized', {});\n }\n\n loadPDCA();\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n });\n }\n\n vm.save = function () {\n\n if (canSave()) {\n\n if(vm.isSaving){\n return;\n }\n else{\n vm.isSaving = true;\n }\n\n vm.pdca.Tasks = angular.copy(vm.pdca.TasksTemp);\n\n PDCAService.save(vm.pdca).then(function (response) {\n\n vm.isSaving = false;\n\n vm.pdca = response;\n vm.pdca.TasksTemp = angular.copy(vm.pdca.Tasks);\n ToastUtil.showToastMessage($translate.instant(\"msg.pdca.save.success\"), ToastUtil.ToastType.SUCCESS);\n\n }).catch(function (error) {\n $log.log(error);\n\n vm.isSaving = false;\n\n if (error.status === $scope.HttpStatusCodeConflict) {\n $state.go('pdca-list');\n ToastUtil.showToastMessage($translate.instant(\"msg.error.pdca.already.updated\"), ToastUtil.ToastType.WARN);\n }\n else if (error.data && error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n else if (error.status != $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.pdca.save.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n };\n\n\n function canSave() {\n var canSave = true;\n if (vm.pdca.TasksTemp.length == 0)\n canSave = false;\n return canSave;\n }\n\n function loadPDCA() {\n\n PDCAService.loadById(vm.pdca.Id).then(function (response) {\n vm.pdca = angular.copy(response);\n vm.pdca.TasksTemp = angular.copy(vm.pdca.Tasks);\n if(vm.validatePlanTab()){\n $state.go('pdca-plan',{Id: vm.pdca.Id});\n }\n\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.Message), ToastUtil.ToastType.ERROR);\n });\n }\n\n vm.disableCheckActTabs = function () {\n var disable = false;\n var existTaskForCurrentCycle = false;\n\n if (angular.isUndefined(vm.pdca.ContainmentPlan) || vm.pdca.ContainmentPlan == null || vm.pdca.ContainmentPlan.length <= 0) {\n return true;\n }\n\n if (vm.pdca.Tasks.length <= 0) {\n return true;\n }\n\n angular.forEach(vm.pdca.Tasks, function (task) {\n if(angular.isUndefined(task.Id) || task.Id <= 0){\n disable = true;\n }\n if (task.Status != 2 && task.Type == vm.taskTypes.CounterMeasure) {\n disable = true;\n }\n if(task.Cycle == vm.pdca.Cycle){\n existTaskForCurrentCycle = true;\n }\n });\n\n if(!existTaskForCurrentCycle)\n {\n disable = true;\n }\n\n return disable;\n };\n\n vm.validatePlanTab = function(){\n var disable = false;\n\n if (angular.isUndefined(vm.pdca.Problem) || vm.pdca.Problem == null || vm.pdca.Problem.length <= 0) {\n return true;\n }\n\n if (angular.isUndefined(vm.pdca.GoalTarget) || vm.pdca.GoalTarget == null || vm.pdca.GoalTarget.length <= 0) {\n return true;\n }\n\n if (angular.isUndefined(vm.pdca.HowWhy1) || vm.pdca.HowWhy1 == null || vm.pdca.HowWhy1.length <= 0) {\n return true;\n }\n\n if (angular.isUndefined(vm.pdca.WhyNot1) || vm.pdca.WhyNot1 == null || vm.pdca.WhyNot1.length <= 0) {\n return true;\n }\n\n if (angular.isUndefined(vm.pdca.HowCause) || vm.pdca.HowCause == null || vm.pdca.HowCause.length <= 0) {\n return true;\n }\n\n if (angular.isUndefined(vm.pdca.WhyNotCause) || vm.pdca.WhyNotCause == null || vm.pdca.WhyNotCause.length <= 0) {\n return true;\n }\n\n angular.forEach(vm.ishikawaTypes, function (type) {\n if (angular.isUndefined(type.listHowHappened) || type.listHowHappened.length <= 0) {\n disable = true;\n }\n\n if (angular.isUndefined(type.listWhyNot) || type.listWhyNot.length <= 0) {\n disable = true;\n }\n });\n\n return disable;\n };\n\n vm.getHTML = function(text){\n return $sce.trustAsHtml(text);\n };\n\n vm.disablePDCAEditing = function(){\n if(vm.pdca.Status == vm.StatusId.CLOSED || vm.pdca.Status == vm.StatusId.EvaluationCycle){\n return true;\n }else{\n return false;\n }\n };\n\n vm.export = function (id) {\n if (profilePermission.CanExport) {\n if (!vm.exporting) {\n vm.exporting = true;\n\n PDCAService.export(id).then(function (response) {\n var newFile = new Blob([response], {\n type: 'application/application/vnd.openxmlformats-officedocument.wordprocessingml.document'\n });\n var fileURL = URL.createObjectURL(newFile);\n var date = moment().format(\"DD_MM_YYYY_HH_mm_ss\");\n var a = $document[0].createElement(\"a\");\n $document[0].body.appendChild(a);\n a.style = \"display: none\";\n a.href = fileURL;\n a.download = \"PDCA_\" + AuthService.getBusinessName() + \"_\" + date + \".docx\";\n\n a.click();\n vm.exporting = false;\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"service.load.error\"), ToastUtil.ToastType.ERROR);\n vm.exporting = false;\n });\n }\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n };\n\n vm.backToPdcaList = function(){\n $state.go('pdca-list', {});\n };\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('PDCAEditCheckActController', PDCAEditCheckActController);\n\n function PDCAEditCheckActController($log, $translate, $scope, $state, $stateParams, $window, DefaultService,\n PDCAService, ToastUtil, AuthService, $sce, DialogController, $document, moment) {\n\n var vm = this;\n\n var profilePermission = {\n CanAdd: false,\n CanEdit: false,\n CanDelete: false,\n CanView: false,\n CanExport: false\n };\n\n /**\n * Configuration to Rich text editor toolbar.\n * @type {{sanitize: boolean, toolbar: [*]}}\n */\n vm.editorConfig = {\n sanitize: false,\n toolbar: [\n {name: 'basicStyling', items: ['bold', 'italic', 'underline', 'strikethrough', 'subscript', 'superscript', '-', 'leftAlign', 'centerAlign', 'rightAlign', 'blockJustify', '-']},\n {name: 'paragraph', items: ['orderedList', 'unorderedList', 'outdent', 'indent', '-']},\n {name: 'doers', items: ['removeFormatting', 'undo', 'redo', '-']},\n {name: 'colors', items: ['fontColor', 'backgroundColor', '-']},\n {name: 'styling', items: ['font', 'size']}\n ]\n };\n\n vm.taskTypes = {\n CounterMeasure: 0,\n Act: 1\n };\n\n vm.statusEfficacyId = {\n OK: 0,\n NOTGOOD: 1\n };\n\n vm.statusEfficacyList = [\n {Id: vm.statusEfficacyId.OK, Name: 'label.pdca.efficacy.ok.status'},\n {Id: vm.statusEfficacyId.NOTGOOD, Name: 'label.pdca.efficacy.notgood.status'}\n ];\n\n vm.disableTasks = true;\n\n vm.pdcaResults = {\n GoalAccomplished: 0,\n GoalNotAccomplished: 1\n };\n\n vm.pdcaEfficacys = {\n NeedConfirmation: 0,\n DontNeedConfirmation: 1\n };\n\n vm.pdca = {\n Id: 0,\n Checks: [],\n Result: '',\n ResultTemp: \"-1\",\n Tasks: [],\n TasksTemp: [],\n Efficacy: {}\n };\n\n function init() {\n vm.pdca.Id = $stateParams.Id;\n loadProfileModules();\n loadCurrentUser();\n vm.pdca.Efficacy.StartDateTemp = 'aa';\n }\n\n function loadProfileModules() {\n var profileModule = {};\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.modulePdca;\n\n DefaultService.loadModules(profileModule).then(function (response) {\n profilePermission = angular.copy(response);\n\n if (!profilePermission.CanEdit) {\n $state.go('not-authorized', {});\n }\n\n loadPDCA();\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n });\n }\n\n function validateConfirmedResult() {\n var valid = validateCheckFields();\n\n if (!valid) {\n vm.pdca.isConfirmed = false;\n ToastUtil.showToastMessage($translate.instant(\"msg.pdca.checkfields.invalid\"), ToastUtil.ToastType.WARN);\n return false;\n }\n else {\n setResulStatus();\n return true;\n }\n }\n\n vm.confirmResult = function () {\n if (vm.pdca.ResultTemp == vm.pdcaResults.GoalAccomplished) {\n DialogController.show($translate.instant(\"msg.pdca.dialog.confirmation.title\"), '',\n actionConfirmResultDialog, $translate.instant(\"msg.pdca.dialog.result.goal.accomplished\"));\n } else {\n DialogController.show($translate.instant(\"msg.pdca.dialog.confirmation.title\"), '',\n actionConfirmResultDialog, $translate.instant(\"msg.pdca.dialog.result.goal.not.accomplished\"));\n }\n };\n\n function actionConfirmResultDialog() {\n vm.save(true);\n }\n\n vm.confirmEfficacy = function () {\n if (vm.pdca.Efficacy.ConfirmationStatusTemp == vm.pdcaEfficacys.NeedConfirmation) {\n DialogController.show($translate.instant(\"msg.pdca.dialog.efficiency.confirmation.title\"), '',\n actionConfirmEfficacyDialog, $translate.instant(\"msg.pdca.dialog.efficacy.need.confirmation\"));\n } else {\n DialogController.show($translate.instant(\"msg.pdca.dialog.efficiency.confirmation.title\"), '',\n actionConfirmEfficacyDialog, $translate.instant(\"msg.pdca.dialog.efficacy.dont.need.confirmation\"));\n }\n };\n\n function actionConfirmEfficacyDialog() {\n vm.save(false, true);\n }\n\n vm.confirmSave = function(){\n if (vm.pdca.Efficacy != null && (vm.pdca.Efficacy.Status30DaysTemp == vm.statusEfficacyId.NOTGOOD || vm.pdca.Efficacy.Status60DaysTemp == vm.statusEfficacyId.NOTGOOD\n || vm.pdca.Efficacy.Status90DaysTemp == vm.statusEfficacyId.NOTGOOD)){\n\n DialogController.show($translate.instant(\"msg.pdca.dialog.save.confirmation.title\"), '',\n actionConfirmSave, $translate.instant(\"msg.pdca.dialog.save.not.good.status\"));\n\n } else if(vm.pdca.Efficacy != null && vm.pdca.Efficacy.Status90DaysTemp == vm.statusEfficacyId.OK) {\n DialogController.show($translate.instant(\"msg.pdca.dialog.save.confirmation.title\"), '',\n actionConfirmSave, $translate.instant(\"msg.pdca.dialog.save.day90\"));\n\n } else {\n actionConfirmSave();\n }\n\n };\n\n\n function actionConfirmSave() {\n vm.save(false);\n }\n\n vm.save = function (isConfirmed, isConfirmedEfficacy) {\n\n if(vm.isSaving){\n return;\n }\n else{\n vm.isSaving = true;\n }\n\n if (isConfirmed) {\n var valid = validateConfirmedResult();\n\n if (!valid) {\n vm.isSaving = false;\n return;\n }\n\n vm.pdca.isConfirmed = isConfirmed;\n var startingNewCycleByGoalNotAccomplished = vm.pdca.ResultTemp;\n }\n\n if (isConfirmedEfficacy) {\n vm.pdca.isConfirmedEfficacy = isConfirmedEfficacy;\n vm.pdca.Efficacy.StartDate = vm.pdca.Efficacy.StartDateTemp;\n vm.pdca.Efficacy.ConfirmationStatus = vm.pdca.Efficacy.ConfirmationStatusTemp;\n vm.pdca.Efficacy.ReviewBy30Days = vm.pdca.Efficacy.ReviewBy30DaysTemp;\n fillEfficacyBeforeSave();\n } else if (angular.isDefined(vm.pdca.Efficacy) && vm.pdca.Efficacy != null) {\n if(vm.pdca.Efficacy.Id > 0){\n fillEfficacyBeforeSave();\n }else{\n vm.pdca.Efficacy = undefined;\n }\n }\n\n vm.pdca.Tasks = angular.copy(vm.pdca.TasksTemp);\n\n var startingNewCycleByEfficacy = verifyNotGoodEfficacyResult();\n\n PDCAService.save(vm.pdca).then(function (response) {\n vm.isSaving = false;\n\n vm.pdca = response;\n vm.pdca.ResultTemp = vm.pdca.Result;\n vm.pdca.TasksTemp = angular.copy(vm.pdca.Tasks);\n\n ToastUtil.showToastMessage($translate.instant(\"msg.pdca.save.success\"), ToastUtil.ToastType.SUCCESS);\n\n if (isConfirmed && startingNewCycleByGoalNotAccomplished == vm.pdcaResults.GoalNotAccomplished) {\n $state.go('pdca-do', {Id: vm.pdca.Id});\n }\n else {\n validateDisableTaskAct();\n }\n\n fillEfficacyAfterLoad();\n\n if (startingNewCycleByEfficacy) {\n $state.go('pdca-do', {Id: vm.pdca.Id});\n }\n }).catch(function (error) {\n $log.log(error);\n\n vm.isSaving = false;\n\n if (error.status === $scope.HttpStatusCodeConflict) {\n $state.go('pdca-list');\n ToastUtil.showToastMessage($translate.instant(\"msg.error.pdca.already.updated\"), ToastUtil.ToastType.WARN);\n }\n else if (error.data && error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n else if (error.status != $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.pdca.save.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n };\n\n function verifyNotGoodEfficacyResult() {\n if (angular.isDefined(vm.pdca.Efficacy) && vm.pdca.Efficacy != null) {\n if (angular.isDefined(vm.pdca.Efficacy.Status30Days) && vm.pdca.Efficacy.Status30Days != null && vm.pdca.Efficacy.Status30Days == vm.statusEfficacyId.NOTGOOD) {\n return true;\n }\n else if (angular.isDefined(vm.pdca.Efficacy.Status60Days) && vm.pdca.Efficacy.Status60Days != null && vm.pdca.Efficacy.Status60Days == vm.statusEfficacyId.NOTGOOD) {\n return true;\n }\n else if (angular.isDefined(vm.pdca.Efficacy.Status90Days) && vm.pdca.Efficacy.Status90Days != null && vm.pdca.Efficacy.Status90Days == vm.statusEfficacyId.NOTGOOD) {\n return true;\n }\n else {\n return false;\n }\n } else {\n return false;\n }\n }\n\n function loadPDCA() {\n\n PDCAService.loadById(vm.pdca.Id).then(function (response) {\n vm.pdca = angular.copy(response);\n fillCheck();\n fillResult();\n validateDisableTaskAct();\n fillEfficacyAfterLoad();\n vm.pdca.TasksTemp = angular.copy(vm.pdca.Tasks);\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.Message), ToastUtil.ToastType.ERROR);\n });\n }\n\n function fillCheck() {\n var alreadyExist = false;\n\n angular.forEach(vm.pdca.Checks, function (check) {\n if (check.Cycle == vm.pdca.Cycle) {\n alreadyExist = true;\n }\n });\n\n if (vm.pdca.Checks.length == 0 || !alreadyExist) {\n var check = {\n Cycle: vm.pdca.Cycle\n };\n\n vm.pdca.Checks.push(check);\n }\n }\n\n function fillResult() {\n if (angular.isDefined(vm.pdca.Result) && vm.pdca.Result != null) {\n vm.pdca.ResultTemp = vm.pdca.Result;\n }\n }\n\n vm.getCycleTranslate = function (cycle) {\n return $translate.instant('label.pdca.cycle.title').replace(\"#cycle\", cycle);\n };\n\n function setResulStatus() {\n switch (parseInt(vm.pdca.ResultTemp)) {\n case vm.pdcaResults.GoalAccomplished:\n vm.pdca.Result = vm.pdcaResults.GoalAccomplished;\n\n break;\n case vm.pdcaResults.GoalNotAccomplished:\n vm.pdca.Result = vm.pdcaResults.GoalNotAccomplished;\n break;\n }\n }\n\n vm.validateShowAvaliations = function () {\n if (vm.pdca.Efficacy != null && angular.isDefined(vm.pdca.Efficacy)) {\n if (vm.pdca.Efficacy.ConfirmationStatus == vm.pdcaEfficacys.NeedConfirmation) {\n return true;\n }\n else {\n return false;\n }\n } else {\n return false;\n }\n };\n\n vm.disableBeforeField = function (check) {\n\n if (check.Cycle == 1) {\n return true;\n }\n\n if (check.Cycle != vm.pdca.Cycle) {\n return true;\n }\n\n if (vm.disableResult()) {\n return true;\n }\n\n return false;\n };\n\n vm.disableAfterField = function (check) {\n if (check.Cycle != vm.pdca.Cycle) {\n return true;\n }\n\n if (vm.disableResult()) {\n return true;\n }\n\n return false;\n };\n\n function validateCheckFields() {\n var isValid = false;\n\n angular.forEach(vm.pdca.Checks, function (check) {\n if (check.Cycle == vm.pdca.Cycle) {\n if (angular.isDefined(check.Before) && check.Before != '' && check.Before != null\n && angular.isDefined(check.After) && check.After != '' && check.After != null) {\n isValid = true;\n }\n }\n });\n\n return isValid;\n }\n\n function validateDisableTaskAct() {\n if (angular.isDefined(vm.pdca.Result) && vm.pdca.Result == parseInt(vm.pdcaResults.GoalAccomplished) && vm.pdca.Result != null) {\n\n if (angular.isDefined(vm.pdca.Efficacy) && vm.pdca.Efficacy != null) {\n if (vm.pdca.Efficacy.Id > 0) {\n //disable\n vm.disableTasks = true;\n return true;\n }\n else if (angular.isDefined(vm.pdca.Efficacy.ConfirmationStatus) && vm.pdca.Efficacy.ConfirmationStatus != null) {\n vm.disableTasks = true;\n return true;\n }\n }\n\n //not disable\n vm.disableTasks = false;\n return false;\n }\n //disable\n vm.disableTasks = true;\n return true;\n }\n\n vm.disableResult = function () {\n var disable = false;\n\n angular.forEach(vm.pdca.TasksTemp, function (task) {\n if (task.Type == vm.taskTypes.Act && task.Cycle == vm.pdca.Cycle) {\n disable = true;\n }\n });\n\n return disable;\n };\n\n vm.disableConfirmBtResult = function () {\n if (vm.disableResult()) {\n return true;\n }\n\n if (angular.isUndefined(vm.pdca.ResultTemp) || vm.pdca.ResultTemp == null) {\n return true;\n }\n\n return false;\n };\n\n vm.disableEfficacy = function () {\n var disable = false;\n var existTaskForCurrentCycle = false;\n\n if (vm.pdca.TasksTemp.length <= 0) {\n return true;\n }\n\n angular.forEach(vm.pdca.TasksTemp, function (task) {\n if (!(angular.isDefined(task.Id) && task.Id != null && task.Id > 0)) {\n disable = true;\n }\n if (task.Status != 2) {\n disable = true;\n }\n if (task.Cycle == vm.pdca.Cycle && task.Type == vm.taskTypes.Act) {\n existTaskForCurrentCycle = true;\n }\n });\n\n if (!existTaskForCurrentCycle) {\n disable = true;\n }\n\n return disable;\n };\n\n vm.confirmEfficacyDisable = function () {\n if (angular.isDefined(vm.pdca.Efficacy) && vm.pdca.Efficacy != null\n && angular.isDefined(vm.pdca.Efficacy.ConfirmationStatus) && vm.pdca.Efficacy.ConfirmationStatus != null) {\n return true;\n }\n else {\n return false;\n }\n };\n\n vm.disableEfficacy30DaysStatus = function () {\n var today = new Date();\n\n if (angular.isUndefined(vm.pdca.Efficacy) || vm.pdca.Efficacy == null\n || angular.isUndefined(vm.pdca.Efficacy.NextRevision30DaysDate) || vm.pdca.Efficacy.NextRevision30DaysDate == null) {\n return true;\n }\n\n var revisionDate = moment(vm.pdca.Efficacy.NextRevision30DaysDate, 'DD/MM/YYYY');\n var nextRevision = new Date(revisionDate.year(), revisionDate.month(), revisionDate.date());\n\n if (angular.isDefined(vm.pdca.Efficacy) && vm.pdca.Efficacy != null) {\n if (vm.pdca.Efficacy.ConfirmationStatusTemp == vm.pdcaEfficacys.DontNeedConfirmation ||\n (angular.isDefined(vm.pdca.Efficacy.Status30Days) && vm.pdca.Efficacy.Status30Days != null)) {\n return true;\n }\n else if (vm.pdca.Efficacy.ConfirmationStatusTemp == vm.pdcaEfficacys.NeedConfirmation\n && today >= nextRevision) {\n return false;\n }\n else {\n return true;\n }\n }\n else {\n return true;\n }\n };\n\n vm.disableEfficacy60DaysStatus = function () {\n var today = new Date();\n\n if (angular.isUndefined(vm.pdca.Efficacy) || vm.pdca.Efficacy == null\n || angular.isUndefined(vm.pdca.Efficacy.NextRevision60DaysDate) || vm.pdca.Efficacy.NextRevision60DaysDate == null) {\n return true;\n }\n\n var revisionDate = moment(vm.pdca.Efficacy.NextRevision60DaysDate, 'DD/MM/YYYY');\n var nextRevision = new Date(revisionDate.year(), revisionDate.month(), revisionDate.date());\n\n if (angular.isDefined(vm.pdca.Efficacy) && vm.pdca.Efficacy != null) {\n if (vm.pdca.Efficacy.ConfirmationStatusTemp == vm.pdcaEfficacys.DontNeedConfirmation\n || (angular.isDefined(vm.pdca.Efficacy.Status60Days) && vm.pdca.Efficacy.Status60Days != null)) {\n return true;\n }\n else if (vm.pdca.Efficacy.ConfirmationStatusTemp == vm.pdcaEfficacys.NeedConfirmation\n && today >= nextRevision) {\n return false;\n }\n else {\n return true;\n }\n }\n else {\n return true;\n }\n };\n\n vm.disableEfficacy90DaysStatus = function () {\n var today = new Date();\n\n if (angular.isUndefined(vm.pdca.Efficacy) || vm.pdca.Efficacy == null ||\n angular.isUndefined(vm.pdca.Efficacy.NextRevision90DaysDate) || vm.pdca.Efficacy.NextRevision90DaysDate == null) {\n return true;\n }\n\n var revisionDate = moment(vm.pdca.Efficacy.NextRevision90DaysDate, 'DD/MM/YYYY');\n var nextRevision = new Date(revisionDate.year(), revisionDate.month(), revisionDate.date());\n\n if (angular.isDefined(vm.pdca.Efficacy) && vm.pdca.Efficacy != null) {\n if (vm.pdca.Efficacy.ConfirmationStatusTemp == vm.pdcaEfficacys.DontNeedConfirmation\n || (angular.isDefined(vm.pdca.Efficacy.Status90Days) && vm.pdca.Efficacy.Status90Days != null)) {\n return true;\n }\n else if (vm.pdca.Efficacy.ConfirmationStatusTemp == vm.pdcaEfficacys.NeedConfirmation\n && today >= nextRevision) {\n return false;\n }\n else {\n return true;\n }\n }\n else {\n return true;\n }\n };\n\n\n vm.disableEfficacyDontNeedConfirmation = function () {\n if (angular.isDefined(vm.pdca.Efficacy) && vm.pdca.Efficacy != null) {\n if (vm.pdca.Efficacy.ConfirmationStatusTemp == vm.pdcaEfficacys.DontNeedConfirmation\n || (angular.isDefined(vm.pdca.Efficacy.ConfirmationStatus) && vm.pdca.Efficacy.ConfirmationStatus != null)) {\n return true;\n }\n }\n return false;\n };\n\n vm.disableEfficacyNeedConfirmation = function () {\n if (angular.isDefined(vm.pdca.Efficacy) && vm.pdca.Efficacy != null) {\n if (vm.pdca.Efficacy.ConfirmationStatusTemp == vm.pdcaEfficacys.NeedConfirmation\n || (angular.isDefined(vm.pdca.Efficacy.ConfirmationStatus) && vm.pdca.Efficacy.ConfirmationStatus != null)) {\n return true;\n }\n }\n return false;\n };\n\n function loadCurrentUser() {\n vm.currentUser = {\n Id: $window.localStorage.userID,\n Name: $window.localStorage.aliasAqms\n };\n }\n\n function getCurrentUser() {\n return {Name: vm.currentUser.Name, Id: vm.currentUser.Id};\n }\n\n vm.initEfficacyDontNeedConfirmation = function () {\n DefaultService.loadDate(3).then(function(response){\n var currentDate = response;\n\n vm.pdca.Efficacy.StartDateTemp = currentDate;\n vm.pdca.Efficacy.NextRevisionDateTemp = vm.pdca.Efficacy.StartDateTemp;\n vm.pdca.Efficacy.ReviewBy30DaysTemp = getCurrentUser();\n vm.pdca.Efficacy.Status30DaysTemp = vm.statusEfficacyId.OK;\n vm.pdca.Efficacy.NextRevision30DaysDateTemp = vm.pdca.Efficacy.StartDateTemp;\n })\n .catch(function(error){\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n });\n };\n\n vm.initEfficacyNeedConfirmation = function () {\n DefaultService.loadDate(4).then(function(response){\n var currentDate = response;\n\n var currentDateMoment = moment(currentDate);\n\n vm.pdca.Efficacy.StartDateTemp = currentDateMoment.format('DD/MM/YYYY').toString();\n vm.pdca.Efficacy.NextRevisionDateTemp = angular.copy(currentDateMoment).add(30, 'days').format('DD/MM/YYYY').toString();\n vm.pdca.Efficacy.Status30DaysTemp = undefined;\n vm.pdca.Efficacy.Status30DaysTemp = undefined;\n vm.pdca.Efficacy.Status30DaysTemp = undefined;\n vm.pdca.Efficacy.ReviewBy30DaysTemp = undefined;\n vm.pdca.Efficacy.ReviewBy60DaysTemp = undefined;\n vm.pdca.Efficacy.ReviewBy930DaysTemp = undefined;\n vm.pdca.Efficacy.NextRevision30DaysDateTemp = vm.pdca.Efficacy.NextRevisionDateTemp;\n vm.pdca.Efficacy.NextRevision60DaysDateTemp = angular.copy(currentDateMoment).add(60, 'days').format('DD/MM/YYYY').toString();\n vm.pdca.Efficacy.NextRevision90DaysDateTemp = angular.copy(currentDateMoment).add(90, 'days').format('DD/MM/YYYY').toString();\n })\n .catch(function(error){\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n });\n };\n\n function fillEfficacyBeforeSave() {\n if (!(angular.isDefined(vm.pdca.Efficacy) && vm.pdca.Efficacy != null && vm.pdca.Efficacy.Id > 0)) {\n return;\n }\n\n vm.pdca.Efficacy.StartDate = vm.pdca.Efficacy.StartDateTemp;\n vm.pdca.Efficacy.NextRevisionDate = vm.pdca.Efficacy.NextRevisionDateTemp;\n vm.pdca.Efficacy.ReviewBy30Days = vm.pdca.Efficacy.ReviewBy30DaysTemp;\n vm.pdca.Efficacy.ReviewBy60Days = vm.pdca.Efficacy.ReviewBy60DaysTemp;\n vm.pdca.Efficacy.ReviewBy90Days = vm.pdca.Efficacy.ReviewBy90DaysTemp;\n vm.pdca.Efficacy.Status30Days = vm.pdca.Efficacy.Status30DaysTemp;\n vm.pdca.Efficacy.Status60Days = vm.pdca.Efficacy.Status60DaysTemp;\n vm.pdca.Efficacy.Status90Days = vm.pdca.Efficacy.Status90DaysTemp;\n vm.pdca.Efficacy.NextRevision30DaysDate = vm.pdca.Efficacy.NextRevision30DaysDateTemp;\n vm.pdca.Efficacy.NextRevision60DaysDate = vm.pdca.Efficacy.NextRevision60DaysDateTemp;\n vm.pdca.Efficacy.NextRevision90DaysDate = vm.pdca.Efficacy.NextRevision90DaysDateTemp;\n }\n\n function fillEfficacyAfterLoad() {\n if (angular.isUndefined(vm.pdca.Efficacy) || vm.pdca.Efficacy == null) {\n return;\n }\n else {\n if (angular.isUndefined(vm.pdca.Efficacy.Id)) {\n return\n }\n else if (vm.pdca.Efficacy.Id <= 0) {\n return;\n }\n }\n\n vm.pdca.Efficacy.ConfirmationStatusTemp = vm.pdca.Efficacy.ConfirmationStatus;\n vm.pdca.Efficacy.StartDateTemp = vm.pdca.Efficacy.StartDate;\n\n var nextReview = undefined;\n\n if (angular.isDefined(vm.pdca.Efficacy.NextRevision90DaysDate) && vm.pdca.Efficacy.NextRevision90DaysDate != null\n && angular.isDefined(vm.pdca.Efficacy.Status30Days) && vm.pdca.Efficacy.Status30Days != null\n && angular.isDefined(vm.pdca.Efficacy.Status60Days) && vm.pdca.Efficacy.Status60Days != null) {\n nextReview = vm.pdca.Efficacy.NextRevision90DaysDate;\n } else if (angular.isDefined(vm.pdca.Efficacy.NextRevision60DaysDate) && vm.pdca.Efficacy.NextRevision60DaysDate != null\n && angular.isDefined(vm.pdca.Efficacy.Status30Days) && vm.pdca.Efficacy.Status30Days != null) {\n nextReview = vm.pdca.Efficacy.NextRevision60DaysDate;\n } else if (angular.isDefined(vm.pdca.Efficacy.NextRevision30DaysDate) && vm.pdca.Efficacy.NextRevision30DaysDate != null) {\n nextReview = vm.pdca.Efficacy.NextRevision30DaysDate;\n }\n else {\n nextReview = vm.pdca.Efficacy.StartDate;\n }\n\n vm.pdca.Efficacy.NextRevisionDateTemp = nextReview;\n\n vm.pdca.Efficacy.ReviewBy30DaysTemp = vm.pdca.Efficacy.ReviewBy30Days;\n vm.pdca.Efficacy.ReviewBy60DaysTemp = vm.pdca.Efficacy.ReviewBy60Days;\n vm.pdca.Efficacy.ReviewBy90DaysTemp = vm.pdca.Efficacy.ReviewBy90Days;\n vm.pdca.Efficacy.Status30DaysTemp = vm.pdca.Efficacy.Status30Days;\n vm.pdca.Efficacy.Status60DaysTemp = vm.pdca.Efficacy.Status60Days;\n vm.pdca.Efficacy.Status90DaysTemp = vm.pdca.Efficacy.Status90Days;\n vm.pdca.Efficacy.NextRevision30DaysDateTemp = vm.pdca.Efficacy.NextRevision30DaysDate;\n vm.pdca.Efficacy.NextRevision60DaysDateTemp = vm.pdca.Efficacy.NextRevision60DaysDate;\n vm.pdca.Efficacy.NextRevision90DaysDateTemp = vm.pdca.Efficacy.NextRevision90DaysDate;\n }\n\n vm.setUserReview30days = function () {\n if (vm.pdca.Efficacy.Status30DaysTemp == vm.statusEfficacyId.OK || vm.pdca.Efficacy.Status30DaysTemp == vm.statusEfficacyId.NOTGOOD) {\n vm.pdca.Efficacy.ReviewBy30DaysTemp = getCurrentUser();\n }\n };\n\n vm.setUserReview60days = function () {\n if (vm.pdca.Efficacy.Status60DaysTemp == vm.statusEfficacyId.OK || vm.pdca.Efficacy.Status60DaysTemp == vm.statusEfficacyId.NOTGOOD) {\n vm.pdca.Efficacy.ReviewBy60DaysTemp = getCurrentUser();\n }\n };\n\n vm.setUserReview90days = function () {\n if (vm.pdca.Efficacy.Status90DaysTemp == vm.statusEfficacyId.OK || vm.pdca.Efficacy.Status90DaysTemp == vm.statusEfficacyId.NOTGOOD) {\n vm.pdca.Efficacy.ReviewBy90DaysTemp = getCurrentUser();\n }\n };\n\n vm.getHTML = function (text) {\n return $sce.trustAsHtml(text);\n };\n\n vm.validateShowEfficacyFields = function(){\n if(angular.isDefined(vm.pdca.Efficacy) && vm.pdca.Efficacy != null){\n if(angular.isDefined(vm.pdca.Efficacy.ConfirmationStatusTemp) && vm.pdca.Efficacy.ConfirmationStatusTemp == vm.pdcaEfficacys.DontNeedConfirmation){\n return false;\n }\n }\n\n return true;\n };\n\n vm.export = function (id) {\n if (profilePermission.CanExport) {\n if (!vm.exporting) {\n vm.exporting = true;\n\n PDCAService.export(id).then(function (response) {\n var newFile = new Blob([response], {\n type: 'application/application/vnd.openxmlformats-officedocument.wordprocessingml.document'\n });\n var fileURL = URL.createObjectURL(newFile);\n var date = moment().format(\"DD_MM_YYYY_HH_mm_ss\");\n var a = $document[0].createElement(\"a\");\n $document[0].body.appendChild(a);\n a.style = \"display: none\";\n a.href = fileURL;\n a.download = \"PDCA_\" + AuthService.getBusinessName() + \"_\" + date + \".docx\";\n\n a.click();\n vm.exporting = false;\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"service.load.error\"), ToastUtil.ToastType.ERROR);\n vm.exporting = false;\n });\n }\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n };\n\n vm.backToPdcaList = function(){\n $state.go('pdca-list', {});\n };\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('TestTypeService', TestTypeService);\n\n var BASE = '/test-type/';\n /** @ngInject */\n function TestTypeService($injector, $q, ConfigurationService) {\n return {\n listTestTypes: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + \"list\", {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getById: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + 'byId/' + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n save: function (testType) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + BASE, testType, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n delete: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + BASE + \"/\" + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n };\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('TestInspectionTypeService', TestInspectionTypeService);\n\n var BASE = '/test-inspection-type/';\n /** @ngInject */\n function TestInspectionTypeService($injector, $q, ConfigurationService) {\n return {\n listTestInspectionTypes: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + \"list\", {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getById: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + 'byId/' + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n save: function (testType) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + BASE, testType, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n delete: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + BASE + \"/\" + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n };\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('TestInspectionSubTypeService', TestInspectionSubTypeService);\n\n var BASE = '/test-inspection-sub-type/';\n /** @ngInject */\n function TestInspectionSubTypeService($injector, $q, ConfigurationService) {\n return {\n listTestInspectionSubTypes: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + \"list\", {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getById: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + 'byId/' + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n save: function (testType) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + BASE, testType, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n delete: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + BASE + \"/\" + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n };\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('TestInspectionRuleService', TestInspectionRuleService);\n\n var BASE = '/test-inspection-rule/';\n /** @ngInject */\n function TestInspectionRuleService($injector, $q, ConfigurationService) {\n return {\n listTestInspectionRules: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + \"list\", {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getById: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + 'byId/' + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n save: function (testType) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + BASE, testType, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n delete: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + BASE + \"/\" + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n };\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(OrtTranslate);\n\n /** @ngInject */\n function OrtTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'title.ort': 'ORT',\n 'title.ort.complete': 'ORT - On-Going Reliability Testing',\n 'title.ort.template': 'Template ORT',\n 'title.ort.inspection': 'Inspection',\n 'ort.new.label': 'New Template ORT',\n 'ort.edit.label': 'Edit Template ORT',\n 'ort.label.test.type': 'Test Type',\n 'ort.delete.success.msg': 'ORT template deleted successfully.',\n 'ort.delete.error.msg': 'There was an error while trying to remove the ORKUT template.',\n 'ort.vendor.label': 'Vendor',\n 'ort.drawing.spec.label': 'Drawing / Spec',\n 'ort.identification.label': 'Test Identification',\n 'ort.add.inspection.type.label': 'Add Test Inspection Type',\n 'ort.template.label': 'Test Identification Template',\n 'ort.template.version.label': 'Version: ',\n 'ort.add.inspection.sub.type.label': 'Add Inspection Sub Type',\n 'ort.template.new.item.modal.title': 'Add Inspection Test Sub Type',\n 'ort.param.header.sequence.label': 'Sequence',\n 'ort.param.header.subtype.label': 'Sub Type',\n 'ort.param.header.rule.label': 'Rule',\n 'ort.param.header.unit.measurement.label': 'Unit of Measurement',\n 'ort.param.header.inspection.description.label': 'Inspection Description',\n 'ort.template.item.inspection.type.label': 'Test Inspection Type',\n 'ort.template.item.inspection.subtype.label': 'Sub Type',\n 'ort.template.item.inspection.rule': 'Rule',\n 'ort.template.item.inspection.unit.measurement': 'Unit of measurement',\n 'ort.template.item.inspection.description.label': 'Inspection Description',\n 'ort.template.item.parameter.label': 'Parameter',\n 'ort.load.error.msg': 'There was an error while trying to load the template.',\n 'ort.save.success.msg': 'Template saved successfully.',\n 'ort.save.error.msg': 'There was an error while trying to save the template.',\n 'ort.update.version.remark.title': 'Template Update Notes',\n 'ort.update.version.remark.sub.title': 'An inspection for this template already exists. It is necessary create a new template version.',\n 'msg.error.ort.delete.has.associations': 'This part could not be deleted. There are one or more associated records.',\n 'ort.msg.same.variant.error': 'A template has already been registered for this variant.',\n 'ort.msg.error.list': 'There was an error while trying to load the template list.',\n 'ort.must.add.at.least.one': 'You must add at least one \"Test Inspection Type\" and a \"Inspection Test Subtype\".'\n });\n\n $translateProvider.translations('pt', {\n 'title.ort': 'ORT',\n 'title.ort.complete': 'ORT - Teste de Confiabilidade Contínuo',\n 'title.ort.template': 'Template ORT',\n 'title.ort.inspection': 'Inspeção',\n 'ort.new.label': 'Novo Template ORT',\n 'ort.edit.label': 'Editar Template ORT',\n 'ort.label.test.type': 'Tipo de Teste',\n 'ort.delete.success.msg': 'Template do ORT excluído com sucesso.',\n 'ort.delete.error.msg': 'Ocorreu um erro ao tentar remover o template do ORT.',\n 'ort.vendor.label': 'Fornecedor',\n 'ort.drawing.spec.label': 'Desenho / Especificação',\n 'ort.identification.label': 'Identificação do Teste',\n 'ort.add.inspection.type.label': 'Adicionar Tipo de Inspeção de Teste',\n 'ort.template.label': 'Identificação do Template de Teste',\n 'ort.template.version.label': 'Versão: ',\n 'ort.add.inspection.sub.type.label': 'Adicionar Subtipo de Inspeção',\n 'ort.template.new.item.modal.title': 'Adicionar Subtipo de Teste de Inspeção',\n 'ort.param.header.sequence.label': 'Sequência',\n 'ort.param.header.subtype.label': 'Subtipo',\n 'ort.param.header.rule.label': 'Regra',\n 'ort.param.header.unit.measurement.label': 'Unidade de Medida',\n 'ort.param.header.inspection.description.label': 'Descrição da Inspeção',\n 'ort.template.item.inspection.type.label': 'Tipo de Inspeção do Teste',\n 'ort.template.item.inspection.subtype.label': 'Subtipo',\n 'ort.template.item.inspection.rule': 'Regra',\n 'ort.template.item.inspection.unit.measurement': 'Unidade de Medida',\n 'ort.template.item.inspection.description.label': 'Descrição da Inspeção',\n 'ort.template.item.parameter.label': 'Parâmetro',\n 'ort.load.error.msg': 'Ocorreu um erro ao tentar carregar o template.',\n 'ort.save.success.msg': 'Template salvo com sucesso.',\n 'ort.save.error.msg': 'Ocorreu um erro ao tentar salvar o template.',\n 'ort.update.version.remark.title': 'Notas de Atualização do Template',\n 'ort.update.version.remark.sub.title': 'Já existe uma inspeção para este template. É necessário criar uma nova versão do template.',\n 'msg.error.ort.delete.has.associations': 'Este template não pôde ser removido. Há um ou mais registros associados.',\n 'ort.msg.same.variant.error': 'Já existe um template cadastrado para esta variante.',\n 'ort.msg.error.list': 'Ocorreu um erro ao tentar carregar a lista de template.',\n 'ort.must.add.at.least.one': 'É necessário adicionar ao menos um \"Tipo de Inspeção de teste\" e um \"Subtipo de Teste de Inspeção\".'\n });\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('OrtService', OrtService);\n\n var BASE = '/ort/';\n /** @ngInject */\n function OrtService($window, $injector, $q, ConfigurationService) {\n return {\n\n listWithParams: function (filterParams) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n $http.get(ConfigurationService.getServiceHost() + BASE, {\n params: filterParams\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n save: function (part) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + BASE, part, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getById: function (Id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + 'byId/' + Id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n delete: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + BASE + \"/\" + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n\n\n };\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(OrtRouter);\n\n /** @ngInject */\n function OrtRouter($stateProvider) {\n\n\n $stateProvider.state('ort-list', {\n url: '/ort',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/ort/ort-template/ort-list.html',\n controller: 'OrtListController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.ort'\n },\n authorize: true\n });\n\n $stateProvider.state('ort-create', {\n url: '/ort/create',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/ort/ort-template/ort-edit.html',\n controller: 'OrtEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.ort'\n },\n authorize: true\n });\n\n $stateProvider.state('ort-edit', {\n url: '/ort/edit/:Id',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/ort/ort-template/ort-edit.html',\n controller: 'OrtEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.ort'\n },\n authorize: true\n });\n\n\n\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('OrtListController', OrtListController);\n\n function OrtListController(OrtService, ToastUtil, $state, $translate, AuthService, $log, $scope, DefaultService) {\n\n var vm = this;\n vm.params = {\n Variant: \"\",\n TestType: \"\"\n }\n\n vm.itensPerPageList = [\n {name: '5', value: 5, before: 0, after: 6}, \n {name: '10', value: 10, before: 5, after: 11}, \n {name: '20', value: 20, before: 10, after: 21}, \n {name: '30', value: 30, before: 20, after: 31}, \n {name: '40', value: 40, before: 30, after: 41}, \n {name: '50', value: 50, before: 40, after: 51}]\n\n vm.itemPerPage = vm.itensPerPageList[0];\n\n var profilePermission = {\n CanAdd: false,\n CanEdit: false,\n CanDelete: false,\n CanView: false,\n CanApprove: false,\n CanExport: false,\n CanConsult: false\n }\n\n vm.searchParams = {\n VariantId: '',\n TestTypeId: '',\n Page: 1,\n MaxPerPage: vm.itemPerPage.value\n };\n\n vm.clearSearchFields = function () {\n vm.params = {\n Variant: \"\",\n TestType: \"\"\n }\n };\n\n /** ListView Attributes */\n vm.ortListModel = [];\n vm.totalList = 0;\n\n vm.shouldShow = function (item) {\n if(vm.totalList > 0 && item != undefined) {\n return vm.totalList >= item.value || (vm.totalList < item.after && vm.totalList > item.before);\n }\n return false;\n }\n \n vm.changeItemsPerPage = function() {\n if ( vm.itemPerPage == null ) {\n vm.itemPerPage = vm.itensPerPageList[0];\n }\n vm.searchParams.Page = 1;\n vm.searchParams.MaxPerPage = vm.itemPerPage.value;\n vm.searchOrts()\n }\n\n\n vm.initTabConfig = {\n isApprover: profilePermission.CanApprove,\n itemSelected: '0'\n }\n\n vm.searchOrts = function () {\n if (sessionStorage.getItem(\"searchParams\")) {\n vm.searchParams = JSON.parse(sessionStorage.getItem(\"searchParams\"));\n sessionStorage.removeItem(\"searchParams\");\n vm.itensPerPageList.forEach(function(element) {\n if (element.value == vm.searchParams.MaxPerPage) {\n vm.itemPerPage = element;\n return;\n }\n });\n }\n if (vm.params.Variant != undefined && vm.params.Variant != \"\") {\n vm.searchParams.VariantId = vm.params.Variant.Id;\n } else{\n vm.searchParams.VariantId = '';\n }\n if (vm.params.TestType != undefined && vm.params.TestType != \"\") {\n vm.searchParams.TestTypeId = vm.params.TestType.Id;\n } else {\n vm.searchParams.TestTypeId = '';\n }\n\n OrtService.listWithParams(angular.copy(vm.searchParams))\n .then(function (response) {\n vm.ortListModel = response.resultList;\n vm.totalList = response.total;\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant('msg.error.login.unauthorized'), ToastUtil.ToastType.WARN);\n } else {\n if (error.data && error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant('ort.msg.error.list'), ToastUtil.ToastType.ERROR);\n }\n }\n });\n }\n\n vm.edit = function (id) {\n if (profilePermission.CanEdit) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n \n $state.go('ort-edit', {\n Id: id\n });\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n };\n\n vm.delete = function (id) {\n if (profilePermission.CanDelete) {\n OrtService.delete(id).then(function () {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n \n vm.searchOrts();\n ToastUtil.showToastMessage($translate.instant('ort.delete.success.msg'), ToastUtil.ToastType.SUCCESS);\n }).catch(function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n } else if (error.status == $scope.HttpStatusCodeConflict) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant('ort.delete.error.msg'), ToastUtil.ToastType.ERROR);\n }\n });\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n };\n\n vm.create = function () {\n if (profilePermission.CanAdd) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n \n $state.go('ort-create', {});\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n }\n\n function init() {\n loadProfileModules();\n }\n\n function loadProfileModules() {\n var profileModule = {};\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.ort;\n DefaultService.loadModules(profileModule).then(function (response) {\n profilePermission = angular.copy(response);\n vm.initTabConfig.isApprover = profilePermission.CanApprove;\n if (profilePermission.CanApprove === false || profilePermission.CanApprove == 'false') {\n $state.go('not-authorized', {});\n }\n if (profilePermission.CanView) {\n vm.searchOrts();\n } else {\n $state.go('not-authorized', {});\n }\n }).catch(function (error) {\n $log.log(error);\n if (error.data != null && error.data != undefined)\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n });\n }\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('OrtEditController', OrtEditController);\n\n function OrtEditController($filter, OrtService, ToastUtil, $stateParams, $state,\n $translate, $scope, $log, moment, AuthService, DefaultService, DialogController, DialogControllerTemplate) {\n\n var vm = this;\n\n var profilePermission = {\n CanAdd: false,\n CanEdit: false,\n CanDelete: false,\n CanView: false,\n CanApprove: false,\n CanExport: false,\n CanConsult: false\n }\n\n vm.ort = {\n CsActive: 1,\n CurrentOrtInspectionTemplate: {\n OrtInspectionTemplateTypes: null,\n CsActive: true\n }\n };\n\n vm.idToEdit = undefined;\n\n vm.statusList = [{\n id: 1,\n Name: 'label.active'\n }, {\n id: 0,\n Name: 'label.inactive'\n }];\n\n vm.confirmSaveNewVersion = function (modal) {\n vm.ort.IsUpdateRemakInserted = true;\n vm.ort.CurrentOrtInspectionTemplate.RemarkUpdate = angular.copy(modal.value);\n executeSaveAction();\n }\n\n vm.save = function () {\n if (!vm.ort.CurrentOrtInspectionTemplate.OrtInspectionTemplateTypes || vm.ort.CurrentOrtInspectionTemplate.OrtInspectionTemplateTypes.length == 0 ||\n !vm.ort.CurrentOrtInspectionTemplate.OrtInspectionTemplateTypes[0].OrtInspectionItemTemplates || vm.ort.CurrentOrtInspectionTemplate.OrtInspectionTemplateTypes[0].OrtInspectionItemTemplates.length == 0) {\n ToastUtil.showToastMessage($translate.instant('ort.must.add.at.least.one'), ToastUtil.ToastType.WARN);\n } else {\n if (vm.ort.CurrentOrtInspectionTemplate && vm.ort.CurrentOrtInspectionTemplate.HasInspection === true && vm.ort.IsUpdateRemakInserted === false) {\n DialogControllerTemplate.showWithCloseListener('ort.update.version.remark.title', 'ort.update.version.remark.sub.title', '', vm.confirmSaveNewVersion, null);\n } else {\n executeSaveAction();\n }\n }\n }\n\n function executeSaveAction() {\n if (vm.ort.CurrentOrtInspectionTemplate != null && vm.ort.CurrentOrtInspectionTemplate.OrtInspectionTemplateTypes == null) {\n vm.ort.CurrentOrtInspectionTemplate = null;\n }\n OrtService.save(vm.ort).then(function () {\n ToastUtil.showToastMessage($translate.instant('ort.save.success.msg'), ToastUtil.ToastType.SUCCESS);\n $state.go('ort-list');\n }).catch(function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant('msg.error.login.unauthorized'), ToastUtil.ToastType.WARN);\n } else if (error.status === $scope.HttpStatusCodeConflict) {\n $state.go('ort-list');\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n } else {\n if (error.data && error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant('ort.save.error.msg'), ToastUtil.ToastType.ERROR);\n }\n }\n\n });\n }\n\n vm.openAddType = function () {\n DialogController.show('ort.add.inspection.type.label', '', vm);\n };\n\n /**\n * Add a inspection type to Template.\n * @param inspecType\n */\n vm.addInspectionType = function (inspecType) {\n if (!inspecType.isEditAction) {\n var isFirst = false;\n if (vm.ort.CurrentOrtInspectionTemplate.OrtInspectionTemplateTypes === null || vm.ort.CurrentOrtInspectionTemplate.OrtInspectionTemplateTypes.length == 0) {\n vm.ort.CurrentOrtInspectionTemplate.OrtInspectionTemplateTypes = [];\n isFirst = true;\n }\n\n var itemAlreadyInList = false;\n angular.forEach(vm.ort.CurrentOrtInspectionTemplate.OrtInspectionTemplateTypes, function (item) {\n if (item.TestInspectionType.Id == inspecType.TestInspectionType.Id) {\n itemAlreadyInList = true;\n }\n });\n\n if (!itemAlreadyInList) {\n\n inspecType.SequenceNumber = isFirst ? 1 : getNextSequenceIndexFromTypeList();\n vm.ort.CurrentOrtInspectionTemplate.Version = isFirst ? 1 : vm.ort.CurrentOrtInspectionTemplate.Version;\n vm.ort.CurrentOrtInspectionTemplate.OrtInspectionTemplateTypes.push(inspecType);\n }\n }\n\n }\n\n vm.editInspectionType = function (templateItem) {\n DialogController.show('ort.add.inspection.type.label', '', vm, templateItem);\n }\n\n vm.deleteInspectionType = function (templateItem) {\n var sequenceToRemove = templateItem.SequenceNumber;\n var index = vm.ort.CurrentOrtInspectionTemplate.OrtInspectionTemplateTypes.map(function (p) {\n return p.TestInspectionType.Id\n }).indexOf(templateItem.TestInspectionType.Id);\n\n if (index != -1) {\n vm.ort.CurrentOrtInspectionTemplate.OrtInspectionTemplateTypes.splice(index, 1);\n updateInspectionTypeSequence(sequenceToRemove);\n }\n }\n\n /**\n * Updates sequence of type list.\n * @param sequenceToRemove\n */\n function updateInspectionTypeSequence(sequenceToRemove) {\n angular.forEach(vm.ort.CurrentOrtInspectionTemplate.OrtInspectionTemplateTypes, function (item) {\n if (parseInt(item.SequenceNumber) > parseInt(sequenceToRemove)) {\n item.SequenceNumber = (item.SequenceNumber - 1);\n }\n\n });\n\n }\n\n /**\n * Calls dialog to add a new template item.\n */\n vm.openAddSubtypes = function (templateType) {\n templateType.isEditAction = false;\n DialogController.show('ort.template.new.item.modal.title', '', vm, templateType, null, 'lg');\n }\n\n /**\n * Edit Subtype.\n * @param templateItem\n */\n vm.editSubType = function (templateItem, templateType) {\n templateItem.isEditAction = true;\n templateItem.OrtInspectionTemplateType = templateType;\n DialogController.show('ort.template.new.item.modal.title', '', vm, templateItem, null, 'lg');\n }\n\n /**\n * Get next sequence to Type.\n * @returns {number}\n */\n function getNextSequenceIndexFromTypeList() {\n var orderedItems = $filter('orderBy')(vm.ort.CurrentOrtInspectionTemplate.OrtInspectionTemplateTypes, 'SequenceNumber');\n return (parseInt(orderedItems[(orderedItems.length - 1)].SequenceNumber) + 1);\n }\n\n /**\n * Get next Sub Type Sequence.\n * @param OrtInspectionItemTemplates\n * @returns {string}\n */\n function getNextSequenceIndexFromSubTypeList(OrtInspectionItemTemplates) {\n var nextSequence = '';\n var biggestSequence = 0;\n angular.forEach(OrtInspectionItemTemplates, function (item) {\n var valueArray = item.SequenceNumber.split('.');\n\n var value = valueArray[(valueArray.length - 1)];\n if (value > parseInt(biggestSequence)) {\n biggestSequence = valueArray[0] + '.' + value;\n }\n });\n\n\n var valuesFromSequence = biggestSequence.split('.');\n nextSequence = (valuesFromSequence[0] + '.' + (parseInt(valuesFromSequence[(valuesFromSequence.length - 1)]) + 1))\n return nextSequence;\n }\n\n\n vm.addSubTypeItem = function (item, parentTestInspectionType) {\n if (!item.isEditAction) {\n angular.forEach(vm.ort.CurrentOrtInspectionTemplate.OrtInspectionTemplateTypes, function (type) {\n if (type.TestInspectionType.Id == parentTestInspectionType.Id) {\n var isFirstItem = false;\n if (type.OrtInspectionItemTemplates == null || type.OrtInspectionItemTemplates.length == 0) {\n type.OrtInspectionItemTemplates = [];\n isFirstItem = true;\n }\n\n item.SequenceNumber = isFirstItem ? type.SequenceNumber + '.1' : getNextSequenceIndexFromSubTypeList(type.OrtInspectionItemTemplates);\n type.isAccordionOpened = true;\n type.OrtInspectionItemTemplates.push(item);\n\n }\n });\n }\n }\n\n /**\n * Remove a subtype item.\n * @param templateType\n * @param templateItem\n */\n vm.deleteSubType = function (templateType, templateItem) {\n var sequenceToRemove = angular.copy(templateItem.SequenceNumber);\n angular.forEach(templateType.OrtInspectionItemTemplates, function (item, key) {\n if (item.SequenceNumber == sequenceToRemove) {\n templateType.OrtInspectionItemTemplates.splice(key, 1);\n }\n });\n\n updateSubtypeSequences(templateType, sequenceToRemove);\n\n }\n\n /**\n * Updates subtype sequence after remove an item.\n * @param templateType\n * @param sequenceToRemove\n */\n function updateSubtypeSequences(templateType, sequenceToRemove) {\n var valueArrayToRemove = sequenceToRemove.split('.');\n var valueToRemove = valueArrayToRemove[(valueArrayToRemove.length - 1)];\n\n angular.forEach(templateType.OrtInspectionItemTemplates, function (item) {\n var valueArray = item.SequenceNumber.split('.');\n var value = valueArray[(valueArray.length - 1)];\n\n if (parseInt(value) > parseInt(valueToRemove)) {\n // Update Sequences.\n var updatedSequence = (valueArray[0] + '.' + (parseInt(value) - 1))\n item.SequenceNumber = updatedSequence;\n }\n });\n }\n\n\n function init() {\n loadProfileModules();\n }\n\n function loadProfileModules() {\n var profileModule = {};\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.ort;\n DefaultService.loadModules(profileModule).then(function (response) {\n profilePermission = angular.copy(response);\n if (profilePermission.CanApprove === false || profilePermission.CanApprove == 'false') {\n $state.go('not-authorized', {});\n }\n vm.idToEdit = $stateParams.Id;\n if (vm.idToEdit) {\n if (!profilePermission.CanEdit) {\n $state.go('not-authorized', {});\n } else {\n getOrtToEdit();\n }\n } else {\n if (!profilePermission.CanAdd) {\n $state.go('not-authorized', {});\n }\n }\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n });\n }\n\n function getOrtToEdit() {\n OrtService.getById(vm.idToEdit).then(function (response) {\n vm.ort = angular.copy(response);\n vm.ort.CsActive = vm.ort.CsActive === true ? 1 : 0;\n vm.ort.IsUpdateRemakInserted = false;\n vm.ort.CurrentOrtInspectionTemplate = vm.ort.CurrentOrtInspectionTemplate == null ? {\n OrtInspectionTemplateTypes: null,\n CsActive: true\n } : vm.ort.CurrentOrtInspectionTemplate;\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant('ort.load.error.msg'), ToastUtil.ToastType.ERROR);\n });\n }\n\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(OrtInspectionTranslate);\n\n /** @ngInject */\n function OrtInspectionTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'title.ort.inspection': 'Inspection',\n 'ort.inspection.new.label': 'New Inspection',\n 'ort.inspection.edit.label': 'Edit Inspection',\n 'panel.inspection.identification': 'Inspection identification',\n 'panel.inspection.lot.traceability': 'Lot traceability',\n 'panel.inspection.filter.type': 'Filter for inspection type',\n 'label.inspection.ort.number': 'ORT Number: ',\n 'ort.label.inspection.date.input': 'Date of Input',\n 'label.inspection.date': 'Date ',\n 'ort.label.inspection.entry.date': 'Entry date',\n 'label.inspection.ort.number-list': 'ORT Number',\n 'label.inspection.vendor': 'Vendor',\n 'label.inspection.created.by': 'Created by',\n 'label.inspection.approved.by': 'Approved by',\n 'label.inspection.batch': 'Batch',\n 'label.inspection.batch.date': 'Batch date',\n 'label.inspection.batch.quantity': 'Batch quantity',\n 'label.inspection.sampling.quantity': 'Sampling quantity',\n 'label.inspection.invoice': 'Invoice',\n 'label.inspection.code': 'Code',\n 'ort.label.inspection.drawing.spec': 'Drawing / Spec:',\n 'label.inspection.type': 'Type',\n 'label.inspection.subtypes': 'Subtype(s)',\n 'label.inspection.subtype': 'Subtype',\n 'label.inspection.samples': 'Samples',\n 'label.inspection.select.type': 'Select a type',\n 'label.inspection.select.sub.type': 'Select a subtype',\n 'label.inspection.add.remark': 'Add remark',\n 'label.inspection.update.remark': 'Update remark',\n 'label.inspection.attachment': 'Attachment',\n 'label.inspection.approve': 'Approve',\n 'label.inspection.approve.with.restrictions': 'Approve with restrictions',\n 'label.inspection.reject': 'Reject',\n 'label.inspection.status': 'Status',\n 'label.inspection.export': 'Export',\n 'label.inspection.approved': 'Approved',\n 'label.inspection.rejected': 'Rejected',\n 'label.inspection.pending': 'Pending approval',\n 'label.inspection.full.report': 'Full report',\n 'label.inspection.summary.report': 'Summary report',\n 'label.inspection.waiting.approval': 'Waiting for approval',\n 'label.inspection.none': 'None',\n 'label.inspection.status.approved': 'Approved',\n 'label.inspection.status.approved.restrictions': 'Approved with restrictions',\n 'label.inspection.status.rejected': 'Rejected',\n 'label.inspection.delete.status.error': \"Item has already been approved or rejected and cannot be removed.\",\n 'ort.inspection.delete.error.msg': 'An error occurred when try to remove Inspection',\n 'ort.inspection.delete.success.msg': 'Inspection successfully removed.',\n 'ort.inspection.metric.mean.label': 'Mean',\n 'ort.inspection.metric.stdev.label': 'Stdev',\n 'ort.inspection.metric.range.label': 'Range',\n 'ort.inspection.metric.cp.label': 'Cp',\n 'ort.inspection.metric.cpk.label': 'Cpk',\n 'ort.inspection.metric.qualityyeld.label': 'Quality Yeld',\n 'ort.inspection.inspect.label': 'Inspected',\n 'ort.inspection.inspect': 'Inspect',\n 'ort.inspection.findings.label': 'Inspection Findings',\n 'ort.inspection.reference.label': 'References',\n 'ort.inspection.load.ort.error.msg': 'An error occurred when try to load ort.',\n 'ort.inspection.vendor.hint.msg': 'To view vendor list, select one ort.',\n 'ort.inspection.lot.traceability.duplicated.msg': 'Date or code already inserted in lot traceability list.',\n 'ort.inspection.lot.traceability.empty.msg': 'At least one field must be filled.',\n 'ort.inspection.itemtemplate.load.error.msg': 'An error occurred when try to load subtype list.',\n 'ort.inspection.load.combo.subtype.error': 'An error occurred when try to load subtype list.',\n 'ort.inspection.save.success.msg': 'Inspection successfully saved.',\n 'ort.inspection.save.error.msg': 'An error occurred when try to save inspection.',\n 'ort.status.search.placeholder': 'Search by status',\n 'ort.label.inspection.date.output': 'Date of Output',\n 'ort.inspection.samples.label': 'Samples',\n 'ort.inspection.conclusion.label': 'Conclusion',\n 'ort.inspection.msg.error.list': 'An error occurred while trying to load the watchlist.',\n 'ort.number.search.placeholder': 'Search by ORT number',\n 'ort.inspection.not.have.template': 'This template has no type of inspection registered.'\n });\n\n $translateProvider.translations('pt', {\n 'title.ort.inspection': 'Inspeção',\n 'ort.inspection.new.label': 'Nova Inspeção',\n 'ort.inspection.edit.label': 'Editar Inspeção',\n 'panel.inspection.identification': 'Identificação da inspeção',\n 'panel.inspection.lot.traceability': 'Rastreabilidade do lote',\n 'panel.inspection.filter.type': 'Filtro por tipo de inspeção',\n 'label.inspection.ort.number': 'Número ORT: ',\n 'ort.label.inspection.date.input': 'Data de entrada',\n 'label.inspection.date': 'Data',\n 'ort.label.inspection.entry.date': 'Data de entrada',\n 'label.inspection.ort.number-list': 'Número do ORT',\n 'label.inspection.vendor': 'Fornecedor',\n 'label.inspection.created.by': 'Criado por',\n 'label.inspection.approved.by': 'Aprovado por',\n 'label.inspection.batch': 'Lote',\n 'label.inspection.batch.date': 'Data do lote',\n 'label.inspection.batch.quantity': 'Quantidade do lote',\n 'label.inspection.sampling.quantity': 'Quantidade da amostragem',\n 'label.inspection.invoice': 'Nota fiscal',\n 'label.inspection.code': 'Código',\n 'label.inspection.ort.description': 'Descrição',\n 'ort.label.inspection.drawing.spec': 'Desenho / Especificação:',\n 'label.inspection.type': 'Tipo',\n 'label.inspection.subtypes': 'Subtipo(s)',\n 'label.inspection.subtype': 'Subtipo',\n 'label.inspection.samples': 'Amostras',\n 'label.inspection.select.type': 'Selecione um tipo',\n 'label.inspection.select.sub.type': 'Selecione um subtipo',\n 'label.inspection.add.remark': 'Adicionar observação',\n 'label.inspection.update.remark': 'Atualizar observação',\n 'label.inspection.approve': 'Aprovar',\n 'label.inspection.approve.with.restrictions': 'Aprovar com restrição',\n 'label.inspection.reject': 'Rejeitar',\n 'label.inspection.attachment': 'Anexo',\n 'label.inspection.status': 'Situação',\n 'label.inspection.export': 'Exportar',\n 'label.inspection.approved': 'Aprovado',\n 'label.inspection.rejected': 'Rejeitado',\n 'label.inspection.pending': 'Pendente de aprovação',\n 'label.inspection.full.report': 'Relatório completo',\n 'label.inspection.summary.report': 'Relatório resumido',\n 'label.inspection.waiting.approval': 'Aguardando aprovação',\n 'label.inspection.none': 'Nenhum',\n 'label.inspection.status.approved': 'Aprovado',\n 'label.inspection.status.approved.restrictions': 'Aprovado com restrição',\n 'label.inspection.status.rejected': 'Rejeitado',\n 'label.inspection.delete.status.error': \"Item já foi aprovado ou rejeitado e não pode ser removido.\",\n 'ort.inspection.delete.error.msg': 'Ocorreu um erro ao tentar remover a inspeção.',\n 'ort.inspection.delete.success.msg': 'Inspeção removida com sucesso.',\n 'ort.inspection.metric.mean.label': 'Média',\n 'ort.inspection.metric.stdev.label': 'Stdev',\n 'ort.inspection.metric.range.label': 'Intervalo',\n 'ort.inspection.metric.cp.label': 'Cp',\n 'ort.inspection.metric.cpk.label': 'Cpk',\n 'ort.inspection.metric.qualityyeld.label': 'Rendimento de Qualidade',\n 'ort.inspection.inspect.label': 'Inspecionado',\n 'ort.inspection.inspect': 'Inspecionar',\n 'ort.inspection.findings.label': 'Resultado da Inspeção',\n 'ort.inspection.reference.label': 'Referências',\n 'ort.inspection.load.ort.error.msg': 'Ocorreu um erro ao tentar carregar a ORT.',\n 'ort.inspection.vendor.hint.msg': 'Para visualizar a lista de fornecedores, selecione uma ORT.',\n 'ort.inspection.lot.traceability.duplicated.msg': 'Data ou código já inserido na lista de rastreabilidade do lote.',\n 'ort.inspection.lot.traceability.empty.msg': 'Ao menos um campo deve ser preenchido.',\n 'ort.inspection.itemtemplate.load.error.msg': 'Ocorreu um erro ao tentar carregar a lista de subtipos.',\n 'ort.inspection.load.combo.subtype.error': 'Ocorreu um erro ao tentar carregar a listagem de subtipos.',\n 'ort.inspection.save.success.msg': 'A inspeção foi salva com sucesso.',\n 'ort.inspection.save.error.msg': 'Ocorreu um erro ao tentar salvar a inspeção.',\n 'ort.status.search.placeholder': 'Buscar pela situação',\n 'ort.label.inspection.date.output': 'Data de saída',\n 'ort.inspection.samples.label': 'Amostras',\n 'ort.inspection.conclusion.label': 'Conclusão',\n 'ort.inspection.msg.error.list': 'Ocorreu um erro ao tentar carregar a lista de inspeção.',\n 'ort.number.search.placeholder': 'Busque pelo número do ORT',\n 'ort.inspection.not.have.template': 'Este template não possui tipo de inspeção cadastrado.'\n });\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('OrtInspectionService', OrtInspectionService);\n\n var BASE = '/ort-inspection/';\n /** @ngInject */\n function OrtInspectionService($window, $injector, $q, ConfigurationService) {\n return {\n\n loadOrt: function (filterParams) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + \"load-ort/\", {\n params: filterParams\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n saveOrtinspection: function (ortInspection) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + BASE, ortInspection, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n saveInspectionSubtype: function (ortInspection) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + BASE + \"save-inspection-subtype\", ortInspection, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getById: function (Id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + 'byId/' + Id, {\n\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n\n\n loadItemTemplate: function (Id, InspectionId) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + 'itemTemplate/byId/' + Id + '/' + InspectionId, {\n\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n listWithParams: function (filterParams) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE, {\n params: filterParams,\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n export: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + '/export/' + id, {\n responseType: 'arraybuffer'\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n exportXlsReport: function (iqcReport) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + 'export-excel/', {\n params: iqcReport,\n responseType: 'arraybuffer'\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n delete: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + BASE + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n loadOrtAttachmentsByInspection: function (InspectionId) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + 'loadPartAttachments/' + InspectionId, {\n\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n\n };\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(OrtInspectionRouter);\n\n /** @ngInject */\n function OrtInspectionRouter($stateProvider) {\n\n $stateProvider.state('ort-inspection-list', {\n url: '/ort-inspection',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/ort/ort-inspection/ort-inspection-list.html',\n controller: 'OrtInspectionListController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.ort'\n },\n authorize: true\n });\n\n $stateProvider.state('ort-inspection-create', {\n url: '/ort-inspection/create',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/ort/ort-inspection/ort-inspection-edit.html',\n controller: 'OrtInspectionEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.ort'\n },\n authorize: true\n });\n\n $stateProvider.state('ort-inspection-edit', {\n url: '/ort-inspection/edit/:Id',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/ort/ort-inspection/ort-inspection-edit.html',\n controller: 'OrtInspectionEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.ort'\n },\n authorize: true\n });\n\n $stateProvider.state('ort-inspection-inspect', {\n url: '/ort-inspection-inspect/:Id/:InspectionId',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/ort/ort-inspection/inspect-action/ort-inspection-inspect.html',\n controller: 'OrtInspectActionController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.ort'\n },\n authorize: true\n });\n\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('OrtInspectionListController', OrtInspectionListController);\n\n function OrtInspectionListController(OrtInspectionService, ToastUtil, $state, $translate, AuthService, $log,\n moment, $scope, DefaultService, $document) {\n\n var vm = this;\n var exporting = false;\n \n vm.itensPerPageList = [\n {name: '5', value: 5, before: 0, after: 6}, \n {name: '10', value: 10, before: 5, after: 11}, \n {name: '20', value: 20, before: 10, after: 21}, \n {name: '30', value: 30, before: 20, after: 31}, \n {name: '40', value: 40, before: 30, after: 41}, \n {name: '50', value: 50, before: 40, after: 51}]\n\n vm.itemPerPage = vm.itensPerPageList[0];\n\n var profilePermission = {\n CanAdd: false,\n CanEdit: false,\n CanDelete: false,\n CanView: false,\n CanApprove: false,\n CanExport: false\n }\n\n var finalStatus = {\n ONGOING: 0,\n WAITINGAPPROVAL: 1,\n APPROVED: 2,\n RESTRICTIONS: 3,\n REJECT: 4\n }\n\n vm.statusList = [{\n Value: finalStatus.ONGOING,\n Title: \"label.ongoing\"\n },\n {\n Value: finalStatus.WAITINGAPPROVAL,\n Title: \"label.inspection.waiting.approval\"\n },\n {\n Value: finalStatus.APPROVED,\n Title: \"label.inspection.approved\"\n },\n {\n Value: finalStatus.RESTRICTIONS,\n Title: \"label.inspection.status.approved.restrictions\"\n },\n {\n Value: finalStatus.REJECT,\n Title: \"label.inspection.status.rejected\"\n }\n ];\n\n vm.searchParams = {\n Variant: \"\",\n OrtNumber: \"\",\n EntryDate: \"\",\n Status: '-1',\n BusinessId: AuthService.getBusinessId(),\n Page: 1,\n MaxPerPage: vm.itemPerPage.value\n };\n\n vm.initTabConfig = {\n isApprover: profilePermission.CanApprove,\n itemSelected: '1'\n }\n\n /** ListView Attributes */\n vm.listModel = {};\n vm.totalList = 0;\n\n vm.shouldShow = function (item) {\n if(vm.totalList > 0 && item != undefined) {\n return vm.totalList >= item.value || (vm.totalList < item.after && vm.totalList > item.before);\n }\n return false;\n }\n \n vm.changeItemsPerPage = function() {\n if ( vm.itemPerPage == null ) {\n vm.itemPerPage = vm.itensPerPageList[0];\n }\n vm.searchParams.Page = 1;\n vm.searchParams.MaxPerPage = vm.itemPerPage.value;\n vm.searchInspection()\n }\n\n\n vm.create = function () {\n if (profilePermission.CanAdd) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('ort-inspection-create', {});\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n }\n\n vm.resolveStatusCss = function (status) {\n var result = \"\";\n\n switch (status) {\n case finalStatus.WAITINGAPPROVAL:\n result = 'ng-binding label label-pending';\n break;\n case finalStatus.ONGOING:\n result = 'ng-binding label label-ongoing';\n break;\n case finalStatus.APPROVED:\n result = 'ng-binding label label-approved';\n break;\n case finalStatus.RESTRICTIONS:\n result = 'ng-binding label label-approved';\n break;\n case finalStatus.REJECT:\n result = 'ng-binding label label-rejected';\n break;\n }\n\n return result;\n }\n\n vm.resolveStatus = function (status) {\n switch (status) {\n case finalStatus.ONGOING:\n return $translate.instant('label.ongoing');\n case finalStatus.WAITINGAPPROVAL:\n return $translate.instant('label.inspection.waiting.approval');\n case finalStatus.APPROVED:\n return $translate.instant('label.inspection.status.approved');\n case finalStatus.RESTRICTIONS:\n return $translate.instant('label.inspection.status.approved.restrictions');\n case finalStatus.REJECT:\n return $translate.instant('label.inspection.status.rejected');\n }\n }\n\n function init() {\n loadProfileModules();\n }\n\n vm.edit = function (id) {\n if (profilePermission.CanEdit) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('ort-inspection-edit', {\n Id: id\n });\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n }\n\n vm.isShowExportButton = function (item) {\n var isShow = false;\n if (item.Status != finalStatus.WAITINGAPPROVAL && item.Status != finalStatus.ONGOING) {\n isShow = true;\n }\n return isShow;\n }\n\n vm.export = function (id) {\n if (profilePermission.CanExport) {\n if (!exporting) {\n exporting = true;\n\n OrtInspectionService.export(id).then(function (response) {\n var newFile = new Blob([response], {\n type: 'application/pdf'\n });\n var fileURL = URL.createObjectURL(newFile);\n var date = moment().format(\"DD_MM_YYYY_HH_mm_ss\");\n var a = $document[0].createElement(\"a\");\n $document[0].body.appendChild(a);\n a.style = \"display: none\";\n a.href = fileURL;\n a.download = \"On-Going_Reliability_Testing\" + AuthService.getBusinessName() + \"_\" + date + \".pdf\";\n\n a.click();\n exporting = false;\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"service.load.error\"), ToastUtil.ToastType.ERROR);\n exporting = false;\n });\n }\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n }\n\n vm.exportExcel = function (id) {\n if (profilePermission.CanExport) {\n if (!exporting) {\n exporting = true;\n var xlsReport = {};\n xlsReport.Id = id;\n xlsReport.Business = AuthService.getBusinessName();\n xlsReport.Company = AuthService.getCompanyName();\n //// xlsReport.Language = $translate.use();\n OrtInspectionService.exportXlsReport(xlsReport)\n .then(function (response) {\n\n var date = moment().format(\"DD_MM_YYYY_HH_mm_ss\");\n\n var newFIle = new Blob([response], {\n type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\n });\n var fileURL = URL.createObjectURL(newFIle);\n var a = $document[0].createElement(\"a\");\n $document[0].body.appendChild(a);\n a.style = \"display: none\";\n a.href = fileURL;\n a.download = \"On-Going_Reliability_Testing_\" + AuthService.getBusinessName() + \"_\" + date + \".xlsx\";\n a.click();\n vm.disableExport = false;\n exporting = false;\n\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"service.load.error\"), ToastUtil.ToastType.ERROR);\n vm.disableExport = false;\n exporting = false;\n });\n }\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n }\n\n vm.delete = function (id, status) {\n if (profilePermission.CanDelete) {\n if (status == finalStatus.WAITINGAPPROVAL || status == finalStatus.ONGOING) {\n OrtInspectionService.delete(id).then(function () {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n vm.searchInspection();\n ToastUtil.showToastMessage($translate.instant(\"ort.inspection.delete.success.msg\"), ToastUtil.ToastType.SUCCESS);\n }).catch(function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized || error.status == $scope.HttpStatusCodeConflict) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"ort.inspection.delete.error.msg\"), ToastUtil.ToastType.ERROR);\n }\n });\n } else {\n ToastUtil.showToastMessage($translate.instant('label.inspection.delete.status.error'), ToastUtil.ToastType.WARN);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n }\n\n vm.clearSearchFields = function () {\n vm.searchParams.Variant = \"\";\n vm.searchParams.EntryDate = \"\";\n vm.searchParams.OrtNumber = \"\";\n vm.searchParams.Status = \"-1\"\n };\n\n vm.searchInspection = function () {\n if (sessionStorage.getItem(\"searchParams\")) {\n vm.searchParams = JSON.parse(sessionStorage.getItem(\"searchParams\"));\n sessionStorage.removeItem(\"searchParams\");\n vm.itensPerPageList.forEach(function(element) {\n if (element.value == vm.searchParams.MaxPerPage) {\n vm.itemPerPage = element;\n return;\n }\n });\n }\n\n var searchParamsCopy = angular.copy(vm.searchParams);\n\n if (searchParamsCopy.Variant) {\n searchParamsCopy.Variant = searchParamsCopy.Variant.Id;\n }\n\n if (searchParamsCopy.EntryDate) {\n searchParamsCopy.EntryDate = moment(searchParamsCopy.EntryDate).format('DD/MM/YYYY');\n } else {\n searchParamsCopy.EntryDate = null;\n }\n\n if (vm.searchParams.Status == null) {\n searchParamsCopy.Status = -1;\n }\n\n OrtInspectionService.listWithParams(searchParamsCopy)\n .then(function (response) {\n vm.listModel = response.resultList;\n vm.totalList = response.total;\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n if (error.data && error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(\"ort.inspection.msg.error.list\"), ToastUtil.ToastType.ERROR);\n }\n }\n vm.clearSearchFields();\n });\n }\n\n function loadProfileModules() {\n var profileModule = {};\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.ort;\n DefaultService.loadModules(profileModule).then(function (response) {\n profilePermission = angular.copy(response);\n vm.initTabConfig.isApprover = profilePermission.CanApprove;\n if (profilePermission.CanView) {\n vm.searchInspection();\n } else {\n $state.go('not-authorized', {});\n }\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n });\n }\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('OrtInspectionEditController', OrtInspectionEditController);\n\n function OrtInspectionEditController(OrtInspectionService, $window, $interval, ToastUtil, $stateParams, $state,\n $translate, $scope, $log, moment, AuthService, DefaultService, $document) {\n\n var vm = this;\n\n vm.profilePermission = {\n CanAdd: false,\n CanEdit: false,\n CanDelete: false,\n CanView: false,\n CanApprove: false,\n CanExport: false,\n CanConsult: false\n }\n\n vm.OrtStatus = {\n ONGOING: 0,\n WAITINGAPPROVAL: 1,\n APPROVED: 2,\n RESTRICTIONS: 3,\n REJECT: 4\n };\n\n vm.emailList = [];\n vm.inspection = {\n Business: {\n Id: AuthService.getBusinessId(),\n Name: AuthService.getBusinessName()\n },\n Ort: {},\n CreatedBy: getCurrentUser(),\n Variant: '',\n Model: '',\n Client: '',\n Project: '',\n OrtInspectionLotTraceabilities: [],\n OrtInspectionResults: [],\n OrtInspectionRemarks: [],\n OrtInspectionNotifies: [],\n OrtInspectionGroupedResults: [],\n Status: vm.OrtStatus.ONGOING,\n OutputDate: ''\n }\n\n vm.lotTraceability = {};\n /** Remark Panel */\n vm.remarkObj = {\n Type: \"\",\n Attachments: []\n };\n\n vm.comboSubtypeList = [];\n\n /** Flag to indicate remark edition. */\n vm.isEditRemark = false;\n\n vm.idToEdit = undefined;\n\n var exporting = false;\n\n /**\n * returns logged user.\n * @returns {{Name: *, Id: *}}\n */\n function getCurrentUser() {\n var createdBy = {\n Name: $window.localStorage.aliasAqms,\n Id: $window.localStorage.userID\n };\n\n return createdBy;\n }\n\n /**\n * Load ort number according selected id.\n */\n vm.loadOrtNumber = function () {\n if (vm.inspection.Variant != null && vm.inspection.Variant.Id != undefined && !vm.idToEdit) {\n var searchParams = {\n VariantId: vm.inspection.Variant.Id\n };\n\n OrtInspectionService.loadOrt(searchParams).then(function (response) {\n if (response.CurrentOrtInspectionTemplate) {\n vm.inspection.Ort = angular.copy(response);\n var metricObj = {\n OKMetric: 0,\n NOKMetric: 0\n };\n\n vm.inspection.OrtInspectionGroupedResult = [];\n\n angular.forEach(vm.inspection.Ort.CurrentOrtInspectionTemplate.OrtInspectionTemplateTypes, function (type) {\n angular.forEach(type.OrtInspectionItemTemplates, function (itemTemp) {\n itemTemp.Metric = angular.copy(metricObj);\n });\n });\n } else {\n vm.inspection.Ort = {};\n vm.inspection.Variant = '';\n ToastUtil.showToastMessage($translate.instant(\"ort.inspection.not.have.template\"), ToastUtil.ToastType.WARN);\n }\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"ort.inspection.load.ort.error.msg\"), ToastUtil.ToastType.WARN);\n });\n\n }\n }\n\n /**\n * Add Lot traceability to inspection.\n * It must add even if only one field is filled.\n */\n vm.addLotTraceability = function () {\n vm.lotTraceability.Code = (angular.isUndefined(vm.lotTraceability.Code) || vm.lotTraceability.Code == null || vm.lotTraceability.Code.trim().length == 0) ? null : vm.lotTraceability.Code;\n if (((angular.isDefined(vm.lotTraceability.DateTemp) && vm.lotTraceability.DateTemp != null) || vm.lotTraceability.Code != null)) {\n if (!itemAlreadyExistsInLotTraceability(vm.lotTraceability.DateTemp, vm.lotTraceability.Code, vm.lotTraceability.Id, vm.lotTraceability.IdTemp)) {\n\n if (vm.lotTraceability.Id == undefined && vm.lotTraceability.IdTemp == undefined) {\n vm.lotTraceability.IdTemp = new Date().getTime();\n }\n\n vm.lotTraceability.Date = (angular.isDefined(vm.lotTraceability.DateTemp) && vm.lotTraceability.DateTemp != null) ? moment(angular.copy(vm.lotTraceability.DateTemp)).format('DD/MM/YYYY') : undefined;\n\n vm.lotTraceability.Description = ((vm.lotTraceability.Code) ? vm.lotTraceability.Code : vm.lotTraceability.Date);\n\n vm.inspection.OrtInspectionLotTraceabilities.push(angular.copy(vm.lotTraceability));\n\n vm.lotTraceability = {};\n isLotTraceAbilityEdit = false;\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(\"ort.inspection.lot.traceability.empty.msg\"), ToastUtil.ToastType.WARN);\n }\n\n }\n\n vm.editLotTraceability = function (item) {\n vm.lotTraceability = angular.copy(item);\n\n if (vm.lotTraceability.Date != null) {\n var lotDate = moment(vm.lotTraceability.Date, 'DD/MM/YYYY');\n vm.lotTraceability.DateTemp = new Date(lotDate.year(), lotDate.month(), lotDate.date());\n }\n isLotTraceAbilityEdit = true;\n }\n\n vm.removeLotTraceability = function (obj) {\n for (var i = 0; i < vm.inspection.OrtInspectionLotTraceabilities.length; i++) {\n var item = vm.inspection.OrtInspectionLotTraceabilities[i];\n if ((item.Id != undefined && item.Id == obj.Id) || (item.IdTemp != undefined && item.IdTemp == obj.IdTemp)) {\n vm.inspection.OrtInspectionLotTraceabilities.splice(i, 1);\n break;\n }\n }\n }\n\n vm.inspectItem = function (id) {\n $state.go('ort-inspection-inspect', {\n Id: id,\n InspectionId: angular.copy(vm.inspection.Id)\n });\n }\n\n vm.MetricType = {\n INSPECT: 1,\n SAMPLES: 2,\n CONCLUSION: 3,\n OK: 4,\n NOK: 5\n }\n\n vm.getMetricValue = function (obj, merticType) {\n var value = 0;\n if (vm.inspection.OrtInspectionGroupedResults != null && vm.inspection.OrtInspectionGroupedResults.length > 0)\n for (var i = 0; i < vm.inspection.OrtInspectionGroupedResults.length; i++) {\n var groupResu = vm.inspection.OrtInspectionGroupedResults[i];\n if (groupResu.OrtInspectionItemTemplate.Id == obj.Id) {\n switch (merticType) {\n case vm.MetricType.OK:\n value = groupResu.OKMetric;\n break;\n case vm.MetricType.NOK:\n value = groupResu.NOKMetric;\n break;\n case vm.MetricType.CONCLUSION:\n value = vm.getConclusion(obj, groupResu);\n break;\n case vm.MetricType.INSPECT:\n value = groupResu.TotalInspected;\n break;\n }\n }\n }\n return value;\n }\n\n vm.getConclusion = function (item, groupResu) {\n var valueReturn = parseFloat((groupResu.TotalInspected / item.TestInspectionRule.Value) * 100).toFixed(1);\n if (valueReturn < 100) {\n vm.inspection.conclusion = true;\n }\n return valueReturn;\n }\n\n /**\n * Checks if item is already in lot traceability list.\n * if code is null, validate only Date, else validate Code.\n * @param date\n * @param code\n * @returns {boolean}\n */\n var isLotTraceAbilityEdit = false;\n\n function itemAlreadyExistsInLotTraceability(date, code, id, idTemp) {\n var exists = false;\n if (code == null) {\n\n for (var i = 0; i < vm.inspection.OrtInspectionLotTraceabilities.length; i++) {\n var item = vm.inspection.OrtInspectionLotTraceabilities[i];\n if (item.Code == null && item.DateTemp + \"\" === date + \"\") {\n exists = true;\n }\n if (((item.Id != undefined && item.Id == id) || item.IdTemp == idTemp) && isLotTraceAbilityEdit) {\n vm.inspection.OrtInspectionLotTraceabilities.splice(i, 1);\n exists = false;\n break;\n }\n }\n } else {\n\n for (var j = 0; j < vm.inspection.OrtInspectionLotTraceabilities.length; j++) {\n var lot = vm.inspection.OrtInspectionLotTraceabilities[j];\n if (lot.Code == code) {\n exists = true;\n }\n if (((lot.Id != undefined && lot.Id == id) || (lot.IdTemp != undefined && lot.IdTemp == idTemp)) && isLotTraceAbilityEdit) {\n vm.inspection.OrtInspectionLotTraceabilities.splice(j, 1);\n exists = false;\n break;\n }\n }\n }\n\n if (exists)\n ToastUtil.showToastMessage($translate.instant(\"ort.inspection.lot.traceability.duplicated.msg\"), ToastUtil.ToastType.WARN);\n\n return exists;\n }\n\n function watchOrt() {\n $scope.$watch(\"ctrl.inspection.Variant\", function () {\n $interval(updateInspectionOrt, 250, 1);\n });\n }\n\n function updateInspectionOrt() {\n if (angular.isUndefined(vm.inspection.Variant)) {\n vm.inspection.Ort = {};\n }\n }\n\n vm.sendOrtToApproval = function () {\n if (vm.inspection.OrtInspectionLotTraceabilities.length > 0) {\n vm.inspection.Status = vm.OrtStatus.WAITINGAPPROVAL;\n vm.save(true);\n }\n }\n\n vm.isSendApprovalButtonDisabled = function () {\n var disabled = false;\n if (vm.isOrtFinished() || vm.inspection.OrtInspectionGroupedResults.length == 0 || vm.inspection.OrtInspectionGroupedResults.length != getTotalSubtypes() ||\n isSaving || vm.inspection.conclusion) {\n disabled = true;\n }\n\n return disabled;\n }\n\n var lastStatus = -1;\n var isSaving = false;\n vm.save = function (redirectToList) {\n if (vm.inspection.OrtInspectionLotTraceabilities.length > 0) {\n\n isSaving = true;\n lastStatus = angular.copy(vm.inspection.Status);\n handleInspectionObjBeforeSave();\n OrtInspectionService.saveOrtinspection(vm.inspection).then(function (response) {\n ToastUtil.showToastMessage($translate.instant(\"ort.inspection.save.success.msg\"), ToastUtil.ToastType.SUCCESS);\n if (!redirectToList) {\n if (vm.inspection.Id && vm.inspection.Id > 0) {\n $state.go('ort-inspection-list', {});\n } else {\n vm.inspection.Id = angular.copy(response);\n $state.go('ort-inspection-edit', {\n Id: vm.inspection.Id\n });\n }\n } else {\n $state.go('ort-inspection-list', {});\n }\n isSaving = false;\n }).catch(function (error) {\n vm.inspection.Status = angular.copy(lastStatus);\n isSaving = false;\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"ort.inspection.save.error.msg\"), ToastUtil.ToastType.WARN);\n });\n }\n }\n\n vm.isShowExportButton = function () {\n var isShow = false;\n if (vm.inspection.Status != vm.OrtStatus.WAITINGAPPROVAL && vm.inspection.Status != vm.OrtStatus.ONGOING) {\n isShow = true;\n }\n return isShow;\n }\n\n vm.export = function () {\n var id = vm.inspection.Id;\n if (vm.profilePermission.CanExport) {\n if (!exporting) {\n exporting = true;\n\n OrtInspectionService.export(id).then(function (response) {\n var newFile = new Blob([response], {\n type: 'application/pdf'\n });\n var fileURL = URL.createObjectURL(newFile);\n var date = moment().format(\"DD_MM_YYYY_HH_mm_ss\");\n var a = $document[0].createElement(\"a\");\n $document[0].body.appendChild(a);\n a.style = \"display: none\";\n a.href = fileURL;\n a.download = \"On-Going_Reliability_Testing_\" + AuthService.getBusinessName() + \"_\" + date + \".pdf\";\n\n a.click();\n exporting = false;\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"service.load.error\"), ToastUtil.ToastType.ERROR);\n exporting = false;\n });\n }\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n }\n\n vm.exportExcel = function () {\n if (vm.profilePermission.CanExport) {\n if (!exporting) {\n exporting = true;\n var xlsReport = {};\n xlsReport.Id = vm.inspection.Id;\n xlsReport.Business = AuthService.getBusinessName();\n xlsReport.Company = AuthService.getCompanyName();\n //// xlsReport.Language = $translate.use();\n OrtInspectionService.exportXlsReport(xlsReport)\n .then(function (response) {\n\n var date = moment().format(\"DD_MM_YYYY_HH_mm_ss\");\n\n var newFIle = new Blob([response], {\n type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\n });\n var fileURL = URL.createObjectURL(newFIle);\n var a = $document[0].createElement(\"a\");\n $document[0].body.appendChild(a);\n a.style = \"display: none\";\n a.href = fileURL;\n a.download = \"On-Going_Reliability_Testing_\" + AuthService.getBusinessName() + \"_\" + date + \".xlsx\";\n a.click();\n vm.disableExport = false;\n exporting = false;\n\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"service.load.error\"), ToastUtil.ToastType.ERROR);\n vm.disableExport = false;\n exporting = false;\n });\n }\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n }\n\n vm.goToInspectionList = function () {\n $state.go('ort-inspection-list', {});\n }\n\n vm.isOrtFinished = function () {\n var finished = false;\n if ((vm.inspection.Status != vm.OrtStatus.ONGOING && vm.inspection.Status != vm.OrtStatus.WAITINGAPPROVAL) && vm.profilePermission.CanApprove === false) {\n finished = true;\n }\n\n return finished;\n }\n\n /**\n * Return total of subtypes to inspection.\n * @returns {number}\n */\n function getTotalSubtypes() {\n var total = 0;\n\n if (vm.inspection.Ort.CurrentOrtInspectionTemplate != undefined) {\n angular.forEach(vm.inspection.Ort.CurrentOrtInspectionTemplate.OrtInspectionTemplateTypes, function (type) {\n angular.forEach(type.OrtInspectionItemTemplates, function () {\n total++;\n });\n });\n }\n\n return total;\n }\n\n /**\n * Handles Inspection before save.\n */\n function handleInspectionObjBeforeSave() {\n vm.inspection.OrtInspectionResults = [];\n vm.inspection.BatchDate = moment(angular.copy(vm.inspection.BatchDateTemp)).format('DD/MM/YYYY');\n vm.inspection.CreatedDate = moment(angular.copy(vm.inspection.CreatedDateTemp)).format('DD/MM/YYYY');\n\n if (vm.inspection.OutputDateTemp) {\n vm.inspection.OutputDate = moment(angular.copy(vm.inspection.OutputDateTemp)).format('DD/MM/YYYY');\n } else {\n vm.inspection.OutputDate = null;\n }\n\n if (vm.inspection.StatusTemp)\n vm.inspection.Status = angular.copy(vm.inspection.StatusTemp);\n\n vm.inspection.OrtInspectionNotifies = [];\n if (vm.emailList && vm.emailList != null && vm.emailList.length > 0) {\n angular.forEach(vm.emailList, function (email) {\n var ortInspectionNotify = {\n ExternalEmail: angular.copy(email)\n }\n vm.inspection.OrtInspectionNotifies.push(ortInspectionNotify);\n });\n }\n\n if (vm.inspection.Status != vm.OrtStatus.ONGOING && vm.inspection.Status != vm.OrtStatus.WAITINGAPPROVAL) {\n vm.inspection.ApprovedBy = getCurrentUser();\n vm.inspection.OutputDate = moment().format('DD/MM/YYYY');\n }\n }\n\n function handleInspectionObjToEdit() {\n vm.inspection.StatusTemp = angular.copy(vm.inspection.Status);\n\n //Handle CreatedDate, BatchDate and OutputDate\n if (vm.inspection.OutputDate) {\n var outputDate = moment(vm.inspection.OutputDate.substring(0, 10), 'DD/MM/YYYY');\n vm.inspection.OutputDate = new Date(outputDate.year(), outputDate.month(), outputDate.date());\n vm.inspection.OutputDateTemp = angular.copy(vm.inspection.OutputDate);\n }\n\n var createdDate = moment(vm.inspection.CreatedDate.substring(0, 10), 'DD/MM/YYYY');\n var BatchDate = moment(vm.inspection.BatchDate.substring(0, 10), 'DD/MM/YYYY');\n\n vm.inspection.CreatedDate = new Date(createdDate.year(), createdDate.month(), createdDate.date());\n vm.inspection.BatchDate = new Date(BatchDate.year(), BatchDate.month(), BatchDate.date());\n\n vm.inspection.BatchDateTemp = angular.copy(vm.inspection.BatchDate);\n vm.inspection.CreatedDateTemp = angular.copy(vm.inspection.CreatedDate);\n\n //Handle Lot traceability date.\n if (vm.inspection.OrtInspectionLotTraceabilities && vm.inspection.OrtInspectionLotTraceabilities != null && vm.inspection.OrtInspectionLotTraceabilities.length > 0) {\n angular.forEach(vm.inspection.OrtInspectionLotTraceabilities, function (lot) {\n if (lot.Date != null) {\n lot.DateTemp = moment(angular.copy(moment(lot.Date.substring(0, 10), 'DD/MM/YYYY')))._d;\n lot.Date = moment(angular.copy(moment(lot.Date.substring(0, 10), 'DD/MM/YYYY'))).format('DD/MM/YYYY');\n }\n lot.Description = ((lot.Code) ? lot.Code : lot.Date);\n });\n }\n\n //Handle EmailList\n angular.forEach(vm.inspection.OrtInspectionNotifies, function (item) {\n\n vm.emailList.push(angular.copy(item.ExternalEmail));\n });\n\n }\n\n function init() {\n loadProfileModules();\n }\n\n function loadOrtInspectionToEdit() {\n OrtInspectionService.getById(vm.idToEdit).then(function (response) {\n //Handle object\n vm.inspection = angular.copy(response);\n handleInspectionObjToEdit();\n\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"ort.load.error.msg\"), ToastUtil.ToastType.ERROR);\n });\n\n }\n\n vm.dateChange = function () {\n vm.inspection.Week = moment(vm.inspection.CreatedDateTemp).isoWeek();\n }\n\n function loadProfileModules() {\n var profileModule = {};\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.ort;\n DefaultService.loadModules(profileModule).then(function (response) {\n vm.profilePermission = angular.copy(response);\n vm.idToEdit = $stateParams.Id;\n if (vm.idToEdit) {\n if (!vm.profilePermission.CanEdit) {\n $state.go('not-authorized', {});\n } else {\n loadOrtInspectionToEdit();\n }\n } else {\n if (!vm.profilePermission.CanAdd) {\n $state.go('not-authorized', {});\n } else {\n vm.dateChange();\n watchOrt();\n }\n }\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n });\n }\n\n\n init();\n }\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *\n */\n function DivInputListOqcObaController($scope, ToastUtil, $translate) {\n\n var vm = this;\n\n vm.newItem = '';\n vm.showMsgDuplicateItens = false;\n\n vm.addNewItem = function () {\n vm.changeFn();\n if (vm.newItem.length > 0 && !listContainsItem(vm.list, vm.newItem)) {\n var obj = {\n Serial: vm.newItem,\n Type: vm.listType,\n OqcObaInspectionResult: {}\n\n };\n\n vm.list.unshift(obj);\n }\n\n vm.newItem = '';\n };\n\n vm.valueToShow = function (item) {\n return item[vm.valueToModel];\n };\n\n vm.remove = function (item) {\n var index = vm.list.indexOf(item);\n if (index > -1) {\n vm.list.splice(index, 1);\n vm.removedListener({\n item: item\n });\n vm.changeFn();\n }\n };\n\n vm.getRemoveDescription = function (item) {\n return $translate.instant('oqcoba.remove.inspection.alert').replace(\"#serial\", item.Serial);\n };\n\n var listContainsItem = function (list, item) {\n\n var isContain = false;\n\n angular.forEach(list, function (value) {\n if (value.Serial == item && value.Type == vm.listType) {\n if (vm.showMsgDuplicateItens) {\n ToastUtil.showToastMessage($translate.instant('defect.serial.duplicate').replace(\"$id\", item), ToastUtil.ToastType.WARN);\n }\n isContain = true;\n }\n\n });\n\n return isContain;\n };\n }\n\n function DivInputListOqcObaDirective() {\n return {\n bindToController: true,\n restrict: 'E',\n scope: {\n list: '=',\n titleLabel: '@',\n disableInput: '=',\n disableDelete: '=',\n isRequired: '=',\n valueToModel: '@',\n changeFn: '&',\n showHint: '@?',\n hintText: '@',\n showMsgDuplicateItens: '@?',\n listType: '@?',\n removedListener: '&',\n modelToFilter: '='\n },\n replace: true,\n templateUrl: \"app/oqc_oba/directive/div-input-list-oqc-oba.html\",\n controllerAs: 'ctrl',\n controller: 'DivInputListOqcObaController'\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('DivInputListOqcObaController', DivInputListOqcObaController)\n .directive('divInputListOqcOba', DivInputListOqcObaDirective);\n})();\n\n(function () {\n\n 'use strict';\n\n function NotificationButtonController(NotificationsService, ConfigurationService, $location, $timeout, $rootScope, IndexConstant, amMoment, $window) {\n var vm = this;\n vm.hasUnread = false\n vm.notifications = []\n vm.connection = null\n vm.animate = false\n\n vm.loadNotifications = function () {\n NotificationsService.list(5)\n .then(function (response) {\n vm.hasUnread = Number(response.NotRead) > 0;\n vm.notifications = response.Notifications\n if (vm.hasUnread) {\n vm.animate = true\n $timeout(function () {\n vm.animate = false\n }, 2000)\n }\n })\n }\n\n vm.connect = function () {\n vm.connection = new WebSocket(ConfigurationService.getWebsocketHost() + '/notifications');\n vm.connection.addEventListener('message', vm.receivedMsg)\n vm.connection.addEventListener('error', function (err) {\n console.error(err)\n });\n }\n\n vm.markAsRead = function (notification) {\n NotificationsService.markAsRead(notification.Id).then(function () {\n $location.path(notification.Path);\n vm.loadNotifications()\n })\n }\n\n vm.receivedMsg = function (message) {\n if (message.data === 'notifications:update') {\n vm.loadNotifications()\n }\n }\n\n vm.sendMsg = function (data) {\n vm.connection.send(data)\n }\n\n vm.updateLocale = function (event, locale) {\n amMoment.changeLocale(locale === 'pt' ? 'pt-br' : 'en')\n }\n\n function init() {\n vm.loadNotifications();\n vm.connect()\n $rootScope.$on(IndexConstant.localeChangeEvent, vm.updateLocale);\n vm.updateLocale(null, $window.localStorage.defaultLanguage)\n }\n\n init();\n }\n\n function NotificationButtonDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'NotificationButtonController',\n transclude: true,\n templateUrl: \"app/notification/notification-button/notification-button.html\",\n bindToController: true\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('NotificationButtonController', NotificationButtonController)\n .directive('notificationButton', NotificationButtonDirective);\n})();\n\n(function () {\n\n function ModalChangeBusinessController($scope) {\n\n var vm = this;\n\n vm.close = function () {\n $scope.parentDialog.undoBusinessChange();\n $scope.$dismiss();\n };\n\n vm.confirm = function () {\n $scope.parentDialog.doBusinessChange();\n $scope.$close('business-changed');\n };\n\n\n $scope.$on('modal.closing', function (event, reason) {\n if (!(reason == \"business-changed\")) {\n $scope.parentDialog.undoBusinessChange();\n }\n });\n }\n\n function ModalChangeBusinessDirective() {\n return {\n restrict: 'E',\n replace: true,\n templateUrl: \"app/modal/change-business/change-business.html\",\n controller: 'ModalChangeBusinessController',\n controllerAs: 'ctrl'\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('ModalChangeBusinessController', ModalChangeBusinessController)\n .directive('modalChangeBusiness', ModalChangeBusinessDirective);\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('LogisticsKPIService', LogisticsKPIService);\n\n var LOGISTICS_BASE = '/logistics/';\n\n /** @ngInject */\n function LogisticsKPIService($injector, $q, ConfigurationService) {\n return {\n\n listRateVariation: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + LOGISTICS_BASE + \"/kpi/graphic/rate-variation\", {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n listChannelPerformance: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + LOGISTICS_BASE + \"/kpi/graphic/channel-performance\", {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n listTransitTime: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + LOGISTICS_BASE + \"kpi/graphic/transit-time\", {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n listLandedVariation: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + LOGISTICS_BASE + \"/kpi/graphic/landed-variation\", {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n listFreightCost: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + LOGISTICS_BASE + \"kpi/list\", {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n listFreightCostGrouped: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + LOGISTICS_BASE + \"kpi/list/grouped\", {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n listLocalTransportFreigthCost: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + LOGISTICS_BASE + \"kpi/graphic/local-transport-freigth-cost\", {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n listInvoicesIssuedConsolidated: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + LOGISTICS_BASE + \"kpi/graphic/invoices-issued-consolidated\", {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n listNationalFreightCostAir: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + LOGISTICS_BASE + \"kpi/graphic/national-freight-cost-air\", {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n listGrossWeightLspOutbound: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + LOGISTICS_BASE + \"kpi/graphic/gross-weight-lsp-outbound\", {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n };\n }\n})();\n\n(function () {\n 'use_strict';\n\n angular\n .module('aqmsFrontend')\n .controller('LogisticsKpiListController', LogisticsKpiListController);\n\n function LogisticsKpiListController($scope, $translate, $filter, $state, $window,\n LogisticsService, ToastUtil, moment,\n $rootScope, Idle, IndexConstant, $q, $interval, $log) {\n\n var vm = this;\n vm.productiveChartData = {\n FreightCostList: [],\n Params: {\n Year: null,\n Project: null,\n Frequency: null\n }\n };\n vm.unproductiveChartData = angular.copy(vm.productiveChartData);\n vm.accumulatedChartData = angular.copy(vm.productiveChartData);\n vm.transitTimeChartData = angular.copy(vm.productiveChartData);\n vm.grossChartData = angular.copy(vm.productiveChartData);\n vm.localTransportFreightCostChartData = angular.copy(vm.productiveChartData);\n vm.nationalFreightCostAirChartData = angular.copy(vm.productiveChartData);\n vm.invoicesIssuedConsolidatedChartData = angular.copy(vm.productiveChartData);\n vm.grossWeightLspsOutboundChartData = angular.copy(vm.productiveChartData);\n vm.grossWeightLspsOutboundRoadChartData = angular.copy(vm.productiveChartData);\n vm.nationalFreightCostAirInboundChartData = angular.copy(vm.productiveChartData);\n vm.nationalFreightCostRoadOutboundChartData = angular.copy(vm.productiveChartData);\n vm.landedChartData = {\n LandedVariationList: [],\n Params: {\n Year: null,\n Project: null,\n Frequency: null\n }\n };\n vm.rateChartData = {\n RateVariationList: [],\n Params: {\n Year: null,\n Project: null,\n Frequency: null\n }\n };\n vm.channelChartData = {\n FreightCostList: [],\n Params: {\n Year: null,\n Project: null,\n Frequency: null\n }\n };\n\n var intervalEvent = null;\n vm.autoIntervalModel = {name: '02 min', value: (2 * 60 * 1000)};\n vm.view = \"list\";\n\n vm.maxWeekOfYear = 0;\n vm.formFreightCost = undefined;\n vm.FrequencyTypeHeader = null;\n vm.FrequencyType = 0;\n var dateNow = new Date();\n var yearDate = moment(dateNow).year();\n var weekOfYear = parseInt(moment(dateNow).format(\"w\"));\n vm.maxWeekOfYear = weeksInYear(yearDate);\n vm.MonthList = LogisticsService.getMonthOptions();\n vm.FrequencyList = LogisticsService.getFrequencyOptions();\n vm.ProjectList = LogisticsService.getProjectOptions();\n\n vm.profile = {\n canAdd: false,\n canEdit: false,\n canDelete: false,\n canView: false,\n hasLoad: false,\n canApprove: false,\n canExport: false\n };\n\n vm.itensPerPageList = [\n {name: '5', value: 5, before: 0, after: 6},\n {name: '10', value: 10, before: 5, after: 11},\n {name: '20', value: 20, before: 10, after: 21},\n {name: '30', value: 30, before: 20, after: 31},\n {name: '40', value: 40, before: 30, after: 41},\n {name: '50', value: 50, before: 40, after: 51}];\n\n vm.itemPerPage = vm.itensPerPageList[0];\n vm.totalLista = 0;\n\n vm.searchParam = {\n Page: 1,\n MaxPerPage: vm.itemPerPage.value,\n Year: yearDate,\n Frequency: vm.FrequencyList[0].Value,\n Start: weekOfYear,\n End: (weekOfYear + 4) > vm.maxWeekOfYear ? vm.maxWeekOfYear : (weekOfYear + 4),\n Project: vm.ProjectList[0].Value\n }\n\n /** Filled only when all promisses finishes */\n vm.carouselList = [];\n /** Filled Async */\n vm.carouselListTemp = [];\n vm.currentSlide = 0;\n\n vm.dataRefreshIntervalList = [{\n name: '05 min',\n value: (5 * 60 * 1000)\n }, {\n name: '10 min',\n value: (10 * 60 * 1000)\n }, {\n name: '30 min',\n value: (30 * 60 * 1000)\n }];\n\n vm.dataRefreshIntervalModel = vm.dataRefreshIntervalList[0];\n\n // data to graphic.\n vm.topOccurrences = [];\n vm.landedVariationList = [];\n\n vm.Types = {\n PRODUCTIVE_LANDED_COST: 0,\n UNPRODUCTIVE_LANDED_COST: 1,\n LANDED_VARIATION: 2,\n RATE_VARIATION: 3,\n MODE_SPEND: 4,\n CARGO_RATIO: 5,\n TOTAL_FOB: 6,\n TOTAL_CHARGEABLE_WEIGHT: 7,\n TOTAL_LSP_CHARGEABLE_WEIGHT: 8,\n GROSS_CHARGEABLE_WEIGHT: 9,\n LSP_CHARGEABLE_WEIGHT: 10,\n CHANNEL_PERFORMANCE: 11,\n TRANSIT_TIME: 12,\n LOCAL_TRANSPORT_FREIGHT_COST: 13,\n NATIONAL_FREIGHT_COST: 14,\n GROSS_WEIGHT_LSP_OUTBOUND: 15,\n GROSS_WEIGHT_LSP_OUTBOUND_ROAD: 16,\n NATIONAL_FREIGHT_COST_INBOUND: 17,\n NATIONAL_FREIGHT_COST_ROAD_OUT: 18,\n INVOICES_ISSUED_CONSOLIDATED: 19\n };\n\n var _productiveChartTypes = [vm.Types.PRODUCTIVE_LANDED_COST, vm.Types.MODE_SPEND, vm.Types.CARGO_RATIO];\n var _accumulatedChartTypes = [vm.Types.TOTAL_FOB, vm.Types.TOTAL_CHARGEABLE_WEIGHT];\n var dataRefreshInterval = null;\n\n vm.ChartTypes = [\n {\n TYPE: vm.Types.PRODUCTIVE_LANDED_COST,\n HEADER: 'logistics.kpi.graphics.productive.landed.cost',\n TITLE: 'logistics.kpi.graphics.productive.landed.cost.title',\n SHOW: true,\n MONTH: true,\n WEEK: true\n },\n {\n TYPE: vm.Types.UNPRODUCTIVE_LANDED_COST,\n HEADER: 'logistics.kpi.graphics.unproductive.landed.cost',\n TITLE: 'logistics.kpi.graphics.unproductive.landed.cost.title',\n SHOW: true,\n MONTH: true,\n WEEK: true\n },\n {\n TYPE: vm.Types.LANDED_VARIATION,\n HEADER: 'logistics.kpi.graphics.landed.variation',\n TITLE: 'logistics.kpi.graphics.landed.variation.title',\n SHOW: true,\n MONTH: true,\n WEEK: true\n },\n {\n TYPE: vm.Types.RATE_VARIATION,\n HEADER: 'logistics.kpi.graphics.rate.variation',\n TITLE: 'logistics.kpi.graphics.rate.variation.title',\n SHOW: true,\n MONTH: true,\n WEEK: true\n },\n {\n TYPE: vm.Types.MODE_SPEND,\n HEADER: 'logistics.kpi.graphics.mode.spend',\n TITLE: 'logistics.kpi.graphics.mode.spend.title',\n SHOW: true,\n MONTH: true,\n WEEK: true\n },\n {\n TYPE: vm.Types.CARGO_RATIO,\n HEADER: 'logistics.kpi.graphics.cargo.ratio',\n TITLE: 'logistics.kpi.graphics.cargo.ratio.title',\n SHOW: true,\n MONTH: true,\n WEEK: true\n },\n {\n TYPE: vm.Types.TOTAL_FOB,\n HEADER: 'logistics.kpi.graphics.total.fob',\n TITLE: 'logistics.kpi.graphics.total.fob.title',\n SHOW: true,\n MONTH: true,\n WEEK: true\n },\n {\n TYPE: vm.Types.TOTAL_CHARGEABLE_WEIGHT,\n HEADER: 'logistics.kpi.graphics.total.chargeable',\n TITLE: 'logistics.kpi.graphics.total.chargeable.title',\n SHOW: true,\n MONTH: true,\n WEEK: true\n },\n {\n TYPE: vm.Types.TOTAL_LSP_CHARGEABLE_WEIGHT,\n HEADER: 'logistics.kpi.graphics.total.lsp.chargeable',\n TITLE: 'logistics.kpi.graphics.total.lsp.chargeable.title',\n SHOW: true,\n MONTH: true,\n WEEK: true\n },\n {\n TYPE: vm.Types.GROSS_CHARGEABLE_WEIGHT,\n HEADER: 'logistics.kpi.graphics.gross.chargeable',\n TITLE: 'logistics.kpi.graphics.gross.chargeable.title',\n SHOW: true,\n MONTH: true,\n WEEK: true\n },\n {\n TYPE: vm.Types.LSP_CHARGEABLE_WEIGHT,\n HEADER: 'logistics.kpi.graphics.lsp.chargeable',\n TITLE: 'logistics.kpi.graphics.lsp.chargeable.title',\n SHOW: true,\n MONTH: true,\n WEEK: true\n },\n {\n TYPE: vm.Types.CHANNEL_PERFORMANCE,\n HEADER: 'logistics.kpi.graphics.channel.performance',\n TITLE: 'logistics.kpi.graphics.channel.performance.title',\n SHOW: true,\n MONTH: true,\n WEEK: true\n },\n {\n TYPE: vm.Types.TRANSIT_TIME,\n HEADER: 'logistics.kpi.graphics.transit.time',\n TITLE: 'logistics.kpi.graphics.transit.time.title',\n SHOW: true,\n MONTH: true,\n WEEK: false\n },\n {\n TYPE: vm.Types.LOCAL_TRANSPORT_FREIGHT_COST,\n HEADER: 'logistics.kpi.graphics.local.transport.freight.cost',\n TITLE: 'logistics.kpi.graphics.local.transport.freight.cost.title',\n SHOW: true,\n MONTH: true,\n WEEK: false\n },\n {\n TYPE: vm.Types.NATIONAL_FREIGHT_COST,\n HEADER: 'logistics.kpi.graphics.national.freight.cost.air',\n TITLE: 'logistics.kpi.graphics.national.freight.cost.air.title',\n SHOW: true,\n MONTH: true,\n WEEK: false\n },\n {\n TYPE: vm.Types.GROSS_WEIGHT_LSP_OUTBOUND,\n HEADER: 'logistics.kpi.graphics.gross.weight.lsp.outbound',\n TITLE: 'logistics.kpi.graphics.gross.weight.lsp.outbound.title',\n SHOW: true,\n MONTH: true,\n WEEK: false\n },\n {\n TYPE: vm.Types.GROSS_WEIGHT_LSP_OUTBOUND_ROAD,\n HEADER: 'logistics.kpi.graphics.gross.weight.lsp.outbound.road',\n TITLE: 'logistics.kpi.graphics.gross.weight.lsp.outbound.road.title',\n SHOW: true,\n MONTH: true,\n WEEK: false\n },\n {\n TYPE: vm.Types.NATIONAL_FREIGHT_COST_INBOUND,\n HEADER: 'logistics.kpi.graphics.national.freight.cost.air.inbound',\n TITLE: 'logistics.kpi.graphics.national.freight.cost.air.inbound.title',\n SHOW: true,\n MONTH: true,\n WEEK: false\n },\n {\n TYPE: vm.Types.NATIONAL_FREIGHT_COST_ROAD_OUT,\n HEADER: 'logistics.kpi.graphics.national.freight.cost.road.outbound',\n TITLE: 'logistics.kpi.graphics.national.freight.cost.road.outbound.title',\n SHOW: true,\n MONTH: true,\n WEEK: false\n },\n {\n TYPE: vm.Types.INVOICES_ISSUED_CONSOLIDATED,\n HEADER: 'logistics.kpi.graphics.invoices.Issued.consolidated',\n TITLE: 'logistics.kpi.graphics.invoices.Issued.consolidated.title',\n SHOW: true,\n MONTH: true,\n WEEK: false\n }\n ];\n vm.ChartTypesList = null;\n\n /** Filled only when all promisses finishes */\n vm.carouselList = [];\n\n /** Filled Async */\n vm.carouselListTemp = [];\n\n /**\n * Current slide to carousel.\n * @type {number}\n */\n vm.currentSlide = vm.Types.PRODUCTIVE_LANDED_COST;\n\n vm.currentLocale = $window.localStorage.defaultLanguage;\n\n vm.chartBarStyle = 'height: 65vh; width: 65vw;';\n\n vm.clearSearchFields = function () {\n vm.searchParam = {\n Page: 1,\n MaxPerPage: vm.itemPerPage.value,\n Year: yearDate,\n Frequency: vm.FrequencyList[0].Value,\n Start: weekOfYear,\n End: (weekOfYear + 4) > vm.maxWeekOfYear ? vm.maxWeekOfYear : (weekOfYear + 4),\n Project: vm.ProjectList[0].Value\n }\n }\n\n vm.onChangeFrequency = function () {\n if (vm.searchParam.Frequency == vm.FrequencyList[0].Value) {\n vm.searchParam.Start = weekOfYear;\n vm.searchParam.End = (weekOfYear + 4) > vm.maxWeekOfYear ? vm.maxWeekOfYear : (weekOfYear + 4);\n } else {\n vm.searchParam.Start = vm.MonthList[0].Value;\n vm.searchParam.End = vm.MonthList[11].Value;\n }\n vm.getChartTypes();\n };\n\n vm.onChangeYear = function () {\n vm.maxWeekOfYear = weeksInYear(vm.searchParam.Year);\n }\n\n vm.getFrequency = function (frequency) {\n if (vm.FrequencyType == vm.FrequencyList[0].Value) {\n return frequency;\n } else {\n var month = vm.MonthList[frequency - 1].Name;\n return $translate.instant(month);\n }\n\n };\n\n vm.shouldShow = function (item) {\n if (vm.totalLista > 0 && item != undefined) {\n return vm.totalLista >= item.value || (vm.totalLista < item.after && vm.totalLista > item.before);\n }\n return false;\n }\n\n vm.changeItemsPerPage = function (form) {\n vm.formFreightCost = form;\n if (vm.itemPerPage == null) {\n vm.itemPerPage = vm.itensPerPageList[0];\n }\n search(1, vm.itemPerPage.value);\n };\n\n vm.onPageChange = function (form) {\n vm.formFreightCost = form;\n search(vm.searchParam.Page, vm.searchParam.MaxPerPage);\n };\n\n vm.gotToImport = function () {\n $state.go('import-freightcost-list', {});\n }\n\n vm.getMaxStartMonth = function () {\n if (angular.isDefined(vm.searchParam.End) && vm.searchParam.End != null) {\n return vm.searchParam.End;\n }\n return null;\n };\n\n vm.getMinEndWeek = function () {\n if (angular.isDefined(vm.searchParam.Start) && vm.searchParam.Start != null) {\n return vm.searchParam.Start;\n }\n return null;\n }\n\n vm.getChartTypes = function () {\n if (vm.searchParam.Frequency == vm.FrequencyList[0].Value) {\n vm.ChartTypesList = vm.ChartTypes.filter(function (item) {\n return item.WEEK === true;\n });\n } else {\n vm.ChartTypesList = vm.ChartTypes.filter(function (item) {\n return item.MONTH === true;\n });\n }\n };\n\n vm.init = function () {\n vm.searchParam = {\n Page: 1,\n MaxPerPage: vm.itemPerPage.value,\n Year: yearDate,\n Frequency: vm.FrequencyList[0].Value,\n Start: weekOfYear,\n End: (weekOfYear + 4) > vm.maxWeekOfYear ? vm.maxWeekOfYear : (weekOfYear + 4)\n }\n LogisticsService.loadProfileModules(vm, $scope)\n .then(function () {\n validateViewPermission();\n vm.search();\n initGraphics();\n })\n .catch(function (error) {\n var msg = error.data && error.data.Message ? error.data.Message : $filter('translate')('error.logistcs.freight.cost.list');\n ToastUtil.showToastMessage($translate.instant(msg), ToastUtil.ToastType.ERROR);\n });\n };\n\n vm.search = function (form) {\n vm.formFreightCost = form;\n var valid = vm.searchParam.End >= vm.searchParam.Start;\n\n if ((angular.isUndefined(vm.formFreightCost) || vm.formFreightCost.$valid) && valid) {\n if (vm.view === 'list') {\n vm.searchParam.Page = 1;\n if (sessionStorage.getItem(\"searchParam\")) {\n vm.searchParam = JSON.parse(sessionStorage.getItem(\"searchParam\"));\n sessionStorage.removeItem(\"searchParam\");\n vm.itensPerPageList.forEach(function (element) {\n if (element.value == vm.searchParam.MaxPerPage) {\n vm.itemPerPage = element;\n return;\n }\n });\n } else {\n vm.itemPerPage = vm.itensPerPageList[0];\n }\n search(vm.searchParam.Page, vm.itemPerPage.value);\n } else {\n vm.viewAsGraphic(form, 1);\n }\n }\n };\n\n vm.validadeStartInputMin = function () {\n if (angular.isDefined(vm.formFreightCost) && vm.formFreightCost.$submitted\n && angular.isDefined(vm.formFreightCost.$error.min) && vm.formFreightCost.$error.min.length > 0) {\n var minErrosStart = $filter('filter')(vm.formFreightCost.$error.min, function (min) {\n return angular.isDefined(min.inputStartWeek);\n });\n return minErrosStart.length > 0;\n }\n return false;\n }\n\n vm.validadeEndInputMin = function () {\n if (angular.isDefined(vm.formFreightCost) && vm.formFreightCost.$submitted\n && angular.isDefined(vm.formFreightCost.$error.min) && vm.formFreightCost.$error.min.length > 0) {\n var minErrosEnd = $filter('filter')(vm.formFreightCost.$error.min, function (min) {\n return angular.isDefined(min.inputEndWeek);\n });\n return minErrosEnd.length > 0;\n }\n return false;\n }\n\n vm.validadeStartInputMax = function () {\n if (angular.isDefined(vm.formFreightCost) && vm.formFreightCost.$submitted\n && angular.isDefined(vm.formFreightCost.$error.max) && vm.formFreightCost.$error.max.length > 0) {\n var maxErrosStart = $filter('filter')(vm.formFreightCost.$error.max, function (max) {\n return angular.isDefined(max.inputStartWeek);\n });\n return maxErrosStart.length > 0;\n }\n return false;\n }\n\n vm.validadeEndInputMax = function () {\n if (angular.isDefined(vm.formFreightCost) && vm.formFreightCost.$submitted\n && angular.isDefined(vm.formFreightCost.$error.max) && vm.formFreightCost.$error.max.length > 0) {\n var maxErrosEnd = $filter('filter')(vm.formFreightCost.$error.max, function (max) {\n return angular.isDefined(max.inputEndWeek);\n });\n return maxErrosEnd.length > 0;\n }\n return false;\n }\n\n vm.getMsgHintMaxWeek = function () {\n return $translate.instant('logistics.hint.startweek.endweek.max').replace(\"#MaxWeek\", vm.maxWeekOfYear);\n }\n\n vm.validateEndMonth = function () {\n return vm.searchParam.End < vm.searchParam.Start;\n }\n\n vm.validateInputWeek = function (form) {\n return form.$parent.divInputForm.inputStartWeek.$error.max;\n };\n\n vm.validateMinInputWeek = function (form) {\n return form.$parent.divInputForm.inputStartWeek.$error.min;\n };\n\n vm.onCloseImportErrorList = function () {\n vm.errors = [];\n }\n\n vm.openSite = function (site) {\n $window.open(site, '_blank');\n };\n\n vm.viewAsGraphic = function (form, origin) {\n vm.formFreightCost = form;\n if (angular.isUndefined(vm.formFreightCost) || vm.formFreightCost.$valid) {\n vm.view = \"graphic\";\n vm.currentSlide = origin === 0 ? 0 : vm.currentSlide;\n loadDataToChart();\n } else {\n ToastUtil.showToastMessage($translate.instant(\"logistics.error.form\"), ToastUtil.ToastType.WARN);\n }\n };\n\n vm.viewAsList = function (form) {\n vm.view = \"list\";\n vm.formFreightCost = form;\n vm.itemPerPage = vm.itensPerPageList[0];\n search(1, vm.itemPerPage.value);\n };\n\n vm.dataRefreshIntervalChanged = function () {\n resetDataRequestInterval();\n };\n\n vm.searchEvent = function () {\n loadDataToChart();\n };\n\n /**\n * Resets interval event when slide is changed.\n */\n vm.resetIntervalEvent = function () {\n if (intervalEvent != null) {\n $interval.cancel(intervalEvent);\n setIntervalEvent();\n }\n };\n\n function weeksInYear(year) {\n return Math.max(\n moment(new Date(year, 11, 31)).isoWeek()\n , moment(new Date(year, 11, 31 - 7)).isoWeek()\n );\n }\n\n function validateViewPermission() {\n if (!vm.profile.CanView) {\n $state.go('not-authorized', {}, {});\n }\n }\n\n function search(page, max) {\n if (angular.isUndefined(vm.formFreightCost) || vm.formFreightCost.$valid) {\n vm.searchParam.Page = page;\n vm.searchParam.MaxPerPage = max;\n var searchParam = angular.copy(vm.searchParam);\n if (angular.isUndefined(searchParam.Start) || vm.searchParam.Start == null) {\n searchParam.Start = 1;\n }\n\n if (angular.isUndefined(searchParam.End) || vm.searchParam.End == null) {\n searchParam.End = vm.maxWeekOfYear;\n }\n\n LogisticsService.listFreightCost(vm, searchParam, $scope)\n .then(function (response) {\n vm.freightCostList = response.resultList;\n vm.totalLista = response.total;\n vm.Accumulated = response.Accumulated;\n vm.FrequencyTypeHeader = vm.FrequencyList[vm.searchParam.Frequency].Title;\n vm.FrequencyType = vm.FrequencyList[vm.searchParam.Frequency].Value;\n })\n .catch(function (error) {\n if (error && error.status) {\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"error.logistcs.freight.cost.list\"), ToastUtil.ToastType.ERROR);\n }\n }\n });\n } else {\n // vm.freightCostList = [];\n // vm.totalLista = 0;\n if (angular.isDefined(vm.formFreightCost) &&\n vm.formFreightCost.$error.min != undefined &&\n vm.formFreightCost.$error.min[0].$error.min != undefined &&\n (vm.formFreightCost.$error.min[0].$error.min[0].$name == 'inputStartWeek' ||\n vm.formFreightCost.$error.min[0].$error.min[0].$name == 'inputEndWeek')) {\n vm.formFreightCost.$submitted = true;\n } else if (angular.isDefined(vm.formFreightCost) &&\n vm.formFreightCost.$error.max != undefined &&\n vm.formFreightCost.$error.max[0].$error.max != undefined &&\n (vm.formFreightCost.$error.max[0].$error.max[0].$name == 'inputStartWeek' ||\n vm.formFreightCost.$error.max[0].$error.max[0].$name == 'inputEndWeek')) {\n vm.formFreightCost.$submitted = true;\n }\n }\n }\n\n //GRAPHICS\n function initGraphics() {\n\n vm.getChartTypes();\n vm.currentSlide = 0;\n //Listener to Locale\n var localeChange = $rootScope.$on(IndexConstant.localeChangeEvent, localeChangeEvent);\n // Register listener to fullscreen event.\n $scope.$on(IndexConstant.fullScreenEvent, fullScreenEventListener);\n\n Idle.unwatch();\n\n setDataRequestInterval();\n\n $rootScope.$on('$destroy', localeChange);\n }\n\n function fullScreenEventListener(event, isFullScreen) {\n if (isFullScreen) {\n vm.chartBarStyle = 'height: 75vh; width: 80vw;';\n } else {\n vm.chartBarStyle = 'height: 65vh; width: 65vw;';\n }\n }\n\n /**\n * Schedule interval to request chart data every X minute(s).\n */\n function setDataRequestInterval() {\n dataRefreshInterval = 0;\n }\n\n /**\n * reset Data Refreh interval.\n */\n function resetDataRequestInterval() {\n if (dataRefreshInterval != null) {\n $interval.cancel(dataRefreshInterval);\n setDataRequestInterval();\n }\n }\n\n /**\n * Set interval event to auto swipe.\n */\n function setIntervalEvent() {\n intervalEvent = 0;\n }\n\n function searchLandedVariation() {\n removeItemsFromCarousel(vm.Types.LANDED_VARIATION);\n vm.ChartTypes.find(function (item) {\n return item.TYPE === vm.Types.LANDED_VARIATION;\n }).SHOW = false;\n\n var searchParam = angular.copy(vm.searchParam);\n searchParam.Page = null;\n searchParam.MaxPerPage = null;\n return LogisticsService.listLandedVariation(searchParam)\n .then(function (response) {\n var landedVariationList = response;\n if (landedVariationList.length == 0) {\n landedVariationList = [];\n vm.ChartTypes.find(function (item) {\n return item.TYPE === vm.Types.LANDED_VARIATION;\n }).SHOW = false;\n } else {\n vm.landedChartData = {\n LandedVariationList: landedVariationList,\n Params: {\n Year: searchParam.Year,\n Project: searchParam.Project,\n Frequency: searchParam.Frequency\n }\n }\n vm.ChartTypes.find(function (item) {\n return item.TYPE === vm.Types.LANDED_VARIATION;\n }).SHOW = true;\n vm.carouselListTemp.push(getCarouselItem(vm.Types.LANDED_VARIATION, vm.landedChartData));\n }\n\n })\n .catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant('logistic.kpi.list.notfound'), ToastUtil.ToastType.WARN);\n });\n }\n\n function searchRateVariation(chartTypeItemValue) {\n var rateChartType = vm.ChartTypes.find(function (item) {\n return item.TYPE === chartTypeItemValue;\n });\n\n removeItemsFromCarousel(rateChartType.TYPE);\n rateChartType.SHOW = false;\n\n var searchParam = angular.copy(vm.searchParam);\n searchParam.Page = null;\n searchParam.MaxPerPage = null;\n\n if (rateChartType.TYPE == vm.Types.RATE_VARIATION) {\n searchParam.Supplier = 'salcomp oyj';\n searchParam.PortOrigin = 'hong kong';\n searchParam.TranMode = 'air';\n } else if (rateChartType.TYPE == vm.Types.LSP_CHARGEABLE_WEIGHT) {\n searchParam.TranMode = 'air';\n searchParam.Project = vm.ProjectList[0].Value;\n } else {\n searchParam.Start = 1;\n searchParam.End = 60;\n searchParam.Project = undefined;\n }\n\n return LogisticsService.listRateVariation(searchParam)\n .then(function (response) {\n var rateVariationList = response;\n if (rateVariationList.length == 0) {\n rateVariationList = [];\n vm.ChartTypes.find(function (item) {\n return item.TYPE === chartTypeItemValue;\n }).SHOW = false;\n } else {\n vm.rateChartData = {\n RateVariationList: rateVariationList,\n Params: {\n Year: searchParam.Year,\n Project: searchParam.Project,\n Frequency: searchParam.Frequency\n }\n }\n vm.ChartTypes.find(function (item) {\n return item.TYPE === chartTypeItemValue;\n }).SHOW = true;\n vm.carouselListTemp.push(getCarouselItem(chartTypeItemValue, vm.rateChartData));\n }\n\n })\n .catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant('logistic.kpi.list.notfound'), ToastUtil.ToastType.WARN);\n });\n }\n\n function searcChannelPerformance(chartTypeItemValue) {\n var channelChartType = vm.ChartTypes.find(function (item) {\n return item.TYPE === chartTypeItemValue;\n });\n\n removeItemsFromCarousel(channelChartType.TYPE);\n channelChartType.SHOW = false;\n\n var searchParam = angular.copy(vm.searchParam);\n searchParam.Page = null;\n searchParam.MaxPerPage = null;\n searchParam.Project = undefined;\n\n return LogisticsService.listChannelPerformance(searchParam)\n .then(function (response) {\n var channelList = response;\n if (channelList.length == 0) {\n channelList = [];\n vm.ChartTypes.find(function (item) {\n return item.TYPE === chartTypeItemValue;\n }).SHOW = false;\n } else {\n vm.channelChartData = {\n FreightCostList: channelList,\n Params: {\n Year: searchParam.Year,\n Project: searchParam.Project,\n Frequency: searchParam.Frequency\n }\n };\n vm.ChartTypes.find(function (item) {\n return item.TYPE === chartTypeItemValue;\n }).SHOW = true;\n vm.carouselListTemp.push(getCarouselItem(chartTypeItemValue, vm.channelChartData));\n }\n\n })\n .catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant('logistic.kpi.list.notfound'), ToastUtil.ToastType.WARN);\n });\n }\n\n function getDefaultLanguage() {\n return $window.localStorage.defaultLanguage;\n }\n\n function updateChart() {\n if ($scope.ctrl != undefined && $scope.ctrl.currentSlide != undefined) {\n if ($scope.ctrl.view == \"graphic\") {\n loadDataToChart();\n }\n }\n }\n\n function loadDataToChart() {\n if (angular.isDefined(vm.formFreightCost) && vm.formFreightCost.$valid) {\n var productiveLandedCost = searchLandedCost(vm.Types.PRODUCTIVE_LANDED_COST);\n var unproductiveLandedCost = searchLandedCost(vm.Types.UNPRODUCTIVE_LANDED_COST);\n var promisseLandedVariation = searchLandedVariation();\n var promisseRateVariation = searchRateVariation(vm.Types.RATE_VARIATION);\n var promisseFob = searchLandedCostAccumulated(vm.Types.TOTAL_FOB);\n var promisseChargeableWeight = searchLandedCostAccumulated(vm.Types.TOTAL_CHARGEABLE_WEIGHT);\n var promisseTotalLSPChargeableWeight = searchRateVariation(vm.Types.TOTAL_LSP_CHARGEABLE_WEIGHT);\n var promisseGrossWeight = searchProductiveGrossWeight(vm.Types.GROSS_CHARGEABLE_WEIGHT);\n var promisseLSPChargeableWeight = searchRateVariation(vm.Types.LSP_CHARGEABLE_WEIGHT);\n var promisseChannelPerformance = searcChannelPerformance(vm.Types.CHANNEL_PERFORMANCE);\n var promisseTransitTime = searchTransitTime(vm.Types.TRANSIT_TIME);\n var promisseLocalTransportFreightCost = searchLocalTransportFreightCost(vm.Types.LOCAL_TRANSPORT_FREIGHT_COST);\n var promisseNationalFreightCostAir = searchNationalFreightCostAir(vm.Types.NATIONAL_FREIGHT_COST);\n var promisseInvoicesIssuedConsolidated = searchInvoicesIssuedConsolidated(vm.Types.INVOICES_ISSUED_CONSOLIDATED);\n var promisseGrossWeightLspOutbound = searchGrossWeightLspOutbound(vm.Types.GROSS_WEIGHT_LSP_OUTBOUND);\n var promisseGrossWeightLspOutboundRoad = searchGrossWeightLspRoadOutbound(vm.Types.GROSS_WEIGHT_LSP_OUTBOUND_ROAD);\n var promisseNationalFreightCostAirInbound = searchNationalAirFreightCostInboud(vm.Types.NATIONAL_FREIGHT_COST_INBOUND);\n var promisseNationalFreightCostRoadOutbound = searchNationalFreightCostRoadOutbound(vm.Types.NATIONAL_FREIGHT_COST_ROAD_OUT);\n\n $q.all([productiveLandedCost, unproductiveLandedCost, promisseLandedVariation, promisseRateVariation,\n promisseFob, promisseChargeableWeight, promisseTotalLSPChargeableWeight, promisseGrossWeight,\n promisseLSPChargeableWeight, promisseChannelPerformance, promisseTransitTime, promisseLocalTransportFreightCost,\n promisseNationalFreightCostAir, promisseGrossWeightLspOutbound, promisseGrossWeightLspOutboundRoad, promisseNationalFreightCostAirInbound,\n promisseNationalFreightCostRoadOutbound, promisseInvoicesIssuedConsolidated])\n .then(function () {\n vm.carouselListTemp.sort(function (a, b) {\n return a.type - b.type;\n });\n vm.carouselList = angular.copy(vm.carouselListTemp);\n });\n } else {\n vm.carouselListTemp = [];\n vm.freightCostList = [];\n vm.totalLista = 0;\n vm.carouselList = [];\n vm.productiveChartData = {\n FreightCostList: [],\n Params: {\n Year: null,\n Project: null,\n Frequency: null\n }\n };\n vm.unproductiveChartData = angular.copy(vm.productiveChartData);\n vm.accumulatedChartData = angular.copy(vm.productiveChartData);\n vm.transitTimeChartData = angular.copy(vm.productiveChartData);\n vm.grossChartData = angular.copy(vm.productiveChartData);\n vm.landedChartData = {\n LandedVariationList: [],\n Params: {\n Year: null,\n Project: null,\n Frequency: null\n }\n };\n vm.rateChartData = {\n RateVariationList: [],\n Params: {\n Year: null,\n Project: null,\n Frequency: null\n }\n };\n vm.channelChartData = {\n FreightCostList: [],\n Params: {\n Year: null,\n Project: null,\n Frequency: null\n }\n };\n vm.localTransportFreightCostChartData = angular.copy(vm.productiveChartData);\n\n vm.carouselListTemp.push(getCarouselItem(vm.Types.PRODUCTIVE_LANDED_COST, vm.productiveChartData));\n vm.carouselListTemp.push(getCarouselItem(vm.Types.MODE_SPEND, vm.productiveChartData));\n vm.carouselListTemp.push(getCarouselItem(vm.Types.CARGO_RATIO, vm.productiveChartData));\n vm.carouselListTemp.push(getCarouselItem(vm.Types.TRANSIT_TIME, vm.transitTimeChartData));\n vm.carouselListTemp.push(getCarouselItem(vm.Types.GROSS_CHARGEABLE_WEIGHT, vm.grossChartData));\n vm.carouselListTemp.push(getCarouselItem(vm.Types.CHANNEL_PERFORMANCE, vm.channelChartData));\n vm.carouselListTemp.push(getCarouselItem(vm.Types.LOCAL_TRANSPORT_FREIGHT_COST, vm.localTransportFreightCostChartData));\n vm.carouselListTemp.push(getCarouselItem(vm.Types.UNPRODUCTIVE_LANDED_COST, vm.unproductiveChartData));\n vm.carouselListTemp.push(getCarouselItem(vm.Types.TOTAL_FOB, vm.accumulatedChartData));\n vm.carouselListTemp.push(getCarouselItem(vm.Types.TOTAL_CHARGEABLE_WEIGHT, vm.accumulatedChartData));\n vm.carouselListTemp.push(getCarouselItem(vm.Types.LANDED_VARIATION, vm.landedChartData));\n vm.carouselListTemp.push(getCarouselItem(vm.Types.RATE_VARIATION, vm.rateChartData));\n vm.carouselListTemp.push(getCarouselItem(vm.Types.TOTAL_LSP_CHARGEABLE_WEIGHT, vm.rateChartData));\n vm.carouselListTemp.push(getCarouselItem(vm.Types.LSP_CHARGEABLE_WEIGHT, vm.rateChartData));\n vm.carouselListTemp.push(getCarouselItem(vm.Types.NATIONAL_FREIGHT_COST, vm.nationalFreightCostAirChartData));\n vm.carouselListTemp.push(getCarouselItem(vm.Types.GROSS_WEIGHT_LSP_OUTBOUND , vm.grossWeightLspsOutboundChartData));\n vm.carouselListTemp.push(getCarouselItem(vm.Types.GROSS_WEIGHT_LSP_OUTBOUND_ROAD , vm.grossWeightLspsOutboundRoadChartData));\n vm.carouselListTemp.push(getCarouselItem(vm.Types.NATIONAL_FREIGHT_COST_INBOUND , vm.nationalFreightCostAirInboundChartData));\n vm.carouselListTemp.push(getCarouselItem(vm.Types.NATIONAL_FREIGHT_COST_ROAD_OUT, vm.nationalFreightCostRoadOutboundChartData));\n vm.carouselListTemp.push(getCarouselItem(vm.Types.INVOICES_ISSUED_CONSOLIDATED, vm.invoicesIssuedConsolidatedChartData));\n\n vm.ChartTypes.find(function (item) {\n return item.TYPE === vm.Types.PRODUCTIVE_LANDED_COST;\n }).SHOW = false;\n vm.ChartTypes.find(function (item) {\n return item.TYPE === vm.Types.MODE_SPEND;\n }).SHOW = false;\n vm.ChartTypes.find(function (item) {\n return item.TYPE === vm.Types.CARGO_RATIO;\n }).SHOW = false;\n vm.ChartTypes.find(function (item) {\n return item.TYPE === vm.Types.TRANSIT_TIME;\n }).SHOW = false;\n vm.ChartTypes.find(function (item) {\n return item.TYPE === vm.Types.GROSS_CHARGEABLE_WEIGHT;\n }).SHOW = false;\n vm.ChartTypes.find(function (item) {\n return item.TYPE === vm.Types.UNPRODUCTIVE_LANDED_COST;\n }).SHOW = false;\n vm.ChartTypes.find(function (item) {\n return item.TYPE === vm.Types.TOTAL_FOB;\n }).SHOW = false;\n vm.ChartTypes.find(function (item) {\n return item.TYPE === vm.Types.TOTAL_CHARGEABLE_WEIGHT;\n }).SHOW = false;\n vm.ChartTypes.find(function (item) {\n return item.TYPE === vm.Types.LANDED_VARIATION;\n }).SHOW = false;\n vm.ChartTypes.find(function (item) {\n return item.TYPE === vm.Types.RATE_VARIATION;\n }).SHOW = false;\n vm.ChartTypes.find(function (item) {\n return item.TYPE === vm.Types.TOTAL_LSP_CHARGEABLE_WEIGHT;\n }).SHOW = false;\n vm.ChartTypes.find(function (item) {\n return item.TYPE === vm.Types.LSP_CHARGEABLE_WEIGHT;\n }).SHOW = false;\n vm.ChartTypes.find(function (item) {\n return item.TYPE === vm.Types.LOCAL_TRANSPORT_FREIGHT_COST;\n }).SHOW = false;\n vm.ChartTypes.find(function (item) {\n return item.TYPE === vm.Types.NATIONAL_FREIGHT_COST;\n }).SHOW = false;\n vm.ChartTypes.find(function (item) {\n return item.TYPE === vm.Types.GROSS_WEIGHT_LSP_OUTBOUND;\n }).SHOW = false;\n vm.ChartTypes.find(function (item) {\n return item.TYPE === vm.Types.GROSS_WEIGHT_LSP_OUTBOUND_ROAD;\n }).SHOW = false;\n vm.ChartTypes.find(function (item) {\n return item.TYPE === vm.Types.NATIONAL_FREIGHT_COST_INBOUND;\n }).SHOW = false;\n vm.ChartTypes.find(function (item) {\n return item.TYPE === vm.Types.NATIONAL_FREIGHT_COST_ROAD_OUT;\n }).SHOW = false;\n vm.ChartTypes.find(function (item) {\n return item.TYPE === vm.Types.INVOICES_ISSUED_CONSOLIDATED;\n }).SHOW = false;\n\n vm.carouselListTemp.sort(function (a, b) {\n return a.type - b.type;\n });\n vm.carouselList = angular.copy(vm.carouselListTemp);\n if (angular.isDefined(vm.formFreightCost) &&\n vm.formFreightCost.$error.min != undefined &&\n vm.formFreightCost.$error.min[0].$error.min != undefined &&\n (vm.formFreightCost.$error.min[0].$error.min[0].$name == 'inputStartWeek' ||\n vm.formFreightCost.$error.min[0].$error.min[0].$name == 'inputEndWeek')) {\n vm.formFreightCost.$submitted = true;\n } else if (angular.isDefined(vm.formFreightCost) &&\n vm.formFreightCost.$error.max != undefined &&\n vm.formFreightCost.$error.max[0].$error.max != undefined &&\n (vm.formFreightCost.$error.max[0].$error.max[0].$name == 'inputStartWeek' ||\n vm.formFreightCost.$error.max[0].$error.max[0].$name == 'inputEndWeek')) {\n vm.formFreightCost.$submitted = true;\n }\n }\n }\n\n function isProductiveChartType(chartTypeItemValue) {\n return _productiveChartTypes.indexOf(chartTypeItemValue) !== -1;\n }\n\n function isAccumulatedChartType(chartTypeItemValue) {\n return _accumulatedChartTypes.indexOf(chartTypeItemValue) !== -1;\n }\n\n function setLandedCostResponseData(response, searchParam, chartData) {\n var freightCostList = response.Records, project = vm.ProjectList.find(function (project) {\n return project.Value === searchParam.Project;\n });\n\n if (response.Accumulated) {\n freightCostList.push(response.Accumulated);\n }\n\n chartData.FreightCostList = freightCostList;\n chartData.Params.Year = searchParam.Year;\n chartData.Params.Project = searchParam.Project;\n chartData.Params.ProjectLabel = project.Name;\n chartData.Params.Frequency = searchParam.Frequency;\n }\n\n function setTransitTimeResponseData(response, searchParam, chartData) {\n var freightCostList = response, project = vm.ProjectList.find(function (project) {\n return project.Value === searchParam.Project;\n });\n\n chartData.FreightCostList = freightCostList;\n chartData.Params.Year = searchParam.Year;\n chartData.Params.Project = searchParam.Project;\n chartData.Params.ProjectLabel = project.Name;\n chartData.Params.Frequency = searchParam.Frequency;\n }\n\n function searchAccumulatedLandedCost(searchParam, accumulatedChartTypes, chartTypeItemValue) {\n\n accumulatedChartTypes.forEach(function (chartType) {\n removeItemsFromCarousel(chartType.TYPE);\n chartType.SHOW = false;\n });\n\n return LogisticsService.listFreightCostGrouped(vm, searchParam, $scope)\n .then(function (response) {\n if (response.Records.length === 0) {\n accumulatedChartTypes.forEach(function (chartType) {\n chartType.SHOW = false;\n });\n } else {\n setLandedCostResponseData(response, searchParam, vm.accumulatedChartData);\n accumulatedChartTypes.forEach(function (chartType) {\n chartType.SHOW = (chartTypeItemValue === vm.currentSlide || chartType.TYPE === vm.currentSlide);\n });\n }\n\n })\n .catch(onResponseError);\n }\n\n function searchProductiveLandedCost(searchParam, productiveChartTypes, chartTypeItemValue) {\n\n productiveChartTypes.forEach(function (chartType) {\n removeItemsFromCarousel(chartType.TYPE);\n chartType.SHOW = false;\n });\n\n searchParam.Project = vm.ProjectList[0].Value;\n\n return LogisticsService.listFreightCostGrouped(vm, searchParam, $scope)\n .then(function (response) {\n if (response.Records.length === 0) {\n productiveChartTypes.forEach(function (chartType) {\n chartType.SHOW = false;\n });\n } else {\n setLandedCostResponseData(response, searchParam, vm.productiveChartData);\n\n productiveChartTypes.forEach(function (chartType) {\n chartType.SHOW = (chartTypeItemValue === vm.currentSlide || chartType.TYPE === vm.currentSlide);\n });\n }\n\n })\n .catch(onResponseError);\n\n }\n\n function searchProductiveGrossWeight(chartTypeItemValue) {\n var grossChartType = vm.ChartTypes.find(function (item) {\n return item.TYPE === chartTypeItemValue;\n });\n\n removeItemsFromCarousel(grossChartType.TYPE);\n grossChartType.SHOW = false;\n\n var searchParam = angular.copy(vm.searchParam);\n searchParam.Page = null;\n searchParam.MaxPerPage = null;\n searchParam.GroupedBy = undefined;\n searchParam.Project = vm.ProjectList[0].Value;\n\n return LogisticsService.listFreightCostGrouped(vm, searchParam, $scope)\n .then(function (response) {\n if (response.Records.length === 0) {\n grossChartType.SHOW = false;\n } else {\n setLandedCostResponseData(response, searchParam, vm.grossChartData);\n grossChartType.SHOW = true;\n }\n\n })\n .catch(onResponseError);\n }\n\n function onResponseError(error) {\n if (error && error.status) {\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"error.logistcs.freight.cost.list\"), ToastUtil.ToastType.ERROR);\n }\n }\n }\n\n function searchUnproductiveLandedCost(searchParam, chartTypeItemValue) {\n var landedCostChartType = vm.ChartTypes.find(function (item) {\n return item.TYPE === chartTypeItemValue;\n });\n\n landedCostChartType.SHOW = false;\n searchParam.Project = vm.ProjectList[1].Value;\n\n return LogisticsService.listFreightCostGrouped(vm, searchParam, $scope)\n .then(function (response) {\n if (response.Records.length === 0) {\n landedCostChartType.SHOW = false;\n } else {\n setLandedCostResponseData(response, searchParam, vm.unproductiveChartData);\n vm.carouselListTemp.push(getCarouselItem(chartTypeItemValue, vm.unproductiveChartData));\n landedCostChartType.SHOW = chartTypeItemValue === vm.currentSlide;\n }\n\n })\n .catch(onResponseError);\n }\n\n function searchLandedCostAccumulated(chartTypeItemValue) {\n\n var accumulatedChartTypes = vm.ChartTypes.filter(function (item) {\n return _accumulatedChartTypes.indexOf(item.TYPE) !== -1;\n });\n\n var searchParam = angular.copy(vm.searchParam);\n searchParam.Page = null;\n searchParam.MaxPerPage = null;\n searchParam.GroupedBy = \"TranMode\";\n\n if (isAccumulatedChartType(chartTypeItemValue)) {\n return searchAccumulatedLandedCost(searchParam, accumulatedChartTypes, chartTypeItemValue);\n }\n }\n\n function searchLandedCost(chartTypeItemValue) {\n\n var productiveChartTypes = vm.ChartTypes.filter(function (item) {\n return _productiveChartTypes.indexOf(item.TYPE) !== -1;\n });\n\n var searchParam = angular.copy(vm.searchParam);\n searchParam.Page = null;\n searchParam.MaxPerPage = null;\n searchParam.GroupedBy = \"TranMode\";\n\n if (isProductiveChartType(chartTypeItemValue)) {\n return searchProductiveLandedCost(searchParam, productiveChartTypes, chartTypeItemValue);\n } else {\n return searchUnproductiveLandedCost(searchParam, chartTypeItemValue);\n }\n }\n\n function searchTransitTime(chartTypeItemValue) {\n\n var transitTimeChartType = vm.ChartTypes.find(function (item) {\n return item.TYPE === chartTypeItemValue;\n });\n\n removeItemsFromCarousel(transitTimeChartType.TYPE);\n transitTimeChartType.SHOW = false;\n\n var searchParam = angular.copy(vm.searchParam);\n searchParam.Page = null;\n searchParam.MaxPerPage = null;\n searchParam.GroupedBy = \"TranMode\";\n searchParam.GroupedByPortOfOrigin = \"PortOfOrigin\";\n searchParam.Project = vm.ProjectList[0].Value;\n\n return LogisticsService.listTransitTime(searchParam, $scope)\n .then(function (response) {\n if (response.length === 0) {\n transitTimeChartType.SHOW = false;\n } else {\n setTransitTimeResponseData(response, searchParam, vm.transitTimeChartData);\n transitTimeChartType.SHOW = true;\n }\n\n })\n .catch(onResponseError);\n }\n\n function searchLocalTransportFreightCost(chartTypeItemValue) {\n\n var localTransportFreightCostChartType = vm.ChartTypes.find(function (item) {\n return item.TYPE === chartTypeItemValue;\n });\n\n removeItemsFromCarousel(localTransportFreightCostChartType.TYPE);\n localTransportFreightCostChartType.SHOW = false;\n\n var searchParam = angular.copy(vm.searchParam);\n searchParam.Page = null;\n searchParam.MaxPerPage = null;\n searchParam.GroupedBy = \"TranMode\";\n searchParam.GroupedByPortOfOrigin = \"PortOfOrigin\";\n searchParam.Project = vm.ProjectList[0].Value;\n\n return LogisticsService.listLocalTransportFreigthCost(searchParam, $scope)\n .then(function (response) {\n if (response.length === 0) {\n localTransportFreightCostChartType.SHOW = false;\n } else {\n setTransitTimeResponseData(response, searchParam, vm.localTransportFreightCostChartData);\n localTransportFreightCostChartType.SHOW = true;\n }\n\n })\n .catch(onResponseError);\n }\n\n function searchNationalFreightCostAir(chartTypeItemValue) {\n\n var nationalFreightCostChartType = vm.ChartTypes.find(function (item) {\n return item.TYPE === chartTypeItemValue;\n });\n\n removeItemsFromCarousel(nationalFreightCostChartType.TYPE);\n nationalFreightCostChartType.SHOW = false;\n\n var searchParam = {\n Page: null,\n MaxPerPage: null,\n Year: vm.searchParam.Year,\n Frequency: vm.FrequencyList[1].Value,\n Project: vm.ProjectList[0].Value,\n Start: vm.searchParam.Start,\n End: vm.searchParam.End,\n Modal: \"AÉREO\", //Must be uppercase\n Type: \"OUTBOUND\" //Must be uppercase\n };\n\n return LogisticsService.listNationalFreightCostAir(searchParam, $scope)\n .then(function (response) {\n if (response.length === 0) {\n nationalFreightCostChartType.SHOW = false;\n } else {\n setTransitTimeResponseData(response, searchParam, vm.nationalFreightCostAirChartData);\n nationalFreightCostChartType.SHOW = true;\n }\n\n })\n .catch(onResponseError);\n }\n\n function searchInvoicesIssuedConsolidated(chartTypeItemValue) {\n\n var typeLocal = vm.ChartTypes.find(function (item) {\n return item.TYPE === chartTypeItemValue;\n });\n\n removeItemsFromCarousel(typeLocal.TYPE);\n typeLocal.SHOW = false;\n\n var searchParam = angular.copy(vm.searchParam);\n searchParam.Page = null;\n searchParam.MaxPerPage = null;\n searchParam.GroupedBy = \"TranMode\";\n searchParam.GroupedByPortOfOrigin = \"PortOfOrigin\";\n searchParam.Project = vm.ProjectList[0].Value;\n\n return LogisticsService.listInvoicesIssuedConsolidated(searchParam, $scope)\n .then(function (response) {\n if (response.length === 0) {\n typeLocal.SHOW = false;\n } else {\n setTransitTimeResponseData(response, searchParam, vm.invoicesIssuedConsolidatedChartData);\n typeLocal.SHOW = true;\n }\n\n })\n .catch(onResponseError);\n }\n\n function searchGrossWeightLspOutbound(chartTypeItemValue) {\n\n var grossWeightLspOutboundChartType = vm.ChartTypes.find(function (item) {\n return item.TYPE === chartTypeItemValue;\n });\n\n removeItemsFromCarousel(grossWeightLspOutboundChartType.TYPE);\n grossWeightLspOutboundChartType.SHOW = false;\n\n var searchParam = {\n Page: null,\n MaxPerPage: null,\n Year: vm.searchParam.Year,\n Frequency: vm.FrequencyList[1].Value,\n Project: vm.ProjectList[0].Value,\n Start: vm.searchParam.Start,\n End: vm.searchParam.End,\n Type: \"OUTBOUND\", //Must be uppercase\n Modal: \"AÉREO\" //Must be uppercase\n };\n\n return LogisticsService.listGrossWeightLspOutbound(searchParam, $scope)\n .then(function (response) {\n if (response.length === 0) {\n grossWeightLspOutboundChartType.SHOW = false;\n } else {\n setTransitTimeResponseData(response, searchParam, vm.grossWeightLspsOutboundChartData);\n grossWeightLspOutboundChartType.SHOW = true;\n }\n\n })\n .catch(onResponseError);\n }\n\n\n function searchGrossWeightLspRoadOutbound(chartTypeItemValue) {\n\n var grossWeightLspOutboundRoadChartType = vm.ChartTypes.find(function (item) {\n return item.TYPE === chartTypeItemValue;\n });\n\n removeItemsFromCarousel(grossWeightLspOutboundRoadChartType.TYPE);\n grossWeightLspOutboundRoadChartType.SHOW = false;\n\n var searchParam = {\n Page: null,\n MaxPerPage: null,\n Year: vm.searchParam.Year,\n Frequency: vm.FrequencyList[1].Value,\n Project: vm.ProjectList[0].Value,\n Start: vm.searchParam.Start,\n End: vm.searchParam.End,\n Type: \"OUTBOUND\", //Must be uppercase\n Modal: \"RODO\" //Must be uppercase\n\n };\n\n return LogisticsService.listGrossWeightLspOutbound(searchParam, $scope)\n .then(function (response) {\n if (response.length === 0) {\n grossWeightLspOutboundRoadChartType.SHOW = false;\n } else {\n setTransitTimeResponseData(response, searchParam, vm.grossWeightLspsOutboundRoadChartData);\n grossWeightLspOutboundRoadChartType.SHOW = true;\n }\n\n })\n .catch(onResponseError);\n }\n\n\n function searchNationalAirFreightCostInboud(chartTypeItemValue) {\n\n var grossWeightLspOutboundChartType = vm.ChartTypes.find(function (item) {\n return item.TYPE === chartTypeItemValue;\n });\n\n removeItemsFromCarousel(grossWeightLspOutboundChartType.TYPE);\n grossWeightLspOutboundChartType.SHOW = false;\n var searchParam = {\n Page: null,\n MaxPerPage: null,\n Year: vm.searchParam.Year,\n Frequency: vm.FrequencyList[1].Value,\n Project: vm.ProjectList[0].Value,\n Start: vm.searchParam.Start,\n End: vm.searchParam.End,\n Type: \"INBOUND\", //Must be uppercase\n Modal: \"AÉREO\" //Must be uppercase\n };\n\n return LogisticsService.listNationalFreightCostAir(searchParam, $scope)\n .then(function (response) {\n if (response.length === 0) {\n grossWeightLspOutboundChartType.SHOW = false;\n } else {\n setTransitTimeResponseData(response, searchParam, vm.nationalFreightCostAirInboundChartData);\n grossWeightLspOutboundChartType.SHOW = true;\n }\n\n })\n .catch(onResponseError);\n }\n\n function searchNationalFreightCostRoadOutbound(chartTypeItemValue) {\n\n var nationalFreightCostRoadChartType = vm.ChartTypes.find(function (item) {\n return item.TYPE === chartTypeItemValue;\n });\n\n removeItemsFromCarousel(nationalFreightCostRoadChartType.TYPE);\n nationalFreightCostRoadChartType.SHOW = false;\n\n var searchParam = {\n Page: null,\n MaxPerPage: null,\n Year: vm.searchParam.Year,\n Frequency: vm.FrequencyList[1].Value,\n Project: vm.ProjectList[0].Value,\n Start: vm.searchParam.Start,\n End: vm.searchParam.End,\n Modal: \"RODO\", //Must be uppercase\n Type: \"OUTBOUND\" //Must be uppercase\n };\n\n return LogisticsService.listNationalFreightCostAir(searchParam, $scope)\n .then(function (response) {\n if (response.length === 0) {\n nationalFreightCostRoadChartType.SHOW = false;\n } else {\n setTransitTimeResponseData(response, searchParam, vm.nationalFreightCostRoadOutboundChartData);\n nationalFreightCostRoadChartType.SHOW = true;\n }\n\n })\n .catch(onResponseError);\n }\n\n /**\n * Return an object to add in carousel list.\n * @param type\n * @param dataObj\n * @returns {{type: *, dataObj: *}}\n */\n function getCarouselItem(charttype, dataObj) {\n return {\n active: true,\n title: vm.ChartTypes[charttype].TITLE,\n type: vm.ChartTypes[charttype].TYPE,\n dataObj: dataObj\n };\n }\n\n function localeChangeEvent(event, locale) {\n vm.currentLocale = locale;\n }\n\n /**\n * Remove items from carousel, according type.\n * @param typeToRemove\n */\n function removeItemsFromCarousel(typeToRemove) {\n var index = vm.carouselListTemp.length;\n while (index--) {\n if (vm.carouselListTemp[index].type == typeToRemove) {\n vm.carouselListTemp.splice(index, 1);\n }\n }\n }\n\n $scope.$on('$destroy', function () {\n Idle.watch();\n\n if (dataRefreshInterval) {\n $interval.cancel(dataRefreshInterval);\n }\n });\n\n $scope.$watch(getDefaultLanguage, function () {\n\n $scope.$watch(function () {\n return $window.localStorage.defaultLanguage;\n }, function () {\n\n angular.forEach(vm.chartData, function (data) {\n data.key = $translate.instant(data.translateKey);\n });\n\n updateChart();\n\n });\n\n // loadDataToChart();\n });\n\n vm.init();\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('LogisticsImportService', LogisticsImportService);\n\n var LOGISTICS_BASE = '/logistics/';\n\n /** @ngInject */\n function LogisticsImportService($injector, $q, ConfigurationService) {\n\n var Status = {\n ACTIVE: {\n Id: 1,\n Title: 'logistics.import.status.active'\n },\n INACTIVE: {\n Id: 0,\n Title: 'logistics.import.status.inactive'\n }\n };\n\n\n var Types = {\n FREIGHT_COST: {\n Id: 0,\n Title: 'logistics.import.freight_cost'\n },\n LOCAL_TRANSPORT_COST: {\n Id: 1,\n Title: 'logistics.import.local_transport_cost'\n },\n INVOICES: {\n Id: 2,\n Title: 'logistics.import.invoices'\n },\n NATIONAL_FREIGHT_COST: {\n Id: 3,\n Title: 'logistics.import.national_freight_cost'\n }\n };\n\n return {\n\n Types: Types,\n\n Status: Status,\n\n getTypeById: function (id) {\n var found = null;\n Object.keys(Types).forEach(function (key) {\n var type = Types[key];\n if (found == null && type.Id === id) {\n found = type;\n }\n });\n return found;\n },\n\n getStatusById: function (id) {\n var found = null;\n Object.keys(Status).forEach(function (key) {\n var status = Status[key];\n if (found == null && status.Id === id) {\n found = status;\n }\n });\n return found;\n },\n\n listFileFreightCost: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + LOGISTICS_BASE + \"import/list\", {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n save: function (freightCostWorksheet) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + LOGISTICS_BASE + \"import/\", freightCostWorksheet, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n download: function (filtro) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + LOGISTICS_BASE + 'import/download/',\n {\n params: filtro,\n responseType: 'arraybuffer'\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n }\n , function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n\n };\n }\n})();\n\n(function () {\n 'use_strict';\n\n angular\n .module('aqmsFrontend')\n .controller('LogisticsImportListController', LogisticsImportListController);\n\n function LogisticsImportListController($scope, $log, $translate, $filter, $state, $window, $document, LogisticsService, AuthService, ToastUtil, FileService, moment,\n LogisticsImportService, DialogControllerTemplate, DialogController) {\n\n var vm = this;\n\n var yearDate = moment(new Date());\n var USER = {\n Id: parseInt($window.localStorage.userID),\n Name: $window.localStorage.aliasAqms\n };\n\n vm.attachments = [];\n\n vm.TypeList = [\n {name: LogisticsImportService.Types.FREIGHT_COST.Title, value: LogisticsImportService.Types.FREIGHT_COST.Id},\n {\n name: LogisticsImportService.Types.LOCAL_TRANSPORT_COST.Title,\n value: LogisticsImportService.Types.LOCAL_TRANSPORT_COST.Id\n },\n {name: LogisticsImportService.Types.INVOICES.Title, value: LogisticsImportService.Types.INVOICES.Id},\n {\n name: LogisticsImportService.Types.NATIONAL_FREIGHT_COST.Title,\n value: LogisticsImportService.Types.NATIONAL_FREIGHT_COST.Id\n }\n ];\n\n vm.profile = {\n canAdd: false,\n canEdit: false,\n canDelete: false,\n canView: false,\n hasLoad: false,\n canApprove: false,\n canExport: false\n };\n\n vm.freightCostList = [];\n\n vm.WorksheetFile = {\n User: USER,\n FilePath: null,\n FileName: null,\n Type: {name: LogisticsImportService.Types.FREIGHT_COST.Title, value: LogisticsImportService.Types.FREIGHT_COST.Id},\n Year: yearDate.year()\n };\n\n vm.itensPerPageList = [\n {name: '5', value: 5, before: 0, after: 6},\n {name: '10', value: 10, before: 5, after: 11},\n {name: '20', value: 20, before: 10, after: 21},\n {name: '30', value: 30, before: 20, after: 31},\n {name: '40', value: 40, before: 30, after: 41},\n {name: '50', value: 50, before: 40, after: 51}]\n\n vm.itemPerPage = vm.itensPerPageList[0];\n vm.totalLista = 0;\n\n vm.searchParam = {\n BusinessId: AuthService.getBusinessId(),\n Page: 1,\n MaxPerPage: vm.itemPerPage.value\n };\n\n vm.shouldShow = function (item) {\n if (vm.totalLista > 0 && item != undefined) {\n return vm.totalLista >= item.value || (vm.totalLista < item.after && vm.totalLista > item.before);\n }\n return false;\n }\n\n vm.changeItemsPerPage = function () {\n if (vm.itemPerPage == null) {\n vm.itemPerPage = vm.itensPerPageList[0];\n }\n search(1, vm.itemPerPage.value);\n };\n\n vm.onPageChange = function () {\n search(vm.searchParam.Page, vm.searchParam.MaxPerPage);\n };\n\n vm.goToKpi = function () {\n $state.go('kpi-freightcost-list', {});\n }\n\n vm.init = function () {\n LogisticsService.loadProfileModules(vm, $scope)\n .then(function () {\n validateViewPermission();\n vm.search();\n })\n .catch(function (error) {\n var msg = error.data && error.data.Message ? error.data.Message : $filter('translate')('error.logistc.freight.cost.search');\n ToastUtil.showToastMessage($translate.instant(msg), ToastUtil.ToastType.ERROR);\n });\n\n };\n\n function validateViewPermission() {\n if (!vm.profile.CanView) {\n $state.go('not-authorized', {}, {});\n }\n }\n\n function search(page, max) {\n vm.searchParam.Page = page;\n vm.searchParam.MaxPerPage = max;\n\n LogisticsService.searchFileFreightCost(vm, vm.searchParam, $scope)\n .then(function (response) {\n angular.forEach(response.resultList, formatResponse);\n vm.freightCostList = response.resultList;\n vm.totalLista = response.total;\n })\n .catch(function (error) {\n if (error && error.status) {\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"error.logistc.freight.cost.search\"), ToastUtil.ToastType.ERROR);\n }\n }\n });\n }\n\n vm.search = function () {\n vm.searchParam.Page = 1;\n if (sessionStorage.getItem(\"searchParam\")) {\n vm.searchParam = JSON.parse(sessionStorage.getItem(\"searchParam\"));\n sessionStorage.removeItem(\"searchParam\");\n vm.itensPerPageList.forEach(function (element) {\n if (element.value == vm.searchParam.MaxPerPage) {\n vm.itemPerPage = element;\n return;\n }\n });\n } else {\n vm.itemPerPage = vm.itensPerPageList[0];\n }\n search(vm.searchParam.Page, vm.itemPerPage.value);\n };\n\n vm.canSave = function () {\n return $scope.importForm.$valid && hasFileWorksheet();\n };\n\n vm.onCloseImportErrorList = function () {\n vm.errors = [];\n }\n\n vm.save = function () {\n if (vm.canSave()) {\n\n var message = $translate.instant(\"logistic.confirm.dialog.message\");\n vm.showConfirm(message, function () {\n confirmSaveFile();\n });\n }\n };\n\n function confirmSaveFile() {\n LogisticsService.createFreightCostWorksheet(vm, parseImport(), $scope)\n .then(function (response) {\n if (response.Count === 0 && response.Errors.length > 0) {\n vm.errors = response.Errors;\n DialogControllerTemplate.showWithCloseListener('logistics.import.errors.title', 'logistics.import.errors.label',\n '', vm, vm.onCloseImportErrorList);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"logistics.import.success\"), ToastUtil.ToastType.SUCCESS);\n vm.WorksheetFile.FilePath = null;\n vm.WorksheetFile.FileName = null;\n vm.attachments = [];\n vm.search();\n }\n\n })\n .catch(onSaveError);\n }\n\n function parseImport() {\n var file = angular.copy(vm.WorksheetFile);\n\n if (vm.attachments && vm.attachments.length > 0) {\n var attachment = angular.copy(vm.attachments[0]);\n file.FilePath = attachment.Path;\n file.FileName = attachment.FileName;\n file.Type = file.Type.value;\n }\n\n return file;\n }\n\n function onSaveError(error) {\n if (error && error === 'not authorized') {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n return;\n }\n\n var serverMsg = error.data ? error.data.Message : 'Network error';\n var errorMsg;\n\n if (error.data && error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n return;\n }\n } else {\n errorMsg = $translate.instant(serverMsg)\n }\n\n ToastUtil.showToastMessage($translate.instant(errorMsg), ToastUtil.ToastType.ERROR);\n }\n\n\n function hasFileWorksheet() {\n return vm.attachments && vm.attachments.length > 0;\n }\n\n vm.openSite = function (site) {\n $window.open(site, '_blank');\n };\n\n vm.download = function (filePath, fileName) {\n var file = {\n Path: filePath,\n FileName: fileName\n }\n FileService.download(file).then(function (response) {\n var newFIle = new Blob([response], {}), fileURL = URL.createObjectURL(newFIle),\n a = $document[0].createElement(\"a\");\n $document[0].body.appendChild(a);\n a.style = \"display: none\";\n a.href = fileURL;\n a.download = file.FileName;\n a.click();\n }).catch(function (error) {\n $log.log(error);\n });\n };\n\n vm.showConfirm = function (text, action) {\n DialogController.show($translate.instant(\"logistic.title.import\"), '', action, text);\n };\n\n vm.init();\n\n function formatResponse(freightCost) {\n var status = LogisticsImportService.getStatusById(freightCost.Status);\n freightCost.StatusDescription = status.Title;\n }\n\n vm.getStatusName = function (statusId) {\n var statusTitle = \"\";\n var statusList = LogisticsService.getStatusOptions();\n angular.forEach(statusList, function (value) {\n if (value.id == statusId) {\n statusTitle = value.Name;\n }\n });\n return statusTitle;\n };\n\n vm.getType = function (id) {\n var type = LogisticsImportService.getTypeById(id);\n return type;\n };\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('ImportErrorController', ImportErrorController)\n .directive('importError', ImportErrorDirective);\n\n function ImportErrorDirective() {\n var directive = {\n bindToController: true,\n controller: 'ImportErrorController',\n controllerAs: 'ctrl',\n restrict: 'E',\n replace: true,\n templateUrl: \"app/logistics/import/import-error.html\"\n };\n return directive;\n\n }\n /* @ngInject */\n function ImportErrorController ($scope) {\n var vm = this;\n\n vm.errors = $scope.parentDialog.errors;\n\n if(!vm.errors){\n vm.errors = [];\n }\n\n vm.totalLista = vm.errors.length;\n\n vm.searchParam = {\n Page: 1,\n MaxPerPage: 10\n }\n\n vm.close = function () {\n $scope.$close('ok');\n $scope.$dismiss();\n };\n }\n})();\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('PartTypeService', PartTypeService);\n\n var BASE = '/part-type/';\n /** @ngInject */\n function PartTypeService($injector, $q, ConfigurationService) {\n return {\n listPartTypes: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + \"list\", {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getById: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + 'byId/' + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n save: function (partType) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + BASE, partType, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n delete: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + BASE + \"/\" + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n };\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('PartInspectionTypeService', PartInspectionTypeService);\n\n var BASE = '/part-inspection-type/';\n /** @ngInject */\n function PartInspectionTypeService($injector, $q, ConfigurationService) {\n return {\n listPartInspectionTypes: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + \"list\", {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getById: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + 'byId/' + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n save: function (partType) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + BASE, partType, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n delete: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + BASE + \"/\" + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n };\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(PartInspectionTranslate);\n\n /** @ngInject */\n function PartInspectionTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'title.part.inspection': 'Part Inspection',\n 'part.inspection.new.label': 'New Part Inspection',\n 'part.inspection.edit.label': 'Edit Part Inspection',\n 'panel.inspection.identification': 'Inspection identification',\n 'panel.inspection.lot.traceability': 'Lot traceability',\n 'panel.inspection.filter.type': 'Filter for inspection type',\n 'label.inspection.iqc.number': 'IQC Number: ',\n 'label.inspection.created.date': 'Created Date',\n 'label.inspection.date': 'Date',\n 'label.inspection.entry.date': 'Entry date',\n 'label.inspection.closed.date': 'Closed date',\n 'label.inspection.iqc.number-list': 'IQC Number',\n 'label.inspection.vendor': 'Vendor',\n 'label.inspection.created.by': 'Created by',\n 'label.inspection.approved.by': 'Approved by',\n 'label.inspection.batch': 'Batch',\n 'label.inspection.batch.date': 'Entry Date',\n 'label.inspection.batch.quantity': 'Batch quantity',\n 'label.inspection.sampling.quantity': 'Sampling',\n 'label.inspection.batch.quantity.placeholder': 'Batch quantity',\n 'label.inspection.sampling.quantity.placeholder': 'Sampling quantity',\n 'label.inspection.invoice': 'Invoice',\n 'label.inspection.code': 'Code',\n 'label.inspection.part.description': 'Part Description',\n 'label.inspection.drawing.spec': 'Drawing / Spec:',\n 'label.inspection.type': 'Type',\n 'label.inspection.subtypes': 'Subtype(s)',\n 'label.inspection.subtype': 'Subtype',\n 'label.inspection.samples': 'Samples',\n 'label.inspection.select.type': 'Select a type',\n 'label.inspection.select.sub.type': 'Select a subtype',\n 'label.inspection.add.remark': 'Add remark',\n 'label.inspection.update.remark': 'Update remark',\n 'label.inspection.attachment': 'Attachment',\n 'label.inspection.approve': 'Approve',\n 'label.inspection.approve.with.reservation': 'Approve with reservations',\n 'label.inspection.reject': 'Reject',\n 'label.inspection.part.number': 'Part number',\n 'label.inspection.status': 'Status',\n 'label.inspection.export': 'Export',\n 'label.inspection.approved': 'Approved',\n 'label.inspection.rejected': 'Rejected',\n 'label.inspection.pending': 'Pending approval',\n 'label.inspection.full.report': 'Full report',\n 'label.inspection.summary.report': 'Summary report',\n 'label.inspection.waiting.approval': 'Waiting for approval',\n 'label.inspection.none': 'None',\n 'label.inspection.status.approved': 'Approved',\n 'label.inspection.status.approved.reservations': 'Approved with reservations',\n 'label.inspection.status.rejected': 'Rejected',\n 'label.inspection.delete.status.error': \"Item has already been approved or rejected and cannot be removed.\",\n 'part.inspection.delete.error.msg': 'An error occurred when try to remove Inspection',\n 'part.inspection.delete.success.msg': 'Inspection successfully removed.',\n 'part.inspection.metric.mean.label': 'Mean',\n 'part.inspection.metric.stdev.label': 'Stdev',\n 'part.inspection.metric.range.label': 'Range',\n 'part.inspection.metric.cp.label': 'Cp',\n 'part.inspection.metric.cpk.label': 'Cpk',\n 'part.inspection.metric.qualityyeld.label': 'Quality Yeld',\n 'part.inspection.inspect.label': 'Inspect',\n 'part.inspection.findings.label': 'Inspection Findings',\n 'part.inspection.reference.label': 'References',\n 'part.inspection.load.part.error.msg': 'An error occurred when try to load part.',\n 'part.inspection.vendor.hint.msg': 'To view vendor list, select one part.',\n 'part.inspection.lot.traceability.duplicated.msg': 'Date or code already inserted in lot traceability list.',\n 'part.inspection.lot.traceability.empty.msg': 'At least one field must be filled.',\n 'part.inspection.itemtemplate.load.error.msg': 'An error occurred when try to load subtype list.',\n 'part.inspection.load.combo.subtype.error': 'An error occurred when try to load subtype list.',\n 'part.inspection.save.success.msg': 'Inspection successfully saved.',\n 'part.inspection.save.error.msg': 'An error occurred when try to save inspection.',\n 'part.inspection.entrydate.hint.msg': 'Date of entry into the IQC department.',\n 'part.iqc.number.search.placeholder': 'Search by IQC Number',\n 'part.inspection.not.have.template': 'This template has no \"Type of inspection\" registered.'\n });\n\n $translateProvider.translations('pt', {\n 'title.part.inspection': 'Inspeção de Peça',\n 'part.inspection.new.label': 'Nova Inspeção de Peça',\n 'part.inspection.edit.label': 'Editar Inspeção de Peça',\n 'panel.inspection.identification': 'Identificação da inspeção',\n 'panel.inspection.lot.traceability': 'Rastreabilidade do lote',\n 'panel.inspection.filter.type': 'Filtro por tipo de inspeção',\n 'label.inspection.iqc.number': 'Número IQC: ',\n 'label.inspection.created.date': 'Data de criação',\n 'label.inspection.date': 'Data',\n 'label.inspection.entry.date': 'Data de entrada',\n 'label.inspection.closed.date': 'Data de fechamento',\n 'label.inspection.iqc.number-list': 'Número do IQC',\n 'label.inspection.vendor': 'Fornecedor',\n 'label.inspection.created.by': 'Criado por',\n 'label.inspection.approved.by': 'Aprovado por',\n 'label.inspection.batch': 'Lote',\n 'label.inspection.batch.date': 'Entrada Lote',\n 'label.inspection.batch.quantity': 'Qtd. do lote',\n 'label.inspection.sampling.quantity': 'Amostragem',\n 'label.inspection.batch.quantity.placeholder': 'Quantidade do lote',\n 'label.inspection.sampling.quantity.placeholder': 'Quantidade da amostragem',\n 'label.inspection.invoice': 'Nota fiscal',\n 'label.inspection.code': 'Código',\n 'label.inspection.part.description': 'Descrição da Peça',\n 'label.inspection.drawing.spec': 'Desenho / Especificação:',\n 'label.inspection.type': 'Tipo',\n 'label.inspection.subtypes': 'Subtipo(s)',\n 'label.inspection.subtype': 'Subtipo',\n 'label.inspection.samples': 'Amostras',\n 'label.inspection.select.type': 'Selecione um tipo',\n 'label.inspection.select.sub.type': 'Selecione um subtipo',\n 'label.inspection.add.remark': 'Adicionar observação',\n 'label.inspection.update.remark': 'Atualizar observação',\n 'label.inspection.approve': 'Aprovar',\n 'label.inspection.approve.with.reservation': 'Aprovar com ressalvas',\n 'label.inspection.reject': 'Rejeitar',\n 'label.inspection.attachment': 'Anexo',\n 'label.inspection.part.number': 'Número da peça',\n 'label.inspection.status': 'Situação',\n 'label.inspection.export': 'Exportar',\n 'label.inspection.approved': 'Aprovado',\n 'label.inspection.rejected': 'Rejeitado',\n 'label.inspection.pending': 'Pendente de aprovação',\n 'label.inspection.full.report': 'Relatório completo',\n 'label.inspection.summary.report': 'Relatório resumido',\n 'label.inspection.waiting.approval': 'Aguardando aprovação',\n 'label.inspection.none': 'Nenhum',\n 'label.inspection.status.approved': 'Aprovado',\n 'label.inspection.status.approved.reservations': 'Aprovado com ressalvas',\n 'label.inspection.status.rejected': 'Rejeitado',\n 'label.inspection.delete.status.error': \"Item já foi aprovado ou rejeitado e não pode ser removido.\",\n 'part.inspection.delete.error.msg': 'Ocorreu um erro ao tentar remover a inspeção.',\n 'part.inspection.delete.success.msg': 'Inspeção removida com sucesso.',\n 'part.inspection.metric.mean.label': 'Média',\n 'part.inspection.metric.stdev.label': 'Stdev',\n 'part.inspection.metric.range.label': 'Intervalo',\n 'part.inspection.metric.cp.label': 'Cp',\n 'part.inspection.metric.cpk.label': 'Cpk',\n 'part.inspection.metric.qualityyeld.label': 'Rendimento de Qualidade',\n 'part.inspection.inspect.label': 'Inspecionar',\n 'part.inspection.findings.label': 'Resultado da Inspeção',\n 'part.inspection.reference.label': 'Referências',\n 'part.inspection.load.part.error.msg': 'Ocorreu um erro ao tentar carregar a peça.',\n 'part.inspection.vendor.hint.msg': 'Para visualizar a lista de fornecedores, selecione uma peça.',\n 'part.inspection.lot.traceability.duplicated.msg': 'Data ou código já inserido na lista de rastreabilidade do lote.',\n 'part.inspection.lot.traceability.empty.msg': 'Ao menos um campo deve ser preenchido.',\n 'part.inspection.itemtemplate.load.error.msg': 'Ocorreu um erro ao tentar carregar a lista de subtipos.',\n 'part.inspection.load.combo.subtype.error': 'Ocorreu um erro ao tentar carregar a listagem de subtipos.',\n 'part.inspection.save.success.msg': 'A inspeção foi salva com sucesso.',\n 'part.inspection.save.error.msg': 'Ocorreu um erro ao tentar salvar a inspeção.',\n 'part.inspection.entrydate.hint.msg': 'Data da Entrada no departamento de IQC.',\n 'part.iqc.number.search.placeholder': 'Buscar pelo número do IQC',\n 'part.inspection.not.have.template': 'Este template não possui \"Tipo de inspeção\" cadastrado.'\n });\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('PartInspectionService', PartInspectionService);\n\n var BASE = '/part-inspection/';\n /** @ngInject */\n function PartInspectionService($window, $injector, $q, ConfigurationService) {\n return {\n\n loadPart: function (filterParams) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + \"load-part/\", {\n params: filterParams\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n savePartinspection: function (partInspection) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + BASE, partInspection, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n saveInspectionSubtype: function (partInspection) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + BASE + \"save-inspection-subtype\", partInspection, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getById: function (Id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + 'byId/' + Id, {\n\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n loadItemTemplate: function (Id, InspectionId) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + 'itemTemplate/byId/' + Id + '/' + InspectionId, {\n\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n loadPartAttachmentsByInspection: function (InspectionId) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + 'loadPartAttachments/' + InspectionId, {\n\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n listWithParams: function (filterParams) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE, {\n params: filterParams,\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n export: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + '/export/' + id, {\n responseType: 'arraybuffer'\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n exportXlsReport: function (iqcReport) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + 'export-excel/', {\n params: iqcReport,\n responseType: 'arraybuffer'\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n delete: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + BASE + \"/\" + id, { })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n\n };\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(PartInspectionRouter);\n\n /** @ngInject */\n function PartInspectionRouter($stateProvider) {\n\n\n $stateProvider.state('part-inspection-list', {\n url: '/part-inspection',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/iqc/part-inspection/part-inspection-list.html',\n controller: 'PartInspectionListController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.iqc'\n },\n authorize: true\n });\n\n $stateProvider.state('part-inspection-create', {\n url: '/part-inspection/create',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/iqc/part-inspection/part-inspection-edit.html',\n controller: 'PartInspectionEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.iqc'\n },\n authorize: true\n });\n\n $stateProvider.state('part-inspection-edit', {\n url: '/part-inspection/edit/:Id',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/iqc/part-inspection/part-inspection-edit.html',\n controller: 'PartInspectionEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.iqc'\n },\n authorize: true\n });\n\n\n\n $stateProvider.state('part-inspection-inspect', {\n url: '/part-inspection-inspect/:Id/:InspectionId',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/iqc/part-inspection/inspect-action/part-inspection-inspect.html',\n controller: 'InspectActionController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.iqc'\n },\n authorize: true\n });\n\n\n\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('PartInspectionListController', PartInspectionListController);\n\n function PartInspectionListController(PartInspectionService, ToastUtil, $state, $translate, AuthService, $log,\n moment, $scope, DefaultService, $document) {\n\n var vm = this;\n var exporting = false;\n\n vm.itensPerPageList = [\n {name: '5', value: 5, before: 0, after: 6}, \n {name: '10', value: 10, before: 5, after: 11}, \n {name: '20', value: 20, before: 10, after: 21}, \n {name: '30', value: 30, before: 20, after: 31}, \n {name: '40', value: 40, before: 30, after: 41}, \n {name: '50', value: 50, before: 40, after: 51}]\n\n vm.itemPerPage = vm.itensPerPageList[0];\n\n var profilePermission = {\n CanAdd: false,\n CanEdit: false,\n CanDelete: false,\n CanView: false,\n CanApprove: false,\n CanExport: false\n }\n\n vm.initTabConfig = {\n isApprover: profilePermission.CanApprove,\n itemSelected: '1'\n }\n\n var finalStatus = {\n ONGOING: 0,\n WAITINGAPPROVAL: 1,\n APPROVED: 2,\n RESERVATIONS: 3,\n REJECT: 4\n };\n\n vm.statusList = [{\n Value: finalStatus.ONGOING,\n Title: \"label.ongoing\"\n },\n {\n Value: finalStatus.WAITINGAPPROVAL,\n Title: \"label.inspection.waiting.approval\"\n },\n {\n Value: finalStatus.APPROVED,\n Title: \"label.inspection.approved\"\n },\n {\n Value: finalStatus.RESERVATIONS,\n Title: \"label.inspection.status.approved.reservations\"\n },\n {\n Value: finalStatus.REJECT,\n Title: \"label.inspection.status.rejected\"\n }\n ];\n\n vm.searchParams = {\n PartNumber: \"\",\n IqcNumber: \"\",\n EntryDate: \"\",\n Status: '-1',\n BusinessId: AuthService.getBusinessId(),\n Page: 1,\n MaxPerPage: vm.itemPerPage.value\n };\n\n vm.clearFields = function () {\n vm.searchParams.PartNumber = '';\n vm.searchParams.IqcNumber = '';\n vm.searchParams.EntryDate = '';\n vm.searchParams.Status = '-1';\n vm.searchParams.Date = '';\n };\n\n /** ListView Attributes */\n vm.listModel = {};\n vm.totalList = 0;\n\n vm.shouldShow = function (item) {\n if(vm.totalList > 0 && item != undefined) {\n return vm.totalList >= item.value || (vm.totalList < item.after && vm.totalList > item.before);\n }\n return false;\n }\n \n vm.changeItemsPerPage = function() {\n if ( vm.itemPerPage == null ) {\n vm.itemPerPage = vm.itensPerPageList[0];\n }\n vm.searchParams.Page = 1;\n vm.searchParams.MaxPerPage = vm.itemPerPage.value;\n vm.searchInspection()\n }\n\n vm.create = function () {\n if (profilePermission.CanAdd) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('part-inspection-create', {});\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n }\n\n vm.resolveStatusCss = function (status) {\n var result = \"\";\n\n switch (status) {\n case finalStatus.WAITINGAPPROVAL:\n result = 'ng-binding label label-pending';\n break;\n case finalStatus.ONGOING:\n result = 'ng-binding label label-ongoing';\n break;\n case finalStatus.APPROVED:\n result = 'ng-binding label label-approved';\n break;\n case finalStatus.RESERVATIONS:\n result = 'ng-binding label label-approved';\n break;\n case finalStatus.REJECT:\n result = 'ng-binding label label-rejected';\n break;\n }\n\n return result;\n }\n\n vm.resolveStatus = function (status) {\n switch (status) {\n case finalStatus.ONGOING:\n return $translate.instant('label.ongoing');\n case finalStatus.WAITINGAPPROVAL:\n return $translate.instant('label.inspection.waiting.approval');\n case finalStatus.APPROVED:\n return $translate.instant('label.inspection.status.approved');\n case finalStatus.RESERVATIONS:\n return $translate.instant('label.inspection.status.approved.reservations');\n case finalStatus.REJECT:\n return $translate.instant('label.inspection.status.rejected');\n }\n }\n\n function init() {\n loadProfileModules();\n }\n\n vm.edit = function (id) {\n if (profilePermission.CanEdit) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('part-inspection-edit', {\n Id: id\n });\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n }\n\n\n vm.isShowExportButton = function (item) {\n var isShow = false;\n if (item.Status != finalStatus.WAITINGAPPROVAL && item.Status != finalStatus.ONGOING) {\n isShow = true;\n }\n return isShow;\n }\n\n vm.export = function (id) {\n if (profilePermission.CanExport) {\n if (!exporting) {\n exporting = true;\n\n PartInspectionService.export(id).then(function (response) {\n var newFile = new Blob([response], {\n type: 'application/pdf'\n });\n var fileURL = URL.createObjectURL(newFile);\n var date = moment().format(\"DD_MM_YYYY_HH_mm_ss\");\n var a = $document[0].createElement(\"a\");\n $document[0].body.appendChild(a);\n a.style = \"display: none\";\n a.href = fileURL;\n a.download = \"Incoming_Quality_Control_\" + AuthService.getBusinessName() + \"_\" + date + \".pdf\";\n\n a.click();\n exporting = false;\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"service.load.error\"), ToastUtil.ToastType.ERROR);\n exporting = false;\n });\n }\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n }\n\n vm.exportExcel = function (id) {\n if (profilePermission.CanExport) {\n if (!exporting) {\n exporting = true;\n var xlsReport = {};\n xlsReport.Id = id;\n xlsReport.Business = AuthService.getBusinessName();\n xlsReport.Company = AuthService.getCompanyName();\n //// xlsReport.Language = $translate.use();\n PartInspectionService.exportXlsReport(xlsReport)\n .then(function (response) {\n\n var date = moment().format(\"DD_MM_YYYY_HH_mm_ss\");\n\n var newFIle = new Blob([response], {\n type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\n });\n var fileURL = URL.createObjectURL(newFIle);\n var a = $document[0].createElement(\"a\");\n $document[0].body.appendChild(a);\n a.style = \"display: none\";\n a.href = fileURL;\n a.download = \"Incoming_Quality_Control_\" + AuthService.getBusinessName() + \"_\" + date + \".xlsx\";\n a.click();\n vm.disableExport = false;\n exporting = false;\n\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"service.load.error\"), ToastUtil.ToastType.ERROR);\n vm.disableExport = false;\n exporting = false;\n });\n }\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n }\n\n vm.delete = function (id, status) {\n if (profilePermission.CanDelete) {\n if (status == finalStatus.WAITINGAPPROVAL || status == finalStatus.ONGOING) {\n PartInspectionService.delete(id).then(function () {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n vm.searchInspection();\n ToastUtil.showToastMessage($translate.instant(\"part.inspection.delete.success.msg\"), ToastUtil.ToastType.SUCCESS);\n }).catch(function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized || error.status == $scope.HttpStatusCodeConflict) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"part.inspection.delete.error.msg\"), ToastUtil.ToastType.ERROR);\n }\n });\n } else {\n ToastUtil.showToastMessage($translate.instant('label.inspection.delete.status.error'), ToastUtil.ToastType.WARN);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n }\n\n vm.clearSearchFields = function () {\n vm.searchParams.PartNumber = \"\";\n vm.searchParams.EntryDate = \"\";\n vm.searchParams.Status = \"-1\";\n vm.searchParams.IqcNumber = \"\";\n\n };\n\n vm.search = function() {\n vm.itemPerPage = vm.itensPerPageList[0];\n vm.searchParams.Page = 1;\n vm.searchParams.MaxPerPage = vm.itemPerPage.value;\n vm.searchInspection();\n }\n\n vm.searchInspection = function () {\n if (sessionStorage.getItem(\"searchParams\")) {\n vm.searchParams = JSON.parse(sessionStorage.getItem(\"searchParams\"));\n sessionStorage.removeItem(\"searchParams\");\n vm.itensPerPageList.forEach(function(element) {\n if (element.value == vm.searchParams.MaxPerPage) {\n vm.itemPerPage = element;\n return;\n }\n });\n }\n \n if (vm.searchParams.Date) {\n vm.searchParams.EntryDate = moment(vm.searchParams.Date).format('DD/MM/YYYY');\n } else {\n vm.searchParams.EntryDate = null;\n }\n\n if (vm.searchParams.Status == null) {\n vm.searchParams.Status = -1;\n }\n\n PartInspectionService.listWithParams(angular.copy(vm.searchParams))\n .then(\n function (response) {\n vm.listModel = response.resultList;\n vm.totalList = response.total;\n })\n .catch(\n function (error) {\n if (error.status !== $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"error.production.plan.search\"), ToastUtil.ToastType.ERROR);\n }\n vm.clearSearchFields();\n });\n }\n\n function loadProfileModules() {\n var profileModule = {};\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.iqcpart;\n DefaultService.loadModules(profileModule).then(function (response) {\n profilePermission = angular.copy(response);\n vm.initTabConfig.isApprover = profilePermission.CanApprove;\n\n if (profilePermission.CanView) {\n vm.searchInspection();\n } else {\n $state.go('not-authorized', {});\n }\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n });\n }\n\n init();\n }\n})();\n\n/*eslint no-redeclare: 0*/\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('PartInspectionEditController', PartInspectionEditController);\n\n function PartInspectionEditController(PartInspectionService, $window, $filter, $interval, ToastUtil, $stateParams, $state,\n $translate, $scope, $log, moment, AuthService, DefaultService, $document) {\n\n var vm = this;\n\n\n vm.profilePermission = {\n CanAdd: false,\n CanEdit: false,\n CanDelete: false,\n CanView: false,\n CanApprove: false,\n CanExport: false,\n CanConsult: false\n }\n\n vm.IqcStatus = {\n ONGOING: 0,\n WAITINGAPPROVAL: 1,\n APPROVED: 2,\n RESERVATIONS: 3,\n REJECT: 4\n };\n\n\n vm.emailList = [];\n vm.inspection = {\n Business: {\n Id: AuthService.getBusinessId(),\n Name: AuthService.getBusinessName()\n },\n Part: {},\n CreatedBy: getCurrentUser(),\n Vendor: {},\n PartInspectionLotTraceabilities: [],\n PartInspectionResults: [],\n PartInspectionRemarks: [],\n PartInspectionNotifies: [],\n PartInspectionGroupedResults: [],\n Status: vm.IqcStatus.ONGOING\n };\n\n vm.partNumber = {};\n vm.lotTraceability = {};\n /** Remark Panel */\n vm.remarkObj = {\n Type: \"\",\n Attachments: []\n };\n\n vm.comboSubtypeList = [];\n\n /** Flag to indicate remark edition. */\n vm.isEditRemark = false;\n\n vm.idToEdit = undefined;\n\n var exporting = false;\n\n\n /**\n * returns logged user.\n * @returns {{Name: *, Id: *}}\n */\n function getCurrentUser() {\n var createdBy = {\n Name: $window.localStorage.aliasAqms,\n Id: $window.localStorage.userID\n };\n\n return createdBy;\n }\n\n\n /**\n * Load part number according selected id.\n */\n vm.loadPartNumber = function () {\n if (vm.partNumber != null && vm.partNumber.Id != undefined && !vm.idToEdit) {\n var searchParams = {\n PartId: vm.partNumber.Id\n };\n\n PartInspectionService.loadPart(searchParams).then(function (response) {\n\n if (response.CurrentPartInspectionTemplate) {\n vm.inspection.Part = angular.copy(response);\n var metricObj = {\n MeanMetric: 0,\n StdevMetric: 0,\n MaxMetric: 0,\n MinMetric: 0,\n RangeMetric: 0,\n CpMetric: 0,\n CpkMetric: 0,\n ActualDPMMetric: 0,\n PotencialDPMMetric: 0,\n QualityYieldMetric: 0,\n OKMetric: 0,\n NOKMetric: 0\n };\n\n vm.inspection.PartInspectionGroupedResult = [];\n angular.forEach(vm.inspection.Part.CurrentPartInspectionTemplate.PartInspectionTemplateTypes, function (type) {\n angular.forEach(type.PartInspectionItemTemplates, function (itemTemp) {\n itemTemp.Metric = angular.copy(metricObj);\n });\n });\n } else {\n vm.inspection.Part = {};\n vm.partNumber = '';\n ToastUtil.showToastMessage($translate.instant(\"part.inspection.not.have.template\"), ToastUtil.ToastType.WARN);\n }\n\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"part.inspection.load.part.error.msg\"), ToastUtil.ToastType.WARN);\n });\n\n }\n }\n\n\n /**\n * Add Lot traceability to inspection.\n * It must add even if only one field is filled.\n */\n vm.addLotTraceability = function () {\n vm.lotTraceability.Code = (angular.isUndefined(vm.lotTraceability.Code) || vm.lotTraceability.Code == null || vm.lotTraceability.Code.trim().length == 0) ? null : vm.lotTraceability.Code;\n if (((angular.isDefined(vm.lotTraceability.DateTemp) && vm.lotTraceability.DateTemp != null) || vm.lotTraceability.Code != null)) {\n if (!itemAlreadyExistsInLotTraceability(vm.lotTraceability.DateTemp, vm.lotTraceability.Code, vm.lotTraceability.Id, vm.lotTraceability.IdTemp)) {\n\n if (vm.lotTraceability.Id == undefined && vm.lotTraceability.IdTemp == undefined) {\n vm.lotTraceability.IdTemp = new Date().getTime();\n }\n\n vm.lotTraceability.Date = (angular.isDefined(vm.lotTraceability.DateTemp) && vm.lotTraceability.DateTemp != null) ? moment(angular.copy(vm.lotTraceability.DateTemp)).format('DD/MM/YYYY') : undefined;\n\n vm.lotTraceability.Description = ((vm.lotTraceability.Code) ? vm.lotTraceability.Code : vm.lotTraceability.Date);\n\n vm.inspection.PartInspectionLotTraceabilities.push(angular.copy(vm.lotTraceability));\n\n vm.lotTraceability = {};\n isLotTraceAbilityEdit = false;\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(\"part.inspection.lot.traceability.empty.msg\"), ToastUtil.ToastType.WARN);\n }\n\n }\n\n vm.editLotTraceability = function (item) {\n vm.lotTraceability = angular.copy(item);\n\n if (vm.lotTraceability.Date != null) {\n var lotDate = moment(vm.lotTraceability.Date, 'DD/MM/YYYY');\n vm.lotTraceability.DateTemp = new Date(lotDate.year(), lotDate.month(), lotDate.date());\n }\n isLotTraceAbilityEdit = true;\n }\n\n vm.removeLotTraceability = function (obj) {\n for (var i = 0; i < vm.inspection.PartInspectionLotTraceabilities.length; i++) {\n var item = vm.inspection.PartInspectionLotTraceabilities[i];\n if ((item.Id != undefined && item.Id == obj.Id) || (item.IdTemp != undefined && item.IdTemp == obj.IdTemp)) {\n vm.inspection.PartInspectionLotTraceabilities.splice(i, 1);\n break;\n }\n\n }\n }\n\n vm.inspectItem = function (id) {\n $state.go('part-inspection-inspect', {\n Id: id,\n InspectionId: angular.copy(vm.inspection.Id)\n });\n }\n\n vm.removeRemark = function (item) {\n if (angular.isDefined(item.Id)) {\n angular.forEach(vm.inspection.PartInspectionRemarks, function (obj, key) {\n if (obj.Id == item.Id) {\n vm.inspection.PartInspectionRemarks.splice(key, 1);\n }\n });\n\n } else {\n angular.forEach(vm.inspection.PartInspectionRemarks, function (obj, key) {\n if (obj.IdTemp == item.IdTemp) {\n vm.inspection.PartInspectionRemarks.splice(key, 1);\n }\n });\n }\n }\n\n vm.MetricType = {\n MeanMetric: 0,\n StdevMetric: 1,\n RangeMetric: 2,\n CpMetric: 3,\n CpkMetric: 4,\n OK: 5,\n NOK: 6\n }\n\n vm.getMetricValue = function (obj, merticType) {\n var value = 0;\n if (vm.inspection.PartInspectionGroupedResults != null && vm.inspection.PartInspectionGroupedResults.length > 0)\n for (var i = 0; i < vm.inspection.PartInspectionGroupedResults.length; i++) {\n var groupResu = vm.inspection.PartInspectionGroupedResults[i];\n if (groupResu.PartInspectionItemTemplate.Id == obj.Id) {\n switch (merticType) {\n case vm.MetricType.MeanMetric:\n value = groupResu.MeanMetric;\n break;\n case vm.MetricType.StdevMetric:\n value = groupResu.StdevMetric;\n break;\n case vm.MetricType.RangeMetric:\n value = groupResu.RangeMetric;\n break;\n case vm.MetricType.CpMetric:\n value = groupResu.CpMetric;\n break;\n case vm.MetricType.CpkMetric:\n value = groupResu.CpkMetric;\n break;\n\n case vm.MetricType.QualityYieldMetric:\n value = groupResu.QualityYieldMetric;\n break;\n\n case vm.MetricType.OK:\n value = groupResu.OKMetric;\n break;\n\n case vm.MetricType.NOK:\n value = groupResu.NOKMetric;\n break;\n\n }\n }\n }\n\n return value;\n }\n\n /**\n * Checks if item is already in lot traceability list.\n * if code is null, validate only Date, else validate Code.\n * @param date\n * @param code\n * @returns {boolean}\n */\n var isLotTraceAbilityEdit = false;\n\n function itemAlreadyExistsInLotTraceability(date, code, id, idTemp) {\n var exists = false;\n var indexToRemove = -1;\n if (code == null) {\n date = moment(angular.copy(date)).format('DD/MM/YYYY');\n\n for (var i = 0; i < vm.inspection.PartInspectionLotTraceabilities.length; i++) {\n var item = vm.inspection.PartInspectionLotTraceabilities[i];\n if ((item.Code == null && (item.DateTemp + \"\" === date + \"\" || item.Date + \"\" === date + \"\")) && ((item.Id != undefined && item.Id != id) || (item.IdTemp != undefined && item.IdTemp != idTemp))) {\n exists = true;\n }\n if (((item.Id != undefined && item.Id == id) || item.IdTemp == idTemp) && isLotTraceAbilityEdit) {\n indexToRemove = angular.copy(i);\n }\n }\n\n } else {\n\n for (var i = 0; i < vm.inspection.PartInspectionLotTraceabilities.length; i++) {\n var item = vm.inspection.PartInspectionLotTraceabilities[i];\n if (item.Code == code && ((item.Id != undefined && item.Id != id) || (item.IdTemp != undefined && item.IdTemp != idTemp))) {\n exists = true;\n }\n if (((item.Id != undefined && item.Id == id) || (item.IdTemp != undefined && item.IdTemp == idTemp)) && isLotTraceAbilityEdit) {\n indexToRemove = angular.copy(i);\n }\n }\n\n }\n\n if (exists) {\n ToastUtil.showToastMessage($translate.instant(\"part.inspection.lot.traceability.duplicated.msg\"), ToastUtil.ToastType.WARN);\n } else if (indexToRemove != -1) {\n vm.inspection.PartInspectionLotTraceabilities.splice(indexToRemove, 1);\n }\n\n return exists;\n }\n\n function watchPart() {\n $scope.$watch(\"ctrl.partNumber\", function () {\n $interval(updateInspectionPart, 250, 1);\n });\n }\n\n function updateInspectionPart() {\n if (angular.isUndefined(vm.partNumber)) {\n vm.inspection.Part = {};\n }\n }\n\n vm.sendIqcToApproval = function () {\n if (vm.inspection.PartInspectionLotTraceabilities.length > 0) {\n vm.inspection.Status = vm.IqcStatus.WAITINGAPPROVAL;\n vm.save(true);\n }\n }\n\n vm.isSendApprovalButtonDisabled = function () {\n var disabled = false;\n\n if (vm.isIqcFinished() || vm.inspection.PartInspectionGroupedResults.length == 0 || vm.inspection.PartInspectionGroupedResults.length != getTotalSubtypes() || !isAllResultFilled() ||\n isSaving) {\n disabled = true;\n }\n\n return disabled;\n }\n\n function isAllResultFilled() {\n var isAllFilled = true;\n\n for (var i = 0; i < vm.inspection.PartInspectionGroupedResults.length; i++) {\n var item = vm.inspection.PartInspectionGroupedResults[i];\n angular.forEach(item.PartInspectionResults, function (resu) {\n if (resu.Result == null || resu.Result == \"\") {\n isAllFilled = false;\n }\n });\n if (!isAllFilled)\n break;\n }\n return isAllFilled;\n }\n\n var lastStatus = -1;\n var isSaving = false;\n vm.save = function (redirectToList) {\n if (vm.inspection.PartInspectionLotTraceabilities.length > 0) {\n\n isSaving = true;\n lastStatus = angular.copy(vm.inspection.Status);\n handleInspectionObjBeforeSave();\n PartInspectionService.savePartinspection(vm.inspection).then(function (response) {\n ToastUtil.showToastMessage($translate.instant(\"part.inspection.save.success.msg\"), ToastUtil.ToastType.SUCCESS);\n if (!redirectToList) {\n vm.inspection.Id = angular.copy(response);\n $state.go('part-inspection-edit', {\n Id: vm.inspection.Id\n });\n } else {\n $state.go('part-inspection-list', {});\n }\n isSaving = false;\n }).catch(function (error) {\n vm.inspection.Status = angular.copy(lastStatus);\n isSaving = false;\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"part.inspection.save.error.msg\"), ToastUtil.ToastType.WARN);\n });\n }\n\n }\n\n\n vm.isShowExportButton = function () {\n var isShow = false;\n if (vm.inspection.Status != vm.IqcStatus.WAITINGAPPROVAL && vm.inspection.Status != vm.IqcStatus.ONGOING) {\n isShow = true;\n }\n return isShow;\n }\n\n\n vm.export = function () {\n var id = vm.inspection.Id;\n if (vm.profilePermission.CanExport) {\n if (!exporting) {\n exporting = true;\n\n PartInspectionService.export(id).then(function (response) {\n var newFile = new Blob([response], {\n type: 'application/pdf'\n });\n var fileURL = URL.createObjectURL(newFile);\n var date = moment().format(\"DD_MM_YYYY_HH_mm_ss\");\n var a = $document[0].createElement(\"a\");\n $document[0].body.appendChild(a);\n a.style = \"display: none\";\n a.href = fileURL;\n a.download = \"Incoming_Quality_Control_\" + AuthService.getBusinessName() + \"_\" + date + \".pdf\";\n\n a.click();\n exporting = false;\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"service.load.error\"), ToastUtil.ToastType.ERROR);\n exporting = false;\n });\n }\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n }\n\n vm.exportExcel = function () {\n if (vm.profilePermission.CanExport) {\n if (!exporting) {\n exporting = true;\n var xlsReport = {};\n xlsReport.Id = vm.inspection.Id;\n xlsReport.Business = AuthService.getBusinessName();\n xlsReport.Company = AuthService.getCompanyName();\n //// xlsReport.Language = $translate.use();\n PartInspectionService.exportXlsReport(xlsReport)\n .then(function (response) {\n\n var date = moment().format(\"DD_MM_YYYY_HH_mm_ss\");\n\n var newFIle = new Blob([response], {\n type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\n });\n var fileURL = URL.createObjectURL(newFIle);\n var a = $document[0].createElement(\"a\");\n $document[0].body.appendChild(a);\n a.style = \"display: none\";\n a.href = fileURL;\n a.download = \"Incoming_Quality_Control_\" + AuthService.getBusinessName() + \"_\" + date + \".xlsx\";\n a.click();\n vm.disableExport = false;\n exporting = false;\n\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"service.load.error\"), ToastUtil.ToastType.ERROR);\n vm.disableExport = false;\n exporting = false;\n });\n }\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n }\n\n vm.goToInspectionList = function () {\n $state.go('part-inspection-list', {});\n }\n\n vm.isIqcFinished = function () {\n var finished = false;\n if ((vm.inspection.Status != vm.IqcStatus.ONGOING && vm.inspection.Status != vm.IqcStatus.WAITINGAPPROVAL) && vm.profilePermission.CanApprove === false) {\n finished = true;\n }\n\n return finished;\n }\n\n /**\n * Return total of subtypes to inspection.\n * @returns {number}\n */\n function getTotalSubtypes() {\n var total = 0;\n\n if (vm.inspection.Part.CurrentPartInspectionTemplate != undefined) {\n angular.forEach(vm.inspection.Part.CurrentPartInspectionTemplate.PartInspectionTemplateTypes, function (type) {\n angular.forEach(type.PartInspectionItemTemplates, function () {\n total++;\n });\n });\n }\n\n return total;\n }\n\n /**\n * Handles Inspection before save.\n */\n\n function handleInspectionObjBeforeSave() {\n vm.inspection.PartInspectionResults = [];\n vm.inspection.BatchDate = moment(angular.copy(vm.inspection.BatchDateTemp)).format('DD/MM/YYYY');\n vm.inspection.CreatedDate = moment(angular.copy(vm.inspection.CreatedDateTemp)).format('DD/MM/YYYY');\n\n if (vm.inspection.StatusTemp)\n vm.inspection.Status = angular.copy(vm.inspection.StatusTemp);\n\n\n vm.inspection.PartInspectionNotifies = [];\n if (vm.emailList && vm.emailList != null && vm.emailList.length > 0) {\n angular.forEach(vm.emailList, function (email) {\n var partInspectionNotify = {\n ExternalEmail: angular.copy(email)\n }\n\n vm.inspection.PartInspectionNotifies.push(partInspectionNotify);\n });\n }\n\n\n if (vm.inspection.Status != vm.IqcStatus.ONGOING && vm.inspection.Status != vm.IqcStatus.WAITINGAPPROVAL)\n vm.inspection.ApprovedBy = getCurrentUser();\n\n\n }\n\n\n function handleInspectionObjToEdit() {\n vm.inspection.StatusTemp = angular.copy(vm.inspection.Status);\n\n //Handle CreatedDate and BatchDate\n var createdDate = moment(vm.inspection.CreatedDate.substring(0, 10), 'DD/MM/YYYY');\n var BatchDate = moment(vm.inspection.BatchDate.substring(0, 10), 'DD/MM/YYYY');\n vm.inspection.CreatedDate = new Date(createdDate.year(), createdDate.month(), createdDate.date());\n vm.inspection.BatchDate = new Date(BatchDate.year(), BatchDate.month(), BatchDate.date());\n\n\n vm.inspection.BatchDateTemp = angular.copy(vm.inspection.BatchDate);\n vm.inspection.CreatedDateTemp = angular.copy(vm.inspection.CreatedDate);\n\n //Handle Lot traceability date.\n if (vm.inspection.PartInspectionLotTraceabilities && vm.inspection.PartInspectionLotTraceabilities != null && vm.inspection.PartInspectionLotTraceabilities.length > 0) {\n angular.forEach(vm.inspection.PartInspectionLotTraceabilities, function (lot) {\n if (lot.Date != null) {\n lot.Date = moment(angular.copy(moment(lot.Date.substring(0, 10), 'DD/MM/YYYY'))).format('DD/MM/YYYY');\n lot.DateTemp = angular.copy(lot.Date);\n }\n lot.Description = ((lot.Code) ? lot.Code : lot.Date);\n });\n }\n\n //Handle EmailList\n\n angular.forEach(vm.inspection.PartInspectionNotifies, function (item) {\n\n vm.emailList.push(angular.copy(item.ExternalEmail));\n });\n\n\n }\n\n function init() {\n loadProfileModules();\n }\n\n function loadPartInspectionToEdit() {\n PartInspectionService.getById(vm.idToEdit).then(function (response) {\n //Handle object\n vm.inspection = angular.copy(response);\n handleInspectionObjToEdit();\n\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"part.load.error.msg\"), ToastUtil.ToastType.ERROR);\n });\n\n }\n\n function loadProfileModules() {\n var profileModule = {};\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.iqcpart;\n DefaultService.loadModules(profileModule).then(function (response) {\n vm.profilePermission = angular.copy(response);\n vm.idToEdit = $stateParams.Id;\n if (vm.idToEdit) {\n if (!vm.profilePermission.CanEdit) {\n $state.go('not-authorized', {});\n } else {\n loadPartInspectionToEdit();\n\n }\n } else {\n if (!vm.profilePermission.CanAdd) {\n $state.go('not-authorized', {});\n } else {\n watchPart();\n }\n }\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n });\n }\n\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('PartInspectionSubTypeService', PartInspectionSubTypeService);\n\n var BASE = '/part-inspection-sub-type/';\n /** @ngInject */\n function PartInspectionSubTypeService($injector, $q, ConfigurationService) {\n return {\n listPartInspectionSubTypes: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + \"list\", {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getById: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + 'byId/' + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n save: function (partType) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + BASE, partType, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n delete: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + BASE + \"/\" + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n };\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('PartInspectionRuleService', PartInspectionRuleService);\n\n var BASE = '/part-inspection-rule/';\n /** @ngInject */\n function PartInspectionRuleService($injector, $q, ConfigurationService) {\n return {\n listPartInspectionRules: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + \"list\", {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getById: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + 'byId/' + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n save: function (partType) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + BASE, partType, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n delete: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + BASE + \"/\" + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n };\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(PartTranslate);\n\n /** @ngInject */\n function PartTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'title.iqc': 'IQC',\n 'title.iqc.complete': 'IQC - Incoming Quality Control',\n 'title.part': 'Part',\n 'title.part.inspection': 'Inspection',\n 'part.new.label': 'New Part',\n 'part.edit.label': 'Edit Part',\n 'part.number.label': 'Part Number',\n 'part.number.delete.success.msg': 'Part number successfully removed.',\n 'part.number.search.placeholder': 'Search by part number',\n 'part.status.search.placeholder': 'Search by status',\n 'part.identification.label': 'Part Identification',\n 'part.type.label': 'Part Type',\n 'part.type.description.label': 'Description',\n 'part.type.vendor.label': 'Vendor',\n 'part.drawing.spec.label': 'Drawing / Spec',\n 'part.template.label': 'Template Inspection Identification',\n 'part.template.version.label': 'Version: ',\n 'part.template.new.item.label': 'New Item',\n 'part.template.new.item.modal.title': 'Template Item',\n 'part.add.inspection.type.label': 'Add Inspection Type',\n 'part.add.inspection.sub.type.label': 'Add sub type',\n 'part.param.header.sequence.label': 'Sequence',\n 'part.param.header.subtype.label': 'Sub Type',\n 'part.param.header.rule.label': 'Rule',\n 'part.param.header.unit.measurement.label': 'Unit of Measurement',\n 'part.param.header.inspection.description.label': 'Inspection Description',\n 'error.iqc.part.search': 'An error occurred while trying to load the list.',\n 'part.number.not.found': 'Part number not found.',\n 'part.number.delete.error.msg': 'An error occurred when try to remove part number.',\n 'part.load.error.msg': 'An error occurred when try to load part.',\n 'part.save.success.msg': 'Part was successfully saved.',\n 'part.save.error.msg': 'An error occurred when try to save Part.',\n 'part.update.version.remark.title': 'Template Update Notes',\n 'part.update.version.remark.sub.title': 'An inspection for this template already exists. It is necessary create a new template version.',\n 'msg.error.part.delete.has.associations': 'This part could not be deleted. There are one or more associated records.',\n 'part.safety.component.label': 'Safety Component',\n 'part.must.add.at.least.one': 'You must add at least one \"Inspection Type\" and a \"Subtype\".'\n });\n\n $translateProvider.translations('pt', {\n 'title.iqc': 'IQC',\n 'title.iqc.complete': 'IQC - Controle de Qualidade de Entrada',\n 'title.part': 'Peça',\n 'title.part.inspection': 'Inspeção',\n 'part.new.label': 'Nova Peça',\n 'part.edit.label': 'Editar Peça',\n 'part.number.label': 'Número da Peça',\n 'part.number.delete.success.msg': 'Número da peça removido com sucesso.',\n 'part.number.search.placeholder': 'Buscar pelo número da peça',\n 'part.status.search.placeholder': 'Buscar pela situação',\n 'part.identification.label': 'Identificação da Peça',\n 'part.type.label': 'Tipo de Peça',\n 'part.type.description.label': 'Descrição',\n 'part.type.vendor.label': 'Fornecedor',\n 'part.drawing.spec.label': 'Desenho / Especificação',\n 'part.template.label': 'Identificação do Template de Inspeção',\n 'part.template.version.label': 'Versão: ',\n 'part.template.new.item.label': 'Novo Item',\n 'part.template.new.item.modal.title': 'Item do Template',\n 'part.add.inspection.type.label': 'Adicionar Tipo de Inspeção',\n 'part.add.inspection.sub.type.label': 'Adicionar subtipo',\n 'part.param.header.sequence.label': 'Sequência',\n 'part.param.header.subtype.label': 'Subtipo',\n 'part.param.header.rule.label': 'Regra',\n 'part.param.header.unit.measurement.label': 'Unidade de Medida',\n 'part.param.header.inspection.description.label': 'Descrição da Inspeção',\n 'error.iqc.part.search': 'Ocorreu um erro ao tentar carregar a listagem.',\n 'part.number.not.found': 'Nenhum número de peça encontrado.',\n 'part.number.delete.error.msg': 'Ocorreu um erro ao tentar remover o número da peça.',\n 'part.load.error.msg': 'Ocorreu um erro ao tentar caregar a peça.',\n 'part.save.success.msg': 'Peça salva com sucesso.',\n 'part.save.error.msg': 'Ocorreu um erro ao tentar salvar a peça.',\n 'part.update.version.remark.title': 'Notas de Atualização do Template',\n 'part.update.version.remark.sub.title': 'Já existe uma inspeção para este template. É necessário criar uma nova versão do template.',\n 'msg.error.part.delete.has.associations': 'Esta peça não pôde ser removida. Há um ou mais registros associados.',\n 'part.safety.component.label': 'Componente de Segurança',\n 'part.must.add.at.least.one': 'É necessário adicionar ao menos um \"Tipo de Inspeção\" e um \"Subtipo\".'\n\n });\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('PartService', PartService);\n\n var BASE = '/iqcpart/';\n /** @ngInject */\n function PartService($window, $injector, $q, ConfigurationService) {\n return {\n\n listWithParams: function (filterParams) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n $http.get(ConfigurationService.getServiceHost() + BASE, {\n params: filterParams\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n save: function (part) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + BASE, part, {\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getById: function (Id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + 'byId/' + Id, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n delete: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + BASE + \"/\" + id, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n\n\n };\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(PartRouter);\n\n /** @ngInject */\n function PartRouter($stateProvider) {\n\n\n $stateProvider.state('part-list', {\n url: '/part',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/iqc/part/part-list.html',\n controller: 'PartListController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.iqc'\n },\n authorize: true\n });\n\n $stateProvider.state('part-create', {\n url: '/part/create',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/iqc/part/part-edit.html',\n controller: 'PartEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.iqc'\n },\n authorize: true\n });\n\n $stateProvider.state('part-edit', {\n url: '/part/edit/:Id',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/iqc/part/part-edit.html',\n controller: 'PartEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.iqc'\n },\n authorize: true\n });\n\n\n\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('PartListController', PartListController);\n\n function PartListController(PartService, ToastUtil, $state, $translate, AuthService, $log,\n DialogControllerTemplate, ListModel, moment, $scope, DefaultService) {\n\n var vm = this;\n \n vm.itensPerPageList = [\n {name: '5', value: 5, before: 0, after: 6}, \n {name: '10', value: 10, before: 5, after: 11}, \n {name: '20', value: 20, before: 10, after: 21}, \n {name: '30', value: 30, before: 20, after: 31}, \n {name: '40', value: 40, before: 30, after: 41}, \n {name: '50', value: 50, before: 40, after: 51}]\n\n vm.itemPerPage = vm.itensPerPageList[0];\n\n var profilePermission = {\n CanAdd: false,\n CanEdit: false,\n CanDelete: false,\n CanView: false,\n CanApprove: false,\n CanExport: false,\n CanConsult: false\n }\n\n vm.initTabConfig = {\n isApprover: profilePermission.CanApprove,\n itemSelected: '0'\n }\n\n vm.searchParams = {\n PartNumber: \"\",\n EntryDate: \"\",\n CsActive: '-1',\n Vendor: \"\",\n Status: \"-1\",\n PartType: \"\",\n Page: 1,\n MaxPerPage: vm.itemPerPage.value\n };\n\n /** ListView Attributes */\n vm.partListModel = [];\n vm.totalList = 0;\n\n vm.shouldShow = function (item) {\n if(vm.totalList > 0 && item != undefined) {\n return vm.totalList >= item.value || (vm.totalList < item.after && vm.totalList > item.before);\n }\n return false;\n }\n\n vm.changeItemsPerPage = function() {\n if ( vm.itemPerPage == null ) {\n vm.itemPerPage = vm.itensPerPageList[0];\n }\n vm.searchParams.Page = 1;\n vm.searchParams.MaxPerPage = vm.itemPerPage.value;\n vm.searchParts()\n }\n\n vm.searchButton = function() {\n vm.itemPerPage = vm.itensPerPageList[0];\n vm.searchParams.Page = 1;\n vm.searchParams.MaxPerPage = vm.itemPerPage.value;\n vm.searchParts()\n }\n\n vm.searchParts = function () {\n if (sessionStorage.getItem(\"searchParams\")) {\n vm.searchParams = JSON.parse(sessionStorage.getItem(\"searchParams\"));\n sessionStorage.removeItem(\"searchParams\");\n vm.itensPerPageList.forEach(function(element) {\n if (element.value == vm.searchParams.MaxPerPage) {\n vm.itemPerPage = element;\n return;\n }\n });\n }\n\n if(vm.searchParams.Vendor != \"\") {\n vm.searchParams.VendorId = vm.searchParams.Vendor.Id;\n }\n if(vm.searchParams.PartType != \"\"){\n vm.searchParams.PartTypeId = vm.searchParams.PartType.Id;\n }\n PartService.listWithParams(angular.copy(vm.searchParams))\n .then(\n function (response) {\n vm.partListModel = response.resultList;\n vm.totalList = response.total;\n })\n .catch(\n function (error) {\n if (error.status !== $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"error.production.plan.search\"), ToastUtil.ToastType.ERROR);\n }\n vm.clearSearchFields();\n });\n }\n\n vm.clearSearchFields = function () {\n vm.searchParams.PartNumber = \"\";\n vm.searchParams.EntryDate = \"\";\n vm.searchParams.Status = \"-1\"\n vm.searchParams.Vendor = \"\";\n vm.searchParams.VendorId = undefined;\n vm.searchParams.PartType = \"\";\n vm.searchParams.PartTypeId = undefined;\n };\n\n vm.edit = function (id) {\n if (profilePermission.CanEdit) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('part-edit', {\n Id: id\n });\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n };\n\n vm.delete = function (id) {\n if (profilePermission.CanDelete) {\n PartService.delete(id).then(function () {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n vm.searchParts();\n ToastUtil.showToastMessage($translate.instant(\"part.number.delete.success.msg\"), ToastUtil.ToastType.SUCCESS);\n }).catch(function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n } else if (error.status == $scope.HttpStatusCodeConflict) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"part.number.delete.error.msg\"), ToastUtil.ToastType.ERROR);\n }\n });\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n };\n\n vm.create = function () {\n if (profilePermission.CanAdd) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('part-create', {});\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n }\n\n vm.resolveActiveCss = function (csActive) {\n var result = \"\";\n if (csActive == true || csActive == \"true\") {\n result = 'ng-binding label aqms-label-active';\n } else {\n result = 'ng-binding label aqms-label-inactive';\n }\n\n return result;\n }\n\n vm.resolveActive = function (csActive) {\n if (csActive) {\n return $translate.instant('label.active');\n } else {\n return $translate.instant('label.inactive');\n }\n }\n\n function init() {\n loadProfileModules();\n }\n\n function loadProfileModules() {\n var profileModule = {};\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.iqcpart;\n DefaultService.loadModules(profileModule).then(function (response) {\n profilePermission = angular.copy(response);\n vm.initTabConfig.isApprover = profilePermission.CanApprove;\n\n if( profilePermission.CanApprove === false || profilePermission.CanApprove == 'false' ){\n $state.go('not-authorized', {});\n }\n\n\n if (profilePermission.CanView) {\n vm.searchParts();\n } else {\n $state.go('not-authorized', {});\n }\n }).catch(function (error) {\n $log.log(error);\n if(error.data != null && error.data != undefined)\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n });\n }\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('PartEditController', PartEditController);\n\n function PartEditController($filter, PartService, ToastUtil, $stateParams, $state,\n $translate, $scope, $log, moment, AuthService, DefaultService, DialogController, DialogControllerTemplate) {\n\n var vm = this;\n\n var profilePermission = {\n CanAdd: false,\n CanEdit: false,\n CanDelete: false,\n CanView: false,\n CanApprove: false,\n CanExport: false,\n CanConsult: false\n }\n\n vm.part = {\n CsActive: 1,\n Vendors: [],\n CurrentPartInspectionTemplate: {\n PartInspectionTemplateTypes: null,\n CsActive: true\n }\n };\n\n\n vm.idToEdit = undefined;\n\n vm.statusList = [{\n id: 1,\n Name: 'label.active'\n }, {\n id: 0,\n Name: 'label.inactive'\n }];\n\n vm.confirmSaveNewVersion = function (modal) {\n vm.part.IsUpdateRemakInserted = true;\n vm.part.CurrentPartInspectionTemplate.RemarkUpdate = angular.copy(modal.value);\n executeSaveAction();\n }\n\n vm.save = function () {\n if (!vm.part.CurrentPartInspectionTemplate.PartInspectionTemplateTypes || vm.part.CurrentPartInspectionTemplate.PartInspectionTemplateTypes.length == 0 ||\n !vm.part.CurrentPartInspectionTemplate.PartInspectionTemplateTypes[0].PartInspectionItemTemplates || vm.part.CurrentPartInspectionTemplate.PartInspectionTemplateTypes[0].PartInspectionItemTemplates.length == 0) {\n ToastUtil.showToastMessage($translate.instant('part.must.add.at.least.one'), ToastUtil.ToastType.WARN);\n } else {\n if (vm.part.CurrentPartInspectionTemplate.HasInspection === true && vm.part.IsUpdateRemakInserted === false) {\n DialogControllerTemplate.showWithCloseListener('part.update.version.remark.title', 'part.update.version.remark.sub.title', '', vm.confirmSaveNewVersion, null);\n } else {\n executeSaveAction();\n }\n }\n }\n\n function executeSaveAction() {\n if (vm.part.CurrentPartInspectionTemplate != null && vm.part.CurrentPartInspectionTemplate.PartInspectionTemplateTypes == null) {\n vm.part.CurrentPartInspectionTemplate = null;\n }\n PartService.save(vm.part).then(function () {\n ToastUtil.showToastMessage($translate.instant(\"part.save.success.msg\"), ToastUtil.ToastType.SUCCESS);\n $state.go('part-list');\n }).catch(function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if (error.status === $scope.HttpStatusCodeConflict) {\n $state.go('part-list');\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n } else {\n if (error.data && error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(\"part.save.error.msg\"), ToastUtil.ToastType.ERROR);\n }\n }\n\n });\n }\n\n\n vm.openAddType = function () {\n DialogController.show('part.add.inspection.type.label', '', vm);\n\n };\n\n\n\n\n\n\n\n\n\n\n /**\n * Add a inspection type to Template.\n * @param inspecType\n */\n vm.addInspectionType = function (inspecType) {\n if (!inspecType.isEditAction) {\n var isFirst = false;\n if (vm.part.CurrentPartInspectionTemplate.PartInspectionTemplateTypes === null || vm.part.CurrentPartInspectionTemplate.PartInspectionTemplateTypes.length == 0) {\n vm.part.CurrentPartInspectionTemplate.PartInspectionTemplateTypes = [];\n isFirst = true;\n }\n\n var itemAlreadyInList = false;\n angular.forEach(vm.part.CurrentPartInspectionTemplate.PartInspectionTemplateTypes, function (item) {\n if (item.PartInspectionType.Id == inspecType.PartInspectionType.Id) {\n itemAlreadyInList = true;\n }\n });\n\n if (!itemAlreadyInList) {\n\n inspecType.SequenceNumber = isFirst ? 1 : getNextSequenceIndexFromTypeList();\n vm.part.CurrentPartInspectionTemplate.Version = isFirst ? 1 : vm.part.CurrentPartInspectionTemplate.Version;\n vm.part.CurrentPartInspectionTemplate.PartInspectionTemplateTypes.push(inspecType);\n }\n }\n\n }\n\n vm.editInspectionType = function (templateItem) {\n DialogController.show('part.add.inspection.type.label', '', vm, templateItem);\n }\n\n vm.deleteInspectionType = function (templateItem) {\n var sequenceToRemove = templateItem.SequenceNumber;\n var index = vm.part.CurrentPartInspectionTemplate.PartInspectionTemplateTypes.map(function (p) {\n return p.PartInspectionType.Id\n }).indexOf(templateItem.PartInspectionType.Id);\n\n if (index != -1) {\n vm.part.CurrentPartInspectionTemplate.PartInspectionTemplateTypes.splice(index, 1);\n updateInspectionTypeSequence(sequenceToRemove);\n }\n }\n\n /**\n * Updates sequence of type list.\n * @param sequenceToRemove\n */\n function updateInspectionTypeSequence(sequenceToRemove) {\n angular.forEach(vm.part.CurrentPartInspectionTemplate.PartInspectionTemplateTypes, function (item) {\n if (parseInt(item.SequenceNumber) > parseInt(sequenceToRemove)) {\n item.SequenceNumber = (item.SequenceNumber - 1);\n }\n\n });\n\n }\n\n\n /**\n * Calls dialog to add a new template item.\n */\n vm.openAddSubtypes = function (templateType) {\n templateType.isEditAction = false;\n DialogController.show('part.template.new.item.modal.title', '', vm, templateType, null, 'lg');\n }\n\n\n /**\n * Edit Subtype.\n * @param templateItem\n */\n vm.editSubType = function (templateItem, templateType) {\n templateItem.isEditAction = true;\n templateItem.PartInspectionTemplateType = templateType;\n DialogController.show('part.template.new.item.modal.title', '', vm, templateItem, null, 'lg');\n }\n\n\n /**\n * Get next sequence to Type.\n * @returns {number}\n */\n function getNextSequenceIndexFromTypeList() {\n var orderedItems = $filter('orderBy')(vm.part.CurrentPartInspectionTemplate.PartInspectionTemplateTypes, 'SequenceNumber');\n return (parseInt(orderedItems[(orderedItems.length - 1)].SequenceNumber) + 1);\n }\n\n /**\n * Get next Sub Type Sequence.\n * @param PartInspectionItemTemplates\n * @returns {string}\n */\n function getNextSequenceIndexFromSubTypeList(PartInspectionItemTemplates) {\n var nextSequence = \"\";\n var biggestSequence = 0;\n angular.forEach(PartInspectionItemTemplates, function (item) {\n var valueArray = item.SequenceNumber.split('.');\n\n var value = valueArray[(valueArray.length - 1)];\n if (value > parseInt(biggestSequence)) {\n biggestSequence = valueArray[0] + '.' + value;\n }\n });\n\n\n var valuesFromSequence = biggestSequence.split('.');\n nextSequence = (valuesFromSequence[0] + \".\" + (parseInt(valuesFromSequence[(valuesFromSequence.length - 1)]) + 1))\n return nextSequence;\n }\n\n\n vm.addSubTypeItem = function (item, parentPartInspectionType) {\n if (!item.isEditAction) {\n angular.forEach(vm.part.CurrentPartInspectionTemplate.PartInspectionTemplateTypes, function (type) {\n if (type.PartInspectionType.Id == parentPartInspectionType.Id) {\n var isFirstItem = false;\n if (type.PartInspectionItemTemplates == null || type.PartInspectionItemTemplates.length == 0) {\n type.PartInspectionItemTemplates = [];\n isFirstItem = true;\n }\n\n item.SequenceNumber = isFirstItem ? type.SequenceNumber + '.1' : getNextSequenceIndexFromSubTypeList(type.PartInspectionItemTemplates);\n type.isAccordionOpened = true;\n type.PartInspectionItemTemplates.push(item);\n\n }\n });\n }\n\n }\n\n\n /**\n * Remove a subtype item.\n * @param templateType\n * @param templateItem\n */\n vm.deleteSubType = function (templateType, templateItem) {\n var sequenceToRemove = angular.copy(templateItem.SequenceNumber);\n angular.forEach(templateType.PartInspectionItemTemplates, function (item, key) {\n if (item.SequenceNumber == sequenceToRemove) {\n templateType.PartInspectionItemTemplates.splice(key, 1);\n }\n });\n\n updateSubtypeSequences(templateType, sequenceToRemove);\n\n }\n\n /**\n * Updates subtype sequence after remove an item.\n * @param templateType\n * @param sequenceToRemove\n */\n function updateSubtypeSequences(templateType, sequenceToRemove) {\n var valueArrayToRemove = sequenceToRemove.split('.');\n var valueToRemove = valueArrayToRemove[(valueArrayToRemove.length - 1)];\n\n angular.forEach(templateType.PartInspectionItemTemplates, function (item) {\n var valueArray = item.SequenceNumber.split('.');\n var value = valueArray[(valueArray.length - 1)];\n\n if (parseInt(value) > parseInt(valueToRemove)) {\n // Update Sequences.\n var updatedSequence = (valueArray[0] + \".\" + (parseInt(value) - 1))\n item.SequenceNumber = updatedSequence;\n }\n });\n }\n\n\n function init() {\n loadProfileModules();\n }\n\n function loadProfileModules() {\n var profileModule = {};\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.iqcpart;\n DefaultService.loadModules(profileModule).then(function (response) {\n profilePermission = angular.copy(response);\n if (profilePermission.CanApprove === false || profilePermission.CanApprove == 'false') {\n $state.go('not-authorized', {});\n }\n\n vm.idToEdit = $stateParams.Id;\n if (vm.idToEdit) {\n if (!profilePermission.CanEdit) {\n $state.go('not-authorized', {});\n } else {\n getPartToEdit();\n }\n } else {\n if (!profilePermission.CanAdd) {\n $state.go('not-authorized', {});\n }\n }\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n });\n }\n\n function getPartToEdit() {\n PartService.getById(vm.idToEdit).then(function (response) {\n vm.part = angular.copy(response);\n vm.part.CsActive = vm.part.CsActive === true ? 1 : 0;\n vm.part.IsUpdateRemakInserted = false;\n vm.part.CurrentPartInspectionTemplate = vm.part.CurrentPartInspectionTemplate == null ? {\n PartInspectionTemplateTypes: null,\n CsActive: true\n } : vm.part.CurrentPartInspectionTemplate;\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"part.load.error.msg\"), ToastUtil.ToastType.ERROR);\n });\n }\n\n\n init();\n }\n})();\n\n(function () {\n \"use strict\";\n\n angular\n .module(\"aqmsFrontend\")\n .controller(\"FiscalMainController\", FiscalMainController);\n\n function FiscalMainController($stateParams, $state, $translate, $scope, $log, $document, $filter, ToastUtil,\n ConfigurationService, FiscalService, AuthService, DefaultService, DocumentFlowService,\n moment, DialogController, DialogControllerTemplate) {\n var vm = this;\n vm.approvals = [];\n vm.statusList = FiscalService.getStatus();\n vm.templateList = FiscalService.getTemplate();\n vm.checkBoxBillet = false;\n vm.checkBoxApproved = true;\n vm.documentStatus = {\n ONGOING: 0,\n PENDINGAPPROVAL: 1,\n APPROVED: 2,\n REJECT: 3,\n CANCELED: 4\n };\n\n vm.statusApprovalList = [{\n Value: vm.documentStatus.ONGOING,\n Title: \"document.flow.label.ongoing\"\n },\n {\n Value: vm.documentStatus.PENDINGAPPROVAL,\n Title: \"document.flow.label.pending.approval\"\n },\n {\n Value: vm.documentStatus.APPROVED,\n Title: \"document.flow.label.approved\"\n },\n {\n Value: vm.documentStatus.REJECT,\n Title: \"document.flow.label.status.rejected\"\n },\n {\n Value: vm.documentStatus.CANCELED,\n Title: \"document.flow.label.status.canceled\"\n }\n ];\n\n vm.statusTarget = {\n PENDINGAPPROVAL: 0,\n APPROVED: 1,\n REJECT: 2\n };\n\n\n vm.itensPerPageList = [\n {name: '5', value: 5, before: 0, after: 6},\n {name: '10', value: 10, before: 5, after: 11},\n {name: '20', value: 20, before: 10, after: 21},\n {name: '30', value: 30, before: 20, after: 31},\n {name: '40', value: 40, before: 30, after: 41},\n {name: '50', value: 50, before: 40, after: 51}];\n vm.itemPerPage = vm.itensPerPageList[0];\n vm.totalLista = 0;\n\n vm.searchParams = {\n ApprovalId: '',\n ServiceDescription: '',\n EmissedStart: '',\n EmissedDue: '',\n DeadLineStart: '',\n DeadLineDue: '',\n NF: '',\n Vendor: '',\n VendorId: undefined,\n Status: '-1',\n Billet: 0,\n StatusApproval: vm.checkBoxApproved == true ? 2 : -1,\n Page: 1,\n Template: '-1',\n MaxPerPage: vm.itemPerPage.value\n };\n\n vm.clearFields = function () {\n vm.checkBoxApproved == true;\n vm.searchParams.ServiceDescription = '';\n vm.searchParams.EmissedStart = '';\n vm.searchParams.EmissedDue = '';\n vm.searchParams.DeadLineStart = '';\n vm.searchParams.DeadLineDue = '';\n vm.searchParams.NF = '';\n vm.searchParams.Vendor = '';\n vm.searchParams.Status = '-1';\n vm.searchParams.VendorId = '';\n vm.searchParams.ApprovalId = '';\n vm.searchParams.Template = '';\n vm.searchParams.StatusApproval = vm.checkBoxApproved == true ? 2 : -1;\n vm.checkBoxBillet = false;\n };\n\n vm.getStatusItem = function(fiscal) {\n var status = vm.statusList.find(function (s) {\n return s.Id == fiscal.Status;\n });\n\n return status.Title;\n };\n\n vm.resolveStatusCss = function (status) {\n var result = \"\";\n\n switch (status) {\n case vm.documentStatus.PENDINGAPPROVAL:\n result = 'ng-binding label label-pending';\n break;\n case vm.documentStatus.ONGOING:\n result = 'ng-binding label label-ongoing';\n break;\n case vm.documentStatus.APPROVED:\n result = 'ng-binding label label-approved';\n break;\n case vm.documentStatus.REJECT:\n result = 'ng-binding label label-rejected';\n break;\n case vm.documentStatus.CANCELED:\n result = 'ng-binding label aqms-label-canceled';\n break;\n }\n\n return result;\n };\n\n vm.resolveStatus = function (status) {\n switch (status) {\n case vm.documentStatus.ONGOING:\n return $translate.instant('document.flow.label.ongoing');\n case vm.documentStatus.PENDINGAPPROVAL:\n return $translate.instant('document.flow.label.pending.approval');\n case vm.documentStatus.APPROVED:\n return $translate.instant('document.flow.label.approved');\n case vm.documentStatus.CANCELED:\n return $translate.instant('document.flow.label.status.canceled');\n case vm.documentStatus.REJECT:\n return $translate.instant('document.flow.label.status.rejected');\n }\n };\n\n vm.shouldShow = function (item) {\n if (vm.totalLista > 0 && item != undefined) {\n return vm.totalLista >= item.value || (vm.totalLista < item.after && vm.totalLista > item.before);\n }\n return false;\n };\n\n vm.changeItemsPerPage = function () {\n if (vm.itemPerPage == null) {\n vm.itemPerPage = vm.itensPerPageList[0];\n }\n search(1, vm.itemPerPage.value);\n };\n\n vm.onPageChange = function () {\n search(vm.searchParams.Page, vm.searchParams.MaxPerPage);\n };\n\n vm.searchFiscal = function () {\n vm.itemPerPage = vm.itensPerPageList[0];\n search(1, vm.itemPerPage.value);\n };\n\n function search(page, max) {\n vm.searchParams.Page = page;\n vm.searchParams.MaxPerPage = max;\n vm.search();\n }\n\n vm.search = function () {\n if (sessionStorage.getItem(\"searchParams\")) {\n vm.searchParams = JSON.parse(sessionStorage.getItem(\"searchParams\"));\n sessionStorage.removeItem(\"searchParams\");\n vm.itensPerPageList.forEach(function (element) {\n if (element.value == vm.searchParams.MaxPerPage) {\n vm.itemPerPage = element;\n return;\n }\n });\n }\n var searchParams = buildSearchParam();\n\n FiscalService.getListPendingValidation(vm, searchParams)\n .then(function (response) {\n vm.approvals = response.resultList;\n vm.totalLista = response.total;\n })\n .catch(function (error) {\n if (error && error.status) {\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.access.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"error.financial.search\"), ToastUtil.ToastType.ERROR);\n }\n } else if (error == \"not authorized\" ) {\n $state.go('not-authorized', {}, {});\n }\n });\n };\n\n\n function buildSearchParam() {\n var searchParams = {\n ApprovalId: vm.searchParams.ApprovalId,\n ServiceDescription: vm.searchParams.ServiceDescription,\n EmissedStart: '',\n EmissedDue: '',\n DeadLineStart: '',\n DeadLineDue: '',\n NF: vm.searchParams.NF,\n VendorId: '',\n Billet: 0,\n Status: vm.searchParams.Status,\n Page: vm.searchParams.Page,\n Template: vm.searchParams.Template,\n MaxPerPage: vm.searchParams.MaxPerPage\n };\n\n angular.forEach(searchParams, function (value, key) {\n searchParams[key] = copy(vm.searchParams[key]);\n });\n\n searchParams.Status = vm.searchParams.Status;\n searchParams.VendorId = vm.searchParams.Vendor ? vm.searchParams.Vendor.Id : null;\n searchParams.EmissedStart = searchParams.EmissedStart ? moment(searchParams.EmissedStart).format('DD/MM/YYYY') : searchParams.EmissedStart;\n searchParams.EmissedDue = searchParams.EmissedDue ? moment(searchParams.EmissedDue).format('DD/MM/YYYY') : searchParams.EmissedDue;\n searchParams.DeadLineStart = searchParams.DeadLineStart ? moment(searchParams.DeadLineStart).format('DD/MM/YYYY') : searchParams.DeadLineStart;\n searchParams.DeadLineDue = searchParams.DeadLineDue ? moment(searchParams.DeadLineDue).format('DD/MM/YYYY') : searchParams.DeadLineDue;\n if ( vm.checkBoxBillet ) {\n searchParams.Billet = 1;\n } else {\n searchParams.Billet = 0;\n }\n searchParams.StatusApproval = vm.checkBoxApproved == true ? 2 : -1;\n return searchParams;\n }\n\n function copy(value) {\n return !value ? null : angular.copy(value);\n }\n\n\n vm.goToDocumentFlow = function (item) {\n $state.go('document-flow-edit', {\n Id: item.IdApproval\n });\n };\n\n vm.export = function (item) {\n alert('Export');\n };\n\n vm.listTargetsApprovedRejected = function () {\n var listTargets = [];\n for (var i = 0; i < vm.document.DocumentFlowTargets.length; i++) {\n if (vm.document.DocumentFlowTargets[i].Status !== vm.statusTarget.PENDINGAPPROVAL) {\n listTargets.push({\n Id: vm.document.DocumentFlowTargets[i].OrderTarget,\n Name: vm.document.DocumentFlowTargets[i].User.Name\n })\n }\n }\n return listTargets;\n }\n\n vm.returnApproval = function (item) {\n if ( canReturn(item) ) {\n DocumentFlowService.getById(item.IdApproval).then(function (response) {\n vm.document = angular.copy(response);\n DialogControllerTemplate.showWithCloseListener('document.flow.return.title', null, '', vm.confirmReturnRemark, vm, null, null);\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"document.flow.msg.load.error\"), ToastUtil.ToastType.ERROR);\n });\n } else {\n if ( item.Status == 1 ) {\n ToastUtil.showToastMessage($translate.instant(\"fiscal.msg.status.registered\"), ToastUtil.ToastType.WARN);\n } else {\n vm.dontReturn(item);\n }\n }\n\n };\n\n vm.confirmReturnRemark = function (remark) {\n vm.document.Remark = remark.value;\n var order = remark.orderTarget;\n\n for (var i = 0; i < vm.document.DocumentFlowTargets.length; i++) {\n if (vm.document.DocumentFlowTargets[i].OrderTarget >= order\n && vm.document.DocumentFlowTargets[i].Status !== vm.statusTarget.PENDINGAPPROVAL) {\n vm.document.DocumentFlowTargets[i].Status = vm.statusTarget.PENDINGAPPROVAL;\n vm.document.DocumentFlowTargets[i].ProcessingDate = null;\n vm.document.DocumentFlowTargets[i].ReceiveDate = null;\n vm.document.DocumentFlowTargets[i].ParallelApproval = false;\n vm.document.DocumentFlowTargets[i].TargetNotification = false;\n if (vm.document.DocumentFlowTargets[i].OrderTarget == order ) {\n vm.document.DocumentFlowTargets[i].Remark = remark.value;\n }\n }\n }\n if (remark.returnTo === \"1\") {\n vm.document.Status = vm.documentStatus.ONGOING;\n } else {\n vm.document.Status = vm.documentStatus.PENDINGAPPROVAL;\n }\n vm.save();\n };\n\n vm.save = function () {\n DocumentFlowService.save(vm.document).then(function () {\n ToastUtil.showToastMessage($translate.instant(\"document.flow.return.success\"), ToastUtil.ToastType.SUCCESS);\n vm.search();\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"document.flow.return.error\"), ToastUtil.ToastType.WARN);\n });\n };\n\n vm.invoiceValidation = function (item) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n FiscalService.editFiscal(item, vm);\n };\n\n vm.viewPresentation = function (item) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('fiscal-doc', {\n Id: item.IdApproval\n });\n };\n\n\n function canReturn(item) {\n return item.Status == 0 && item.StatusApproval == vm.documentStatus.APPROVED;\n }\n\n function canEdit(item) {\n return item.StatusApproval == vm.documentStatus.APPROVED;\n }\n\n vm.canReturn = canReturn;\n vm.canEdit = canEdit;\n\n vm.dontReturn = function(item) {\n ToastUtil.showToastMessage($translate.instant(\"fiscal.msg.disable.return\").replace('%s', $translate.instant(vm.statusApprovalList[item.StatusApproval].Title)), ToastUtil.ToastType.WARN);\n };\n\n vm.openSolicitation = function (solicitacion) {\n DialogController.show('acquisition.label.approval.solicitation', '', solicitacion, !vm.State, null, 'lg');\n };\n\n vm.openSolicitationApproval = function(id) {\n FiscalService.getHtmlSolicitation(id).then(function (response) {\n var html = angular.copy(response);\n vm.openSolicitation(html);\n });\n };\n\n function init() {\n FiscalService.loadProfileModules(vm, $scope)\n .then(function () {\n vm.search();\n })\n .catch(function (error) {\n var msg = error.data && error.data.Message ? error.data.Message : $filter('translate')('error.fiscal.search');\n ToastUtil.showToastMessage($translate.instant(msg), ToastUtil.ToastType.ERROR);\n });\n }\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('ServiceInvoiceController', ServiceInvoiceController);\n\n function ServiceInvoiceController($stateParams, $state, $translate, $scope, $log, $document,\n $window, $filter, ToastUtil, ConfigurationService, FiscalService,\n AuthService, DefaultService, DocumentFlowService, moment, DialogControllerTemplate) {\n\n var vm = this, USER = {Id: parseInt($window.localStorage.userID), Name: $window.localStorage.aliasAqms}, NOW = new Date();\n vm.profile = {\n CanAdd: false,\n CanEdit: false,\n CanDelete: false,\n CanView: false,\n CanApprove: false\n };\n\n vm.documentStatus = {\n ONGOING: 0,\n PENDINGAPPROVAL: 1,\n APPROVED: 2,\n REJECT: 3,\n CANCELED: 4\n };\n\n vm.Status = 0;\n\n vm.document = {\n Business: {\n Id: AuthService.getBusinessId()\n },\n Status: vm.documentStatus.ONGOING,\n RequestType: '',\n Subject: '',\n Solicitation: '',\n CreatedDateTemp: moment()._d,\n CreatedDate: moment().format('DD/MM/YYYY'),\n DeadLineTemp: moment().add(1, 'days')._d,\n DeadLine: moment().add(1, 'days').format('DD/MM/YYYY'),\n DeadLinePurchaseTemp: '',\n DeadLinePurchase: '',\n RequestBy: '',\n Visibility: null,\n Remark: '',\n DocumentFlowAttachments: [],\n DocumentFlowTargets: [],\n DocumentFlowNotifications: [],\n SolicitationApproval: undefined,\n SolicitationFiscal: undefined,\n RequestByUserArea: null\n };\n\n vm.statusList = [{\n Value: vm.documentStatus.ONGOING,\n Title: \"document.flow.label.ongoing\"\n },\n {\n Value: vm.documentStatus.PENDINGAPPROVAL,\n Title: \"document.flow.label.pending.approval\"\n },\n {\n Value: vm.documentStatus.APPROVED,\n Title: \"document.flow.label.approved\"\n },\n {\n Value: vm.documentStatus.CANCELED,\n Title: \"document.flow.label.status.canceled\"\n },\n {\n Value: vm.documentStatus.REJECT,\n Title: \"document.flow.label.status.rejected\"\n }\n ];\n\n vm.statusTarget = {\n PENDINGAPPROVAL: 0,\n APPROVED: 1,\n REJECT: 2\n };\n\n vm.getValuePO = function(item) {\n if ( item.Value ) {\n return parseFloat(item.Value).toFixed(2);\n }\n return parseFloat(\"0\").toFixed(2);\n };\n\n vm.canRegisterSap = function() {\n var canRegisterSap = false;\n var listChecked;\n if (vm.profile.CanApprove && vm.canSaveButton()) {\n if (vm.document.SolicitationFiscal.Template == 6 ) {\n listChecked = vm.document.SolicitationFiscal.SolicitationServices.filter(function (item) {\n return item.Checked == undefined || item.Checked == false;\n });\n }\n\n if (vm.document.SolicitationFiscal.Template == 7 ) {\n listChecked = vm.document.SolicitationFiscal.SolicitationCustomsExpenses.filter(function (item) {\n return item.Checked == undefined || item.Checked == false;\n });\n }\n\n canRegisterSap = ( listChecked.length == 0);\n }\n return canRegisterSap;\n };\n\n vm.canSaveButton = function() {\n if ( vm.document.SolicitationFiscal ) {\n return vm.document.SolicitationFiscal.Status == 0 && vm.document.Status == vm.documentStatus.APPROVED;\n }\n return false;\n };\n\n vm.registerSap = function() {\n if ( vm.document.SolicitationFiscal.RecordSap != undefined && vm.document.SolicitationFiscal.RecordSap != ''\n && vm.document.SolicitationFiscal.RecordSap != null ) {\n vm.Status = 1;\n vm.save();\n } else {\n ToastUtil.showToastMessage($translate.instant(\"fiscal.register.sap.required\"), ToastUtil.ToastType.WARN);\n }\n };\n\n vm.changeTotal = function(item) {\n getTotal();\n }\n\n function getTotal() {\n var total = 0;\n if ( vm.document.SolicitationFiscal.Template == 6 ) {\n vm.document.SolicitationFiscal.SolicitationServices.forEach(function (item) {\n if ( item.Checked ) {\n total = parseFloat(total) + parseFloat(item.Value);\n }\n });\n } else {\n vm.document.SolicitationFiscal.SolicitationCustomsExpenses.forEach(function (item) {\n if ( item.Checked ) {\n total = parseFloat(total) + parseFloat(item.Value);\n }\n });\n }\n\n vm.document.SolicitationFiscal.ValueTotal = (parseFloat(total)).toFixed(2);\n }\n\n vm.save = function () {\n var toSave = buildSolicitationFiscalToSave();\n FiscalService.save(toSave).then(function () {\n ToastUtil.showToastMessage($translate.instant(\"fiscal.msg.save.success\"), ToastUtil.ToastType.SUCCESS);\n $state.go('fiscal', {});\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"fiscal.msg.save.error\"), ToastUtil.ToastType.WARN);\n });\n };\n\n vm.listTargetsApprovedRejected = function () {\n var listTargets = [];\n for (var i = 0; i < vm.document.DocumentFlowTargets.length; i++) {\n if (vm.document.DocumentFlowTargets[i].Status !== vm.statusTarget.PENDINGAPPROVAL) {\n listTargets.push({\n Id: vm.document.DocumentFlowTargets[i].OrderTarget,\n Name: vm.document.DocumentFlowTargets[i].User.Name\n })\n }\n }\n return listTargets;\n }\n\n vm.returnApproval = function (IdApproval) {\n DialogControllerTemplate.showWithCloseListener('document.flow.return.title', null, '', vm.confirmReturnRemark, vm, null, null);\n };\n\n vm.confirmReturnRemark = function (remark) {\n vm.document.Remark = remark.value;\n var order = remark.orderTarget;\n\n for (var i = 0; i < vm.document.DocumentFlowTargets.length; i++) {\n if (vm.document.DocumentFlowTargets[i].OrderTarget >= order\n && vm.document.DocumentFlowTargets[i].Status !== vm.statusTarget.PENDINGAPPROVAL) {\n vm.document.DocumentFlowTargets[i].Status = vm.statusTarget.PENDINGAPPROVAL;\n vm.document.DocumentFlowTargets[i].ProcessingDate = null;\n vm.document.DocumentFlowTargets[i].ReceiveDate = null;\n vm.document.DocumentFlowTargets[i].ParallelApproval = false;\n vm.document.DocumentFlowTargets[i].TargetNotification = false;\n if (vm.document.DocumentFlowTargets[i].OrderTarget == order ) {\n vm.document.DocumentFlowTargets[i].Remark = remark.value;\n }\n }\n }\n if (remark.returnTo === \"1\") {\n vm.document.Status = vm.documentStatus.ONGOING;\n } else {\n vm.document.Status = vm.documentStatus.PENDINGAPPROVAL;\n }\n saveApproval();\n };\n\n function saveApproval() {\n vm.document.DeadLine = angular.copy(vm.document.DeadLineTemp);\n vm.document.CreatedDate = angular.copy(vm.document.CreatedDateTemp);\n\n DocumentFlowService.save(vm.document).then(function () {\n ToastUtil.showToastMessage($translate.instant(\"document.flow.return.success\"), ToastUtil.ToastType.SUCCESS);\n $state.go('fiscal', {});\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"document.flow.return.error\"), ToastUtil.ToastType.WARN);\n });\n }\n function buildSolicitationFiscalToSave() {\n var solicitationToSave;\n if (vm.document.SolicitationFiscal.Template == 6 ) {\n solicitationToSave = {\n Id: angular.copy(vm.document.SolicitationFiscal.Id),\n Billet: angular.copy(vm.document.SolicitationFiscal.Billet),\n Template: angular.copy(vm.document.SolicitationFiscal.Template),\n CodeSAP: angular.copy(vm.document.SolicitationFiscal.CodeSAP),\n Vendor: angular.copy(vm.document.SolicitationFiscal.Vendor),\n NF: angular.copy(vm.document.SolicitationFiscal.NF),\n EmissionDate: angular.copy(vm.document.SolicitationFiscal.EmissionDate),\n DueDate: angular.copy(vm.document.SolicitationFiscal.DueDate),\n Code: angular.copy(vm.document.SolicitationFiscal.Code),\n RecordSap: angular.copy(vm.document.SolicitationFiscal.RecordSap),\n ValidatedBy: angular.copy(vm.document.SolicitationFiscal.ValidatedBy),\n ValidatedDate: moment(angular.copy(vm.document.SolicitationFiscal.ValidatedDateTemp)).format('DD/MM/YYYY'),\n Status: angular.copy(vm.Status),\n SolicitationServices: angular.copy(vm.document.SolicitationFiscal.SolicitationServices)\n };\n }\n\n if (vm.document.SolicitationFiscal.Template == 7 ) {\n solicitationToSave = {\n Id: angular.copy(vm.document.SolicitationFiscal.Id),\n Billet: angular.copy(vm.document.SolicitationFiscal.Billet),\n Template: angular.copy(vm.document.SolicitationFiscal.Template),\n CodeSAP: angular.copy(vm.document.SolicitationFiscal.CodeSAP),\n Vendor: angular.copy(vm.document.SolicitationFiscal.Vendor),\n NF: angular.copy(vm.document.SolicitationFiscal.NF),\n EmissionDate: angular.copy(vm.document.SolicitationFiscal.EmissionDate),\n DueDate: angular.copy(vm.document.SolicitationFiscal.DueDate),\n Code: angular.copy(vm.document.SolicitationFiscal.Code),\n RecordSap: angular.copy(vm.document.SolicitationFiscal.RecordSap),\n ValidatedBy: angular.copy(vm.document.SolicitationFiscal.ValidatedBy),\n ValidatedDate: moment(angular.copy(vm.document.SolicitationFiscal.ValidatedDateTemp)).format('DD/MM/YYYY'),\n Status: angular.copy(vm.Status),\n SolicitationCustomsExpenses: angular.copy(vm.document.SolicitationFiscal.SolicitationCustomsExpenses)\n };\n }\n\n return solicitationToSave;\n\n }\n\n function fillSolicitationFiscal(documentTemp) {\n if ( documentTemp && documentTemp.SolicitationFiscal ) {\n if (documentTemp.SolicitationFiscal.Template == 6) { //service\n vm.SolicitationService = {\n PO: undefined,\n Description: undefined,\n Item: undefined,\n Value: undefined\n };\n var TemplateFiscal = {\n Id: angular.copy(documentTemp.SolicitationFiscal.Id),\n Billet: angular.copy(documentTemp.SolicitationFiscal.Billet),\n Template: angular.copy(documentTemp.SolicitationFiscal.Template),\n CodeSAP: angular.copy(documentTemp.SolicitationFiscal.CodeSAP),\n Vendor: angular.copy(documentTemp.SolicitationFiscal.Vendor),\n NF: angular.copy(documentTemp.SolicitationFiscal.NF),\n EmissionDate: angular.copy(documentTemp.SolicitationFiscal.EmissionDate),\n DueDate: angular.copy(documentTemp.SolicitationFiscal.DueDate),\n Code: angular.copy(documentTemp.SolicitationFiscal.Code),\n SolicitationServices: angular.copy(documentTemp.SolicitationFiscal.SolicitationServices),\n ValidatedBy: angular.copy(documentTemp.SolicitationFiscal.ValidatedBy),\n ValidatedDate: angular.copy(documentTemp.SolicitationFiscal.ValidatedDate),\n Status: angular.copy(documentTemp.SolicitationFiscal.Status),\n RecordSap: angular.copy(documentTemp.SolicitationFiscal.RecordSap)\n };\n\n if ( documentTemp.SolicitationFiscal.Vendor ) {\n var concatVendor = documentTemp.SolicitationFiscal.Vendor.FantasyName;\n if (documentTemp.SolicitationFiscal.Vendor.CodeSAP) {\n concatVendor = documentTemp.SolicitationFiscal.Vendor.CodeSAP + ' - ' + documentTemp.SolicitationFiscal.Vendor.FantasyName;\n }\n TemplateFiscal.VendorConcat = concatVendor;\n } else if ( documentTemp.SolicitationFiscal.CodeSAP ) {\n TemplateFiscal.VendorConcat = angular.copy(documentTemp.SolicitationFiscal.CodeSAP);\n }\n\n if ( !documentTemp.SolicitationFiscal.ValidatedBy ) {\n TemplateFiscal.ValidatedBy = USER;\n }\n\n if ( documentTemp.SolicitationFiscal.ValidatedDate ) {\n TemplateFiscal.ValidatedDateTemp = moment(documentTemp.SolicitationFiscal.ValidatedDate, 'DD/MM/YYYY')._d;\n } else {\n TemplateFiscal.ValidatedDateTemp = moment()._d;\n TemplateFiscal.ValidatedDate = moment().format('DD/MM/YYYY');\n }\n\n TemplateFiscal.EmissionDateTemp = moment(documentTemp.SolicitationFiscal.EmissionDate, 'DD/MM/YYYY')._d;\n TemplateFiscal.DueDateTemp = moment(documentTemp.SolicitationFiscal.DueDate, 'DD/MM/YYYY')._d;\n\n vm.document.SolicitationFiscal = TemplateFiscal;\n vm.document.SolicitationFiscal.ValueTotal = 0;\n vm.Status = vm.document.SolicitationFiscal.Status ? vm.document.SolicitationFiscal.Status : 0;\n vm.document.SolicitationApproval = undefined;\n vm.SolicitationExpense = undefined;\n\n vm.document.CreatedDate = moment(documentTemp.CreatedDate, 'DD/MM/YYYY')._d;\n vm.document.DeadLine = moment(documentTemp.DeadLine, 'DD/MM/YYYY')._d;\n vm.RequestByUserArea = documentTemp.RequestByUserArea;\n vm.document.CreatedDateTemp = angular.copy(documentTemp.CreatedDate);\n vm.document.DeadLineTemp = angular.copy(documentTemp.DeadLine);\n\n getTotal();\n }\n if (documentTemp.SolicitationFiscal.Template == 7) {\n vm.SolicitationCustomsExpense = {\n Description: undefined,\n NrProcess: undefined,\n Value: undefined\n };\n var TemplateFiscal2 = {\n Id: angular.copy(documentTemp.SolicitationFiscal.Id),\n Billet: angular.copy(documentTemp.SolicitationFiscal.Billet),\n Template: angular.copy(documentTemp.SolicitationFiscal.Template),\n CodeSAP: angular.copy(documentTemp.SolicitationFiscal.CodeSAP),\n Vendor: angular.copy(documentTemp.SolicitationFiscal.Vendor),\n NF: angular.copy(documentTemp.SolicitationFiscal.NF),\n EmissionDate: angular.copy(documentTemp.SolicitationFiscal.EmissionDate),\n DueDate: angular.copy(documentTemp.SolicitationFiscal.DueDate),\n Code: angular.copy(documentTemp.SolicitationFiscal.Code),\n SolicitationCustomsExpenses: angular.copy(documentTemp.SolicitationFiscal.SolicitationCustomsExpenses),\n ValidatedBy: angular.copy(documentTemp.SolicitationFiscal.ValidatedBy),\n ValidatedDate: angular.copy(documentTemp.SolicitationFiscal.ValidatedDate),\n Status: angular.copy(documentTemp.SolicitationFiscal.Status),\n RecordSap: angular.copy(documentTemp.SolicitationFiscal.RecordSap)\n };\n\n if ( documentTemp.SolicitationFiscal.Vendor ) {\n var concatVendor2 = documentTemp.SolicitationFiscal.Vendor.FantasyName;\n if (documentTemp.SolicitationFiscal.Vendor.CodeSAP) {\n concatVendor2 = documentTemp.SolicitationFiscal.Vendor.CodeSAP + ' - ' + documentTemp.SolicitationFiscal.Vendor.FantasyName;\n }\n TemplateFiscal2.VendorConcat = concatVendor2;\n } else if ( documentTemp.SolicitationFiscal.CodeSAP ) {\n TemplateFiscal2.VendorConcat = angular.copy(documentTemp.SolicitationFiscal.CodeSAP);\n }\n\n if ( !documentTemp.SolicitationFiscal.ValidatedBy ) {\n TemplateFiscal2.ValidatedBy = USER;\n }\n\n if ( documentTemp.SolicitationFiscal.ValidatedDate ) {\n TemplateFiscal2.ValidatedDateTemp = moment(documentTemp.SolicitationFiscal.ValidatedDate, 'DD/MM/YYYY')._d;\n } else {\n TemplateFiscal2.ValidatedDateTemp = moment()._d;\n TemplateFiscal2.ValidatedDate = moment().format('DD/MM/YYYY');\n }\n\n TemplateFiscal2.EmissionDateTemp = moment(documentTemp.SolicitationFiscal.EmissionDate, 'DD/MM/YYYY')._d;\n TemplateFiscal2.DueDateTemp = moment(documentTemp.SolicitationFiscal.DueDate, 'DD/MM/YYYY')._d;\n\n vm.document.SolicitationFiscal = TemplateFiscal2;\n vm.document.SolicitationFiscal.ValueTotal = 0;\n vm.Status = vm.document.SolicitationFiscal.Status ? vm.document.SolicitationFiscal.Status : 0;\n vm.document.SolicitationApproval = undefined;\n vm.SolicitationExpense = undefined;\n\n vm.document.CreatedDate = moment(documentTemp.CreatedDate, 'DD/MM/YYYY')._d;\n vm.document.DeadLine = moment(documentTemp.DeadLine, 'DD/MM/YYYY')._d;\n vm.RequestByUserArea = documentTemp.RequestByUserArea;\n vm.document.CreatedDateTemp = angular.copy(documentTemp.CreatedDate);\n vm.document.DeadLineTemp = angular.copy(documentTemp.DeadLine);\n\n getTotal();\n }\n }\n }\n\n function loadDocumentFlowToEdit() {\n FiscalService.getDocumentFlowById(vm.idToEdit).then(function (response) {\n vm.document = angular.copy(response);\n var copyDocument = angular.copy(response);\n fillSolicitationFiscal(copyDocument);\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"document.flow.msg.load.error\"), ToastUtil.ToastType.ERROR);\n });\n }\n\n function loadProfileModules() {\n var profileModule = {};\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.moduleFiscal;\n DefaultService.loadModules(profileModule).then(function (response) {\n vm.profile = angular.copy(response);\n\n vm.idToEdit = $stateParams.IdApproval;\n if (!vm.profile.CanEdit) {\n $state.go('not-authorized', {});\n } else {\n loadDocumentFlowToEdit();\n }\n\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n });\n }\n\n function init() {\n loadProfileModules();\n }\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(FinancialUploadTranslate);\n\n /** @ngInject */\n function FinancialUploadTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'file.upload.attach': 'Attachments',\n 'file.saved.sucess': 'File saved with success.',\n 'file.size.twenty.megabytes.overflow': 'Size\\'s file exceeded 20MB.',\n 'file.size.twenty.list.ten.megabytes.overflow' : 'The sum of file sizes exceeds 20MB.',\n 'file.size.ten.megabytes.overflow': 'Size\\'s file exceeded 10MB.',\n 'file.size.fifty.megabytes.overflow': 'Size\\'s file exceeded 50MB.',\n 'file.size.ten.list.ten.megabytes.overflow' : 'The sum of file sizes exceeds 10MB.',\n 'file.size.list.fifty.megabytes.overflow' : 'The sum of file sizes exceeds 50MB.',\n 'file.erro.save': 'An error occurred while trying to save the file.',\n 'file.same.name': 'Already exist a file with the same name.',\n 'file.type.image': \"Only pictures are allowed.\",\n 'file.type.pdf': \"Only pdf are allowed.\",\n 'file.change.image': 'Change',\n 'file.type.not.accepted' : 'File type is not accepted.'\n\n });\n $translateProvider.translations('pt', {\n 'file.upload.attach': 'Anexos',\n 'file.saved.sucess': 'Arquivo salvo com sucesso.',\n 'file.size.twenty.megabytes.overflow': 'Tamanho do arquivo excede 20MB.',\n 'file.size.twenty.list.ten.megabytes.overflow' : 'A soma dos tamanhos dos arquivos excede 20MB.',\n 'file.size.ten.megabytes.overflow': 'Tamanho do arquivo excede 10MB.',\n 'file.size.fifty.megabytes.overflow': 'Tamanho do arquivo excede 50MB.',\n 'file.size.ten.list.ten.megabytes.overflow' : 'A soma dos tamanhos dos arquivos excede 10MB.',\n 'file.size.list.fifty.megabytes.overflow' : 'A soma dos tamanhos dos arquivos excede 50MB.',\n 'file.erro.save': 'Um erro ocorreu ao tentar salvar o arquivo.',\n 'file.same.name': 'Já existe um aquivo com o mesmo nome.',\n 'file.type.image': \"Apenas imagens são permitidas.\",\n 'file.type.pdf': \"Apenas pdf's são permitidos.\",\n 'file.change.image': 'Alterar',\n 'file.type.not.accepted' : 'O tipo de arquivo não é aceito.'\n });\n }\n})();\n\n/*eslint no-unused-vars: [0, { \"args\": \"after-used\" }]*/\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .directive('financialUpload', FinancialUploadDirective);\n\n /** @ngInject */\n function FinancialUploadDirective() {\n var financialUploadDirective = {};\n financialUploadDirective.restrict = 'EA';\n financialUploadDirective.scope = {\n disable: \"=\",\n category: \"=\",\n buttonIcon: '@',\n buttonLabel: '@'\n };\n financialUploadDirective.scope.multipleFile = \"@?\";\n financialUploadDirective.scope.onlyImages = \"=\";\n financialUploadDirective.scope.onlyPdf = \"=\";\n financialUploadDirective.scope.uploadSize = \"=\";\n financialUploadDirective.scope.attachments = \"=\";\n financialUploadDirective.scope.showOnlyListItem = \"@?\";\n financialUploadDirective.scope.showUrlFile = \"@?\";\n financialUploadDirective.scope.statusValue = \"@?\";\n financialUploadDirective.scope.showCameraOption = \"@?\";\n financialUploadDirective.scope.statusAtt = \"@?\";\n financialUploadDirective.scope.fileManagerComponentId = \"@?\";\n financialUploadDirective.templateUrl = 'app/financial/directives/financial-upload.html';\n\n financialUploadDirective.controller = function ($filter, $scope, ConfigurationService, FileUploader, ToastUtil, $log,\n $translate, $uibModal, FileService, deviceDetector, DialogController, FileUploadService, WebcamService, $document, FinancialService) {\n var vm = this;\n $scope.category = undefined;\n $scope.categoryAttachment = FinancialService.getCategoryAttachment();\n var maximunSize = 52428800;\n $scope.deviceDetector = deviceDetector;\n\n if ($scope.multipleFile == undefined) {\n $scope.multipleFile = 'true';\n }\n\n if ($scope.category == undefined) {\n $scope.category = '';\n }\n\n if ($scope.attachments == undefined) {\n $scope.attachments = [];\n }\n\n if ($scope.showOnlyListItem == undefined) {\n $scope.showOnlyListItem = 'false';\n }\n\n if ($scope.showUrlFile == undefined) {\n $scope.showUrlFile = 'false';\n }\n\n if (!$scope.buttonLabel) {\n $scope.buttonLabel = 'file.upload.attach';\n }\n\n if (!$scope.buttonIcon) {\n $scope.buttonIcon = 'ic-attach';\n }\n\n if (!$scope.fileManagerComponentId) {\n $scope.fileManagerComponentId = 'fileManagerInput';\n }\n\n /* Camera Features */\n /**\n * Show Dialog to choose camera or file manager.\n */\n $scope.showCameraOptions = function () {\n if ($scope.disable)\n return;\n DialogController.showWithCloseListener('uploadoptions.dialog.title', '', vm, vm.closeDialogListener);\n };\n\n /**\n * Listener to TurnOff cam when dialog closes.\n */\n vm.closeDialogListener = function () {\n var webcam = WebcamService.webcam;\n if (webcam && webcam.isTurnOn === true) {\n webcam.turnOff();\n }\n };\n\n $scope.isShowCameraOptions = function () {\n return ($scope.showCameraOption == true || $scope.showCameraOption == \"true\") ? true : false;\n };\n\n /**\n * Check if client is mobile.\n * @returns {boolean}\n */\n $scope.isMobile = function () {\n return deviceDetector.os == \"android\" || deviceDetector.os == \"ios\";\n };\n\n /**\n * Call default file upload.\n */\n vm.fileManagerListener = function () {\n var element = $document[0].getElementById($scope.fileManagerComponentId);\n if (element != undefined) {\n element.click();\n }\n };\n\n /* End Camera Features */\n\n vm.uploader = $scope.uploader = new FileUploader({\n url: ConfigurationService.getServiceHost() + '/file/upload'\n });\n\n vm.uploader.filters.push({\n name: 'sizeFilter',\n\n fn: function (item) {\n\n var itemSize;\n\n if(item.Size){\n itemSize = item.Size;\n }\n else if(item.size){\n itemSize = item.size;\n }\n\n return itemSize <= maximunSize && validateSizeFilesOnList(item);\n }\n });\n\n vm.uploader.filters.push({\n name: 'typeFilter',\n\n fn: function (item) {\n return validateFileTypesAccepted(item); //not accepted .exe\n }\n });\n\n function validateSizeFilesOnList(newItem) {\n var sumSize = 0;\n var list = $scope.getAttachmentsList();\n\n if ($scope.multipleFile == 'true') {\n if (list == undefined) {\n list = [];\n }\n if (list.length === 0) {\n\n var itemSize = 0;\n\n if(newItem.size){\n itemSize = newItem.size;\n }\n else if(newItem.Size){\n itemSize = newItem.Size;\n }\n\n sumSize = sumSize + parseInt(itemSize);\n }\n else {\n\n angular.forEach(list, function (value) {\n\n var itemSize = 0;\n\n if(value.size){ itemSize = value.size; }\n else if(value.Size){ itemSize = value.Size; }\n\n sumSize = sumSize + parseInt(itemSize);\n\n });\n\n var sizeNewItem = 0;\n\n if(newItem.size){ sizeNewItem = newItem.size; }\n else if(newItem.Size){ sizeNewItem = newItem.Size; }\n\n sumSize = sumSize + sizeNewItem;\n }\n\n var msg;\n if (sumSize > maximunSize) {\n msg = 'file.size.list.fifty.megabytes.overflow';\n }\n\n if (msg) {\n ToastUtil.showToastMessage($translate.instant(msg), ToastUtil.ToastType.WARN);\n return false;\n }\n else{\n return true;\n }\n }\n else {\n return validateFileSize(newItem);\n }\n\n }\n\n function validateFileTypesAccepted(item) {\n var type = '|' + item.type.slice(item.type.lastIndexOf('/') + 1) + '|';\n\n if ('|x-msdownload|'.indexOf(type) == -1) { //if not find\n return true;\n } else {\n ToastUtil.showToastMessage($translate.instant(\"file.type.not.accepted\"), ToastUtil.ToastType.WARN);\n return false;\n }\n }\n\n if ($scope.onlyImages && $scope.onlyImages == true) {\n vm.uploader.filters.push({\n name: 'imageFilter',\n fn: function (item /*{File|FileLikeObject}*/ ) {\n var type = '|' + item.type.slice(item.type.lastIndexOf('/') + 1) + '|';\n if ('|jpg|png|jpeg|bmp|gif|'.indexOf(type) == -1) {\n ToastUtil.showToastMessage($translate.instant(\"file.type.image\"), ToastUtil.ToastType.WARN);\n return false;\n }\n return true;\n }\n });\n }\n\n if ($scope.onlyPdf && $scope.onlyPdf == true) {\n vm.uploader.filters.push({\n name: 'pdfFilter',\n fn: function (item /*{File|FileLikeObject}*/ ) {\n var type = '|' + item.type.slice(item.type.lastIndexOf('/') + 1) + '|';\n if ('|pdf|'.indexOf(type) == -1) {\n ToastUtil.showToastMessage($translate.instant(\"file.type.pdf\"), ToastUtil.ToastType.WARN);\n return false;\n }\n return true;\n }\n });\n }\n\n\n $scope.open = function (file) {\n if ($scope.disable)\n return;\n var modalInstance = $uibModal.open({\n animation: true,\n ariaLabelledBy: 'modal-title',\n ariaDescribedBy: 'modal-body',\n templateUrl: 'app/modal/info-modal.html',\n controller: 'ModalInfoController',\n controllerAs: 'ctrl'\n });\n\n modalInstance.result.then(function () {\n vm.removeFile(file);\n }, function () {\n //TODO: do something when user cancel\n });\n };\n\n $scope.getAttachmentsList = function () {\n var list = [];\n if (!$scope.statusAtt) {\n list = $scope.attachments;\n } else {\n var keyStatus = $scope.statusAtt;\n var status = $scope.statusValue;\n angular.forEach($scope.attachments, function (value) {\n if (value[keyStatus] == status) {\n list.push(value);\n }\n });\n }\n return list;\n };\n\n $scope.getAttachmentNameOrUrl = function (attachment) {\n var value = \"\";\n if($scope.showUrlFile === true || $scope.showUrlFile == 'true'){\n var path = attachment.Path\n var itemsPath = path.split(\"\\\\\");\n var fileName = itemsPath[itemsPath.length -1];\n value = ConfigurationService.getServiceHost() + \"/\" + fileName;\n\n } else {\n value = attachment.FileName;\n }\n return value;\n }\n\n $scope.downloadFile = function (file) {\n FileService.download(file).then(function (response) {\n var newFIle = new Blob([response], {\n\n });\n\n var fileURL = URL.createObjectURL(newFIle);\n\n // TODO : remove hardcoded\n var a = $document[0].createElement(\"a\");\n $document[0].body.appendChild(a);\n a.style = \"display: none\";\n a.href = fileURL;\n a.download = file.FileName;\n a.click();\n }).catch(function (error) {\n $log.log(error);\n // TODO erro on delete file\n });\n };\n\n $scope.getCategory = function(category) {\n var cat = $scope.categoryAttachment.filter(function( elm ) { return elm.Id == category });\n return $translate.instant(cat[0].Title);\n }\n\n vm.removeFile = function (file) {\n $scope.attachments = $scope.attachments.filter(function (item) {\n if (file.Id && item.Id) {\n return item.Id != file.Id;\n } else {\n return item.Path != file.Path;\n }\n });\n var index = vm.uploader.queue.findIndex(function (current) {\n return current.file.name === file.FileName;\n });\n if (index != -1) {\n vm.uploader.removeFromQueue(index);\n }\n };\n\n vm.uploader.onWhenAddingFileFailed = function (item, filter) {\n if (filter.name === 'sizeFilter') {\n validateFileSize(item);\n }\n };\n\n vm.uploader.onSuccessItem = function (fileItem, response) {\n vm.AttachTo(response);\n };\n\n function validateFileSize (data) {\n var sizeTotal = 0;\n var msg;\n if(data.size){\n sizeTotal = parseInt(data.size);\n }\n else if(data.Size){\n sizeTotal = parseInt(data.Size);\n }\n\n angular.forEach($scope.attachments, function (value) {\n if(value.size){\n sizeTotal = sizeTotal + parseInt(value.size);\n }\n else if(value.Size){\n sizeTotal = sizeTotal + parseInt(value.Size);\n }\n });\n\n if ( sizeTotal > 0 && sizeTotal > maximunSize) {\n //10MB\n if (maximunSize == 10485760) {\n msg = 'file.size.ten.megabytes.overflow';\n }\n //20MB\n else if (maximunSize == 20971520) {\n msg = 'file.size.twenty.megabytes.overflow';\n }\n\n ToastUtil.showToastMessage($translate.instant(msg), ToastUtil.ToastType.WARN);\n return false;\n }\n return true;\n }\n\n vm.AttachTo = function (data) {\n var add = true;\n angular.forEach($scope.getAttachmentsList(), function (value) {\n if (value.FileName == data.FileName) {\n add = false;\n ToastUtil.showToastMessage($translate.instant(\"file.same.name\"), ToastUtil.ToastType.WARN);\n }\n });\n\n if (add) {\n if (!$scope.attachments)\n $scope.attachments = [];\n\n if ( validateFileSize(data) ) {\n if ($scope.statusAtt) {\n var key = $scope.statusAtt;\n var value = $scope.statusValue;\n value.Category = $scope.category;\n\n data[key] = value;\n }\n if (!data.Id) {\n data['Id'] = 0;\n data.Category = $scope.category;\n }\n if ($scope.multipleFile == 'false') {\n\n FileService.download(data).then(function (response) {\n var newFIle = new Blob([response], {});\n data.FileBlob = URL.createObjectURL(newFIle);\n $scope.attachments = [data];\n }).catch(function (error) {\n $log.log(error);\n });\n\n } else {\n $scope.attachments.push(data);\n }\n }\n }\n };\n\n vm.uploader.onErrorItem = function (fileItem, response) {\n ToastUtil.showToastMessage($translate.instant(\"file.erro.save\"), ToastUtil.ToastType.ERROR);\n };\n\n vm.uploader.onAfterAddingFile = function () {\n vm.uploader.uploadAll();\n };\n\n };\n return financialUploadDirective;\n }\n\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *\n */\n function FinancialSolicitationController($scope, $sce) {\n\n var vm = this;\n vm.value = $scope.parentDialog;\n vm.disable = $scope.modelDialog;\n\n vm.getSize = function () {\n return $scope.parentDialogSize;\n };\n\n vm.isConfirmDisabled = function () {\n return !vm.value || vm.value.length < 3;\n };\n\n vm.close = function () {\n $scope.$close('cancel');\n $scope.$dismiss();\n };\n\n vm.confirm = function () {\n $scope.parentDialog({\n value: vm.value\n });\n $scope.$close('ok');\n };\n\n vm.getHTML = function (text) {\n return $sce.trustAsHtml(text);\n };\n \n }\n\n function FinancialSolicitationDirective() {\n return {\n restrict: 'E',\n replace: true,\n templateUrl: \"app/financial/directives/financial-solicitation.html\",\n controllerAs: 'ctrl',\n controller: 'FinancialSolicitationController'\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('FinancialSolicitationController', FinancialSolicitationController)\n .directive('financialSolicitation', FinancialSolicitationDirective);\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('FinancialRemarkController', FinancialRemarkController)\n .directive('financialRemark', FinancialRemarkDirective);\n\n function FinancialRemarkDirective() {\n return {\n bindToController: true,\n restrict: 'E',\n replace: true,\n templateUrl: \"app/financial/directives/financial-remark.html\",\n controllerAs: 'ctrl',\n controller: 'FinancialRemarkController',\n scope: {\n isOptional: '=?'\n }\n };\n\n }\n /* @ngInject */\n function FinancialRemarkController($scope) {\n var vm = this;\n vm.value = \"\";\n vm.remarkInvalid = false;\n\n vm.getSize = function () {\n return $scope.parentDialogSize;\n };\n\n vm.isConfirmDisabled = function () {\n return !vm.value || vm.value.length < 3;\n };\n\n vm.close = function () {\n $scope.$parent.$close('cancel');\n $scope.$parent.$dismiss();\n };\n\n vm.confirm = function () {\n var optional = angular.isDefined(vm.isOptional) && vm.isOptional === true;\n if (!optional && (vm.value === null || angular.isUndefined(vm.value) || vm.value === \"\")) {\n vm.remarkInvalid = true;\n return;\n }\n\n $scope.$parent.parentDialog(vm.value);\n $scope.$parent.$close('ok');\n\n };\n\n vm.onRemarkChanged = function () {\n vm.remarkInvalid = false;\n }\n\n }\n})();\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('EditProblemController', EditProblemController);\n\n\n function EditProblemController(FacaService, $stateParams, $window, $location, $anchorScroll, $log, UserService, ModelService,\n DefaultService, moment, ToastUtil, $translate, $state, $scope, $uibModal, DialogController, ListUtil, AuthService, $document) {\n\n var vm = this;\n\n vm.canSave = true;\n vm.facaId;\n vm.issueId;\n vm.containmentDetails = false;\n vm.editingControlPlan = false;\n vm.controlPlan = {};\n\n vm.errorMsgArray = [];\n\n var profilePermission = {\n CanAdd: false,\n CanEdit: false,\n CanDelete: false,\n CanView: false,\n CanApprove: false,\n CanExport: false\n }\n\n vm.faca = {\n Title: '',\n Problem: {\n Title: ''\n }\n };\n\n vm.issue = {\n Title: ''\n };\n\n // PAGE TRANSITION\n vm.pageMap = new Array();\n vm.pageMap['effect'] = {\n name: 'effect',\n url: 'app/faca/problem/effect/effect-tab.html'\n };\n vm.pageMap['containment'] = {\n name: 'containment',\n url: 'app/faca/problem/containment/containment-tab.html'\n };\n vm.pageMap['rootCause'] = {\n name: 'rootCause',\n url: 'app/faca/problem/root-cause/root-cause-tab.html'\n };\n vm.pageMap['risk'] = {\n name: 'risk',\n url: 'app/faca/problem/root-cause/risk/risk-tab.html'\n };\n vm.pageMap['actionPlan'] = {\n name: 'actionPlan',\n url: 'app/faca/problem/root-cause/action-plan/action-plan.html'\n };\n vm.pageMap['correctiveAction'] = {\n name: 'correctiveAction',\n url: 'app/faca/problem/root-cause/corrective-action/corrective-action-tab.html'\n };\n\n vm.showContainmentDetails = function () {\n vm.containmentDetails = !vm.containmentDetails;\n }\n\n vm.selectedPage = vm.pageMap['effect'];\n\n vm.updateTabActive = function (tab) {\n return vm.selectedPage.name == tab ? 'active' : '';\n }\n\n vm.goToPage = function (page) {\n vm.selectedPage = vm.pageMap[page];\n\n };\n\n vm.goToPage = function (page, selectedSubTab) {\n vm.containmentDetails = false;\n vm.editingControlPlan = false;\n vm.selectedPage = vm.pageMap[page];\n vm.selectedSubTab = selectedSubTab;\n };\n\n vm.effectList = [];\n vm.effectSelecteds = [];\n\n // CONTAINMENT PAGE\n vm.containmentStatus = [{\n id: 0,\n name: 'option.onGoing',\n styleClass: 'status-ongoing'\n },\n {\n id: 1,\n name: 'option.late',\n styleClass: 'status-late'\n },\n {\n id: 2,\n name: 'option.closed',\n styleClass: 'status-closed'\n }\n ];\n\n vm.containmentPlanList = [];\n\n vm.showAddContainmentPlanDialog = function () {\n vm.containmentDetails = false;\n DialogController.show('title.newContainment', '', vm);\n };\n\n vm.addContainmentPlan = function (plan) {\n if (!plan.IdTemp) {\n plan.IdTemp = 'TMP_' + (vm.issue.ContainmentPlans.length + 2);\n }\n ListUtil.updateItem(vm.issue.ContainmentPlans, plan, \"IdTemp\");\n };\n\n vm.removeContainmentPlan = function (plan) {\n ListUtil.removeItem(vm.issue.ContainmentPlans, plan);\n };\n\n vm.editContainmentPlan = function (plan) {\n vm.containmentDetails = false;\n DialogController.show('title.editContainment', '', vm, plan);\n };\n // END CONTAINMENT PAGE\n\n vm.editCorrectiveAction = function (controlPlan) {\n vm.controlPlan = controlPlan;\n vm.editingControlPlan = !vm.editingControlPlan;\n }\n\n vm.saveCorrectiveAction = function () {\n vm.editingControlPlan = !vm.editingControlPlan;\n }\n\n // ROOT CAUSE PAGE\n vm.ishikawaTypes = [];\n\n /**\n * Load IshikawaTypes.\n */\n vm.loadIshiKawaTypes = function () {\n FacaService.listAllIshikawaType().then(function (response) {\n vm.ishikawaTypes = angular.copy(response);\n\n angular.forEach(vm.issue.Ishikawas, function (persistedIshikawa) {\n\n if (persistedIshikawa.CreatedByDRI == null) {\n persistedIshikawa.CreatedByDRI = undefined;\n }\n\n var isItemInative = true;\n angular.forEach(vm.ishikawaTypes, function (valueType) {\n if (valueType.Id == persistedIshikawa.IshikawaType.Id) {\n isItemInative = false;\n }\n });\n if (isItemInative) {\n vm.ishikawaTypes.push(persistedIshikawa.IshikawaType)\n }\n });\n\n angular.forEach(vm.ishikawaTypes, function (valueType) {\n valueType.list = [];\n angular.forEach(vm.issue.Ishikawas, function (ishikawa) {\n if (valueType.Id == ishikawa.IshikawaType.Id) {\n valueType.list.push(ishikawa);\n }\n });\n });\n\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.Message), ToastUtil.ToastType.ERROR);\n });\n };\n // END ROOT CAUSE PAGE\n\n // RISKS PAGE\n vm.valuesPoints = [1, 3, 5, 9];\n // END RISKS PAGE\n\n // ACTION PLAN PAGE\n vm.editActPlan = false;\n vm.setEditableActionPlan = function (isEditable) {\n vm.editActPlan = isEditable;\n };\n\n vm.saveActionPlan = function () {\n // Metodo para salvar.\n vm.setEditableActionPlan(false);\n };\n // END ACTION PLAN PAGE\n\n // CORRECTIVE ACTION PAGE\n vm.beforeImages = [];\n vm.afterImages = [];\n // END CORRECTIVE ACTION PAGE\n\n // CONTROL PLAN PAGE\n vm.controlPlanStatus = [{\n id: 0,\n name: 'option.onGoing'\n },\n {\n id: 1,\n name: 'option.late'\n },\n {\n id: 2,\n name: 'option.closed'\n }\n ];\n\n vm.setFakeIdToControlPlans = function () {\n angular.forEach(vm.issue.ControlPlans, function (value, key) {\n value.Index = new Date() + key;\n });\n };\n\n vm.showAddControlPlanDialog = function () {\n DialogController.show('title.newControlPlan', '', vm);\n };\n\n vm.addControlPlan = function (plan) {\n ListUtil.updateItem(vm.issue.ControlPlans, plan, \"Index\");\n };\n\n vm.removeControlPlan = function (plan) {\n ListUtil.removeItem(vm.issue.ControlPlans, plan);\n };\n\n vm.editControlPlan = function (plan) {\n var dueDt = moment(plan.DueDate, 'DD/MM/YYYY');\n plan.DueDateTemp = new Date(dueDt.year(), dueDt.month(), dueDt.date());\n DialogController.show('title.editControlPlan', '', vm, plan);\n };\n // END CONTROL PLAN PAGE\n\n vm.showAddLessonLearnDialog = function () {\n DialogController.show('title.newLessonLearn', '', vm);\n };\n\n vm.addLessonLearn = function (lesson) {\n if (!lesson.IdTemp) {\n lesson.IdTemp = 'TMP_' + new Date().getTime();\n }\n ListUtil.updateItem(vm.issue.LessonLearns, lesson, \"IdTemp\");\n };\n\n vm.removeLessonLearn = function (lesson) {\n ListUtil.removeItem(vm.issue.LessonLearns, lesson);\n };\n\n vm.editLessonLearn = function (lesson) {\n DialogController.show('title.editLessonLearn', '', vm, lesson);\n };\n\n vm.limparActionPlan = function (ishi) {\n if (ishi.VitalFew == null || ishi.VitalFew == false) {\n ishi.Before = null;\n ishi.After = null;\n ishi.IssueAttachments = [];\n }\n };\n // END LESSON LEARN PAGE\n\n vm.montarListaEfeitos = function () {\n var searchParams = {\n Title: \"\",\n CsActive: 1\n };\n\n DefaultService.loadEffects(searchParams).then(function (response) {\n vm.effectList = angular.copy(response);\n if (!vm.effectList.length) {\n vm.facaEffectForm.$setValidity('noEffectType', false);\n } else {\n vm.markEffectsToEdit();\n }\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"error.effects\"), ToastUtil.ToastType.ERROR);\n });\n };\n\n vm.markEffectsToEdit = function () {\n if (vm.issue.EffectTypes != undefined) {\n angular.forEach(vm.issue.EffectTypes, function (persistedValue) {\n var isItemInative = true;\n angular.forEach(vm.effectList, function (value) {\n if (value.Id == persistedValue.Id) {\n vm.effectSelecteds.push(value.Id);\n isItemInative = false;\n }\n })\n\n if (isItemInative) {\n vm.effectSelecteds.push(persistedValue.Id);\n vm.effectList.push(persistedValue);\n }\n\n })\n\n }\n };\n\n function init() {\n loadProfileModules();\n }\n\n function loadProfileModules() {\n var profileModule = {};\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.moduleFaca;\n\n DefaultService.loadModules(profileModule).then(function (response) {\n profilePermission = angular.copy(response);\n\n if (!profilePermission.CanEdit) {\n $state.go('not-authorized', {});\n }\n\n vm.issue = angular.copy($stateParams[\"issue\"]);\n vm.facaId = $stateParams[\"facaId\"];\n vm.issueId = $stateParams.problemId;\n\n FacaService.getIssueById(vm.issueId).then(function (response) {\n vm.issue = angular.copy(response);\n loadInitialInfo();\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.Message), ToastUtil.ToastType.ERROR);\n });\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n });\n }\n\n vm.isAllFieldDisabled = function () {\n var isDisabled = false;\n if (vm.issue != null) {\n if (((vm.issue.FacaLevel == 'A' || vm.issue.FacaLevel == 'B') && !profilePermission.CanApprove)) {\n isDisabled = true;\n }\n }\n return isDisabled;\n };\n\n var loadInitialInfo = function () {\n\n var facaTitle = $stateParams.facaTitle;\n if (!facaTitle) {\n facaTitle = $window.localStorage.facaTitle;\n }\n\n vm.faca = {\n Title: facaTitle,\n Problem: {\n Title: vm.issue.Title\n }\n };\n\n angular.forEach(vm.issue.ContainmentPlans, function (value) {\n var startDt = moment(value.Whens, 'DD/MM/YYYY');\n value.Whens = new Date(startDt.year(), startDt.month(), startDt.date());\n if (!value.IdTemp) {\n value.IdTemp = 'TMP_' + (value.Id);\n }\n\n //Setting DRI\n if (value.WhoGroup != null && angular.isDefined(value.WhoGroup)) {\n value.CreatedByDRI = value.WhoGroup;\n value.CreatedByDRI.IsGroup = true;\n } else {\n value.CreatedByDRI = value.WhoUser;\n }\n });\n\n angular.forEach(vm.issue.LessonLearns, function (value) {\n if (!value.IdTemp) {\n value.IdTemp = 'TMP_' + (value.Id);\n }\n });\n\n angular.forEach(vm.issue.Ishikawas, function (value) {\n if (value.Whens) {\n var startDt = moment(value.Whens, 'DD/MM/YYYY');\n value.Whens = new Date(startDt.year(), startDt.month(), startDt.date());\n }\n if (value.DRIID && !value.UserName) {\n value.UserName = null;\n }\n //Setting DRI\n if (value.WhoGroup != null && angular.isDefined(value.WhoGroup)) {\n value.CreatedByDRI = value.WhoGroup;\n value.CreatedByDRI.IsGroup = true;\n } else {\n value.CreatedByDRI = value.WhoUser;\n }\n });\n\n angular.forEach(vm.issue.ControlPlans, function (value) {\n //Setting DRI\n if (value.Group != null && angular.isDefined(value.Group)) {\n value.CreatedByDRI = value.Group;\n value.CreatedByDRI.IsGroup = true;\n } else {\n value.CreatedByDRI = value.User;\n }\n });\n\n vm.setFakeIdToControlPlans();\n\n vm.montarListaEfeitos();\n vm.loadIshiKawaTypes();\n };\n\n vm.goBack = function () {\n $state.go('faca-edit', {\n id: 1\n });\n }\n\n init();\n\n vm.save = function () {\n if (!vm.canSave) {\n return;\n }\n\n vm.canSave = false;\n vm.issue.EffectTypes = vm.getSelectedEffectTypes();\n\n angular.forEach(vm.issue.ContainmentPlans, function (value) {\n value.Whens = moment(value.Whens).format('DD/MM/YYYY');\n });\n\n angular.forEach(vm.issue.Ishikawas, function (value) {\n if (value.Whens) {\n value.Whens = moment(value.Whens).format('DD/MM/YYYY');\n }\n });\n\n changeDRI();\n\n FacaService.saveIssue(vm.issue, vm.facaId).then(function () {\n\n ToastUtil.showToastMessage($translate.instant(\"faca.saved.success\"), ToastUtil.ToastType.SUCCESS);\n\n angular.forEach(vm.issue.ContainmentPlans, function (value) {\n var startDt = moment(value.Whens, 'DD/MM/YYYY');\n value.Whens = new Date(startDt.year(), startDt.month(), startDt.date());\n });\n angular.forEach(vm.issue.Ishikawas, function (value) {\n if (value.Whens) {\n var startDt = moment(value.Whens, 'DD/MM/YYYY');\n value.Whens = new Date(startDt.year(), startDt.month(), startDt.date());\n }\n });\n vm.canSave = true;\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"save.faca.eror.msg\"), ToastUtil.ToastType.ERROR);\n vm.canSave = true;\n });\n };\n\n function changeDRI() {\n\n // ContainmentPlans.\n angular.forEach(vm.issue.ContainmentPlans, function (item) {\n if (item.CreatedByDRI && item.CreatedByDRI.IsGroup) {\n item.WhoGroup = item.CreatedByDRI;\n item.WhoUser = null;\n } else {\n item.WhoUser = item.CreatedByDRI;\n item.WhoGroup = null;\n }\n });\n\n // ControlPlans.\n angular.forEach(vm.issue.ControlPlans, function (item) {\n if (item.CreatedByDRI && item.CreatedByDRI.IsGroup) {\n item.Group = item.CreatedByDRI;\n item.User = null;\n } else {\n item.User = item.CreatedByDRI;\n item.Group = null;\n }\n });\n\n // Ishikawas.\n angular.forEach(vm.issue.Ishikawas, function (item) {\n if (item.CreatedByDRI && item.CreatedByDRI.IsGroup) {\n item.WhoGroup = item.CreatedByDRI;\n item.WhoUser = null;\n } else {\n item.WhoUser = item.CreatedByDRI;\n item.WhoGroup = null;\n }\n });\n }\n\n vm.export = function (id) {\n if (profilePermission.CanExport) {\n if (!vm.exporting) {\n vm.exporting = true;\n\n FacaService.exportReportFACA(id).then(function (response) {\n var date = moment().format(\"DD_MM_YYYY_HH_mm_ss\");\n\n var newFile = new Blob([response], {\n type: 'application/application/vnd.openxmlformats-officedocument.wordprocessingml.document'\n });\n var fileURL = URL.createObjectURL(newFile);\n\n var a = $document[0].createElement(\"a\");\n $document[0].body.appendChild(a);\n a.style = \"display: none\";\n a.href = fileURL;\n a.download = \"ReportFACA_\" + AuthService.getBusinessName() + \"_\" + date + \".docx\";\n\n a.click();\n\n vm.exporting = false;\n\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"service.load.error\"), ToastUtil.ToastType.ERROR);\n vm.exporting = false;\n });\n }\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n };\n\n vm.calcularScore = function (ishikawa) {\n if (ishikawa.Severity && ishikawa.Probability && ishikawa.Detectability) {\n ishikawa.Score = ishikawa.Severity * ishikawa.Probability * ishikawa.Detectability;\n } else {\n ishikawa.Score = '';\n }\n }\n\n vm.getSelectedEffectTypes = function () {\n var effects = [];\n for (var indexSelected = 0; indexSelected < vm.effectSelecteds.length; indexSelected++) {\n for (var effIndex = 0; effIndex < vm.effectList.length; effIndex++) {\n if (vm.effectList[effIndex].Id == vm.effectSelecteds[indexSelected]) {\n effects.push(vm.effectList[effIndex]);\n break;\n }\n }\n }\n return effects;\n };\n }\n})();\n\n(function() {\n\n\t'use strict';\n\n\t/**\n\t *\n\t */\n\tfunction ProblemAddController($scope) {\n\n\t\tvar vm = this;\n\t\tvar scope = $scope;\n\n\t\tscope.requiredFields = false;\n\n\t\tvm.problem = {Id:0,title:\"\",Deffects:null,Production:null,Dppm:null};\n\n\t\tfunction initView() {\n\t\t\tvar model = $scope.modelDialog;\n\t\t\tvm.problem = angular.copy(model);\n\t\t}\n\n\t\tvm.close = function () {\n\t\t\tscope.$dismiss('cancel');\n\t\t};\n\n\t\tvm.save = function () {\n\n\t\t\tif(vm.problem.Deffects == undefined || vm.problem.Deffects.length == 0) {\n\t\t\t\tvm.problem.Deffects = 0;\n\t\t\t} else {\n\t\t\t\tvm.problem.Deffects = parseInt(vm.problem.Deffects, 10);\n\t\t\t}\n\n\t\t\tif(vm.problem.Production == undefined || vm.problem.Production.length == 0) {\n\t\t\t\tvm.problem.Production = 0;\n\t\t\t} else {\n\t\t\t\tvm.problem.Production = parseInt(vm.problem.Production, 10);\n\t\t\t}\n\n\t\t\tif(vm.problem.Dppm == undefined || vm.problem.Dppm.length == 0) {\n\t\t\t\tvm.problem.Dppm = 0;\n\t\t\t} else {\n\t\t\t\tvm.problem.Dppm = parseFloat(vm.problem.Dppm.toFixed(2));\n\t\t\t}\n\n\t\t\t$scope.parentDialog.addProblem(vm.problem);\n\t\t\tscope.$close('ok');\n\t\t};\n\n\t\tvm.validateTitle = function(){\n\t\t\tif(vm.problem.Title != undefined && ((vm.problem.Title + '').length > 0))\n\t\t\t\treturn true;\n\n\t\t\treturn false;\n\t\t};\n\n\t\tvm.validateDefects = function(){\n\t\t\tif(!$scope.requiredFields)\n\t\t\t\treturn true;\n\n\t\t\tif((vm.problem.Deffects != undefined && ((vm.problem.Deffects + '').length > 0)))\n\t\t\t\treturn true;\n\n\t\t\treturn false;\n\t\t};\n\n\t\tvm.validateProduction = function(){\n\t\t\tif(!$scope.requiredFields)\n\t\t\t\treturn true;\n\n\t\t\tif((vm.problem.Production != undefined && ((vm.problem.Production + '').length > 0)))\n\t\t\t\treturn true;\n\n\t\t\treturn false;\n\t\t};\n\n\t\tvm.calculateDPPM = function(){\n\t\t\tvar defects = vm.problem.Deffects;\n\t\t\tvar production = vm.problem.Production;\n\t\t\tvar calculo = 0;\n\t\t\tif(production > 0) {\n\t\t\t\tcalculo = (defects / production) * 1000000;\n\t\t\t}\n\n\t\t\tvm.problem.Dppm = parseFloat(calculo.toFixed(2));\n\t\t};\n\n\t\tinitView();\n\t}\n\n\tfunction ProblemAddDirective() {\n\t\treturn {\n\t\t\trestrict: 'E',\n\t\t\treplace: true,\n\t\t\ttemplateUrl : \"app/faca/problem/problem-add.html\",\n\t\t\tcontrollerAs : 'ctrl',\n\t\t\tcontroller : 'ProblemAddController'\n\t\t};\n\t}\n\n\tangular.module('aqmsFrontend')\n\t\t.controller('ProblemAddController', ProblemAddController)\n\t\t.directive('problemAdd', ProblemAddDirective);\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(DocumentFlowTargetTranslate);\n\n /** @ngInject */\n function DocumentFlowTargetTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'document.flow.target.label.approver': 'Approver',\n 'document.flow.target.label.consent': 'Consent',\n 'document.flow.target.role.placeholder': 'Select a role',\n 'document.flow.target.route.placeholder': 'Select a route',\n 'document.flow.target.title.approver.consent': 'Approver / Consent',\n 'document.flow.target.label.role': 'Role',\n 'document.flow.target.label.status': 'Status',\n 'document.flow.target.label.pending.approval': 'Pending approval',\n 'document.flow.target.label.approved': 'Approved',\n 'document.flow.target.label.rejected': 'Rejected',\n 'document.flow.target.label.receive.date': 'Receive date',\n 'document.flow.target.label.processing.date': 'Processing date',\n 'document.flow.target.label.lead.time': 'Lead Time - (H)',\n 'document.flow.target.label.parallel.approval': 'Parallel',\n 'document.flow.target.error.logged_in_approver_list.title': 'You already in Approver/Consent list.',\n 'document.flow.target.error.logged_in_approver_list.description': 'You will be removed from Approver/Consent list.',\n 'document.flow.target.error.not_empty.title': 'Approver/Consent list not empty.',\n 'document.flow.target.error.not_empty.description': 'The Approver/Consent list will be overwrite by route.'\n });\n\n $translateProvider.translations('pt', {\n 'document.flow.target.label.approver': 'Aprovador',\n 'document.flow.target.label.consent': 'Consente',\n 'document.flow.target.role.placeholder': 'Selecione uma função',\n 'document.flow.target.route.placeholder': 'Selecione uma rota',\n 'document.flow.target.title.approver.consent': 'Aprovador / Consente',\n 'document.flow.target.label.role': 'Função',\n 'document.flow.target.label.status': 'Situação',\n 'document.flow.target.label.pending.approval': 'Pendente de aprovação',\n 'document.flow.target.label.approved': 'Aprovado',\n 'document.flow.target.label.rejected': 'Rejeitado',\n 'document.flow.target.label.receive.date': 'Data de Recebimento',\n 'document.flow.target.label.processing.date': 'Data de processamento',\n 'document.flow.target.label.lead.time': 'Lead Time - (H)',\n 'document.flow.target.label.parallel.approval': 'Paralela',\n 'document.flow.target.error.logged_in_approver_list.title': 'Você está na lista de Aprovador/Consente.',\n 'document.flow.target.error.logged_in_approver_list.description': 'Você será removido da lista de Aprovador/Consente.',\n 'document.flow.target.error.not_empty.title': 'Lista de Aprovador/Consente não vazia.',\n 'document.flow.target.error.not_empty.description': 'A lista de Aprovador/Consente será substituída pela rota selecionada.'\n });\n }\n})();\n\n(function () {\n 'use strict';\n\n function DocumentFlowTargetController($scope, ToastUtil, $translate, $document, moment, $log, PreferencesService,\n DialogController, AuthService, CalendarService) {\n\n var vm = this;\n var listTargetCopy = [];\n var group = [];\n var qtdGroup = [];\n vm.target = '';\n vm.Role = 0;\n vm.Route = null;\n vm.targetRequired = false;\n vm.roleRequired = false;\n vm.targetSelected = null;\n vm.targetAtualizado = false;\n vm.noReservation = false;\n\n var roleConst = {\n APPROVER: 0,\n CONSENT: 1\n }\n\n var statusConst = {\n PENDINGAPPROVAL: 0,\n APPROVED: 1,\n REJECT: 2\n }\n\n vm.roleList = [{\n Value: roleConst.APPROVER,\n Title: \"document.flow.target.label.approver\"\n },\n {\n Value: roleConst.CONSENT,\n Title: \"document.flow.target.label.consent\"\n }\n ];\n\n vm.getTitleRole = function (role) {\n switch (role) {\n case roleConst.APPROVER:\n return $translate.instant('document.flow.target.label.approver');\n case roleConst.CONSENT:\n return $translate.instant('document.flow.target.label.consent');\n }\n }\n\n vm.getTitleStatus = function (status) {\n switch (status) {\n case statusConst.PENDINGAPPROVAL:\n return $translate.instant('document.flow.target.label.pending.approval');\n case statusConst.APPROVED:\n return $translate.instant('document.flow.target.label.approved');\n case statusConst.REJECT:\n return $translate.instant('document.flow.target.label.rejected');\n }\n }\n\n vm.confirmReservation = function (approve, reservation) {\n vm.targetSelected = reservation.Reservation;\n vm.noReservation = true;\n vm.showConfirm($translate.instant(\"document.flow.approval.reservation.message.confirm\")\n .replace(\"#approve\", approve.Name)\n .replace(\"#startdate\", moment(reservation.StartDate).format($translate.instant('approval.reservation.date.format')))\n .replace(\"#enddate\", moment(reservation.EndDate).format($translate.instant('approval.reservation.date.format')))\n .replace(\"#reservation\", reservation.Reservation.Name), vm.setTargetSelect);\n };\n\n vm.showConfirm = function (text, action) {\n DialogController.show($translate.instant('document.flow.confirmation.title'), '', action, text);\n };\n\n function searchReservation(userSelected) {\n var approveSearch = {\n ApproveId: userSelected.Id,\n ApproveDate: new Date()\n }\n PreferencesService.getReservationByApproveAndDate(approveSearch).then(function (response) {\n if (response != null && response != \"\") {\n var approveReservation = angular.copy(response);\n vm.confirmReservation(userSelected, approveReservation);\n } else {\n vm.noReservation = false;\n vm.setTarget(userSelected);\n }\n }).catch(function (error) {\n $log.log(error);\n if (error.status !== $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"preferences.dashboard.error.msg\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n\n vm.setTargetSelect = function () {\n vm.target = vm.targetSelected;\n vm.targetSelected = null;\n vm.targetAtualizado = true;\n vm.noReservation = false;\n }\n\n vm.setTarget = function (value) {\n vm.target = value;\n if (vm.target != vm.targetSelected) {\n vm.noReservation = false;\n }\n }\n\n vm.updateModel = function (value) {\n searchReservation(value);\n }\n\n function checkIfLoggedUserInList() {\n var id = AuthService.getUserID()\n if (vm.listTarget.some(function (item) {\n return Number(item.User.Id) === Number(id)\n })) {\n DialogController.show($translate.instant('document.flow.target.error.logged_in_approver_list.title'), '', vm.removeLoggedUserFromTargetList, $translate.instant('document.flow.target.error.logged_in_approver_list.description'));\n }\n }\n\n vm.removeLoggedUserFromTargetList = function () {\n var id = AuthService.getUserID()\n vm.listTarget = vm.listTarget.filter(function (item) {\n return Number(item.User.Id) !== Number(id)\n })\n }\n\n function checkIfAlreadyHasMemberInListBeforeAddRoute() {\n if (vm.listTarget.length > 0) {\n return DialogController.show(\n $translate.instant('document.flow.target.error.not_empty.title'),\n '', vm.cleanApproverList,\n $translate.instant('document.flow.target.error.not_empty.description')).closed;\n }\n return new Promise(function (resolve) {\n resolve();\n })\n }\n\n vm.cleanApproverList = function () {\n vm.listTarget = [];\n }\n\n vm.addNewItem = function () {\n if (vm.radioValue == 0) {\n if (vm.target != undefined && vm.target.Name != undefined && vm.target.Name.length > 0) {\n vm.targetRequired = false;\n } else {\n vm.targetRequired = true;\n }\n\n if (angular.isDefined(vm.Role) && vm.Role != null) {\n vm.roleRequired = false;\n } else {\n vm.roleRequired = true;\n }\n\n if (vm.target != undefined && vm.target.Name != undefined && vm.target.Name.length > 0 && angular.isDefined(vm.Role) && vm.Role != null && !listContainsItem(vm.listTarget, vm.target)) {\n\n var newTarget = {\n User: vm.target,\n Role: vm.Role,\n Status: statusConst.PENDINGAPPROVAL,\n OrderTarget: vm.listTarget.length + 1,\n ProcessingDate: null,\n ReceiveDate: null,\n ParallelApproval: false,\n TargetNotification: false\n };\n\n vm.listTarget.push(angular.copy(newTarget));\n }\n } else if (vm.Route != undefined && vm.Route.ApprovalRouteList.length > 0) {\n checkIfAlreadyHasMemberInListBeforeAddRoute().then(function () {\n for (var i = 0; i < vm.Route.ApprovalRouteList.length; i++) {\n if (!listContainsItem(vm.listTarget, vm.Route.ApprovalRouteList[i])) {\n var newTarget = {\n User: vm.Route.ApprovalRouteList[i],\n Role: roleConst.APPROVER,\n Status: statusConst.PENDINGAPPROVAL,\n OrderTarget: vm.listTarget.length + 1,\n ProcessingDate: null,\n ReceiveDate: null,\n ParallelApproval: false,\n TargetNotification: false\n };\n vm.listTarget.push(angular.copy(newTarget));\n }\n }\n checkIfLoggedUserInList()\n })\n }\n $document[0].getElementById('documentFlowTarget').focus();\n vm.target = '';\n }\n\n vm.delete = function (id) {\n for (var i = 0; i < vm.listTarget.length; i++) {\n if (vm.listTarget[i].User.Id == id) {\n vm.listTarget.splice(i, 1);\n }\n }\n sortTarget();\n };\n\n vm.moveItem = function (pos, item, down) {\n vm.dragstart();\n vm.listTarget.splice(pos, 1);\n vm.listTarget.splice(down ? pos + 1 : pos - 1, 0, item);\n vm.orderedList(item);\n }\n\n vm.orderedList = function (target) {\n\n var indexTarget = vm.listTarget.findIndex(function (item) {\n return item.User.Id == target.User.Id\n });\n\n var error = withinTheGroup(indexTarget);\n\n if (!target.ParallelApproval) {\n if (error) {\n vm.listTarget = angular.copy(listTargetCopy);\n }\n }\n\n if (!error) {\n targetUpApproval(indexTarget);\n }\n\n sortTarget();\n listTargetCopy = null;\n }\n\n function withinTheGroup(indexTarget) {\n for (var i = 0; i < qtdGroup.length; i++) {\n for (var j = 0; j < qtdGroup[i].length; j++) {\n if (indexTarget == qtdGroup[i][j]) {\n return true;\n }\n }\n }\n return false;\n }\n\n function targetUpApproval(indexTarget) {\n for (var i = indexTarget; i < vm.listTarget.length; i++) {\n if (vm.listTarget[i].Status != statusConst.PENDINGAPPROVAL) {\n vm.listTarget = angular.copy(listTargetCopy);\n break;\n }\n if (vm.listTarget[i].TargetNotification) {\n vm.listTarget = angular.copy(listTargetCopy);\n break;\n }\n }\n }\n\n vm.disabledParallel = function (index, target) {\n if (!target.ParallelApproval && !target.TargetNotification) {\n if (index == 0 && vm.listTarget[index + 1].TargetNotification) {\n vm.listTarget.splice(index, 1);\n vm.listTarget.push(target);\n } else if (vm.listTarget.length !== (index + 1) && vm.listTarget[index - 1].TargetNotification && vm.listTarget[index + 1].TargetNotification) {\n vm.listTarget.splice(index, 1);\n vm.listTarget.push(target);\n }\n sortTarget();\n }\n }\n\n function sortTarget() {\n for (var i = 0; i < vm.listTarget.length; i++) {\n vm.listTarget[i].OrderTarget = i + 1;\n }\n }\n\n function getGroup(list) {\n group = [];\n qtdGroup = [];\n for (var i = 0; i < list.length; i++) {\n if (list[i].Id) {\n\n if (list[i].ParallelApproval && list[i].TargetNotification) {\n group.push(i);\n } else {\n if (group.length > 1) {\n qtdGroup.push(group);\n }\n group = [];\n }\n }\n }\n if (group.length > 1) {\n qtdGroup.push(group);\n }\n }\n\n vm.dragstart = function () {\n listTargetCopy = angular.copy(vm.listTarget);\n getGroup(listTargetCopy);\n }\n\n function listContainsItem(listTarget, item) {\n\n for (var i = 0; i < listTarget.length; i++) {\n\n if (listTarget[i].User.Id == item.Id) {\n ToastUtil.showToastMessage($translate.instant('error.user.duplicate').replace(\"$name\", item.Name), ToastUtil.ToastType.WARN);\n return true;\n }\n }\n\n return false;\n }\n }\n\n function DocumentFlowTargetDirective() {\n return {\n bindToController: true,\n restrict: 'E',\n scope: {\n listTarget: '=',\n isRequired: '=?',\n statusDocument: '=?',\n targetApproved: '=?',\n isEnabledApproved: '=?',\n users: '=?',\n radioValue: '=',\n routesList: '=',\n changeFn: '&?'\n },\n replace: true,\n templateUrl: \"app/document_flow/document_flow_target/document-flow-target.html\",\n controllerAs: 'ctrl',\n controller: 'DocumentFlowTargetController'\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('DocumentFlowTargetController', DocumentFlowTargetController)\n .directive('documentFlowTarget', DocumentFlowTargetDirective);\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *\n */\n function DocumentFlowRemarkController($scope) {\n\n var vm = this;\n vm.value = \"\";\n\n vm.getSize = function () {\n return $scope.parentDialogSize;\n };\n\n vm.isConfirmDisabled = function () {\n return !vm.value || vm.value.length < 3;\n };\n\n vm.close = function () {\n $scope.$close('cancel');\n $scope.$dismiss();\n };\n\n vm.confirm = function () {\n $scope.parentDialog({\n value: vm.value\n });\n $scope.$close('ok');\n };\n\n }\n\n function DocumentFlowRemarkDirective() {\n return {\n restrict: 'E',\n replace: true,\n templateUrl: \"app/document_flow/document_flow_remark/document-flow-remark.html\",\n controllerAs: 'ctrl',\n controller: 'DocumentFlowRemarkController'\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('DocumentFlowRemarkController', DocumentFlowRemarkController)\n .directive('documentFlowRemark', DocumentFlowRemarkDirective);\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(DocumentFlowNotificationTranslate);\n\n /** @ngInject */\n function DocumentFlowNotificationTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'document.flow.notification.label.notification': 'Notification',\n 'document.flow.notification.label.role': 'Role',\n 'document.flow.notification.label.status': 'Status',\n 'document.flow.notification.label.waiting': 'Waiting',\n 'document.flow.notification.label.approved': 'Approved',\n 'document.flow.notification.label.rejected': 'Rejected',\n 'document.flow.notification.label.processing.date': 'Processing date'\n });\n\n $translateProvider.translations('pt', {\n 'document.flow.notification.label.notification': 'Notificação',\n 'document.flow.notification.label.role': 'Função',\n 'document.flow.notification.label.status': 'Situação',\n 'document.flow.notification.label.waiting': 'Aguardando',\n 'document.flow.notification.label.approved': 'Aprovado',\n 'document.flow.notification.label.rejected': 'Rejeitado',\n 'document.flow.notification.label.processing.date': 'Data de processamento'\n\n });\n }\n})();\n\n(function () {\n 'use strict';\n\n function DocumentFlowNotificationController($scope, ToastUtil, $translate, $log, $document, InputListEmailService, AuthService) {\n\n var vm = this;\n\n vm.newItem = '';\n vm.Role = null;\n\n var roleConst = {\n APPROVER: 0,\n CONSENT: 1,\n NOTIFICATION: 2\n }\n\n vm.getTitleRole = function (role) {\n switch (role) {\n case roleConst.APPROVER:\n return $translate.instant('document.flow.notification.label.notification');\n case roleConst.CONSENT:\n return $translate.instant('document.flow.notification.label.consent');\n case roleConst.NOTIFICATION:\n return $translate.instant('document.flow.notification.label.notification');\n }\n }\n\n vm.listEmail = undefined;\n\n if (vm.isDisabled == undefined) {\n vm.isDisabled = false;\n }\n\n vm.insertNewEmail = function (form) {\n if (form.$valid) {\n\n var userEmail = vm.getEmailObj();\n userEmail.Business = {\n Id: AuthService.getBusinessId()\n };\n\n vm.saveEmail(userEmail);\n }\n };\n\n vm.saveEmail = function (userEmail) {\n\n if (userEmail.Email != \"\" && userEmail.Email != undefined) {\n if (!vm.containsEmail(userEmail)) {\n userEmail.Business = {\n Id: AuthService.getBusinessId()\n };\n\n userEmail.IsGroup = false;\n InputListEmailService.save(userEmail, -1).then(function (response) {\n var email = angular.copy(response);\n\n var documentFlowNotification = {\n ExternalEmail: angular.copy(email),\n Role: roleConst.NOTIFICATION,\n ProcessingDate: null\n };\n\n vm.list.push(documentFlowNotification);\n\n if (!containsInListEmail(email)) {\n vm.listEmail.push(email);\n }\n\n }).catch(function (error) {\n $log.log(error);\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n }\n vm.list.push(angular.copy(userEmail));\n });\n\n vm.model = \"\";\n } else {\n ToastUtil.showToastMessage($translate.instant('input.email.directive.duplicatedmail'),\n ToastUtil.ToastType.WARN);\n }\n }\n };\n\n vm.getEmailObj = function () {\n var obj = {};\n if (vm.model.Email == undefined) {\n var externalEmailBusinessDTO = {\n BusinessId: AuthService.getBusinessId()\n }\n\n obj = {\n Email: angular.copy(vm.model),\n Id: 0\n }\n externalEmailBusinessDTO.Type = 0;\n\n obj.ExternalEmailBusiness = [];\n obj.ExternalEmailBusiness.push(externalEmailBusinessDTO);\n } else {\n obj = vm.model;\n }\n obj.CsActive = 1;\n return obj;\n };\n\n InputListEmailService.listAll().then(function (response) {\n vm.listEmail = [];\n angular.forEach(response, function (email) {\n if (!containsInListEmail(email)) {\n vm.listEmail.push(email);\n }\n });\n }).catch(function (error) {\n $log.log(error);\n //No need an action.\n });\n\n vm.delete = function (item) {\n var index = vm.list.indexOf(item);\n if (index > -1) {\n vm.list.splice(index, 1);\n }\n }\n\n vm.containsEmail = function (email) {\n var contains = false;\n if (email) {\n angular.forEach(vm.list, function (mail) {\n if (mail.ExternalEmail.Email == email.Email) {\n contains = true;\n }\n });\n }\n return contains;\n };\n\n function containsInListEmail(email) {\n var contains = false;\n if (email) {\n angular.forEach(vm.listEmail, function (mail) {\n if (mail.Email == email.Email) {\n contains = true;\n }\n });\n }\n return contains;\n }\n\n function init() {\n\n }\n\n init();\n }\n\n function DocumentFlowNotificationDirective() {\n return {\n bindToController: true,\n restrict: 'E',\n scope: {\n list: '=',\n titleLabel: '@',\n disableInput: '=',\n disableDelete: '=',\n isRequired: '=',\n changeFn: '&?',\n statusDocument: '=?',\n targetApproved: '=?'\n },\n replace: true,\n templateUrl: \"app/document_flow/document_flow_notification/document-flow-notification.html\",\n controllerAs: 'ctrl',\n controller: 'DocumentFlowNotificationController'\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('DocumentFlowNotificationController', DocumentFlowNotificationController)\n .directive('documentFlowNotification', DocumentFlowNotificationDirective);\n})();\n\n(function () {\n\n 'use strict';\n /**\n *\n */\n function ProdPlanChartLineController($translate, moment, $scope, $window, $interval, $document) {\n\n var vm = this;\n\n var plannedColor = \"#6495ED\";\n var realizedColor = \"#FF6347\";\n var delayColor = \"#27AE60\";\n var occurrenceColor = \"#BB8FCE\";\n\n var HOURLY = 0;\n\n var colors = [];\n\n var statusId = {\n ONGOING: 0,\n CLOSED: 1\n };\n\n if (vm.showLabels == undefined) {\n vm.showLabels = true;\n }\n\n if (vm.showTooltips == undefined) {\n vm.showTooltips = true\n }\n\n if (angular.isUndefined(vm.chartStyle)) {\n vm.chartStyle = \"height: 60vh; width: 100vw;\";\n }\n\n vm.chartObj = {\n legends: [],\n series: [],\n data: []\n };\n\n var HOUR_HOUR_PROODUCTION_CHART_TITLE_KEY = \"dashboard.production.hour.chart.title\";\n var HOUR_UPH_PROODUCTION_CHART_TITLE_KEY = \"dashboard.production.uph.chart.title\";\n\n vm.getTitle = function () {\n var sectionName = vm.prodPlanModel.Section.Title;\n var turnName = vm.prodPlanModel.Turn.Title;\n var modelName = vm.prodPlanModel.Model.Title;\n var variantCode = vm.prodPlanModel.Variant.Code;\n var chartName = $translate.instant((vm.prodPlanModel.ChartType == HOURLY) ? HOUR_HOUR_PROODUCTION_CHART_TITLE_KEY : HOUR_UPH_PROODUCTION_CHART_TITLE_KEY);\n var currentDate = parseDateFromString(vm.prodPlanModel.StartDate);\n var status = $translate.instant((vm.prodPlanModel.Status === statusId.ONGOING) ? 'production.plan.ongoing' : 'production.plan.close');\n\n return sectionName + \" - \" + turnName + \" - \" + modelName + \" - \" + variantCode + \" - \" + chartName + \" (\" + currentDate + \") - \" + status\n };\n\n function parseDateFromString(dateParam) {\n var date = '';\n if ($translate.use() == 'pt') {\n date = moment(dateParam).format('DD/MM/YYYY');\n } else {\n date = moment(dateParam).format('MM/DD/YYYY');\n }\n return date;\n }\n\n function init() {\n if (vm.prodPlanModel != undefined && vm.prodPlanModel.ChartType == HOURLY) {\n getHourlyData();\n } else {\n //UPH\n getUphData();\n }\n vm.watchChartstyle();\n $interval(accelerateChartRender, 500, 60);\n }\n\n vm.watchChartstyle = function () {\n if (angular.isDefined(vm.chartStyle)) {\n $scope.$watch(\"ctrl.chartStyle\", function () {\n $interval(accelerateChartRender, 250, 1);\n });\n }\n };\n\n vm.getId = function (id) {\n return \"productionChart\" + id;\n };\n\n vm.config = {\n title: '',\n tooltips: vm.showTooltips,\n labels: vm.showLabels,\n lineCurveType: 'cardinal',\n colors: colors,\n waitForHeightAndWidth: true,\n xAxisMaxTicks: 11,\n isAnimate: true,\n mouseover: function () {},\n mouseout: function () {},\n click: clickChartEvent,\n legend: {\n display: true,\n //could be 'left, right'\n position: 'right'\n }\n };\n\n function clickChartEvent() {\n if (angular.isDefined(vm.chartClickFn)) {\n vm.chartClickFn();\n }\n }\n\n /**\n * Workaround to accelerate chart render.\n */\n function accelerateChartRender() {\n $document[0].getElementById(vm.getId(vm.chartId));\n }\n\n /**\n * Get Data to Production Plan Hourly chart.\n */\n function getHourlyData() {\n colors.push(plannedColor);\n colors.push(realizedColor);\n angular.forEach(vm.prodPlanModel.ProductionPlanControls, function (control) {\n vm.chartObj.series.push(\"\");\n var isRealizedNumber = (control.Realized != \"\" && control.Realized != undefined);\n if (isRealizedNumber) {\n vm.chartObj.data.push({\n x: control.Hour,\n y: [control.Planned, parseInt(control.Realized)]\n });\n }\n\n });\n vm.chartObj.legends.push({\n key: \"dashboard.production.hour.chart.planned.legend.title\",\n color: plannedColor\n });\n vm.chartObj.legends.push({\n key: \"dashboard.production.hour.chart.accomplished.legend.title\",\n color: realizedColor\n });\n\n }\n\n /**\n * Get Data to Production Plan UPH chart.\n */\n function getUphData() {\n colors.push(plannedColor);\n colors.push(realizedColor);\n colors.push(delayColor);\n colors.push(occurrenceColor);\n\n angular.forEach(vm.prodPlanModel.ProductionPlanControls, function (control) {\n vm.chartObj.series.push(\"\");\n var isRealizedNumber = (control.Realized != \"\" && control.Realized != undefined);\n if (isRealizedNumber) {\n vm.chartObj.data.push({\n x: control.Hour,\n y: [control.Planned, parseInt(control.Realized), control.Delay, control.Occurrences.length]\n });\n }\n\n });\n vm.chartObj.legends.push({\n key: \"dashboard.production.hour.chart.planned.legend.title\",\n color: plannedColor\n });\n vm.chartObj.legends.push({\n key: \"dashboard.production.hour.chart.accomplished.legend.title\",\n color: realizedColor\n });\n vm.chartObj.legends.push({\n key: \"dashboard.production.hour.chart.delay.legend.title\",\n color: delayColor\n });\n vm.chartObj.legends.push({\n key: \"dashboard.production.hour.chart.occurrence.legend.title\",\n color: occurrenceColor\n });\n }\n\n vm.getLegendStyle = function (item) {\n var legendCss = \"background-color: #Color; padding : 3px 7px 5px 7px; font-weight: bold; font-size: 18px;\"\n return legendCss.replace(\"#Color\", item.color);\n }\n\n init();\n }\n\n function ProdPlanChartLineDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'ProdPlanChartLineController',\n transclude: true,\n templateUrl: \"app/dashboard/directive/prod-plan-chart-line.html\",\n bindToController: true,\n scope: {\n chartStyle: '=?',\n showLabels: '@?',\n showTooltips: '@?',\n titleTextKey: '@',\n subTitleTextKey: '@',\n chartId: '@',\n chartType: '@?',\n prodPlanModel: '=',\n chartClickFn: '&'\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('ProdPlanChartLineController', ProdPlanChartLineController)\n .directive('prodPlanChartLine', ProdPlanChartLineDirective)\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('InputListEmailService', InputListEmailService);\n\n var USER_EMAIL_BASE = '/user-email';\n\n /** @ngInject */\n function InputListEmailService($window, $injector, $q, ConfigurationService, AuthService, EmailTypeEnum) {\n return {\n\n listAll: function () {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n var searchParams = {\n BusinessId: AuthService.getBusinessId()\n };\n\n $http.get(ConfigurationService.getServiceHost() + USER_EMAIL_BASE + '/', {\n params: searchParams\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n save: function (userEmail, type) {\n var prodPlanUrl = \"/production/saveProductionPlanEmail/\";\n var mainReportUrl = \"/user-email/saveMainReportEmails/\";\n var defaultSaveUrl = \"/user-email\";\n\n var url = type == EmailTypeEnum.types.ProductionPlan ? prodPlanUrl : type == EmailTypeEnum.types.MainReport ? mainReportUrl : defaultSaveUrl;\n\n\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + url, userEmail, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n listAllProductionPlanEmails: function () {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/production/listAllProductionPlanEmails/' + AuthService.getBusinessId(), {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n removeProductionPlan: function (userEmail) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n userEmail.Business = {};\n userEmail.Business.Id = AuthService.getBusinessId();\n $http.post(ConfigurationService.getServiceHost() + \"/production/removeProductionPlanEmail/\", userEmail, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n listAllMainReportEmails: function () {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + USER_EMAIL_BASE + '/listAllMainReportEmails/', {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n\n };\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('FileUploadService', FileUploadService);\n\n /** @ngInject */\n function FileUploadService($window, $injector, $q, ConfigurationService) {\n return {\n uploadBase64Image: function (imageBase64) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + '/file/uploadBase64Image', imageBase64, {headers: {'Authorization': $window.localStorage.aqmsToken}})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n }\n , function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n };\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('BotService', BotService);\n\n var BASE = '/bot/';\n\n /** @ngInject */\n function BotService($window, $injector, $q, ConfigurationService) {\n return {\n sendMessage: function (message) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + BASE + 'message', message, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n };\n }\n})();\n\n(function (){\n 'use Strict'\n angular.module('aqmsFrontend')\n .factory('WebcamService', WebcamService);\n\n WebcamService.$inject = [];\n\n function WebcamService () {\n var webcam = {};\n webcam.isTurnOn = false;\n webcam.patData = null;\n var _video = null;\n var _stream = null;\n webcam.patOpts = {x: 0, y: 0, w: 25, h: 25};\n webcam.channel = {};\n webcam.webcamError = false;\n\n var getVideoData = function getVideoData(x, y, w, h) {\n var hiddenCanvas = document.createElement('canvas');\n hiddenCanvas.width = _video.width;\n hiddenCanvas.height = _video.height;\n var ctx = hiddenCanvas.getContext('2d');\n ctx.drawImage(_video, 0, 0, _video.width, _video.height);\n return ctx.getImageData(x, y, w, h);\n };\n\n var sendSnapshotToServer = function sendSnapshotToServer(imgBase64) {\n webcam.snapshotData = imgBase64;\n };\n\n webcam.makeSnapshot = function() {\n if (_video) {\n var patCanvas = document.querySelector('#snapshot');\n if (!patCanvas) return;\n\n patCanvas.width = _video.width;\n patCanvas.height = _video.height;\n var ctxPat = patCanvas.getContext('2d');\n\n var idata = getVideoData(webcam.patOpts.x, webcam.patOpts.y, webcam.patOpts.w, webcam.patOpts.h);\n ctxPat.putImageData(idata, 0, 0);\n\n sendSnapshotToServer(patCanvas.toDataURL());\n\n webcam.patData = idata;\n\n webcam.success(webcam.snapshotData.substr(webcam.snapshotData.indexOf('base64,') + 'base64,'.length), 'image/png');\n webcam.turnOff();\n }\n };\n\n webcam.onSuccess = function () {\n _video = webcam.channel.video;\n webcam.patOpts.w = _video.width;\n webcam.patOpts.h = _video.height;\n webcam.isTurnOn = true;\n };\n\n webcam.onStream = function (stream) {\n activeStream = stream;\n return activeStream;\n };\n\n webcam.downloadSnapshot = function downloadSnapshot(dataURL) {\n window.location.href = dataURL;\n };\n\n webcam.onError = function (err) {\n webcam.webcamError = err;\n };\n\n webcam.turnOff = function () {\n webcam.isTurnOn = false;\n if (activeStream && activeStream.getVideoTracks) {\n const checker = typeof activeStream.getVideoTracks === 'function';\n if (checker) {\n return activeStream.getVideoTracks()[0].stop();\n }\n return false;\n }\n return false;\n };\n\n var service = {\n webcam: webcam\n };\n return service;\n }\n\n})();\n\n(function () {\n\n 'use strict';\n\n function PopoverErrorController() {\n var vm = this;\n if (angular.isUndefined(vm.valid)) {\n vm.valid = false;\n }\n }\n\n function PopoverErrorDirective() {\n return {\n restrict: 'E',\n scope: {\n mensage: '@',\n valid: '=?'\n },\n bindToController: true,\n replace: true,\n templateUrl: \"app/components/popover-error/popover-error.html\",\n controllerAs: 'ctrl',\n controller: 'PopoverErrorController'\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('PopoverErrorController', PopoverErrorController)\n .directive('popoverError', PopoverErrorDirective);\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(NotificationEmailTranslate);\n\n /** @ngInject */\n function NotificationEmailTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'notifications.email': 'Notifications',\n 'notification.email.label.target': 'Target',\n 'notification.email.label.notification': 'Notification',\n 'notification.email.label.role': 'Role',\n 'notification.email.label.status': 'Status',\n 'notification.email.label.waiting': 'Waiting',\n 'notification.email.label.approved': 'Approved',\n 'notification.email.label.rejected': 'Rejected',\n 'notification.email.label.processing.date': 'Processing date',\n 'notification.email.label.notified.date': 'Notification date',\n 'notification.email.label.notified': 'Notified'\n });\n\n $translateProvider.translations('pt', {\n 'notifications.email': 'Notificações',\n 'notification.email.label.target': 'Target',\n 'notification.email.label.notification': 'Notificação',\n 'notification.email.label.role': 'Função',\n 'notification.email.label.status': 'Situação',\n 'notification.email.label.waiting': 'Aguardando',\n 'notification.email.label.approved': 'Aprovado',\n 'notification.email.label.rejected': 'Rejeitado',\n 'notification.email.label.processing.date': 'Data de processamento',\n 'notification.email.label.notified.date': 'Data de Notificação',\n 'notification.email.label.notified': 'Notificados'\n });\n }\n})();\n\n(function () {\n 'use strict';\n\n function NotificationEmailController($scope, ToastUtil, $translate, $log, $document, InputListEmailService, AuthService) {\n\n var MAX_EMAIL_LENGHT = 70;\n var vm = this;\n\n vm.newItem = '';\n\n vm.copyList = [];\n\n vm.listEmail = undefined;\n\n if (vm.isDisabled == undefined) {\n vm.isDisabled = false;\n }\n\n vm.insertNewEmail = function (form) {\n if (form.$valid) {\n\n if ( vm.copyList.length == 0 ) {\n vm.copyList = angular.copy(vm.list);\n }\n \n var userEmail = vm.getEmailObj();\n if ( userEmail.Email.length > MAX_EMAIL_LENGHT ){\n ToastUtil.showToastMessage($translate.instant('input.email.directive.toolongemail'),\n ToastUtil.ToastType.WARN);\n return;\n }\n userEmail.Business = {\n Id: AuthService.getBusinessId()\n };\n\n vm.saveEmail(userEmail);\n }\n };\n\n vm.saveEmail = function (userEmail) {\n\n if (userEmail.Email != \"\" && userEmail.Email != undefined) {\n if (!vm.containsEmail(userEmail)) {\n userEmail.Business = {\n Id: AuthService.getBusinessId()\n };\n\n userEmail.IsGroup = false;\n InputListEmailService.save(userEmail, -1).then(function (response) {\n var email = angular.copy(response);\n\n var NotificationEmail = {\n ExternalEmail: angular.copy(email),\n ProcessingDate: null\n };\n\n vm.list.push(NotificationEmail);\n\n if (!containsInListEmail(email)) {\n vm.listEmail.push(email);\n }\n\n }).catch(function (error) {\n $log.log(error);\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n }\n vm.list.push(angular.copy(userEmail));\n });\n\n vm.model = \"\";\n } else { \n angular.forEach(vm.list, function(item){\n if ( item.ExternalEmail.Email == userEmail.Email){\n item.ProcessingDate = null;\n } \n });\n vm.model = \"\";\n }\n }\n };\n\n vm.getEmailObj = function () {\n var obj = {};\n if (vm.model.Email == undefined) {\n var externalEmailBusinessDTO = {\n BusinessId: AuthService.getBusinessId()\n }\n\n obj = {\n Email: angular.copy(vm.model),\n Id: 0\n }\n externalEmailBusinessDTO.Type = 0;\n\n obj.ExternalEmailBusiness = [];\n obj.ExternalEmailBusiness.push(externalEmailBusinessDTO);\n } else {\n obj = vm.model;\n }\n obj.CsActive = 1;\n return obj;\n };\n\n InputListEmailService.listAll().then(function (response) {\n vm.listEmail = [];\n angular.forEach(response, function (email) {\n if (!containsInListEmail(email)) {\n vm.listEmail.push(email);\n }\n });\n }).catch(function (error) {\n $log.log(error);\n //No need an action.\n });\n\n vm.delete = function (item) {\n var index = vm.list.indexOf(item);\n if (index > -1) {\n vm.list.splice(index, 1);\n }\n }\n\n vm.containsEmail = function (email) {\n var contains = false;\n if (email) {\n angular.forEach(vm.list, function (mail) {\n if (mail.ExternalEmail.Email == email.Email) {\n contains = true;\n }\n });\n }\n return contains;\n };\n\n function containsInListEmail(email) {\n var contains = false;\n if (email) {\n angular.forEach(vm.listEmail, function (mail) {\n if (mail.Email == email.Email) {\n contains = true;\n }\n });\n }\n return contains;\n }\n\n function init() {\n }\n\n init();\n }\n\n function NotificationEmailDirective() {\n return {\n bindToController: true,\n restrict: 'E',\n scope: {\n list: '=',\n titleLabel: '@',\n disableInput: '=',\n disableDelete: '=',\n isRequired: '=',\n changeFn: '&?',\n statusDocument: '=?',\n targetApproved: '=?',\n notifiedEmails: '='\n },\n replace: true,\n templateUrl: \"app/components/notification_email/notification-email.html\",\n controllerAs: 'ctrl',\n controller: 'NotificationEmailController'\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('NotificationEmailController', NotificationEmailController)\n .directive('notificationEmail', NotificationEmailDirective);\n})();\n\n/**\n * Created by vanilton.pinheiro on 27/01/2017.\n */\n(function () {\n\n function ModalAccountController($scope, AuthService, ToastUtil, $translate, $window, $log, $timeout) {\n\n var vm = this;\n var scope = $scope;\n\n\n vm.isSysAdmin = AuthService.isSysAdmin();\n vm.userAlias = AuthService.getAliasName();\n vm.userLogin = AuthService.getLoginName();\n vm.userInitiais = $window.localStorage.userInitiais;\n vm.photoLoggedUser = $window.localStorage.photoAqms;\n vm.changePassword = false;\n\n vm.changePasswordModel = {\n BusinessId: AuthService.getBusinessId()\n };\n\n vm.close = function () {\n scope.$dismiss('cancel');\n };\n\n vm.getUserProfileName = function() {\n return AuthService.getProfileName();\n };\n\n vm.save = function() {\n\n if(!vm.canSave() || vm.isSaving){\n return;\n }else{\n vm.isSaving = true;\n }\n\n vm.changePasswordModel.UserName = vm.userLogin;\n\n AuthService.changePassword(vm.changePasswordModel).then(function () {\n vm.isSaving = false;\n vm.close();\n ToastUtil.showToastMessage($translate.instant('changepwd.success.msg'), ToastUtil.ToastType.SUCCESS);\n\n var logout = function() {\n vm.authenticated = false;\n AuthService.logout();\n $window.location.href = '/';\n };\n\n $timeout(logout, 3000);\n\n }).catch(function (error) {\n vm.isSaving = false;\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR)\n });\n };\n\n vm.showChangePassword = function(){\n vm.clear();\n vm.changePassword = !vm.changePassword;\n };\n\n vm.clear = function(){\n vm.changePasswordModel.Password = \"\";\n vm.changePasswordModel.NewPassword1 = \"\";\n vm.changePasswordModel.NewPassword2 = \"\";\n };\n\n vm.canSave = function(){\n if(!(vm.changePasswordModel.Password != undefined && vm.changePasswordModel.Password.length > 0\n && vm.changePasswordModel.NewPassword1 != undefined && vm.changePasswordModel.NewPassword1.length > 0\n && vm.changePasswordModel.NewPassword2 != undefined && vm.changePasswordModel.NewPassword2.length > 0)){\n ToastUtil.showToastMessage($translate.instant(\"validation.password.field\"), ToastUtil.ToastType.ERROR)\n return false;\n }\n\n if(!(vm.changePasswordModel.Password != vm.changePasswordModel.NewPassword1)){\n ToastUtil.showToastMessage($translate.instant(\"validation.password.equal\"), ToastUtil.ToastType.ERROR)\n return false;\n }\n\n if(!(vm.changePasswordModel.NewPassword1 == vm.changePasswordModel.NewPassword2)){\n ToastUtil.showToastMessage($translate.instant(\"validation.password.notequal\"), ToastUtil.ToastType.ERROR)\n return false;\n }\n\n if(!(vm.changePasswordModel.NewPassword1.length >= 6)){\n ToastUtil.showToastMessage($translate.instant(\"validation.password.min\"), ToastUtil.ToastType.ERROR)\n return false;\n }\n\n return true;\n };\n }\n\n function ModalAccountDirective() {\n return {\n restrict: 'E',\n replace: true,\n templateUrl: \"app/components/header/account.html\",\n controllerAs: 'ctrl',\n controller: 'ModalAccountController'\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('ModalAccountController', ModalAccountController)\n .directive('modalAccount', ModalAccountDirective);\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(CheckboxModelTranslate);\n\n /** @ngInject */\n function CheckboxModelTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'auto.complete.model.directive.placeholder': 'Select a model',\n 'auto.complete.model.directive.required': 'The model field is required.',\n 'auto.complete.model.directive.load.error': 'An error occurred while trying to load the model list.',\n 'auto.complete.model.directive.load.empty': 'To view the models select a client.'\n });\n\n $translateProvider.translations('pt', {\n 'auto.complete.model.directive.placeholder': 'Selecione um modelo',\n 'auto.complete.model.directive.required': 'O campo modelo é obrigatório.',\n 'auto.complete.model.directive.load.error': 'Ocorreu um erro ao tentar carregar a lista de modelos.',\n 'auto.complete.model.directive.load.empty': 'Para exibir os modelos selecione um cliente.'\n });\n }\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *Controller to Checkbox Model directive.\n */\n function CheckboxModelController($translate, $log, $scope, $interval, ToastUtil, DefaultService) {\n var vm = this;\n\n vm.itemClicked = function () {\n if (vm.selectedEvt != null) {\n $interval(callSelectedEvt, 50, 1);\n }\n };\n\n function callSelectedEvt() {\n vm.selectedEvt();\n }\n\n vm.onChangeEvent = function () {\n\n vm.modelListObj = [];\n\n if (angular.isDefined(vm.models) && vm.models.length > 0) {\n angular.forEach(vm.models, function (item) {\n if (angular.isDefined(item.Selected) && item.Selected) {\n vm.modelListObj.push(item);\n }\n });\n }\n };\n\n vm.isCheckBoxRequired = function () {\n if (vm.isRequired == true || vm.isRequired == 'true') {\n return !vm.models.some(function (options) {\n return options.Selected;\n });\n } else {\n return false;\n }\n }\n\n function loadModels() {\n var filterModel = {\n CsActive: vm.filterOnlyActive == true || vm.filterOnlyActive == \"true\" ? 1 : \"\"\n };\n if (vm.filterClient && vm.filterClient.Id > 0) {\n filterModel.DependencyFilterId = vm.filterClient.Id;\n }\n DefaultService.loadModels(filterModel).then(function (response) {\n vm.models = angular.copy(response);\n CheckModelsToEdit();\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"auto.complete.model.directive.load.error\"), ToastUtil.ToastType.WARN);\n });\n }\n\n function CheckModelsToEdit() {\n if (angular.isDefined(vm.models) && vm.models.length > 0 && angular.isDefined(vm.modelListObj) && vm.modelListObj.length > 0) {\n containsInList();\n angular.forEach(vm.models, function (itemChecked) {\n itemChecked.Selected = (vm.modelListObj.findIndex(function (item) {\n return item.Id == itemChecked.Id;\n }) >= 0);\n });\n }\n }\n\n function watchList() {\n $scope.$watch(\"ctrl.filterClient\", function (newValue) {\n if (!newValue || angular.isUndefined(newValue) || newValue == null || angular.isUndefined(newValue.Id) || newValue.Id <= 0) {\n vm.models = [];\n vm.modelListObj = [];\n } else {\n loadModels();\n }\n });\n }\n\n function containsInList() {\n angular.forEach(vm.modelListObj, function (itemChecked) {\n if (vm.models.findIndex(function (item) {\n return item.Id == itemChecked.Id;\n }) < 0) {\n vm.models.unshift(itemChecked);\n }\n });\n }\n\n function init() {\n vm.models = [];\n\n if (angular.isUndefined(vm.modelListObj) || !vm.modelListObj) {\n vm.modelListObj = [];\n }\n\n if (angular.isUndefined(vm.isDisabled)) {\n vm.isDisabled = false;\n }\n\n if (angular.isUndefined(vm.isRequired)) {\n vm.isRequired = false;\n }\n\n if (angular.isUndefined(vm.filterOnlyActive)) {\n vm.filterOnlyActive = true;\n }\n\n if (angular.isUndefined(vm.filterByClient) || !vm.filterByClient) {\n loadModels();\n } else {\n watchList();\n }\n }\n\n init();\n }\n\n function CheckboxModelDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'CheckboxModelController',\n transclude: true,\n templateUrl: \"app/components/checkbox_model/checkbox-model.html\",\n bindToController: true,\n scope: {\n modelListObj: '=',\n isDisabled: '=?',\n isRequired: '=?',\n selectedEvt: '&?',\n filterClient: '=?',\n filterByClient: '@?',\n filterOnlyActive: '@?'\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('CheckboxModelController', CheckboxModelController)\n .directive('checkboxModel', CheckboxModelDirective);\n})();\n\n(function () {\n\n 'use strict';\n /**\n *Controller to Button Search Chart directive.\n */\n function ButtonSearchChartController() {\n var vm = this;\n\n vm.clearFields = function () {\n if (!vm.searchObj || vm.searchObj != \"\") {\n vm.clearAction()\n }\n }\n\n vm.openChart = function () {\n if (!vm.searchObj || vm.searchObj != \"\") {\n vm.chartAction()\n }\n }\n }\n\n function ButtonSearchChartDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'ButtonSearchChartController',\n transclude: true,\n templateUrl: \"app/components/button-search-chart/button-search-chart.html\",\n bindToController: true,\n scope: {\n searchObj: '=',\n isDisabled: '=?',\n isDisabledChart: '=?',\n clearAction: \"&\",\n chartAction: \"&\"\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('ButtonSearchChartController', ButtonSearchChartController)\n .directive('buttonSearchChart', ButtonSearchChartDirective);\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n * \n */\n function BtnUseThisController($scope, $state) {\n var vm = this;\n vm.label = $scope.label;\n\n vm.action = function () {\n var action = $scope.action;\n var strstate = $scope.state;\n action();\n if (strstate != undefined) {\n $state.go(strstate);\n }\n };\n }\n\n BtnUseThisController.$inject = ['$scope', '$state'];\n\n function BtnUseThisDirective() {\n return {\n restrict: 'E',\n scope: {\n action: '&',\n state: '@',\n label: '@'\n },\n replace: true,\n templateUrl: \"app/components/template/btn-use-this.html\",\n controllerAs: 'ctrl',\n controller: 'BtnUseThisController'\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('BtnUseThisController', BtnUseThisController)\n .directive('btnUseThis', BtnUseThisDirective);\n})();\n\n(function () {\n\n 'use strict';\n /**\n * \n */\n function BtnSaveController($document) {\n var vm = this;\n\n vm.save = function () {\n if (!vm.isDisabled) {\n vm.action();\n }\n }\n\n if (angular.isUndefined(vm.form)) {\n vm.form = {\n $valid: true\n }\n }\n\n vm.formIsValid = function () {\n\n var valid = true;\n if (angular.isArray(vm.form)) {\n for (var i = 0; i < vm.form.length; i++) {\n vm.form[i].$setSubmitted();\n if (vm.form[i].$invalid) {\n focusField(vm.form[i]);\n valid = false;\n }\n }\n } else {\n if (angular.isDefined(vm.form.$submitted)) {\n vm.form.$setSubmitted();\n valid = vm.form.$valid;\n if (!valid) {\n focusField(vm.form);\n }\n }\n }\n return valid;\n }\n\n function focusField(form) {\n if (angular.isDefined(form.$error.required) && form.$error.required[0].$error.required.length > 0 &&\n angular.isDefined(form.$error.required[0].$error.required) && form.$error.required[0].$error.required[0].$name) {\n var field = form.$error.required[0].$error.required[0].$name;\n var element = $document[0].getElementsByClassName('ng-invalid-required')[field];\n if (angular.isDefined(element)) {\n element.focus();\n }\n }\n }\n\n }\n\n function BtnSaveDirective() {\n return {\n restrict: 'E',\n replace: true,\n templateUrl: \"app/components/template/btn-save.html\",\n controllerAs: 'ctrl',\n controller: 'BtnSaveController',\n transclude: true,\n bindToController: true,\n scope: {\n action: '&',\n isDisabled: '=ngDisabled',\n form: '=?'\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('BtnSaveController', BtnSaveController)\n .directive('btnSave', BtnSaveDirective);\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n * \n */\n function BtnReturnController($scope, ToastUtil, $translate) {\n var vm = this;\n\n vm.return = function () {\n if ($scope.isDisabled) {\n var actionDisabled = $scope.actionDisabled;\n actionDisabled();\n } else {\n var action = $scope.action;\n action();\n }\n };\n }\n\n BtnReturnController.$inject = ['$scope', 'ToastUtil', '$translate'];\n\n function BtnReturnDirective() {\n return {\n restrict: 'E',\n scope: {\n action: '&',\n actionDisabled: '&',\n isDisabled: '=ngDisabled'\n },\n replace: true,\n templateUrl: \"app/components/template/btn-return.html\",\n controllerAs: 'ctrl',\n controller: 'BtnReturnController'\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('BtnReturnController', BtnReturnController)\n .directive('btnReturn', BtnReturnDirective);\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n * \n */\n function BtnPlusController() {}\n\n BtnPlusController.$inject = ['$scope'];\n\n function BtnPlusDirective() {\n return {\n restrict: 'E',\n scope: {\n action: '&',\n label: '@'\n },\n bindToController: true,\n replace: true,\n templateUrl: \"app/components/template/btn-plus.html\",\n controllerAs: 'ctrl',\n controller: 'BtnPlusController'\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('BtnPlusController', BtnPlusController)\n .directive('btnPlus', BtnPlusDirective);\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n * \n */\n function BtnExportController($scope) {\n var vm = this;\n\n vm.export = function () {\n var action = $scope.action;\n action();\n };\n }\n\n BtnExportController.$inject = ['$scope'];\n\n function BtnExportDirective() {\n return {\n restrict: 'E',\n scope: {\n action: '&'\n },\n replace: true,\n templateUrl: \"app/components/template/btn-export.html\",\n controllerAs: 'ctrl',\n controller: 'BtnExportController'\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('BtnExportController', BtnExportController)\n .directive('btnExport', BtnExportDirective);\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n * \n */\n function BtnEditController($scope) {\n var vm = this;\n\n vm.edit = function () {\n if ($scope.isDisabled) {\n return;\n }\n var action = $scope.action;\n action();\n };\n }\n\n BtnEditController.$inject = ['$scope'];\n\n function BtnEditDirective() {\n return {\n restrict: 'E',\n scope: {\n action: '&',\n isDisabled: '=ngDisabled'\n },\n replace: true,\n templateUrl: \"app/components/template/btn-edit.html\",\n controllerAs: 'ctrl',\n controller: 'BtnEditController'\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('BtnEditController', BtnEditController)\n .directive('btnEdit', BtnEditDirective);\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n * \n */\n function BtnDialogSaveController($scope) {\n var vm = this;\n\n vm.save = function () {\n var action = $scope.action;\n action();\n };\n }\n\n BtnDialogSaveController.$inject = ['$scope'];\n\n function BtnDialogSaveDirective() {\n return {\n restrict: 'E',\n scope: {\n action: '&'\n },\n replace: true,\n templateUrl: \"app/components/template/btn-dialog-save.html\",\n controllerAs: 'ctrl',\n controller: 'BtnDialogSaveController'\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('BtnDialogSaveController', BtnDialogSaveController)\n .directive('btnDialogSave', BtnDialogSaveDirective);\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *\n */\n function BtnDialogConfirmController() {\n var vm = this;\n\n if (vm.isDisabled == undefined) {\n vm.isDisabled = false;\n }\n\n vm.confirm = function () {\n vm.action();\n };\n }\n\n BtnDialogConfirmController.$inject = ['$scope'];\n\n function BtnDialogConfirmDirective() {\n return {\n restrict: 'E',\n scope: {\n action: '&',\n isDisabled: '=?'\n },\n bindToController: true,\n replace: true,\n templateUrl: \"app/components/template/btn-dialog-confirm.html\",\n controllerAs: 'ctrl',\n controller: 'BtnDialogConfirmController'\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('BtnDialogConfirmController', BtnDialogConfirmController)\n .directive('btnDialogConfirm', BtnDialogConfirmDirective);\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n * \n */\n function BtnDialogCloseController($scope) {\n var vm = this;\n\n vm.close = function () {\n var action = $scope.action;\n action();\n };\n }\n\n BtnDialogCloseController.$inject = ['$scope'];\n\n function BtnDialogCloseDirective() {\n return {\n restrict: 'E',\n scope: {\n action: '&'\n },\n replace: true,\n templateUrl: \"app/components/template/btn-dialog-close.html\",\n controllerAs: 'ctrl',\n controller: 'BtnDialogCloseController'\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('BtnDialogCloseController', BtnDialogCloseController)\n .directive('btnDialogClose', BtnDialogCloseDirective);\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n * \n */\n function BtnDialogCancelController($scope) {\n var vm = this;\n\n vm.cancel = function () {\n if ($scope.isDisabled) {\n return;\n }\n\n var action = $scope.action;\n action();\n };\n }\n\n BtnDialogCancelController.$inject = ['$scope'];\n\n function BtnDialogCancelDirective() {\n return {\n restrict: 'E',\n scope: {\n action: '&',\n isDisabled: '=ngDisabled'\n },\n replace: true,\n templateUrl: \"app/components/template/btn-dialog-cancel.html\",\n controllerAs: 'ctrl',\n controller: 'BtnDialogCancelController'\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('BtnDialogCancelController', BtnDialogCancelController)\n .directive('btnDialogCancel', BtnDialogCancelDirective);\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *\n */\n function BtnDeleteController($scope, DialogController, $translate) {\n var vm = this;\n\n vm.delete = function () {\n\n if ($scope.isDisabled) {\n return;\n }\n\n var message = '';\n\n if ($scope.customDescription) {\n message = $scope.customDescription;\n } else {\n if ($scope.description) {\n message = $translate.instant('msg.confirm.remove');\n message = message.replace(\"$description\", $scope.description);\n } else {\n message = $translate.instant('msg.confirm.remove.item');\n }\n }\n\n var desc = message;\n var action = $scope.action;\n\n vm.showConfirm(desc, action);\n };\n\n\n vm.showConfirm = function (text, action) {\n DialogController.show('title.remove', '', action, text);\n };\n\n }\n\n BtnDeleteController.$inject = ['$scope', 'DialogController', '$translate'];\n\n function BtnDeleteDirective() {\n return {\n restrict: 'E',\n scope: {\n customDescription: '=',\n description: '=',\n action: '&',\n isDisabled: '=ngDisabled'\n },\n replace: true,\n templateUrl: \"app/components/template/btn-delete.html\",\n controllerAs: 'ctrl',\n controller: 'BtnDeleteController'\n };\n }\n\n\n angular.module('aqmsFrontend')\n .controller('BtnDeleteController', BtnDeleteController)\n .directive('btnDelete', BtnDeleteDirective);\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *\n */\n function BtnCreateController($state, ToastUtil, $translate) {\n var vm = this;\n\n if (angular.isUndefined(vm.canAdd)) {\n vm.canAdd = true;\n }\n\n vm.create = function () {\n if (!vm.isDisabled) {\n if (!vm.canAdd) {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n } else {\n var strstate = vm.state;\n vm.action();\n if (strstate != undefined && strstate != '') {\n $state.go(strstate);\n }\n }\n }\n };\n }\n\n function BtnCreateDirective() {\n return {\n restrict: 'E',\n scope: {\n action: '&',\n state: '@',\n label: '@',\n isDisabled: '=ngDisabled',\n canAdd: '=?'\n },\n bindToController: true,\n replace: true,\n templateUrl: \"app/components/template/btn-create.html\",\n controllerAs: 'ctrl',\n controller: 'BtnCreateController'\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('BtnCreateController', BtnCreateController)\n .directive('btnCreate', BtnCreateDirective);\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n * \n */\n function BtnCopyController($scope) {\n var vm = this;\n\n vm.copy = function () {\n if ($scope.isDisabled) {\n return;\n }\n var action = $scope.action;\n action();\n };\n }\n\n BtnCopyController.$inject = ['$scope'];\n\n function BtnCopyDirective() {\n return {\n restrict: 'E',\n scope: {\n action: '&',\n isDisabled: '=ngDisabled'\n },\n replace: true,\n templateUrl: \"app/components/template/btn-copy.html\",\n controllerAs: 'ctrl',\n controller: 'BtnCopyController'\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('BtnCopyController', BtnCopyController)\n .directive('btnCopy', BtnCopyDirective);\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *\n */\n function BtnCloseController($document) {\n var vm = this;\n\n if (vm.isDisabled == undefined) {\n vm.isDisabled = false;\n }\n\n if (angular.isUndefined(vm.form)) {\n vm.form = {\n $valid: true\n }\n }\n\n vm.clickAction = function () {\n if (!vm.isDisabled) {\n vm.action();\n }\n };\n\n }\n\n function BtnCloseDirective() {\n return {\n restrict: 'E',\n scope: {\n action: '&',\n buttonText: '@',\n iconClass: '@',\n isDisabled: '=?',\n form: '=?'\n },\n bindToController: true,\n replace: true,\n templateUrl: \"app/components/template/btn-close.html\",\n controllerAs: 'ctrl',\n controller: 'BtnCloseController'\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('BtnCloseController', BtnCloseController)\n .directive('btnClose', BtnCloseDirective);\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *\n */\n function BtnBasicController($document) {\n var vm = this;\n\n if (vm.isDisabled == undefined) {\n vm.isDisabled = false;\n }\n\n if (angular.isUndefined(vm.form)) {\n vm.form = {\n $valid: true\n }\n }\n\n vm.clickAction = function () {\n if (!vm.isDisabled) {\n vm.action();\n }\n };\n\n vm.formIsValid = function () {\n\n var valid = true;\n if (angular.isArray(vm.form)) {\n for (var i = 0; i < vm.form.length; i++) {\n vm.form[i].$setSubmitted();\n if (vm.form[i].$invalid) {\n focusField(vm.form[i]);\n valid = false;\n }\n }\n } else {\n if (angular.isDefined(vm.form.$submitted)) {\n vm.form.$setSubmitted();\n valid = vm.form.$valid;\n if (!valid) {\n focusField(vm.form);\n }\n }\n }\n return valid;\n }\n\n function focusField(form) {\n if (angular.isDefined(form.$error.required) && form.$error.required[0].$error.required.length > 0 &&\n angular.isDefined(form.$error.required[0].$error.required) && form.$error.required[0].$error.required[0].$name) {\n var field = form.$error.required[0].$error.required[0].$name;\n var element = $document[0].getElementsByClassName('ng-invalid-required')[field];\n if (angular.isDefined(element)) {\n element.focus();\n }\n }\n }\n\n }\n\n function BtnBasicDirective() {\n return {\n restrict: 'E',\n scope: {\n action: '&',\n buttonText: '@',\n iconClass: '@',\n isDisabled: '=?',\n form: '=?'\n },\n bindToController: true,\n replace: true,\n templateUrl: \"app/components/template/btn-basic.html\",\n controllerAs: 'ctrl',\n controller: 'BtnBasicController'\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('BtnBasicController', BtnBasicController)\n .directive('btnBasic', BtnBasicDirective);\n})();\n\n(function() {\n\n\t'use strict';\n\n\t/**\n\t * \n\t */\n\tfunction BtnBackController($scope, $state, $window) {\n\t\tvar vm = this;\n\t\t\t\t\n\t\tvm.back = function () {\n\t\t\tif(vm.useAction) {\n\t\t\t\tvm.action();\n\t\t\t} else {\n\t\t\t\t$window.history.back();\t\n\t\t\t}\n\t\t};\n\t}\n\n\tBtnBackController.$inject = ['$scope','$state','$window'];\n\n\tfunction BtnBackDirective() {\n\t\treturn {\n\t\t\trestrict: 'E',\n\t\t\tscope: {\n\t\t\t\tuseAction : '=',\n\t\t\t\taction : '&'\n\t\t\t},\n\t\t\tbindToController : true,\n\t\t\treplace:true,\n\t\t\ttemplateUrl : \"app/components/template/btn-back.html\",\n\t\t\tcontrollerAs : 'ctrl',\n\t\t\tcontroller : 'BtnBackController'\n\t\t};\n\t}\n\n\tangular.module('aqmsFrontend')\n\t\t.controller('BtnBackController', BtnBackController)\n\t\t.directive('btnBack', BtnBackDirective);\n})();\n(function () {\n\n 'use strict';\n\n /**\n *\n */\n function BtnAddController($state, $interval) {\n var vm = this;\n\n if (angular.isUndefined(vm.formAdd)) {\n vm.formAdd = {\n $valid: true\n };\n }\n\n if (!vm.type) {\n vm.type = 'submit'\n }\n\n vm.add = function () {\n\n if (!vm.isDisabled) {\n var action = vm.action;\n var strstate = vm.state;\n action();\n\n $interval(resetForm, 20, 1);\n\n if (strstate != undefined && strstate != '') {\n $state.go(strstate);\n }\n }\n };\n\n function resetForm() {\n if (angular.isDefined(vm.formAdd)) {\n if (angular.isDefined(vm.formAdd.$submitted)) {\n vm.formAdd.$setUntouched();\n vm.formAdd.$setPristine();\n }\n }\n }\n }\n\n function BtnAddDirective() {\n return {\n restrict: 'E',\n scope: {\n action: '&',\n state: '@',\n label: '@',\n isDisabled: '=',\n formAdd: '=?',\n type: '@?'\n },\n bindToController: true,\n replace: true,\n templateUrl: \"app/components/template/btn-add.html\",\n controllerAs: 'ctrl',\n controller: 'BtnAddController'\n\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('BtnAddController', BtnAddController)\n .directive('btnAdd', BtnAddDirective);\n})();\n\n(function () {\n\n 'use strict';\n /**\n *Controller to Button Search directive.\n */\n function ButtonSearchController() {\n var vm = this;\n\n vm.clearFields = function () {\n if (!vm.searchObj || vm.searchObj != \"\") {\n vm.clearAction()\n }\n }\n }\n\n function ButtonSearchDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'ButtonSearchController',\n transclude: true,\n templateUrl: \"app/components/button-search/button-search.html\",\n bindToController: true,\n scope: {\n searchObj: '=',\n isDisabled: '=?',\n clearAction: \"&\"\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('ButtonSearchController', ButtonSearchController)\n .directive('buttonSearch', ButtonSearchDirective);\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *\n */\n function ProcessFormController($scope, $document) {\n\n var vm = this;\n\n vm.process = {\n Id: null,\n Title: '',\n CsActive: true,\n Checked: true\n };\n \n vm.checklistTemplateProcessList = [];\n\n vm.initView = function () {\n if ($scope.modelDialog != null) {\n vm.process = $scope.modelDialog;\n vm.oldProcess = angular.copy(vm.process);\n }\n\n vm.checklistTemplateProcessList = angular.copy($scope.parentDialog.checklist.ChecklistTemplateProcesses);\n\n $document[0].querySelector('.modal').addEventListener('click', function () {\n vm.close();\n });\n\n $document[0].querySelector('.modal-body').addEventListener('click', function (evt) {\n evt.stopPropagation();\n });\n };\n\n vm.validateDuplicateTitle = function () {\n var titleAlreadyExist = false;\n angular.forEach(vm.checklistTemplateProcessList, function (process) {\n if ((vm.process.Title.toLowerCase() == process.Title.toLowerCase()) && (vm.process.IdTemp != process.IdTemp || vm.process.Id != process.Id)) {\n titleAlreadyExist = true;\n }\n\n });\n return titleAlreadyExist;\n }\n\n vm.close = function () {\n $scope.$dismiss('cancel');\n\n if (vm.process != undefined && vm.oldProcess != undefined && vm.oldProcess.Title != undefined)\n vm.process.Title = vm.oldProcess.Title;\n\n vm.oldProcess = undefined;\n };\n\n vm.save = function () {\n vm.process.IdTemp = new Date().getMilliseconds();\n $scope.parentDialog.addProcess(vm.process);\n $scope.$close('ok');\n vm.oldProcess = undefined;\n };\n\n vm.validateTitle = function () {\n if (vm.process.Title != undefined && ((vm.process.Title + '').length > 0)) {\n return true;\n }\n return false;\n };\n\n angular.element($document).ready(function () {\n vm.setFocusElement('processTitle');\n });\n\n vm.setFocusElement = function (element) {\n if (element) {\n $document[0].getElementById(element).focus();\n }\n }\n\n vm.initView();\n }\n\n function ProcessFormDirective() {\n return {\n restrict: 'E',\n replace: true,\n templateUrl: \"app/checklist/process/process-form.html\",\n controllerAs: 'ctrl',\n controller: 'ProcessFormController'\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('ProcessFormController', ProcessFormController)\n .directive('processForm', ProcessFormDirective);\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *\n */\n function ControlParamFormController($scope, $document) {\n\n var vm = this;\n var scope = $scope;\n\n scope.requiredFields = false;\n\n vm.model = {\n parameters: {\n Id: null,\n Title: '',\n Inspection: '',\n Specification: '',\n Frequency: '',\n ValueReference1: null,\n ValueReference2: null,\n PatrolResultType: null\n }\n };\n\n vm.EPatrolResultType = {\n LESSTHAN: 0,\n BIGGERTHAN: 1,\n BETWEEN: 2,\n EQUALTO: 3,\n OKNOK: 4\n };\n\n var oldParameter;\n\n vm.initView = function () {\n var modelDialog = $scope.modelDialog;\n\n if (modelDialog != null) {\n vm.model.process = modelDialog.process;\n\n if (modelDialog.parameters != undefined) {\n vm.model.parameters = modelDialog.parameters;\n oldParameter = angular.copy(modelDialog.parameters);\n }\n }\n\n $document[0].querySelector('.modal').addEventListener('click', function () {\n vm.close();\n });\n\n $document[0].querySelector('.modal-body').addEventListener('click', function (evt) {\n evt.stopPropagation();\n });\n };\n\n vm.close = function () {\n scope.$dismiss('cancel');\n vm.fillParameters(oldParameter);\n };\n\n vm.validateRanger = function () {\n if (vm.model.parameters.ValueReference2) {\n if (parseFloat(vm.model.parameters.ValueReference2) < parseFloat(vm.model.parameters.ValueReference1)) {\n scope.controlParamForm['divInputForm']['inputRangeEnd'].$setValidity('validateRanger', false, scope.controlParamForm['divInputForm']['inputRangeEnd']);\n } else {\n scope.controlParamForm['divInputForm']['inputRangeEnd'].$setValidity('validateRanger', true, scope.controlParamForm['divInputForm']['inputRangeEnd']);\n }\n return (parseFloat(vm.model.parameters.ValueReference2) < parseFloat(vm.model.parameters.ValueReference1));\n }\n }\n\n vm.save = function () {\n vm.oldParameter = undefined;\n $scope.parentDialog.addParameters(vm.model);\n scope.$close('ok');\n };\n\n vm.clearPatrolResultValues = function () {\n scope.controlParamForm['divInputForm']['inputRangeEnd'].$setValidity('validateRanger', true, scope.controlParamForm['divInputForm']['inputRangeEnd']);\n vm.model.parameters.ValueReference1 = null;\n vm.model.parameters.ValueReference2 = null;\n }\n\n vm.CheckRadioBtResultType = function () {\n if (vm.model.parameters != undefined && vm.model.parameters.Id != undefined && vm.model.parameters.Id > 0 && vm.model.parameters.PatrolResultType == 0) {\n $document[0].getElementById('opLessThan').checked = true;\n }\n\n if (vm.model.parameters != undefined && vm.model.parameters.Id != undefined && vm.model.parameters.Id > 0 && vm.model.parameters.PatrolResultType == 1) {\n $document[0].getElementById('opGreaterThan').checked = true;\n }\n\n if (vm.model.parameters != undefined && vm.model.parameters.Id != undefined && vm.model.parameters.Id > 0 && vm.model.parameters.PatrolResultType == 2) {\n $document[0].getElementById('opRange').checked = true;\n }\n\n if (vm.model.parameters != undefined && vm.model.parameters.Id != undefined && vm.model.parameters.Id > 0 && vm.model.parameters.PatrolResultType == 3) {\n $document[0].getElementById('opEqualTo').checked = true;\n }\n\n if (vm.model.parameters != undefined && vm.model.parameters.Id != undefined && vm.model.parameters.Id > 0 && vm.model.parameters.PatrolResultType == 4) {\n $document[0].getElementById('opOkNok').checked = true;\n }\n }\n\n vm.fillParameters = function (oldParameter) {\n if (oldParameter) {\n vm.model.parameters.Id = oldParameter.Id;\n vm.model.parameters.Title = oldParameter.Title;\n vm.model.parameters.Inspection = oldParameter.Inspection;\n vm.model.parameters.Specification = oldParameter.Specification;\n vm.model.parameters.Frequency = oldParameter.Frequency;\n vm.model.parameters.PatrolResult = oldParameter.PatrolResult;\n }\n };\n\n vm.validateTitle = function () {\n if (vm.model.parameters.Title != undefined && ((vm.model.parameters.Title + '').length > 0)) {\n return true;\n }\n return false;\n };\n\n angular.element($document).ready(function () {\n vm.CheckRadioBtResultType();\n });\n\n vm.initView();\n }\n\n function ControlParamFormDirective() {\n return {\n restrict: 'E',\n replace: true,\n templateUrl: \"app/checklist/process/control-param-form.html\",\n controllerAs: 'ctrl',\n controller: 'ControlParamFormController'\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('ControlParamFormController', ControlParamFormController)\n .directive('controlParamForm', ControlParamFormDirective);\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('BlockMaterialEmailGroupController', BlockMaterialEmailGroupController);\n\n function BlockMaterialEmailGroupController(ToastUtil, AuthService, $state, $translate, $log, BlockedMaterialService) {\n\n var vm = this;\n\n var blockedMaterialRowMaterial = 0;\n\t\tvar blockedMaterialFinishGood = 3;\n vm.filterModel = \"\";\n vm.emailToNotifyGoodList = [];\n vm.emailToNotifyRowList = [];\n var userIsBlockedMaterialApprover = false;\n\n function init() {\n checkUserIsApprover();\n }\n\n function listBlockedMaterialEmails(type) {\n BlockedMaterialService.listAllBlockedMaterialEmails(type).then(function (response) {\n if(type === blockedMaterialRowMaterial)\n {\n vm.emailToNotifyRowList = angular.copy(response);\n }\n else\n {\n vm.emailToNotifyGoodList = angular.copy(response);\n }\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant('blockedmaterial.load.group.email.error.msg'),\n ToastUtil.ToastType.ERROR);\n });\n }\n\n /**\n * Return true if user is approver.\n * @returns {*}\n */\n vm.userIsApprover = function () {\n return (AuthService.isSysAdmin() || userIsBlockedMaterialApprover);\n }\n\n function checkUserIsApprover() {\n BlockedMaterialService.isBlockedMaterialApprover().then(function (response) {\n userIsBlockedMaterialApprover = response;\n if (!vm.userIsApprover()) {\n $state.go('block-material-list');\n }\n listBlockedMaterialEmails(blockedMaterialRowMaterial);\n listBlockedMaterialEmails(blockedMaterialFinishGood);\n\n }).catch(function () {\n //No need implementation\n });\n }\n\n init();\n }\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *\n */\n function BlockedMaterialVendorController($scope, DefaultService, ToastUtil, $translate, $log) {\n\n var vm = this;\n\n vm.listVendor = [];\n\n if (vm.isDisabled == undefined) {\n vm.isDisabled = false;\n }\n\n function init() {\n if (angular.isUndefined(vm.filterOnlyActive)) {\n vm.filterOnlyActive = true;\n }\n loadBlockedMaterial();\n }\n\n vm.itemClicked = function () {};\n\n /**\n * Load all Blocked Material.\n */\n function loadBlockedMaterial() {\n var filterVendor = {\n CsActive: vm.filterOnlyActive == true || vm.filterOnlyActive == \"true\" ? 1 : \"\"\n }\n DefaultService.loadVendors(filterVendor).then(function (response) {\n vm.listVendor = response;\n })\n .catch(function (error) {\n // TODO messagem de erro?\n $log.log(error);\n });\n }\n\n vm.showValidation = function () {\n var showValidation = false;\n if (vm.isRequired == \"true\" && !vm.model) {\n showValidation = true;\n }\n return showValidation;\n };\n\n init();\n }\n\n function BlockedMaterialVendorDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'BlockedMaterialVendorController',\n transclude: true,\n templateUrl: \"app/block_material/directive/blocked-material-vendor.html\",\n bindToController: true,\n scope: {\n isDisabled: '=?',\n model: '=?',\n isRequired: '@',\n maxLength: '@',\n filterOnlyActive: '@?'\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('BlockedMaterialVendorController', BlockedMaterialVendorController)\n .directive('blockedMaterialVendor', BlockedMaterialVendorDirective);\n})();\n\n(function() {\n\n 'use strict';\n\n /**\n *\n */\n function BlockedMaterialCodeController($scope, BlockedMaterialService, ToastUtil, $translate, DialogController, $log) {\n\n var vm = this;\n\n vm.listBlockedMaterial = [];\n\n if ( vm.isDisabled == undefined ) {\n vm.isDisabled = false;\n\n }\n\n\n vm.init = function() {\n vm.loadBlockedMaterial();\n };\n\n vm.itemClicked = function() {\n vm.showConfirm($translate.instant(\"blockedmaterial.code.confirm.dialog.message\").replace(\"#description\", vm.model.Code),vm.confirmListener );\n\n };\n\n\n\n\n vm.showConfirm = function(text, action) {\n DialogController.show($translate.instant(\"blockedmaterial.code.confirm.dialog.title\"),'', action,text);\n };\n\n\n vm.confirmListener = function(){\n vm.changeFn({ item : vm.model });\n };\n\n\n vm.blurEvent = function() {\n angular.forEach(vm.listBlockedMaterial, function(blockedMaterial){\n if( blockedMaterial.Code == vm.model ){\n vm.model = blockedMaterial;\n vm.itemClicked();\n }\n });\n\n };\n\n\n vm.showValidation = function() {\n var showValidation = false;\n if( vm.isRequired == \"true\" && !vm.model ){\n showValidation = true;\n }\n return showValidation;\n };\n\n\n\n\n /**\n * Load all Blocked Material.\n */\n vm.loadBlockedMaterial = function() {\n BlockedMaterialService.listAll().then(function (response) {\n vm.listBlockedMaterial = response;\n })\n .catch(function (error) {\n $log.log(error);\n });\n }\n\n\n\n\n vm.init();\n }\n\n\n function BlockedMaterialCodeDirective() {\n return {\n restrict: 'E',\n replace:true,\n controllerAs : 'ctrl',\n controller : 'BlockedMaterialCodeController',\n transclude : true,\n templateUrl : \"app/block_material/directive/blocked-material-code.html\",\n bindToController:true,\n scope: {\n isDisabled:'=?',\n model: '=?',\n changeFn: '&?',\n isRequired: '@',\n maxLength: '@'\n\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('BlockedMaterialCodeController', BlockedMaterialCodeController)\n .directive('blockedMaterialCode', BlockedMaterialCodeDirective);\n})();\n\n/**\n * Controller to handle Defect, Defect Type and Defect Action insertions.\n */\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .service('BasicVendorOriginService',\n function BasicVendorOriginService($rootScope, $state, $log, $translate, BasicEventConstant, VendorOriginService, ToastUtil) {\n\n var vm = this;\n vm.Scope;\n\n /**\n * Init controller actions.\n */\n function init() {\n var unregister1 = $rootScope.$on(BasicEventConstant.saveVendorOrigin, saveVendorOriginListener);\n var unregister2 = $rootScope.$on(BasicEventConstant.listVendorOrigin, listVendorOriginListener);\n var unregister3 = $rootScope.$on(BasicEventConstant.getByIdVendorOrigin, getVendorOriginByIdListener);\n var unregister4 = $rootScope.$on(BasicEventConstant.removeVendorOrigin, deleteVendorOriginListener);\n\n $rootScope.$on('$destroy', unregister1);\n $rootScope.$on('$destroy', unregister2);\n $rootScope.$on('$destroy', unregister3);\n $rootScope.$on('$destroy', unregister4);\n }\n\n function saveVendorOriginListener(event, origin) {\n VendorOriginService.save(origin).then(\n function () {\n if(vm.Scope.ctrl.searchParams.Page === 1) {\n listVendorOriginListener(event, vm.Scope.ctrl.searchParams);\n } else {\n vm.Scope.ctrl.searchParams.Page = 1;\n } \n ToastUtil.showToastMessage($translate.instant(\"basic.vendor.origin.save.success\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.vendor.origin.save.error\"), ToastUtil.ToastType.ERROR);\n }\n }\n\n });\n }\n\n function listVendorOriginListener(event, searchParams) {\n VendorOriginService.list(searchParams).then(\n function (response) {\n $rootScope.$broadcast(BasicEventConstant.updateBasicListItems, response);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.vendor.origin.load.all.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function getVendorOriginByIdListener(event, id) {\n VendorOriginService.getById(id).then(\n function (response) {\n $rootScope.$broadcast(BasicEventConstant.updateItemToEdit, response);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.vendor.origin.load.byid.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function deleteVendorOriginListener(event, id) {\n VendorOriginService.delete(id).then(\n function () {\n ToastUtil.showToastMessage($translate.instant(\"basic.vendor.origin.remove.success\"), ToastUtil.ToastType.SUCCESS);\n if(vm.Scope.ctrl.searchParams.Page === 1) {\n listVendorOriginListener(event, vm.Scope.ctrl.searchParams);\n } else {\n vm.Scope.ctrl.searchParams.Page = 1;\n } \n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if (error.status === vm.Scope.HttpStatusCodeConflict) {\n ToastUtil.showToastMessage($translate.instant(\"basic.vendor.origin.deleted.failed\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.vendor.origin.remove.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n init();\n }\n )\n\n})();\n\n/**\n * Controller to handle Defect, Defect Type and Defect Action insertions.\n */\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .service('BasicTypesService',\n function BasicTypesService($rootScope, $state, $log, $translate, BasicEventConstant, TasktypeService, ToastUtil) {\n\n var vm = this;\n vm.Scope;\n\n /**\n * Init controller actions.\n */\n function init() {\n var unregister1 = $rootScope.$on(BasicEventConstant.saveType, saveTypeListener);\n var unregister2 = $rootScope.$on(BasicEventConstant.listType, listTypesListener);\n var unregister3 = $rootScope.$on(BasicEventConstant.getByIdType, getTypeByIdListener);\n var unregister4 = $rootScope.$on(BasicEventConstant.removeType, deleteTypeListener);\n\n $rootScope.$on('$destroy', unregister1);\n $rootScope.$on('$destroy', unregister2);\n $rootScope.$on('$destroy', unregister3);\n $rootScope.$on('$destroy', unregister4);\n }\n\n function saveTypeListener(event, type) {\n\n TasktypeService.saveType(type).then(\n function () {\n if(vm.Scope.ctrl.searchParams.Page === 1) {\n listTypesListener(event, vm.Scope.ctrl.searchParams);\n } else {\n vm.Scope.ctrl.searchParams.Page = 1;\n } \n ToastUtil.showToastMessage($translate.instant(\"basic.type.save.success\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.type.save.error\"), ToastUtil.ToastType.ERROR);\n }\n }\n });\n }\n\n function listTypesListener(event, searchParams) {\n TasktypeService.listTypes(searchParams).then(\n function (response) {\n $rootScope.$broadcast(BasicEventConstant.updateBasicListItems, response);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.type.load.all.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function getTypeByIdListener(event, id) {\n TasktypeService.getTypeById(id).then(\n function (response) {\n $rootScope.$broadcast(BasicEventConstant.updateItemToEdit, response);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.type.load.byid.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function deleteTypeListener(event, id) {\n TasktypeService.deleteType(id).then(\n function () {\n ToastUtil.showToastMessage($translate.instant(\"basic.type.remove.success\"), ToastUtil.ToastType.SUCCESS);\n if(vm.Scope.ctrl.searchParams.Page === 1) {\n listTypesListener(event, vm.Scope.ctrl.searchParams);\n } else {\n vm.Scope.ctrl.searchParams.Page = 1;\n } \n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if (error.status === vm.Scope.HttpStatusCodeConflict) {\n ToastUtil.showToastMessage($translate.instant(\"basic.task.type.deleted.failed\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.type.remove.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n init();\n }\n )\n\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .service('BasicTestTypeService',\n function BasicTestTypeService($rootScope, $state, $log, $translate, BasicEventConstant, TestTypeService, ToastUtil) {\n\n var vm = this;\n vm.Scope;\n\n /**\n * Init controller actions.\n */\n function init() {\n var unregister1 = $rootScope.$on(BasicEventConstant.saveTestType, saveTestTypeListener);\n var unregister2 = $rootScope.$on(BasicEventConstant.listTestType, listTestTypesListener);\n var unregister3 = $rootScope.$on(BasicEventConstant.getByIdTestType, getTestTypeByIdListener);\n var unregister4 = $rootScope.$on(BasicEventConstant.removeTestType, deleteTestTypeListener);\n\n $rootScope.$on('$destroy', unregister1);\n $rootScope.$on('$destroy', unregister2);\n $rootScope.$on('$destroy', unregister3);\n $rootScope.$on('$destroy', unregister4);\n }\n\n function saveTestTypeListener(event, testType) {\n\n TestTypeService.save(testType).then(\n function () {\n if(vm.Scope.ctrl.searchParams.Page === 1) {\n listTestTypesListener(event, vm.Scope.ctrl.searchParams);\n } else {\n vm.Scope.ctrl.searchParams.Page = 1;\n } \n ToastUtil.showToastMessage($translate.instant(\"basic.testtype.save.success\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.testtype.save.error\"), ToastUtil.ToastType.ERROR);\n }\n }\n\n });\n }\n\n function listTestTypesListener(event, searchParams) {\n TestTypeService.listTestTypes(searchParams).then(\n function (response) {\n $rootScope.$broadcast(BasicEventConstant.updateBasicListItems, response);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.testtype.load.all.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function getTestTypeByIdListener(event, id) {\n TestTypeService.getById(id).then(\n function (response) {\n $rootScope.$broadcast(BasicEventConstant.updateItemToEdit, response);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.testtype.load.byid.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function deleteTestTypeListener(event, id) {\n TestTypeService.delete(id).then(\n function () {\n ToastUtil.showToastMessage($translate.instant(\"basic.testtype.remove.success\"), ToastUtil.ToastType.SUCCESS);\n if(vm.Scope.ctrl.searchParams.Page === 1) {\n listTestTypesListener(event, vm.Scope.ctrl.searchParams);\n } else {\n vm.Scope.ctrl.searchParams.Page = 1;\n } \n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if (error.status === vm.Scope.HttpStatusCodeConflict) {\n ToastUtil.showToastMessage($translate.instant(\"basic.test.type.deleted.failed\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.testtype.remove.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n init();\n }\n )\n\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .service('BasicTestInspectionTypeService',\n function BasicTestInspectionTypeService($rootScope, $state, $log, $translate, BasicEventConstant, TestInspectionTypeService, ToastUtil) {\n\n var vm = this;\n vm.Scope;\n\n /**\n * Init controller actions.\n */\n function init() {\n var unregister1 = $rootScope.$on(BasicEventConstant.saveTestInspectionType, saveTestInspecTypeListener);\n var unregister2 = $rootScope.$on(BasicEventConstant.listTestInspectionType, listTestInspecTypesListener);\n var unregister3 = $rootScope.$on(BasicEventConstant.getByIdTestInspectionType, getTestInspecTypeByIdListener);\n var unregister4 = $rootScope.$on(BasicEventConstant.removeTestInspectionType, deleteTestInspecTypeListener);\n\n\n $rootScope.$on('$destroy', unregister1);\n $rootScope.$on('$destroy', unregister2);\n $rootScope.$on('$destroy', unregister3);\n $rootScope.$on('$destroy', unregister4);\n }\n\n function saveTestInspecTypeListener(event, testInspecType) {\n TestInspectionTypeService.save(testInspecType).then(\n function () {\n if(vm.Scope.ctrl.searchParams.Page === 1) {\n listTestInspecTypesListener(event, vm.Scope.ctrl.searchParams);\n } else {\n vm.Scope.ctrl.searchParams.Page = 1;\n } \n ToastUtil.showToastMessage($translate.instant(\"basic.test.inspection.type.save.success\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.test.inspection.type.save.error\"), ToastUtil.ToastType.ERROR);\n }\n }\n\n });\n }\n\n function listTestInspecTypesListener(event, searchParams) {\n TestInspectionTypeService.listTestInspectionTypes(searchParams).then(\n function (response) {\n $rootScope.$broadcast(BasicEventConstant.updateBasicListItems, response);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.test.inspection.type.load.all.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function getTestInspecTypeByIdListener(event, id) {\n TestInspectionTypeService.getById(id).then(\n function (response) {\n $rootScope.$broadcast(BasicEventConstant.updateItemToEdit, response);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.test.inspection.type.load.byid.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function deleteTestInspecTypeListener(event, id) {\n TestInspectionTypeService.delete(id).then(\n function () {\n ToastUtil.showToastMessage($translate.instant(\"basic.test.inspection.type.remove.success\"), ToastUtil.ToastType.SUCCESS);\n if(vm.Scope.ctrl.searchParams.Page === 1) {\n listTestInspecTypesListener(event, vm.Scope.ctrl.searchParams);\n } else {\n vm.Scope.ctrl.searchParams.Page = 1;\n } \n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n }\n if (error.status === vm.Scope.HttpStatusCodeConflict) {\n ToastUtil.showToastMessage($translate.instant(\"basic.test.inspection.type.deleted.failed\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.test.inspection.type.remove.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n init();\n }\n )\n\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .service('BasicTestInspectionSubTypeService',\n function BasicTestInspectionSubTypeService($rootScope, $state, $log, $translate, BasicEventConstant, TestInspectionSubTypeService, ToastUtil) {\n\n var vm = this;\n vm.Scope;\n\n /**\n * Init controller actions.\n */\n function init() {\n var unregister1 = $rootScope.$on(BasicEventConstant.saveTestInspectionSubType, saveTestInspecSubTypeListener);\n var unregister2 = $rootScope.$on(BasicEventConstant.listTestInspectionSubType, listTestInspecSubTypesListener);\n var unregister3 = $rootScope.$on(BasicEventConstant.getByIdTestInspectionSubType, getTestInspecSubTypeByIdListener);\n var unregister4 = $rootScope.$on(BasicEventConstant.removeTestInspectionSubType, deleteTestInspecSubTypeListener);\n\n\n $rootScope.$on('$destroy', unregister1);\n $rootScope.$on('$destroy', unregister2);\n $rootScope.$on('$destroy', unregister3);\n $rootScope.$on('$destroy', unregister4);\n }\n\n function saveTestInspecSubTypeListener(event, testInspecSubType) {\n TestInspectionSubTypeService.save(testInspecSubType).then(\n function () {\n if(vm.Scope.ctrl.searchParams.Page === 1) {\n listTestInspecSubTypesListener(event, vm.Scope.ctrl.searchParams);\n } else {\n vm.Scope.ctrl.searchParams.Page = 1;\n } \n ToastUtil.showToastMessage($translate.instant(\"basic.test.inspection.sub.type.save.success\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.test.inspection.sub.type.save.error\"), ToastUtil.ToastType.ERROR);\n }\n }\n\n });\n }\n\n function listTestInspecSubTypesListener(event, searchParams) {\n TestInspectionSubTypeService.listTestInspectionSubTypes(searchParams).then(\n function (response) {\n $rootScope.$broadcast(BasicEventConstant.updateBasicListItems, response);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.test.inspection.sub.type.load.all.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function getTestInspecSubTypeByIdListener(event, id) {\n TestInspectionSubTypeService.getById(id).then(\n function (response) {\n $rootScope.$broadcast(BasicEventConstant.updateItemToEdit, response);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.test.inspection.sub.type.load.byid.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function deleteTestInspecSubTypeListener(event, id) {\n TestInspectionSubTypeService.delete(id).then(\n function () {\n ToastUtil.showToastMessage($translate.instant(\"basic.test.inspection.sub.type.remove.success\"), ToastUtil.ToastType.SUCCESS);\n if(vm.Scope.ctrl.searchParams.Page === 1) {\n listTestInspecSubTypesListener(event, vm.Scope.ctrl.searchParams);\n } else {\n vm.Scope.ctrl.searchParams.Page = 1;\n } \n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n }\n else if (error.status === vm.Scope.HttpStatusCodeConflict) {\n ToastUtil.showToastMessage($translate.instant(\"basic.test.inspection.sub.type.deleted.failed\"), ToastUtil.ToastType.WARN);\n }\n else {\n ToastUtil.showToastMessage($translate.instant(\"basic.test.inspection.sub.type.remove.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n init();\n }\n )\n\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .service('BasicTestInspectionRuleService',\n function BasicTestInspectionRuleService($rootScope, $state, $log, $translate, BasicEventConstant, TestInspectionRuleService, ToastUtil) {\n\n var vm = this;\n vm.Scope;\n\n /**\n * Init controller actions.\n */\n function init() {\n var unregister1 = $rootScope.$on(BasicEventConstant.saveTestInspectionRule, saveTestInspecRuleListener);\n var unregister2 = $rootScope.$on(BasicEventConstant.listTestInspectionRule, listTestInspecRulesListener);\n var unregister3 = $rootScope.$on(BasicEventConstant.getByIdTestInspectionRule, getTestInspecRuleByIdListener);\n var unregister4 = $rootScope.$on(BasicEventConstant.removeTestInspectionRule, deleteTestInspecRuleListener);\n\n\n $rootScope.$on('$destroy', unregister1);\n $rootScope.$on('$destroy', unregister2);\n $rootScope.$on('$destroy', unregister3);\n $rootScope.$on('$destroy', unregister4);\n }\n\n function saveTestInspecRuleListener(event, testInspecRule) {\n TestInspectionRuleService.save(testInspecRule).then(\n function () {\n if(vm.Scope.ctrl.searchParams.Page === 1) {\n listTestInspecRulesListener(event, vm.Scope.ctrl.searchParams);\n } else {\n vm.Scope.ctrl.searchParams.Page = 1;\n } \n ToastUtil.showToastMessage($translate.instant(\"basic.test.inspection.rule.save.success\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.test.inspection.rule.save.error\"), ToastUtil.ToastType.ERROR);\n }\n }\n\n });\n }\n\n function listTestInspecRulesListener(event, searchParams) {\n TestInspectionRuleService.listTestInspectionRules(searchParams).then(\n function (response) {\n $rootScope.$broadcast(BasicEventConstant.updateBasicListItems, response);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.test.inspection.rule.load.all.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function getTestInspecRuleByIdListener(event, id) {\n TestInspectionRuleService.getById(id).then(\n function (response) {\n $rootScope.$broadcast(BasicEventConstant.updateItemToEdit, response);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.test.inspection.rule.load.byid.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function deleteTestInspecRuleListener(event, id) {\n TestInspectionRuleService.delete(id).then(\n function () {\n ToastUtil.showToastMessage($translate.instant(\"basic.test.inspection.rule.remove.success\"), ToastUtil.ToastType.SUCCESS);\n if(vm.Scope.ctrl.searchParams.Page === 1) {\n listTestInspecRulesListener(event, vm.Scope.ctrl.searchParams);\n } else {\n vm.Scope.ctrl.searchParams.Page = 1;\n } \n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if (error.status === vm.Scope.HttpStatusCodeConflict) {\n ToastUtil.showToastMessage($translate.instant(\"basic.inspection.rule.deleted.failed\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.test.inspection.rule.remove.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n init();\n }\n )\n\n})();\n\n/**\n * Controller to handle Defect, Defect Type and Defect Action insertions.\n */\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .service('BasicSynthesisService',\n function BasicSynthesisService($rootScope, $state, $log, $translate, BasicEventConstant, SynthesisService, ToastUtil) {\n\n var vm = this;\n vm.Scope;\n\n /**\n * Init controller actions.\n */\n function init() {\n var unregister1 = $rootScope.$on(BasicEventConstant.saveSynthesis, saveSynthesisListener);\n var unregister2 = $rootScope.$on(BasicEventConstant.listSynthesis, listSynthesisListener);\n var unregister3 = $rootScope.$on(BasicEventConstant.getByIdSynthesis, getSynthesisByIdListener);\n var unregister4 = $rootScope.$on(BasicEventConstant.removeSynthesis, deleteSynthesisListener);\n\n $rootScope.$on('$destroy', unregister1);\n $rootScope.$on('$destroy', unregister2);\n $rootScope.$on('$destroy', unregister3);\n $rootScope.$on('$destroy', unregister4);\n }\n\n function saveSynthesisListener(event, type) {\n\n SynthesisService.save(type).then(\n function () {\n if(vm.Scope.ctrl.searchParams.Page === 1) {\n listSynthesisListener(event, vm.Scope.ctrl.searchParams);\n } else {\n vm.Scope.ctrl.searchParams.Page = 1;\n } \n ToastUtil.showToastMessage($translate.instant(\"basic.synthesis.save.success\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.synthesis.save.error\"), ToastUtil.ToastType.ERROR);\n }\n }\n\n });\n }\n\n function listSynthesisListener(event, searchParams) {\n SynthesisService.list(searchParams).then(\n function (response) {\n $rootScope.$broadcast(BasicEventConstant.updateBasicListItems, response);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.synthesis.load.all.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function getSynthesisByIdListener(event, id) {\n SynthesisService.getById(id).then(\n function (response) {\n $rootScope.$broadcast(BasicEventConstant.updateItemToEdit, response);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.synthesis.load.byid.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function deleteSynthesisListener(event, id) {\n SynthesisService.delete(id).then(\n function () {\n ToastUtil.showToastMessage($translate.instant(\"basic.synthesis.remove.success\"), ToastUtil.ToastType.SUCCESS);\n if(vm.Scope.ctrl.searchParams.Page === 1) {\n listSynthesisListener(event, vm.Scope.ctrl.searchParams);\n } else {\n vm.Scope.ctrl.searchParams.Page = 1;\n } \n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if (error.status === vm.Scope.HttpStatusCodeConflict) {\n ToastUtil.showToastMessage($translate.instant(\"basic.synthesis.deleted.failed\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.synthesis.remove.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n init();\n }\n )\n\n})();\n\n/**\n * Controller to handle Defect, Defect Type and Defect Action insertions.\n */\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .service('BasicStationService',\n function BasicStationService($rootScope, $state, $log, $translate, BasicEventConstant, StationService, ToastUtil) {\n\n var vm = this;\n vm.Scope;\n\n /**\n * Init controller actions.\n */\n function init() {\n var unregister1 = $rootScope.$on(BasicEventConstant.saveStation, saveStationListener);\n var unregister2 = $rootScope.$on(BasicEventConstant.listStation, listStationsListener);\n var unregister3 = $rootScope.$on(BasicEventConstant.getByIdStation, getStationByIdListener);\n var unregister4 = $rootScope.$on(BasicEventConstant.removeStation, deleteStationListener);\n\n $rootScope.$on('$destroy', unregister1);\n $rootScope.$on('$destroy', unregister2);\n $rootScope.$on('$destroy', unregister3);\n $rootScope.$on('$destroy', unregister4);\n }\n\n function saveStationListener(event, station) {\n StationService.save(station).then(\n function () {\n if(vm.Scope.ctrl.searchParams.Page === 1) {\n listStationsListener(event, vm.Scope.ctrl.searchParams);\n } else {\n vm.Scope.ctrl.searchParams.Page = 1;\n } \n ToastUtil.showToastMessage($translate.instant(\"basic.station.save.success\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.station.save.error\"), ToastUtil.ToastType.ERROR);\n }\n }\n\n });\n }\n\n function listStationsListener(event, searchParams) {\n StationService.list(searchParams).then(\n function (response) {\n $rootScope.$broadcast(BasicEventConstant.updateBasicListItems, response);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.station.load.all.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function getStationByIdListener(event, id) {\n StationService.getById(id).then(\n function (response) {\n $rootScope.$broadcast(BasicEventConstant.updateItemToEdit, response);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.station.load.byid.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function deleteStationListener(event, id) {\n StationService.delete(id).then(\n function () {\n ToastUtil.showToastMessage($translate.instant(\"basic.station.remove.success\"), ToastUtil.ToastType.SUCCESS);\n if(vm.Scope.ctrl.searchParams.Page === 1) {\n listStationsListener(event, vm.Scope.ctrl.searchParams);\n } else {\n vm.Scope.ctrl.searchParams.Page = 1;\n } \n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if (error.status === vm.Scope.HttpStatusCodeConflict) {\n ToastUtil.showToastMessage($translate.instant(\"basic.station.deleted.failed\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.station.remove.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n init();\n }\n )\n\n})();\n\n/**\n * Controller to handle Defect, Defect Type and Defect Action insertions.\n */\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .service('BasicSectionService',\n function BasicSectionService($rootScope, $state, $log, $translate, BasicEventConstant,\n SectionService, ToastUtil, AuthService) {\n\n var vm = this;\n vm.Scope;\n /**\n * Init controller actions.\n */\n function init() {\n var unregister1 = $rootScope.$on(BasicEventConstant.saveSection, saveSectionListener);\n var unregister2 = $rootScope.$on(BasicEventConstant.listSection, listSectionsListener);\n var unregister3 = $rootScope.$on(BasicEventConstant.getByIdSection, getSectionByIdListener);\n var unregister4 = $rootScope.$on(BasicEventConstant.removeSection, deleteSectionListener);\n\n $rootScope.$on('$destroy', unregister1);\n $rootScope.$on('$destroy', unregister2);\n $rootScope.$on('$destroy', unregister3);\n $rootScope.$on('$destroy', unregister4);\n }\n\n function saveSectionListener(event, section) {\n section.Business = {};\n section.Business.Id = AuthService.getBusinessId();\n SectionService.save(section).then(\n function () {\n if(vm.Scope.ctrl.searchParams.Page === 1) {\n listSectionsListener(event, vm.Scope.ctrl.searchParams);\n } else {\n vm.Scope.ctrl.searchParams.Page = 1;\n } \n ToastUtil.showToastMessage($translate.instant(\"basic.section.save.success\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.section.save.error\"), ToastUtil.ToastType.ERROR);\n }\n }\n\n });\n }\n\n function listSectionsListener(event, searchParams) {\n SectionService.list(searchParams).then(\n function (response) {\n $rootScope.$broadcast(BasicEventConstant.updateBasicListItems, response);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.section.load.all.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function getSectionByIdListener(event, id) {\n SectionService.getById(id).then(\n function (response) {\n $rootScope.$broadcast(BasicEventConstant.updateItemToEdit, response);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.section.load.byid.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function deleteSectionListener(event, id) {\n SectionService.delete(id).then(\n function () {\n ToastUtil.showToastMessage($translate.instant(\"basic.section.remove.success\"), ToastUtil.ToastType.SUCCESS);\n if(vm.Scope.ctrl.searchParams.Page === 1) {\n listSectionsListener(event, vm.Scope.ctrl.searchParams);\n } else {\n vm.Scope.ctrl.searchParams.Page = 1;\n } \n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if (error.status === vm.Scope.HttpStatusCodeConflict) {\n ToastUtil.showToastMessage($translate.instant(\"basic.section.deleted.failed\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.section.remove.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n init();\n }\n )\n\n})();\n\n/**\n * Controller to handle Defect, Defect Type and Defect Action insertions.\n */\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .service('BasicRequestTypeService',\n function BasicRequestTypeService($rootScope, $state, $log, $translate, BasicEventConstant, RequestTypeService, ToastUtil) {\n\n var vm = this;\n vm.Scope;\n\n /**\n * Init controller actions.\n */\n function init() {\n var unregister1 = $rootScope.$on(BasicEventConstant.saveRequestType, saveRequestTypeListener);\n var unregister2 = $rootScope.$on(BasicEventConstant.listRequestType, listRequestTypesListener);\n var unregister3 = $rootScope.$on(BasicEventConstant.getByIdRequestType, getRequestTypeByIdListener);\n var unregister4 = $rootScope.$on(BasicEventConstant.removeRequestType, deleteRequestTypeListener);\n\n $rootScope.$on('$destroy', unregister1);\n $rootScope.$on('$destroy', unregister2);\n $rootScope.$on('$destroy', unregister3);\n $rootScope.$on('$destroy', unregister4);\n }\n\n function saveRequestTypeListener(event, vendor) {\n\n RequestTypeService.save(vendor).then(\n function () {\n if(vm.Scope.ctrl.searchParams.Page === 1) {\n listRequestTypesListener(event, vm.Scope.ctrl.searchParams);\n } else {\n vm.Scope.ctrl.searchParams.Page = 1;\n } \n ToastUtil.showToastMessage($translate.instant(\"basic.request.type.save.success\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.request.type.save.error\"), ToastUtil.ToastType.ERROR);\n }\n }\n\n });\n }\n\n function listRequestTypesListener(event, searchParams) {\n RequestTypeService.listRequestTypes(searchParams).then(\n function (response) {\n $rootScope.$broadcast(BasicEventConstant.updateBasicListItems, response);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.request.type.load.all.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function getRequestTypeByIdListener(event, id) {\n RequestTypeService.getById(id).then(\n function (response) {\n $rootScope.$broadcast(BasicEventConstant.updateItemToEdit, response);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.request.type.load.byid.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function deleteRequestTypeListener(event, id) {\n RequestTypeService.delete(id).then(\n function () {\n ToastUtil.showToastMessage($translate.instant(\"basic.request.type.remove.success\"), ToastUtil.ToastType.SUCCESS);\n if(vm.Scope.ctrl.searchParams.Page === 1) {\n listRequestTypesListener(event, vm.Scope.ctrl.searchParams);\n } else {\n vm.Scope.ctrl.searchParams.Page = 1;\n } \n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if (error.status === vm.Scope.HttpStatusCodeConflict) {\n ToastUtil.showToastMessage($translate.instant(\"basic.request.type.deleted.failed\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.request.type.remove.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n init();\n }\n )\n\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .service('BasicPartTypeService',\n function BasicPartTypeService($rootScope, $state, $log, $translate, BasicEventConstant, PartTypeService, ToastUtil) {\n\n var vm = this;\n vm.Scope;\n\n /**\n * Init controller actions.\n */\n function init() {\n var unregister1 = $rootScope.$on(BasicEventConstant.savePartType, savePartTypeListener);\n var unregister2 = $rootScope.$on(BasicEventConstant.listPartType, listPartTypesListener);\n var unregister3 = $rootScope.$on(BasicEventConstant.getByIdPartType, getPartTypeByIdListener);\n var unregister4 = $rootScope.$on(BasicEventConstant.removePartType, deletePartTypeListener);\n\n $rootScope.$on('$destroy', unregister1);\n $rootScope.$on('$destroy', unregister2);\n $rootScope.$on('$destroy', unregister3);\n $rootScope.$on('$destroy', unregister4);\n }\n\n function savePartTypeListener(event, partType) {\n\n PartTypeService.save(partType).then(\n function () {\n if(vm.Scope.ctrl.searchParams.Page === 1) {\n listPartTypesListener(event, vm.Scope.ctrl.searchParams);\n } else {\n vm.Scope.ctrl.searchParams.Page = 1;\n } \n ToastUtil.showToastMessage($translate.instant(\"basic.parttype.save.success\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.parttype.save.error\"), ToastUtil.ToastType.ERROR);\n }\n }\n\n });\n }\n\n function listPartTypesListener(event, searchParams) {\n PartTypeService.listPartTypes(searchParams).then(\n function (response) {\n $rootScope.$broadcast(BasicEventConstant.updateBasicListItems, response);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.parttype.load.all.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function getPartTypeByIdListener(event, id) {\n PartTypeService.getById(id).then(\n function (response) {\n $rootScope.$broadcast(BasicEventConstant.updateItemToEdit, response);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.parttype.load.byid.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function deletePartTypeListener(event, id) {\n PartTypeService.delete(id).then(\n function () {\n ToastUtil.showToastMessage($translate.instant(\"basic.parttype.remove.success\"), ToastUtil.ToastType.SUCCESS);\n if(vm.Scope.ctrl.searchParams.Page === 1) {\n listPartTypesListener(event, vm.Scope.ctrl.searchParams);\n } else {\n vm.Scope.ctrl.searchParams.Page = 1;\n } \n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if (error.status === vm.Scope.HttpStatusCodeConflict) {\n ToastUtil.showToastMessage($translate.instant(\"basic.part.type.deleted.failed\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.parttype.remove.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n init();\n }\n )\n\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .service('BasicPartInspectionTypeService',\n function BasicPartInspectionTypeService($rootScope, $state, $log, $translate, BasicEventConstant, PartInspectionTypeService, ToastUtil) {\n\n var vm = this;\n vm.Scope;\n\n /**\n * Init controller actions.\n */\n function init() {\n var unregister1 = $rootScope.$on(BasicEventConstant.savePartInspectionType, savePartInspecTypeListener);\n var unregister2 = $rootScope.$on(BasicEventConstant.listPartInspectionType, listPartInspecTypesListener);\n var unregister3 = $rootScope.$on(BasicEventConstant.getByIdPartInspectionType, getPartInspecTypeByIdListener);\n var unregister4 = $rootScope.$on(BasicEventConstant.removePartInspectionType, deletePartInspecTypeListener);\n\n\n $rootScope.$on('$destroy', unregister1);\n $rootScope.$on('$destroy', unregister2);\n $rootScope.$on('$destroy', unregister3);\n $rootScope.$on('$destroy', unregister4);\n }\n\n function savePartInspecTypeListener(event, partInspecType) {\n PartInspectionTypeService.save(partInspecType).then(\n function () {\n if(vm.Scope.ctrl.searchParams.Page === 1) {\n listPartInspecTypesListener(event, vm.Scope.ctrl.searchParams);\n } else {\n vm.Scope.ctrl.searchParams.Page = 1;\n } \n ToastUtil.showToastMessage($translate.instant(\"basic.part.inspection.type.save.success\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.part.inspection.type.save.error\"), ToastUtil.ToastType.ERROR);\n }\n }\n\n });\n }\n\n function listPartInspecTypesListener(event, searchParams) {\n PartInspectionTypeService.listPartInspectionTypes(searchParams).then(\n function (response) {\n $rootScope.$broadcast(BasicEventConstant.updateBasicListItems, response);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.part.inspection.type.load.all.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function getPartInspecTypeByIdListener(event, id) {\n PartInspectionTypeService.getById(id).then(\n function (response) {\n $rootScope.$broadcast(BasicEventConstant.updateItemToEdit, response);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.part.inspection.type.load.byid.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function deletePartInspecTypeListener(event, id) {\n PartInspectionTypeService.delete(id).then(\n function () {\n ToastUtil.showToastMessage($translate.instant(\"basic.part.inspection.type.remove.success\"), ToastUtil.ToastType.SUCCESS);\n if(vm.Scope.ctrl.searchParams.Page === 1) {\n listPartInspecTypesListener(event, vm.Scope.ctrl.searchParams);\n } else {\n vm.Scope.ctrl.searchParams.Page = 1;\n } \n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n }\n if (error.status === vm.Scope.HttpStatusCodeConflict) {\n ToastUtil.showToastMessage($translate.instant(\"basic.part.inspection.type.deleted.failed\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.part.inspection.type.remove.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n init();\n }\n )\n\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .service('BasicPartInspectionSubTypeService',\n function BasicPartInspectionSubTypeService($rootScope, $state, $log, $translate, BasicEventConstant, PartInspectionSubTypeService, ToastUtil) {\n\n var vm = this;\n vm.Scope;\n\n /**\n * Init controller actions.\n */\n function init() {\n var unregister1 = $rootScope.$on(BasicEventConstant.savePartInspectionSubType, savePartInspecSubTypeListener);\n var unregister2 = $rootScope.$on(BasicEventConstant.listPartInspectionSubType, listPartInspecSubTypesListener);\n var unregister3 = $rootScope.$on(BasicEventConstant.getByIdPartInspectionSubType, getPartInspecSubTypeByIdListener);\n var unregister4 = $rootScope.$on(BasicEventConstant.removePartInspectionSubType, deletePartInspecSubTypeListener);\n\n\n $rootScope.$on('$destroy', unregister1);\n $rootScope.$on('$destroy', unregister2);\n $rootScope.$on('$destroy', unregister3);\n $rootScope.$on('$destroy', unregister4);\n }\n\n function savePartInspecSubTypeListener(event, partInspecSubType) {\n PartInspectionSubTypeService.save(partInspecSubType).then(\n function () {\n if(vm.Scope.ctrl.searchParams.Page === 1) {\n listPartInspecSubTypesListener(event, vm.Scope.ctrl.searchParams);\n } else {\n vm.Scope.ctrl.searchParams.Page = 1;\n } \n ToastUtil.showToastMessage($translate.instant(\"basic.part.inspection.sub.type.save.success\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.part.inspection.sub.type.save.error\"), ToastUtil.ToastType.ERROR);\n }\n }\n\n });\n }\n\n function listPartInspecSubTypesListener(event, searchParams) {\n PartInspectionSubTypeService.listPartInspectionSubTypes(searchParams).then(\n function (response) {\n $rootScope.$broadcast(BasicEventConstant.updateBasicListItems, response);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.part.inspection.sub.type.load.all.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function getPartInspecSubTypeByIdListener(event, id) {\n PartInspectionSubTypeService.getById(id).then(\n function (response) {\n $rootScope.$broadcast(BasicEventConstant.updateItemToEdit, response);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.part.inspection.sub.type.load.byid.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function deletePartInspecSubTypeListener(event, id) {\n PartInspectionSubTypeService.delete(id).then(\n function () {\n ToastUtil.showToastMessage($translate.instant(\"basic.part.inspection.sub.type.remove.success\"), ToastUtil.ToastType.SUCCESS);\n if(vm.Scope.ctrl.searchParams.Page === 1) {\n listPartInspecSubTypesListener(event, vm.Scope.ctrl.searchParams);\n } else {\n vm.Scope.ctrl.searchParams.Page = 1;\n } \n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } \n else if (error.status === vm.Scope.HttpStatusCodeConflict) {\n ToastUtil.showToastMessage($translate.instant(\"basic.part.inspection.sub.type.deleted.failed\"), ToastUtil.ToastType.WARN);\n } \n else {\n ToastUtil.showToastMessage($translate.instant(\"basic.part.inspection.sub.type.remove.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n init();\n }\n )\n\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .service('BasicPartInspectionRuleService',\n function BasicPartInspectionRuleService($rootScope, $state, $log, $translate, BasicEventConstant, PartInspectionRuleService, ToastUtil) {\n\n var vm = this;\n vm.Scope;\n\n /**\n * Init controller actions.\n */\n function init() {\n var unregister1 = $rootScope.$on(BasicEventConstant.savePartInspectionRule, savePartInspecRuleListener);\n var unregister2 = $rootScope.$on(BasicEventConstant.listPartInspectionRule, listPartInspecRulesListener);\n var unregister3 = $rootScope.$on(BasicEventConstant.getByIdPartInspectionRule, getPartInspecRuleByIdListener);\n var unregister4 = $rootScope.$on(BasicEventConstant.removePartInspectionRule, deletePartInspecRuleListener);\n\n\n $rootScope.$on('$destroy', unregister1);\n $rootScope.$on('$destroy', unregister2);\n $rootScope.$on('$destroy', unregister3);\n $rootScope.$on('$destroy', unregister4);\n }\n\n function savePartInspecRuleListener(event, partInspecRule) {\n PartInspectionRuleService.save(partInspecRule).then(\n function () {\n if(vm.Scope.ctrl.searchParams.Page === 1) {\n listPartInspecRulesListener(event, vm.Scope.ctrl.searchParams);\n } else {\n vm.Scope.ctrl.searchParams.Page = 1;\n } \n ToastUtil.showToastMessage($translate.instant(\"basic.part.inspection.rule.save.success\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.part.inspection.rule.save.error\"), ToastUtil.ToastType.ERROR);\n }\n }\n\n });\n }\n\n function listPartInspecRulesListener(event, searchParams) {\n PartInspectionRuleService.listPartInspectionRules(searchParams).then(\n function (response) {\n $rootScope.$broadcast(BasicEventConstant.updateBasicListItems, response);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.part.inspection.rule.load.all.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function getPartInspecRuleByIdListener(event, id) {\n PartInspectionRuleService.getById(id).then(\n function (response) {\n $rootScope.$broadcast(BasicEventConstant.updateItemToEdit, response);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.part.inspection.rule.load.byid.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function deletePartInspecRuleListener(event, id) {\n PartInspectionRuleService.delete(id).then(\n function () {\n ToastUtil.showToastMessage($translate.instant(\"basic.part.inspection.rule.remove.success\"), ToastUtil.ToastType.SUCCESS);\n if(vm.Scope.ctrl.searchParams.Page === 1) {\n listPartInspecRulesListener(event, vm.Scope.ctrl.searchParams);\n } else {\n vm.Scope.ctrl.searchParams.Page = 1;\n } \n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if(error.status == vm.Scope.HttpStatusCodeConflict) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n else {\n ToastUtil.showToastMessage($translate.instant(\"basic.part.inspection.rule.remove.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n init();\n }\n )\n\n})();\n\n/**\n * Controller to handle License, License Type and LicenseType Action insertions.\n */\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .service('BasicLicenseTypeService',\n\n function BasicLicenseTypeService($rootScope, $state, $log, $translate, BasicEventConstant, LicenseTypeService, ToastUtil) {\n\n var vm = this;\n\n vm.Scope;\n\n /**\n * Init controller actions.\n */\n function init() {\n var unregister1 = $rootScope.$on(BasicEventConstant.saveLicenseType, saveLicenseTypeListener);\n var unregister2 = $rootScope.$on(BasicEventConstant.listLicenseType, listLicenseTypeListener);\n var unregister3 = $rootScope.$on(BasicEventConstant.getByIdLicenseType, getLicenseTypeByIdListener);\n var unregister4 = $rootScope.$on(BasicEventConstant.removeLicenseType, deleteLicenseTypeListener);\n\n $rootScope.$on('$destroy', unregister1);\n $rootScope.$on('$destroy', unregister2);\n $rootScope.$on('$destroy', unregister3);\n $rootScope.$on('$destroy', unregister4);\n }\n\n function saveLicenseTypeListener(event, defect) {\n LicenseTypeService.save(defect).then(\n function () {\n if(vm.Scope.ctrl.searchParams.Page === 1) {\n listLicenseTypeListener(event, vm.Scope.ctrl.searchParams);\n } else {\n vm.Scope.ctrl.searchParams.Page = 1;\n } \n ToastUtil.showToastMessage($translate.instant(\"basic.licensetype.save.success\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.licensetype.save.error\"), ToastUtil.ToastType.ERROR);\n }\n }\n\n });\n }\n\n function listLicenseTypeListener(event, searchParams) {\n LicenseTypeService.listLicenseTypes(searchParams).then(\n function (response) {\n $rootScope.$broadcast(BasicEventConstant.updateBasicListItems, response);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.licensetype.load.all.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function getLicenseTypeByIdListener(event, id) {\n LicenseTypeService.getById(id).then(\n function (response) {\n $rootScope.$broadcast(BasicEventConstant.updateItemToEdit, response);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.licensetype.load.byid.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function deleteLicenseTypeListener(event, id) {\n LicenseTypeService.delete(id).then(\n function () {\n ToastUtil.showToastMessage($translate.instant(\"basic.licensetype.remove.success\"), ToastUtil.ToastType.SUCCESS);\n if(vm.Scope.ctrl.searchParams.Page === 1) {\n listLicenseTypeListener(event, vm.Scope.ctrl.searchParams);\n } else {\n vm.Scope.ctrl.searchParams.Page = 1;\n } \n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if (error.status === vm.Scope.HttpStatusCodeConflict) {\n ToastUtil.showToastMessage($translate.instant(\"basic.licensetype.deleted.failed\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.licensetype.remove.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n init();\n }\n )\n})();\n\n/**\n * Controller to handle Defect, Defect Type and Defect Action insertions.\n */\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .service('BasicEffectTypeService',\n function BasicEffectTypeService($rootScope, $state, $log, $translate, BasicEventConstant, EffectTypeService, ToastUtil) {\n\n var vm = this;\n vm.Scope;\n\n /**\n * Init controller actions.\n */\n function init() {\n var unregister1 = $rootScope.$on(BasicEventConstant.saveEffectType, saveEffectTypeListener);\n var unregister2 = $rootScope.$on(BasicEventConstant.listEffectType, listEffectTypesListener);\n var unregister3 = $rootScope.$on(BasicEventConstant.getByIdEffectType, getEffectTypeByIdListener);\n var unregister4 = $rootScope.$on(BasicEventConstant.removeEffectType, deleteEffectTypeListener);\n\n\n $rootScope.$on('$destroy', unregister1);\n $rootScope.$on('$destroy', unregister2);\n $rootScope.$on('$destroy', unregister3);\n $rootScope.$on('$destroy', unregister4);\n }\n\n function saveEffectTypeListener(event, effectType) {\n EffectTypeService.saveEffectType(effectType).then(\n function () {\n if(vm.Scope.ctrl.searchParams.Page === 1) {\n listEffectTypesListener(event, vm.Scope.ctrl.searchParams);\n } else {\n vm.Scope.ctrl.searchParams.Page = 1;\n } \n ToastUtil.showToastMessage($translate.instant(\"basic.effect.type.save.success\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.effect.type.save.error\"), ToastUtil.ToastType.ERROR);\n }\n }\n\n });\n }\n\n function listEffectTypesListener(event, searchParams) {\n EffectTypeService.list(searchParams).then(\n function (response) {\n $rootScope.$broadcast(BasicEventConstant.updateBasicListItems, response);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.effect.type.load.all.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function getEffectTypeByIdListener(event, id) {\n EffectTypeService.getById(id).then(\n function (response) {\n $rootScope.$broadcast(BasicEventConstant.updateItemToEdit, response);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.effect.type.load.byid.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function deleteEffectTypeListener(event, id) {\n EffectTypeService.delete(id).then(\n function () {\n ToastUtil.showToastMessage($translate.instant(\"basic.effect.type.remove.success\"), ToastUtil.ToastType.SUCCESS);\n if(vm.Scope.ctrl.searchParams.Page === 1) {\n listEffectTypesListener(event, vm.Scope.ctrl.searchParams);\n } else {\n vm.Scope.ctrl.searchParams.Page = 1;\n } \n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if (error.status === vm.Scope.HttpStatusCodeConflict) {\n ToastUtil.showToastMessage($translate.instant(\"effect.type.deleted.failed\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.effect.type.remove.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n init();\n }\n )\n\n})();\n\n/**\n * Controller to handle Defect, Defect Type and Defect Action insertions.\n */\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .service('BasicDefectService',\n\n function BasicDefectService($rootScope, $state, $log, $translate, BasicEventConstant, DefectsService, ToastUtil) {\n\n var vm = this;\n\n vm.Scope;\n\n /**\n * Init controller actions.\n */\n function init() {\n var unregister1 = $rootScope.$on(BasicEventConstant.saveDefect, saveDefectListener);\n var unregister2 = $rootScope.$on(BasicEventConstant.listDefect, listDefectsListener);\n var unregister3 = $rootScope.$on(BasicEventConstant.getByIdDefect, getDefectByIdListener);\n var unregister4 = $rootScope.$on(BasicEventConstant.removeDefect, deleteDefectdListener);\n\n $rootScope.$on('$destroy', unregister1);\n $rootScope.$on('$destroy', unregister2);\n $rootScope.$on('$destroy', unregister3);\n $rootScope.$on('$destroy', unregister4);\n }\n\n function saveDefectListener(event, defect) {\n DefectsService.saveDefect(defect).then(\n function () {\n if(vm.Scope.ctrl.searchParams.Page === 1) {\n listDefectsListener(event, vm.Scope.ctrl.searchParams);\n } else {\n vm.Scope.ctrl.searchParams.Page = 1;\n }\n ToastUtil.showToastMessage($translate.instant(\"basic.defect.save.success\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.defect.save.error\"), ToastUtil.ToastType.ERROR);\n }\n }\n\n });\n }\n\n function listDefectsListener(event, searchParams) {\n DefectsService.listDefects(searchParams).then(\n function (response) {\n $rootScope.$broadcast(BasicEventConstant.updateBasicListItems, response);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.defect.load.all.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function getDefectByIdListener(event, id) {\n DefectsService.getDefectById(id).then(\n function (response) {\n $rootScope.$broadcast(BasicEventConstant.updateItemToEdit, response);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.defect.load.byid.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function deleteDefectdListener(event, id) {\n DefectsService.deleteDefect(id).then(\n function () {\n ToastUtil.showToastMessage($translate.instant(\"basic.defect.remove.success\"), ToastUtil.ToastType.SUCCESS);\n if(vm.Scope.ctrl.searchParams.Page === 1) {\n listDefectsListener(event, vm.Scope.ctrl.searchParams);\n } else {\n vm.Scope.ctrl.searchParams.Page = 1;\n } \n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if (error.status === vm.Scope.HttpStatusCodeConflict) {\n ToastUtil.showToastMessage($translate.instant(\"defect.deleted.failed\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.defect.remove.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n init();\n }\n )\n})();\n\n/**\n * Controller to handle Defect, Defect Type and Defect Action insertions.\n */\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .service('BasicDefectTypeService',\n function BasicDefectTypeService($rootScope, $state, $log, $translate, BasicEventConstant, DefectsService, ToastUtil) {\n\n var vm = this;\n vm.Scope;\n \n /**\n * Init controller actions.\n */\n function init() {\n var unregister1 = $rootScope.$on(BasicEventConstant.saveDefectType, saveDefectListener);\n var unregister2 = $rootScope.$on(BasicEventConstant.listDefectType, listDefectsListener);\n var unregister3 = $rootScope.$on(BasicEventConstant.getByIdDefectType, getDefectByIdListener);\n var unregister4 = $rootScope.$on(BasicEventConstant.removeDefectType, deleteDefectdListener);\n\n $rootScope.$on('$destroy', unregister1);\n $rootScope.$on('$destroy', unregister2);\n $rootScope.$on('$destroy', unregister3);\n $rootScope.$on('$destroy', unregister4);\n }\n\n function saveDefectListener(event, defect) {\n DefectsService.saveDefectType(defect).then(\n function () {\n if(vm.Scope.ctrl.searchParams.Page === 1) {\n listDefectsListener(event, vm.Scope.ctrl.searchParams);\n } else {\n vm.Scope.ctrl.searchParams.Page = 1;\n }\n ToastUtil.showToastMessage($translate.instant(\"basic.defect.type.save.success\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.defect.type.save.error\"), ToastUtil.ToastType.ERROR);\n }\n }\n\n });\n }\n\n function listDefectsListener(event, searchParams) {\n DefectsService.listDefectsTypes(searchParams).then(\n function (response) {\n $rootScope.$broadcast(BasicEventConstant.updateBasicListItems, response);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.defect.type.load.all.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function getDefectByIdListener(event, id) {\n DefectsService.getDefectTypeById(id).then(\n function (response) {\n $rootScope.$broadcast(BasicEventConstant.updateItemToEdit, response);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.defect.type.load.byid.error\"), ToastUtil.ToastType.ERROR);\n }\n\n });\n }\n\n function deleteDefectdListener(event, id) {\n DefectsService.deleteDefectType(id).then(\n function () {\n ToastUtil.showToastMessage($translate.instant(\"basic.defect.type.remove.success\"), ToastUtil.ToastType.SUCCESS);\n if(vm.Scope.ctrl.searchParams.Page === 1) {\n listDefectsListener(event, vm.Scope.ctrl.searchParams);\n } else {\n vm.Scope.ctrl.searchParams.Page = 1;\n } \n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if (error.status === vm.Scope.HttpStatusCodeConflict) {\n ToastUtil.showToastMessage($translate.instant(\"defect.type.deleted.failed\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.defect.type.remove.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n init();\n }\n )\n\n})();\n\n/**\n * Controller to handle Defect, Defect Type and Defect Action insertions.\n */\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .service('BasicDefectRootCauseService',\n\n function BasicDefectRootCauseService($rootScope, $state, $log, $translate, BasicEventConstant, DefectsService, ToastUtil) {\n\n var vm = this;\n vm.Scope;\n\n /**\n * Init controller actions.\n */\n function init() {\n var unregister1 = $rootScope.$on(BasicEventConstant.saveRootCause, saveRootCauseListener);\n var unregister2 = $rootScope.$on(BasicEventConstant.listRootCause, listRootCauseListener);\n var unregister3 = $rootScope.$on(BasicEventConstant.getByIdRootCause, getRootCauseByIdListener);\n var unregister4 = $rootScope.$on(BasicEventConstant.removeRootCause, deleteRootCauseListener);\n\n $rootScope.$on('$destroy', unregister1);\n $rootScope.$on('$destroy', unregister2);\n $rootScope.$on('$destroy', unregister3);\n $rootScope.$on('$destroy', unregister4);\n }\n\n function saveRootCauseListener(event, defect) {\n DefectsService.saveDefectRootCause(defect).then(\n function () {\n if(vm.Scope.ctrl.searchParams.Page === 1) {\n listRootCauseListener(event, vm.Scope.ctrl.searchParams);\n } else {\n vm.Scope.ctrl.searchParams.Page = 1;\n }\n ToastUtil.showToastMessage($translate.instant(\"basic.defect.root.cause.save.success\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.defect.root.cause.save.error\"), ToastUtil.ToastType.ERROR);\n }\n }\n\n });\n }\n\n function listRootCauseListener(event, searchParams) {\n DefectsService.listDefectRootCauses(searchParams).then(\n function (response) {\n $rootScope.$broadcast(BasicEventConstant.updateBasicListItems, response);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.defect.root.cause.load.all.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function getRootCauseByIdListener(event, id) {\n DefectsService.getDefectRootCauseById(id).then(\n function (response) {\n $rootScope.$broadcast(BasicEventConstant.updateItemToEdit, response);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.defect.root.cause.load.byid.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function deleteRootCauseListener(event, id) {\n DefectsService.deleteDefectRootCause(id).then(\n function () {\n ToastUtil.showToastMessage($translate.instant(\"basic.defect.root.cause.remove.success\"), ToastUtil.ToastType.SUCCESS);\n if(vm.Scope.ctrl.searchParams.Page === 1) {\n listRootCauseListener(event, vm.Scope.ctrl.searchParams);\n } else {\n vm.Scope.ctrl.searchParams.Page = 1;\n }\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if (error.status === vm.Scope.HttpStatusCodeConflict) {\n ToastUtil.showToastMessage($translate.instant(\"root.cause.deleted.failed\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.defect.root.cause.remove.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n init();\n }\n )\n\n})();\n\n/**\n * Controller to handle Defect, Defect Type and Defect Action insertions.\n */\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .service('BasicDefectOccurrenceService',\n\n function BasicDefectOccurrenceService($rootScope, $state, $log, $translate, BasicEventConstant, DefectsService, ToastUtil) {\n\n var vm = this;\n vm.Scope;\n\n /**\n * Init controller actions.\n */\n function init() {\n var unregister1 = $rootScope.$on(BasicEventConstant.saveDefectOccurrence, saveDefectOccurrenceListener);\n var unregister2 = $rootScope.$on(BasicEventConstant.listDefectOccurrence, listDefectOccurrenceListener);\n var unregister3 = $rootScope.$on(BasicEventConstant.getByIdDefectOccurrence, getDefectOccurrenceByIdListener);\n var unregister4 = $rootScope.$on(BasicEventConstant.removeDefectOccurrence, deleteDefectOccurrenceListener);\n\n $rootScope.$on('$destroy', unregister1);\n $rootScope.$on('$destroy', unregister2);\n $rootScope.$on('$destroy', unregister3);\n $rootScope.$on('$destroy', unregister4);\n }\n\n function saveDefectOccurrenceListener(event, defect) {\n DefectsService.saveDefectOccurrence(defect).then(\n function () {\n if(vm.Scope.ctrl.searchParams.Page === 1) {\n listDefectOccurrenceListener(event, vm.Scope.ctrl.searchParams);\n } else {\n vm.Scope.ctrl.searchParams.Page = 1;\n }\n ToastUtil.showToastMessage($translate.instant(\"basic.defect.occurrence.save.success\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.defect.occurrence.save.error\"), ToastUtil.ToastType.ERROR);\n }\n }\n\n });\n }\n\n function listDefectOccurrenceListener(event, searchParams) {\n DefectsService.listDefectOccurrences(searchParams).then(\n function (response) {\n $rootScope.$broadcast(BasicEventConstant.updateBasicListItems, response);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.defect.occurrence.load.all.error\"), ToastUtil.ToastType.ERROR);\n }\n\n });\n }\n\n function getDefectOccurrenceByIdListener(event, id) {\n DefectsService.getDefectOccurrenceById(id).then(\n function (response) {\n $rootScope.$broadcast(BasicEventConstant.updateItemToEdit, response);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.defect.occurrence.load.byid.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function deleteDefectOccurrenceListener(event, id) {\n DefectsService.deleteDefectOccurrence(id).then(\n function () {\n ToastUtil.showToastMessage($translate.instant(\"basic.defect.occurrence.remove.success\"), ToastUtil.ToastType.SUCCESS);\n if(vm.Scope.ctrl.searchParams.Page === 1) {\n listDefectOccurrenceListener(event, vm.Scope.ctrl.searchParams);\n } else {\n vm.Scope.ctrl.searchParams.Page = 1;\n }\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.defect.occurrence.remove.error\"), ToastUtil.ToastType.ERROR);\n }\n\n });\n }\n\n init();\n }\n )\n\n})();\n\n/**\n * Controller to handle Defect, Defect Type and Defect Action insertions.\n */\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .service('BasicDefectActionService',\n\n function BasicDefectActionService($rootScope, $state, $log, $translate, BasicEventConstant, DefectsService, ToastUtil) {\n var vm = this;\n vm.Scope;\n\n /**\n * Init controller actions.\n */\n function init() {\n var unregister1 = $rootScope.$on(BasicEventConstant.saveDefectAction, saveDefectListener);\n var unregister2 = $rootScope.$on(BasicEventConstant.listDefectAction, listDefectsListener);\n var unregister3 = $rootScope.$on(BasicEventConstant.getByIdDefectAction, getDefectByIdListener);\n var unregister4 = $rootScope.$on(BasicEventConstant.removeDefectAction, deleteDefectdListener);\n\n $rootScope.$on('$destroy', unregister1);\n $rootScope.$on('$destroy', unregister2);\n $rootScope.$on('$destroy', unregister3);\n $rootScope.$on('$destroy', unregister4);\n }\n\n function saveDefectListener(event, defect) {\n DefectsService.saveDefectAction(defect).then(\n function () {\n if(vm.Scope.ctrl.searchParams.Page === 1) {\n listDefectsListener(event, vm.Scope.ctrl.searchParams);\n } else {\n vm.Scope.ctrl.searchParams.Page = 1;\n }\n ToastUtil.showToastMessage($translate.instant(\"basic.defect.action.save.success\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.defect.action.save.error\"), ToastUtil.ToastType.ERROR);\n }\n }\n\n\n });\n }\n\n function listDefectsListener(event, searchParams) {\n DefectsService.listDefectsActions(searchParams).then(\n function (response) {\n $rootScope.$broadcast(BasicEventConstant.updateBasicListItems, response);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.defect.action.load.all.error\"), ToastUtil.ToastType.ERROR);\n }\n\n });\n }\n\n function getDefectByIdListener(event, id) {\n DefectsService.getDefectActionById(id).then(\n function (response) {\n $rootScope.$broadcast(BasicEventConstant.updateItemToEdit, response);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.defect.action.load.byid.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function deleteDefectdListener(event, id) {\n DefectsService.deleteDefectAction(id).then(\n function () {\n ToastUtil.showToastMessage($translate.instant(\"basic.defect.action.remove.success\"), ToastUtil.ToastType.SUCCESS);\n if(vm.Scope.ctrl.searchParams.Page === 1) {\n listDefectsListener(event, vm.Scope.ctrl.searchParams);\n } else {\n vm.Scope.ctrl.searchParams.Page = 1;\n }\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if (error.status === vm.Scope.HttpStatusCodeConflict) {\n ToastUtil.showToastMessage($translate.instant(\"defect.action.deleted.failed\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.defect.action.remove.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n init();\n }\n )\n\n})();\n\n/**\n * Controller to handle Defect, Defect Type and Defect Action insertions.\n */\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .service('BasicAreaService',\n function BasicAreaService($rootScope, $state, $log, $translate, BasicEventConstant, AreaService, ToastUtil) {\n\n var vm = this;\n vm.Scope;\n\n /**\n * Init controller actions.\n */\n function init() {\n var unregister1 = $rootScope.$on(BasicEventConstant.saveArea, saveAreaListener);\n var unregister2 = $rootScope.$on(BasicEventConstant.listArea, listAreasListener);\n var unregister3 = $rootScope.$on(BasicEventConstant.getByIdArea, getAreaByIdListener);\n var unregister4 = $rootScope.$on(BasicEventConstant.removeArea, deleteAreaListener);\n\n\n $rootScope.$on('$destroy', unregister1);\n $rootScope.$on('$destroy', unregister2);\n $rootScope.$on('$destroy', unregister3);\n $rootScope.$on('$destroy', unregister4);\n }\n\n function saveAreaListener(event, area) {\n AreaService.save(area).then(\n function () {\n if(vm.Scope.ctrl.searchParams.Page === 1) {\n listAreasListener(event, vm.Scope.ctrl.searchParams);\n } else {\n vm.Scope.ctrl.searchParams.Page = 1;\n }\n ToastUtil.showToastMessage($translate.instant(\"basic.area.save.success\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.area.save.error\"), ToastUtil.ToastType.ERROR);\n }\n }\n\n });\n }\n\n function listAreasListener(event, searchParams) {\n AreaService.listAreas(searchParams).then(\n function (response) {\n $rootScope.$broadcast(BasicEventConstant.updateBasicListItems, response);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status !== vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"basic.area.load.all.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function getAreaByIdListener(event, id) {\n AreaService.getById(id).then(\n function (response) {\n $rootScope.$broadcast(BasicEventConstant.updateItemToEdit, response);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.area.load.byid.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function deleteAreaListener(event, id) {\n AreaService.delete(id).then(\n function () {\n ToastUtil.showToastMessage($translate.instant(\"basic.area.remove.success\"), ToastUtil.ToastType.SUCCESS);\n if(vm.Scope.ctrl.searchParams.Page === 1) {\n listAreasListener(event, vm.Scope.ctrl.searchParams);\n } else {\n vm.Scope.ctrl.searchParams.Page = 1;\n }\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === vm.Scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if (error.status === vm.Scope.HttpStatusCodeConflict) {\n ToastUtil.showToastMessage($translate.instant(\"basic.area.deleted.failed\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"basic.area.remove.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n init();\n }\n )\n\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(AlertEmailNotificationTranslate);\n\n /** @ngInject */\n function AlertEmailNotificationTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'alert.email.label.target': 'Target',\n 'alert.email.notification.label.notification': 'Notification',\n 'alert.email.notification.label.role': 'Role',\n 'alert.email.notification.label.status': 'Status',\n 'alert.email.notification.label.waiting': 'Waiting',\n 'alert.email.notification.label.approved': 'Approved',\n 'alert.email.notification.label.rejected': 'Rejected',\n 'alert.email.notification.label.processing.date': 'Processing date'\n });\n\n $translateProvider.translations('pt', {\n 'alert.email.label.target': 'Target',\n 'alert.email.notification.label.notification': 'Notificação',\n 'alert.email.notification.label.role': 'Função',\n 'alert.email.notification.label.status': 'Situação',\n 'alert.email.notification.label.waiting': 'Aguardando',\n 'alert.email.notification.label.approved': 'Aprovado',\n 'alert.email.notification.label.rejected': 'Rejeitado',\n 'alert.email.notification.label.processing.date': 'Data de processamento'\n });\n }\n})();\n\n(function () {\n 'use strict';\n\n function AlertEmailNotificationController($scope, ToastUtil, $translate, $log, $document, InputListEmailService, AuthService) {\n\n var vm = this;\n\n vm.newItem = '';\n vm.Role = null;\n\n var roleConst = {\n APPROVER: 0,\n CONSENT: 1,\n NOTIFICATION: 2\n }\n\n vm.getTitleRole = function (role) {\n switch (role) {\n case roleConst.APPROVER:\n return $translate.instant('alert.email.notification.label.notification');\n case roleConst.CONSENT:\n return $translate.instant('alert.email.notification.label.consent');\n case roleConst.NOTIFICATION:\n return $translate.instant('alert.email.notification.label.notification');\n }\n }\n\n vm.listEmail = undefined;\n\n if (vm.isDisabled == undefined) {\n vm.isDisabled = false;\n }\n\n vm.insertNewEmail = function (form) {\n if (form.$valid) {\n\n var userEmail = vm.getEmailObj();\n userEmail.Business = {\n Id: AuthService.getBusinessId()\n };\n\n vm.saveEmail(userEmail);\n }\n };\n\n vm.saveEmail = function (userEmail) {\n\n if (userEmail.Email != \"\" && userEmail.Email != undefined) {\n if (!vm.containsEmail(userEmail)) {\n userEmail.Business = {\n Id: AuthService.getBusinessId()\n };\n\n userEmail.IsGroup = false;\n InputListEmailService.save(userEmail, -1).then(function (response) {\n var email = angular.copy(response);\n\n var alertEmailNotification = {\n ExternalEmail: angular.copy(email),\n Role: roleConst.NOTIFICATION,\n ProcessingDate: null\n };\n\n vm.list.push(alertEmailNotification);\n\n if (!containsInListEmail(email)) {\n vm.listEmail.push(email);\n }\n\n }).catch(function (error) {\n $log.log(error);\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n }\n vm.list.push(angular.copy(userEmail));\n });\n\n vm.model = \"\";\n } else {\n ToastUtil.showToastMessage($translate.instant('input.email.directive.duplicatedmail'),\n ToastUtil.ToastType.WARN);\n }\n }\n };\n\n vm.getEmailObj = function () {\n var obj = {};\n if (vm.model.Email == undefined) {\n var externalEmailBusinessDTO = {\n BusinessId: AuthService.getBusinessId()\n }\n\n obj = {\n Email: angular.copy(vm.model),\n Id: 0\n }\n externalEmailBusinessDTO.Type = 0;\n\n obj.ExternalEmailBusiness = [];\n obj.ExternalEmailBusiness.push(externalEmailBusinessDTO);\n } else {\n obj = vm.model;\n }\n obj.CsActive = 1;\n return obj;\n };\n\n InputListEmailService.listAll().then(function (response) {\n vm.listEmail = [];\n angular.forEach(response, function (email) {\n if (!containsInListEmail(email)) {\n vm.listEmail.push(email);\n }\n });\n }).catch(function (error) {\n $log.log(error);\n //No need an action.\n });\n\n vm.delete = function (item) {\n var index = vm.list.indexOf(item);\n if (index > -1) {\n vm.list.splice(index, 1);\n }\n }\n\n vm.containsEmail = function (email) {\n var contains = false;\n if (email) {\n angular.forEach(vm.list, function (mail) {\n if (mail.ExternalEmail.Email == email.Email) {\n contains = true;\n }\n });\n }\n return contains;\n };\n\n function containsInListEmail(email) {\n var contains = false;\n if (email) {\n angular.forEach(vm.listEmail, function (mail) {\n if (mail.Email == email.Email) {\n contains = true;\n }\n });\n }\n return contains;\n }\n\n function init() {\n\n }\n\n init();\n }\n\n function AlertEmailNotificationDirective() {\n return {\n bindToController: true,\n restrict: 'E',\n scope: {\n list: '=',\n titleLabel: '@',\n disableInput: '=',\n disableDelete: '=',\n isRequired: '=',\n changeFn: '&?',\n statusDocument: '=?',\n targetApproved: '=?'\n },\n replace: true,\n templateUrl: \"app/alert/component/alert-email-notification.html\",\n controllerAs: 'ctrl',\n controller: 'AlertEmailNotificationController'\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('AlertEmailNotificationController', AlertEmailNotificationController)\n .directive('alertEmailNotification', AlertEmailNotificationDirective);\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(AcquisitionTranslate);\n\n /** @ngInject */\n function AcquisitionTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n acquisition: {\n report: {\n labels: {\n report: 'Reports',\n approval: 'Approval',\n search: {\n filters: 'Filters',\n subject: 'Subject or ID',\n createdStartDate: 'Created Start Date',\n createdEndDate: 'Created Due Date',\n requestBy: 'Request By',\n type: 'Type',\n deadlineStartDate: 'Deadline Start Date',\n exportPO: 'Export PO List',\n deadlineEndDate: 'Deadline Due Date'\n },\n generateReport: 'Generate Report',\n fileName: 'Acquisition Report- Approval'\n }\n }\n },\n quotes: {\n report: {\n title: 'Quotation and purchase order requests',\n graphic: {\n graphicQuoteOpen: 'Quotations + Open POs per week',\n graphicOrderClosed: 'Quotation + Orders closed per week',\n graphicQuoteOpenMonthly: 'Quotations + Open POs per month',\n graphicOrderClosedMonthly: 'Quotation + Orders closed per month',\n quoteOpen: 'Open quotation',\n quoteClosed: 'Closed quotation',\n orderOpen: 'Open orders',\n orderClosed: 'Closed order',\n nothingFound: 'Nothing found'\n },\n error: 'An error occurred while trying to load a quote list.'\n }\n }\n });\n\n\n $translateProvider.translations('pt', {\n acquisition: {\n report: {\n labels: {\n report: 'Relatórios',\n approval: 'Aprovação',\n search: {\n filters: 'Filtros',\n subject: 'Assunto ou ID',\n createdStartDate: 'Início da Data de Criação',\n createdEndDate: 'Fim da Data de Criação',\n requestBy: 'Solicitado por',\n type: 'Tipo',\n exportPO: 'Exportar lista de POs',\n deadlineStartDate: 'Data de início do prazo',\n deadlineEndDate: 'Data final do prazo'\n },\n generateReport: 'Gerar Relatório',\n fileName: 'Relatório de Aquisição - Aprovação'\n }\n }\n },\n quotes: {\n report: {\n title: 'Cotações',\n graphic: {\n graphicQuoteOpen: 'Cotações + POs em aberto p/ semana',\n graphicOrderClosed: 'Cotação + Pedidos fechados p/ semana',\n graphicQuoteOpenMonthly: 'Cotações + POs em aberto p/ mês',\n graphicOrderClosedMonthly: 'Cotação + Pedidos fechados p/ mês',\n quoteOpen: 'Cotação em aberto',\n quoteClosed: 'Cotação fechada',\n orderOpen: 'Pedidos em aberto',\n orderClosed: 'Pedido fechado',\n nothingFound: 'Nada encontrado'\n },\n error: 'An error occurred while trying to load a quote list.'\n\n }\n }\n });\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('AcquisitionReportService', AcquisitionReportService);\n\n var BASE = '/acquisition/report/';\n\n /** @ngInject */\n function AcquisitionReportService($state, $window, $injector, $q, $log, ToastUtil, $translate, ConfigurationService, AuthService, DefaultService) {\n\n function validateViewPermission(vm) {\n return (vm.profile.CanView);\n }\n\n function validateEditOrConsultPermission(vm) {\n return (vm.profile.CanEdit || vm.profile.CanConsult);\n }\n\n function validateDeletePermission(vm) {\n return (vm.profile.hasLoad && vm.profile.CanDelete);\n }\n\n function validateAddPermission(vm) {\n return (vm.profile.hasLoad && vm.profile.CanAdd);\n }\n\n function validateApprovePermission(vm) {\n return (vm.profile.hasLoad && vm.profile.CanApprove);\n }\n\n return {\n hasApprovePermission: validateApprovePermission,\n\n loadProfileModules: function (vm, $scope) {\n var profileModule = {};\n\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.moduleAcquisition;\n\n return DefaultService.loadModules(profileModule)\n .then(function (response) {\n vm.profile = angular.copy(response);\n vm.profile.hasLoad = true;\n });\n },\n\n exportApproval: function (searchParams, language) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + 'approval/' + language, {\n params: searchParams,\n responseType: 'arraybuffer'\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n\n };\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(AcquisitionReport);\n\n /** @ngInject */\n function AcquisitionReport($stateProvider) {\n\n $stateProvider.state('acquisition-report-approval', {\n url: '/acquisition/report/approval',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/acquisition/report/approval/acquisition-approval-report.html',\n controller: 'AcquisitionApprovalReportController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n type: null,\n menuName: 'label.acquisition'\n },\n authorize: true\n });\n\n\n $stateProvider.state('quotes-report-approval', {\n url: '/acquisition/report/quotes',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/acquisition/report/quotes/quotes.html',\n controller: 'QuotesController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n type: null,\n menuName: 'label.acquisition'\n },\n authorize: true\n });\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(AcquisitionRisksTranslate);\n\n /** @ngInject */\n function AcquisitionRisksTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n acquisition: {\n risks: {\n settings: 'Settings',\n telegram: 'Telegram',\n title: 'Risks',\n labels: {\n description: 'Description',\n newUserTelegram: 'New Telegram User',\n editUserTelegram: 'Edit Telegram User',\n listUsers: 'Telegram User List'\n }\n }\n }\n });\n\n $translateProvider.translations('pt', {\n acquisition: {\n risks: {\n settings: 'Configuração',\n telegram: 'Telegram',\n title: 'Riscos',\n labels: {\n description: 'Descrição',\n newUserTelegram: 'Novo Usuário do Telegram',\n editUserTelegram: 'Editar Usuário do Telegram',\n listUsers: 'Lista de Usuários do Telegram'\n }\n }\n }\n });\n }\n })();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('AcquisitionRisksService', AcquisitionRisksService);\n\n var BASE = '/acquisition/risks';\n\n /** @ngInject */\n function AcquisitionRisksService($state, $window, $injector, $q, $log, ToastUtil, $translate, ConfigurationService, AuthService, DefaultService) {\n\n return {\n\n getRisks: function () {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE)\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n saveRisks: function (risks) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.patch(ConfigurationService.getServiceHost() + BASE, risks)\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n\n };\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(AcquisitionRisks);\n\n /** @ngInject */\n function AcquisitionRisks($stateProvider) {\n\n $stateProvider.state('acquisition-risks', {\n url: '/acquisition/risks',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/acquisition/risks/acquisition-risks-edit.html',\n controller: 'AcquisitionRisksController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n type: null,\n menuName: 'label.acquisition.risks'\n },\n authorize: true\n });\n\n $stateProvider.state('risk-telegram-list', {\n url: '/acquisition/risk/telegram',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/acquisition/risks/settings/users-telegram-list.html',\n controller: 'UsersTelegramListController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n type: null,\n menuName: 'label.acquisition.risks'\n },\n authorize: true\n });\n\n }\n\n })();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('AcquisitionRisksController', AcquisitionRisksController);\n\n function AcquisitionRisksController($scope, $translate, ToastUtil, AcquisitionRisksService) {\n\n var vm = this;\n vm.risks = [];\n\n function init() {\n list()\n }\n\n function list() {\n AcquisitionRisksService.getRisks()\n .then(function (response) {\n vm.risks = response\n })\n }\n\n vm.save = function() {\n AcquisitionRisksService.saveRisks(vm.risks)\n .then(function () {\n ToastUtil.showToastMessage($translate.instant(\"acquisition.msg.save.success\"), ToastUtil.ToastType.SUCCESS);\n })\n }\n init();\n\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(AcquisitionTranslate);\n\n /** @ngInject */\n function AcquisitionTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n acquisition: {\n risk: {\n label: {\n acquisitionRisk: 'Acquisition Risk',\n edit: 'Edit Acquisition Risk',\n new: 'New Acquisition Risk',\n category: 'Category',\n nonAlpha: 'Non Alpha',\n mro: 'MRO',\n alpha: 'Alpha',\n equipment: 'Equipment',\n material: 'Material',\n description: 'Description',\n requestId: 'Request ID',\n purchaseOrder: 'Purchase Order',\n buyer: 'Buyer',\n project: 'Project',\n origin: 'Origin',\n imported: 'Imported',\n national: 'National',\n local: 'Local',\n supplier: 'Supplier',\n stock: 'Stock',\n reorderPoint: 'Reorder Point',\n openOrderBalance: 'Open Order Balance',\n stockAverage: 'Stock Coverage',\n actualStock: 'Actual Stock',\n missingAmountCurrentWeek: 'Missing amount in this week',\n missingAmountNextWeek: 'Missing amount in the next week',\n invoice: 'Invoice',\n etdStart: 'ETD Start',\n etaEnd: 'ETA Final',\n etafStart: 'ETAF Start',\n etdEnd: 'ETD Final',\n etaStart: 'ETA Start',\n etafEnd: 'ETAF Final',\n etd: 'ETD',\n eta: 'ETA',\n etaf: 'ETAF',\n filterByInvoice: 'Filter by Invoice',\n filterByCategory: 'Filter by Category',\n no: 'No',\n yes: 'Yes',\n high: 'High Risk',\n medium: 'Medium Risk',\n low: 'Low Risk',\n norisk: 'No Risk',\n resolved: 'Resolved',\n noresolved: 'Not Resolved',\n addAcquisitionRisk: 'New Acquisition Risk',\n id: 'Id',\n unitMeasure: 'Unit of Measure',\n quantity: 'Quantity',\n filterRiskLevel: 'Filter by risk level',\n riskLevel: 'Risk Level',\n addComment: 'Add Comment',\n btnResolve: 'Resolved',\n status: 'Status',\n newUserTelegram: 'Add User',\n telegram: 'Telegram',\n filter_status: 'Filter by status'\n },\n search: {\n category: 'Search by Category',\n origin: 'Search by Origin',\n buyer: 'Search by Buyer',\n id: 'Search by Id',\n description: 'Search by Description',\n invoice: 'Search by Invoice'\n },\n msg: {\n noDataFound: 'No data found',\n toCreateANewOne: 'Click here to create a new one',\n noCommentsFound: 'No comments found',\n nolevel: 'Select a Level Risk',\n savesuccess: 'Acquisition Risk was successfully saved',\n saveerror: 'An error occurred when try to save an Acquisition Risk',\n invoiceAlreadyExist: 'Invoice already exist.',\n saveUserTelegramSuccess: 'User was successfully saved',\n deleteUserTelegramSuccess: 'User was successfully deleted',\n UserAlreadyExist: 'User already exist',\n saveUserTelegramError: 'An error occurred when try to save an User Telegram list',\n deleteUserTelegramError: 'An error occurred when try to delete an User from Telegram list'\n },\n report: {\n name: 'Risk Acquisitions'\n }\n }\n }\n });\n\n $translateProvider.translations('pt', {\n acquisition: {\n risk: {\n label: {\n acquisitionRisk: 'Aquisição de Risco',\n edit: 'Editando Aquisição de Risco',\n new: 'Nova Aquisição de Risco',\n category: 'Categoria',\n nonAlpha: 'Non Alpha',\n mro: 'MRO',\n alpha: 'Alpha',\n equipment: 'Equipment',\n material: 'Material',\n description: 'Descrição',\n requestId: 'Nº Solicitação',\n purchaseOrder: 'Pedido de Compra',\n buyer: 'Comprador',\n project: 'Projeto',\n origin: 'Origem',\n imported: 'Importado',\n national: 'Nacional',\n local: 'Local',\n supplier: 'Fornecedor',\n stock: 'Estoque',\n reorderPoint: 'Ponto de Reposição',\n openOrderBalance: 'Saldo de PO em aberto',\n stockAverage: 'Cobertura de Estoque',\n actualStock: 'Estoque Atual',\n missingAmountCurrentWeek: 'Quantidade de falta nessa semana',\n missingAmountNextWeek: 'Quantidade de falta da próxima semana',\n invoice: 'Fatura',\n etdStart: 'ETD Inicial',\n etaEnd: 'ETA Final',\n etafStart: 'ETAF Inicial',\n etdEnd: 'ETD Final',\n etaStart: 'ETA Inicial',\n etafEnd: 'ETAF Final',\n etd: 'ETD',\n eta: 'ETA',\n etaf: 'ETAF',\n filterByInvoice: 'Filtrar por fatura',\n filterByCategory: 'Filtrar por categoria',\n no: 'Não',\n yes: 'Sim',\n high: 'Risco Alto',\n medium: 'Risco Médio',\n low: 'Risco Baixo',\n norisk: 'Sem Risco',\n resolved: 'Resolvido',\n noresolved: 'Não Resolvido',\n addAcquisitionRisk: 'Nova Aquisição de Risco',\n id: 'Id',\n unitMeasure: 'Unidade de Medida',\n quantity: 'Quantidade',\n filterRiskLevel: 'Filtrar por Nível de Risco',\n riskLevel: 'Nível de Risco',\n addComment: 'Novo Comentário',\n btnResolve: 'Resolvido',\n status: 'Situação',\n newUserTelegram: 'Novo Usuário',\n telegram: 'Telegram',\n filter_status: 'Filtrar por Situação'\n },\n search: {\n category: 'Pesquise por Categoria',\n origin: 'Pesquise por Origem',\n buyer: 'Pesquise por Comprador',\n id: 'Pesquise por Id',\n description: 'Pesquise por Descrição',\n invoice: 'Pesquise por Fatura'\n },\n msg: {\n noDataFound: 'Nenhum dado encontrado',\n toCreateANewOne: 'Click here to create a new one',\n noCommentsFound: 'Nenhum comentário encontrado',\n nolevel: 'Selecione um Nível de Risco',\n savesuccess: 'Aquisição de Risco salva com sucesso',\n saveerror: 'Ocorreu um erro ao salvar uma Aquisição de Risco',\n invoiceAlreadyExist: 'Fatura já cadastrada.',\n saveUserTelegramSuccess: 'Usuário salvo com sucesso',\n deleteUserTelegramSuccess: 'Usuário removido com sucesso',\n UserAlreadyExist: 'User já cadastrado',\n saveUserTelegramError: 'Ocorreu um erro ao salvar um Usuário na lista do Telegram',\n deleteUserTelegramError: 'Ocorreu um erro ao remover um Usuário da lista do Telegram'\n },\n report: {\n name: 'Aquisições de risco'\n }\n }\n }\n });\n }\n })();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('AcquisitionRiskService', AcquisitionRiskService);\n\n var BASE = '/acquisition/risk/';\n\n /** @ngInject */\n function AcquisitionRiskService($state, $window, $injector, $q, $log, ToastUtil, $translate, ConfigurationService,\n AuthService, DefaultService) {\n var Status = [], Category = [], Origin = [], LevelRisk = [];\n\n Status = [\n {Id: 0, Title: 'acquisition.risk.label.no'},\n {Id: 1, Title: 'acquisition.risk.label.yes'}\n ];\n\n Category = [\n {Id: 0, Title: 'acquisition.risk.label.nonAlpha'},\n {Id: 1, Title: 'acquisition.risk.label.mro'},\n {Id: 2, Title: 'acquisition.risk.label.alpha'},\n {Id: 3, Title: 'acquisition.risk.label.equipment'}\n ];\n\n Origin = [\n {Id: 0, Title: 'acquisition.risk.label.imported'},\n {Id: 1, Title: 'acquisition.risk.label.national'},\n {Id: 2, Title: 'acquisition.risk.label.local'}\n ];\n\n LevelRisk = [\n {Id: 3, Title: 'acquisition.risk.label.norisk'},\n {Id: 2, Title: 'acquisition.risk.label.low'},\n {Id: 1, Title: 'acquisition.risk.label.medium'},\n {Id: 0, Title: 'acquisition.risk.label.high'}\n ];\n\n function validateViewPermission(vm) {\n return (vm.profile.CanView);\n }\n\n function validateEditOrConsultPermission(vm) {\n return (vm.profile.CanEdit || vm.profile.CanConsult);\n }\n\n function validateDeletePermission(vm) {\n return (vm.profile.hasLoad && vm.profile.CanDelete);\n }\n\n function validateAddPermission(vm) {\n return (vm.profile.hasLoad && vm.profile.CanAdd);\n }\n\n function validateApprovePermission(vm) {\n return (vm.profile.hasLoad && vm.profile.CanApprove);\n }\n\n function createAcquisitionRisk(vm) {\n if (validateAddPermission(vm)) {\n $state.go('acquisition-risk-create', {});\n } else {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.access.unauthorized\"), ToastUtil.ToastType.WARN);\n }\n }\n\n function createUserTelegram(vm) {\n if (validateAddPermission(vm)) {\n $state.go('risk-telegram-create', {});\n } else {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.access.unauthorized\"), ToastUtil.ToastType.WARN);\n }\n }\n\n return {\n hasApprovePermission: validateApprovePermission,\n\n getStatus: function () {\n return Status;\n },\n\n getCategory: function () {\n return Category;\n },\n\n getOrigin: function () {\n return Origin;\n },\n\n getLevelRisk: function () {\n return LevelRisk;\n },\n\n loadProfileModules: function (vm, $scope) {\n var profileModule = {};\n\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.moduleAcquisition;\n\n return DefaultService.loadModules(profileModule)\n .then(function (response) {\n vm.profile = angular.copy(response);\n vm.profile.hasLoad = true;\n });\n },\n\n edit: function (id, profile) {\n if (validateEditOrConsultPermission(profile)) {\n $state.go('acquisition-risk-edit', {Id: id});\n }\n },\n\n save: function (acquisition) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + BASE, acquisition, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getById: function (Id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + 'byId/' + Id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n list: function (vm, searchParams) {\n if (!validateViewPermission(vm)) {\n return $q.reject('not authorized');\n }\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + \"list\", {\n params: searchParams\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n createAcquisitionRisk: function (vm, $scope) {\n if (vm.profile.hasLoad) {\n createAcquisitionRisk(vm);\n } else {\n this.loadProfileModules(vm, $scope)\n .then(function () {\n createAcquisitionRisk(vm);\n })\n .catch(function (error) {\n $log.log(error);\n })\n }\n },\n\n delete: function (vm, id) {\n if (!validateDeletePermission(vm)) {\n return $q.reject('not authorized');\n }\n\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + BASE + \"/\" + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n exportExcel: function (params, language) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + 'report/' + language,\n {\n params: params,\n responseType: 'arraybuffer'\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n }\n , function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n\n\n createUserTelegram: function (vm, $scope) {\n if (vm.profile.hasLoad) {\n createUserTelegram(vm);\n } else {\n this.loadProfileModules(vm, $scope)\n .then(function () {\n createUserTelegram(vm);\n })\n .catch(function (error) {\n $log.log(error);\n })\n }\n },\n\n listUsersTelegram: function (vm) {\n if (!validateViewPermission(vm)) {\n return $q.reject('not authorized');\n }\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + \"listUserTelegram\", {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n saveUserTelegram: function (user) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + BASE + 'UserTelegram/', user, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n deleteUserTelegram: function (vm, id) {\n if (!validateDeletePermission(vm)) {\n return $q.reject('not authorized');\n }\n\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + BASE + \"UserTelegram/\" + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n };\n }\n})();\n\n(function () {\n 'use strict';\n \n angular\n .module('aqmsFrontend')\n .config(AcquisitionRisk);\n \n /** @ngInject */\n function AcquisitionRisk($stateProvider) {\n \n $stateProvider.state('acquisition-risk', {\n url: '/acquisition/risk',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/acquisition/acquisition-risk/acquisition-risk-list.html',\n controller: 'AcquisitionRiskListController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n type: null,\n menuName: 'label.acquisition'\n },\n authorize: true\n });\n\n $stateProvider.state('acquisition-risk-create', {\n url: '/acquisition/risk/create',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/acquisition/acquisition-risk/acquisition-risk-edit.html',\n controller: 'AcquisitionRiskEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n type: null,\n menuName: 'label.acquisition'\n },\n authorize: true\n });\n\n $stateProvider.state('acquisition-risk-edit', {\n url: '/acquisition/risk/edit/:Id',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/acquisition/acquisition-risk/acquisition-risk-edit.html',\n controller: 'AcquisitionRiskEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n type: null,\n menuName: 'label.acquisition'\n },\n authorize: true\n });\n }\n \n })();\n \n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('AcquisitionRiskListController', AcquisitionRiskListController);\n\n function AcquisitionRiskListController($scope, $translate, $filter, $state, $log, moment, $document, ToastUtil,\n AcquisitionRiskService, AuthService, AcquisitionRisksService) {\n\n var vm = this;\n\n vm.hideDone = true;\n vm.acquisitionRiskList = [];\n vm.High = true;\n vm.Medium = true;\n vm.Low = true;\n vm.NoRisk = true;\n vm.NoResolved = true;\n vm.Resolved = false;\n vm.DescriptionHigh = '';\n vm.DescriptionMedium = '';\n vm.DescriptionLow = '';\n vm.DescriptionNoRisk = '';\n\n vm.statusList = AcquisitionRiskService.getStatus();\n vm.categoryList = AcquisitionRiskService.getCategory();\n vm.originList = AcquisitionRiskService.getOrigin();\n vm.levelRiskList = AcquisitionRiskService.getLevelRisk();\n\n var levelRiskStatus = {\n NORISK: 0,\n LOW: 1,\n MEDIUM: 2,\n HIGH: 3\n };\n\n vm.itensPerPageList = [\n {name: '5', value: 5, before: 0, after: 6},\n {name: '10', value: 10, before: 5, after: 11},\n {name: '20', value: 20, before: 10, after: 21},\n {name: '30', value: 30, before: 20, after: 31},\n {name: '40', value: 40, before: 30, after: 41},\n {name: '50', value: 50, before: 40, after: 51}];\n\n vm.itemPerPage = vm.itensPerPageList[0];\n vm.totalLista = 0;\n\n vm.searchParams = {\n Category: '-1',\n Origin: '-1',\n BuyerId: '',\n Id: '',\n Description: '',\n Invoice: '',\n EtdStart: '',\n EtdEnd: '',\n EtaStart: '',\n EtaEnd: '',\n EtafStart: '',\n EtafEnd: '',\n High: vm.High ? 1 : 0,\n Medium: vm.Medium ? 1 : 0,\n Low: vm.Low ? 1 : 0,\n NoRisk: vm.NoRisk ? 1 : 0,\n Status: vm.NoResolved && vm.Resolved ? '-1' : vm.Resolved ? 1 : vm.NoResolved ? 0 : '-1',\n Page: 1,\n MaxPerPage: vm.itemPerPage.value\n };\n\n function getLevelRisk() {\n var ids = vm.levelRiskList.filter(function (item) {\n return item.Id;\n });\n return ids;\n }\n\n vm.clearFields = function () {\n vm.High = true;\n vm.Medium = true;\n vm.Low = true;\n vm.NoRisk = true;\n vm.NoResolved = true;\n vm.Resolved = false;\n\n vm.searchParams.Category = '-1';\n vm.searchParams.Origin = '-1';\n vm.searchParams.BuyerId = '';\n vm.searchParams.Id = '';\n vm.searchParams.Description = '';\n vm.searchParams.Invoice = '';\n vm.searchParams.EtdStart = '';\n vm.searchParams.EtdEnd = '';\n vm.searchParams.EtaStart = '';\n vm.searchParams.EtaEnd = '';\n vm.searchParams.EtafStart = '';\n vm.searchParams.EtafEnd = '';\n vm.searchParams.High = vm.High ? 1 : 0;\n vm.searchParams.Medium = vm.Medium ? 1 : 0;\n vm.searchParams.Low = vm.Low ? 1 : 0;\n vm.searchParams.NoRisk = vm.NoRisk ? 1 : 0;\n vm.searchParams.Status = vm.NoResolved && vm.Resolved ? '-1' : vm.Resolved ? 1 : vm.NoResolved ? 0 : '-1';\n vm.searchParams.BuyerTemp = '';\n };\n\n vm.shouldShow = function (item) {\n if (vm.totalLista > 0 && item != undefined) {\n return vm.totalLista >= item.value || (vm.totalLista < item.after && vm.totalLista > item.before);\n }\n return false;\n };\n\n vm.changeItemsPerPage = function () {\n if (vm.itemPerPage == null) {\n vm.itemPerPage = vm.itensPerPageList[0];\n }\n search(1, vm.itemPerPage.value);\n };\n\n vm.onPageChange = function () {\n search(vm.searchParams.Page, vm.searchParams.MaxPerPage);\n };\n\n vm.searchAcquisitionRisk = function () {\n vm.itemPerPage = vm.itensPerPageList[0];\n search(1, vm.itemPerPage.value);\n };\n\n function buildSearchParam() {\n var searchParams = {\n Category: vm.searchParams.Category !== '' && vm.searchParams.Category >= 0 ? vm.searchParams.Category : -1,\n Origin: vm.searchParams.Origin ? vm.searchParams.Origin : -1,\n BuyerId: vm.searchParams.BuyerId,\n Id: vm.searchParams.Id,\n Description: vm.searchParams.Description,\n Invoice: vm.searchParams.Invoice,\n EtdStart: null,\n EtdEnd: null,\n EtaStart: null,\n EtaEnd: null,\n EtafStart: null,\n EtafEnd: null,\n High: vm.High ? 1 : 0,\n Medium: vm.Medium ? 1 : 0,\n Low: vm.Low ? 1 : 0,\n NoRisk: vm.NoRisk ? 1 : 0,\n Status: vm.NoResolved && vm.Resolved ? '-1' : vm.Resolved ? 1 : vm.NoResolved ? 0 : '-1',\n Page: vm.searchParams.Page,\n MaxPerPage: vm.itemPerPage.value\n };\n angular.forEach(searchParams, function (value, key) {\n searchParams[key] = copy(vm.searchParams[key]);\n });\n\n searchParams.Category = vm.searchParams.Category != null && vm.searchParams.Category !== '' && vm.searchParams.Category >= 0 ? vm.searchParams.Category : -1;\n searchParams.Origin = vm.searchParams.Origin ? vm.searchParams.Origin : -1;\n searchParams.High = vm.High ? 1 : 0;\n searchParams.Medium = vm.Medium ? 1 : 0;\n searchParams.Low = vm.Low ? 1 : 0;\n searchParams.NoRisk = vm.NoRisk ? 1 : 0;\n searchParams.Status = vm.NoResolved && vm.Resolved ? '-1' : vm.Resolved ? 1 : vm.NoResolved ? 0 : '-1';\n\n searchParams.EtdStart = vm.searchParams.EtdStart ? moment(vm.searchParams.EtdStart).format('DD/MM/YYYY') : null;\n searchParams.EtdEnd = vm.searchParams.EtdEnd ? moment(vm.searchParams.EtdEnd).format('DD/MM/YYYY') : null;\n\n searchParams.EtaStart = vm.searchParams.EtaStart ? moment(vm.searchParams.EtaStart).format('DD/MM/YYYY') : null;\n searchParams.EtaEnd = vm.searchParams.EtaEnd ? moment(vm.searchParams.EtaEnd).format('DD/MM/YYYY') : null;\n\n searchParams.EtafStart = vm.searchParams.EtafStart ? moment(vm.searchParams.EtafStart).format('DD/MM/YYYY') : null;\n searchParams.EtafEnd = vm.searchParams.EtafEnd ? moment(vm.searchParams.EtafEnd).format('DD/MM/YYYY') : null;\n\n searchParams.BuyerId = vm.searchParams.BuyerTemp ? vm.searchParams.BuyerTemp.Id : null;\n return searchParams;\n }\n\n function copy(value) {\n return !value ? null : angular.copy(value);\n }\n\n vm.search = function () {\n if (sessionStorage.getItem(\"searchParams\")) {\n vm.searchParams = JSON.parse(sessionStorage.getItem(\"searchParams\"));\n sessionStorage.removeItem(\"searchParams\");\n vm.itensPerPageList.forEach(function (element) {\n if (element.value == vm.searchParams.MaxPerPage) {\n vm.itemPerPage = element;\n return;\n }\n });\n\n if (vm.searchParams.Status != undefined && vm.searchParams.Status == \"-1\") {\n vm.Resolved = false;\n vm.NoResolved = false;\n }\n vm.NoRisk = vm.searchParams.NoRisk === 1 ? true : false;\n vm.Low = vm.searchParams.Low === 1 ? true : false;\n vm.Medium = vm.searchParams.Medium === 1 ? true : false;\n vm.High = vm.searchParams.High === 1 ? true : false;\n }\n\n var searchParams = buildSearchParam();\n\n AcquisitionRiskService.list(vm, searchParams)\n .then(function (response) {\n vm.acquisitionRiskList = response.resultList;\n fillComments();\n vm.totalLista = response.total;\n })\n .catch(function (error) {\n if (error && error.status) {\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.access.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"error.acquisition.search\"), ToastUtil.ToastType.ERROR);\n }\n } else if (error == \"not authorized\" ) {\n $state.go('not-authorized', {}, {});\n }\n });\n };\n\n vm.resolveLevelRiskCss = function (risk) {\n var result = \"\";\n\n switch (risk) {\n case levelRiskStatus.HIGH:\n result = 'ng-binding label label-pending';\n break;\n case levelRiskStatus.MEDIUM:\n result = 'ng-binding label label-ongoing';\n break;\n case levelRiskStatus.LOW:\n result = 'ng-binding label label-approved';\n break;\n case levelRiskStatus.NoRisk:\n result = 'ng-binding label label-rejected';\n break;\n }\n return result;\n };\n\n vm.resolveCategoryName = function (category) {\n if ( category != undefined && category >= 0) {\n return $translate.instant(vm.categoryList[category].Title);\n }\n return '-';\n };\n\n vm.setDecimalValue = function (value) {\n if ( value != undefined && value >= 0) {\n return parseFloat(value).toFixed(2);\n }\n return '-';\n };\n\n vm.getProjectValue = function (project) {\n if ( project != undefined && project != null && project != '') {\n return project;\n }\n return 'N/A';\n };\n\n vm.getClassLevel = function (levelRisk) {\n if( levelRisk == 0 ) {\n return \"label sqms-label label-default\";\n } else if( levelRisk == 1 ) {\n return \"label sqms-label label-success\";\n } else if( levelRisk == 2 ) {\n return \"label sqms-label label-warning\";\n } else {\n return \"label sqms-label label-danger\";\n }\n };\n\n\n vm.edit = function (item) {\n vm.searchParams = buildSearchParam();\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n AcquisitionRiskService.edit(item.Id, vm);\n };\n\n function search(page, max) {\n vm.searchParams.Page = page;\n vm.searchParams.MaxPerPage = max;\n vm.search();\n }\n\n function fillComments() {\n if ( vm.acquisitionRiskList != null && vm.acquisitionRiskList.length > 0 ) {\n vm.acquisitionRiskList.forEach(function (item) {\n item.Comments.forEach(function (commentItem) {\n commentItem.EtdDateTemp = commentItem.EtdDate ? moment(commentItem.EtdDate).format('DD-MMM-YYYY') : undefined;\n commentItem.EtaDateTemp = commentItem.EtaDate ? moment(commentItem.EtaDate).format('DD-MMM-YYYY'): undefined;\n commentItem.EtafDateTemp = commentItem.EtafDate ? moment(commentItem.EtafDate).format('DD-MMM-YYYY') : undefined;\n });\n });\n }\n }\n function fillDescriptionRisks() {\n if ( vm.levelRiskList != null ){\n vm.DescriptionHigh = vm.levelRiskList.filter(function (item) {\n return item.LevelRisk == 3;\n })[0].Description;\n vm.DescriptionMedium = vm.levelRiskList.filter(function (item) {\n return item.LevelRisk == 2;\n })[0].Description;\n vm.DescriptionLow = vm.levelRiskList.filter(function (item) {\n return item.LevelRisk == 1;\n })[0].Description;\n vm.DescriptionNoRisk = vm.levelRiskList.filter(function (item) {\n return item.LevelRisk == 0;\n })[0].Description;\n }\n }\n\n function loadRisks() {\n AcquisitionRisksService.getRisks().then(function (response) {\n vm.levelRiskList = angular.copy(response);\n fillDescriptionRisks();\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n });\n }\n\n function init() {\n AcquisitionRiskService.loadProfileModules(vm, $scope)\n .then(function () {\n loadRisks();\n vm.search();\n })\n .catch(function (error) {\n var msg = error.data && error.data.Message ? error.data.Message : $filter('translate')('error.acquisition.search');\n ToastUtil.showToastMessage($translate.instant(msg), ToastUtil.ToastType.ERROR);\n });\n }\n init();\n\n vm.goToNewAcquisitionRisk = function () {\n vm.searchParams = buildSearchParam();\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n AcquisitionRiskService.createAcquisitionRisk(vm, $scope);\n };\n\n vm.exportToExcel = function() {\n var searchParams = buildSearchParam();\n\n vm.disableExport = true;\n\n AcquisitionRiskService.exportExcel(searchParams, $translate.use())\n .then(function (response) {\n\n var date = moment().format(\"DD_MM_YYYY_HH_mm_ss\");\n\n var newFIle = new Blob([response], {\n type: 'application/vnd.ms-excel'\n });\n var fileURL = URL.createObjectURL(newFIle);\n var a = $document[0].createElement(\"a\");\n $document[0].body.appendChild(a);\n a.style = \"display: none\";\n a.href = fileURL;\n a.download = $translate.instant('acquisition.risk.report.name') + \" \" + date + \".xls\";\n a.click();\n vm.disableExport = false;\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"service.load.error\"), ToastUtil.ToastType.ERROR);\n vm.disableExport = false;\n });\n }\n\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('AcquisitionRiskEditController', AcquisitionRiskEditController);\n\n function AcquisitionRiskEditController($scope, $state, $log, $translate, AcquisitionRiskService, $window, $stateParams,\n DefaultService, DocumentFlowService, moment, $document, ToastUtil, ListModel,\n AuthService, AcquisitionRisksService) {\n\n var vm = this, USER = {Id: parseInt($window.localStorage.userID), Name: $window.localStorage.aliasAqms};\n\n vm.profile = {\n CanAdd: false,\n CanEdit: false,\n CanDelete: false,\n CanView: false,\n CanApprove: false\n };\n\n vm.Status = 0;\n vm.Risk = -1;\n vm.High = false;\n vm.Medium = false;\n vm.Low = false;\n vm.NoRisk = false;\n vm.DescriptionHigh = '';\n vm.DescriptionMedium = '';\n vm.DescriptionLow = '';\n vm.DescriptionNoRisk = '';\n\n vm.DisableBasicFields = false;\n vm.acquisitionRisk = {\n Id: 0,\n Category: null,\n LevelRisk: null,\n Description: null,\n Material: null,\n Project: null,\n Buyer: null,\n Origin: null,\n RequestId: null,\n ReorderPoint: null,\n PurchaseOrder: null,\n Quantity: null,\n UnitMeasure: null,\n Vendor: null,\n ActualStock: null,\n StockCoverage: null,\n Status: vm.Status,\n Comments: []\n };\n\n vm.statusList = AcquisitionRiskService.getStatus();\n vm.categoryList = AcquisitionRiskService.getCategory();\n vm.originList = AcquisitionRiskService.getOrigin();\n vm.levelRiskList = AcquisitionRiskService.getLevelRisk();\n vm.unitMeasureList = DocumentFlowService.getUnitMeasureList();\n\n vm.Comments = null;\n\n vm.CommentsList = [];\n\n vm.Comment = {\n Id: 0,\n CreatedDate: moment(),\n CreatedBy: USER,\n Comments: null,\n Invoice: null,\n EtdDate: null,\n EtaDate: null,\n EtafDate: null\n };\n\n vm.getUnitMeasure = function (item) {\n var result = vm.unitMeasureList.filter(function (t) {\n return t.Id == item.UnitMeasure;\n })[0];\n return result.Name;\n };\n\n vm.canSaveButton = function() {\n if ( vm.acquisitionRisk && (vm.High || vm.Medium || vm.Low || vm.NoRisk)) {\n return vm.acquisitionRisk.Status == 0;\n }\n return false;\n };\n\n vm.canResolveButton = function() {\n if (vm.acquisitionRisk ) {\n return vm.acquisitionRisk.Status == 0;\n }\n return false;\n };\n\n vm.ChangeLevel = function(level) {\n if ( vm.High && level === 3 ) {\n vm.Medium = false;\n vm.Low = false;\n vm.NoRisk = false;\n } else if ( vm.Medium && level === 2 ) {\n vm.High = false;\n vm.Low = false;\n vm.NoRisk = false;\n } else if ( vm.Low && level === 1 ) {\n vm.Medium = false;\n vm.High = false;\n vm.NoRisk = false;\n } else if ( vm.NoRisk && level === 0 ) {\n vm.Medium = false;\n vm.Low = false;\n vm.High = false;\n } else {\n vm.Medium = false;\n vm.Low = false;\n vm.High = false;\n vm.NoRisk = false;\n }\n };\n\n function fillDescriptionRisks() {\n if ( vm.levelRiskList != null ){\n vm.DescriptionHigh = vm.levelRiskList.filter(function (item) {\n return item.LevelRisk == 3;\n })[0].Description;\n vm.DescriptionMedium = vm.levelRiskList.filter(function (item) {\n return item.LevelRisk == 2;\n })[0].Description;\n vm.DescriptionLow = vm.levelRiskList.filter(function (item) {\n return item.LevelRisk == 1;\n })[0].Description;\n vm.DescriptionNoRisk = vm.levelRiskList.filter(function (item) {\n return item.LevelRisk == 0;\n })[0].Description;\n }\n }\n\n vm.resolveAcquisitionRisk = function() {\n if ( vm.acquisitionRisk.Status == 0 ) {\n vm.Status = 1;\n vm.save();\n }\n };\n\n vm.save = function () {\n var toSave = buildAcquisitionRiskToSave();\n if (!vm.High && !vm.Medium && !vm.Low && !vm.NoRisk) {\n ToastUtil.showToastMessage($translate.instant(\"acquisition.risk.msg.nolevel\"), ToastUtil.ToastType.WARN);\n return;\n }\n AcquisitionRiskService.save(toSave).then(function () {\n ToastUtil.showToastMessage($translate.instant(\"acquisition.risk.msg.savesuccess\"), ToastUtil.ToastType.SUCCESS);\n $state.go('acquisition-risk', {});\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"acquisition.risk.msg.saveerror\"), ToastUtil.ToastType.WARN);\n });\n };\n\n vm.selectedInvoice = function(comment) {\n vm.acquisitionRisk.Comments.forEach(function (item) {\n if(item.Invoice == comment.Invoice) {\n item.Selected = comment.Selected;\n }\n })\n vm.CommentsList = vm.acquisitionRisk.Comments.filter(function (item) {\n return item.Selected == true;\n })\n };\n\n vm.addComment = function () {\n if( vm.Comment && vm.Comment.Comments != null && vm.Comment.Comments.trim() != '') {\n if (angular.isUndefined(vm.acquisitionRisk.Comments) || vm.acquisitionRisk.Comments == null) {\n vm.acquisitionRisk.Comments = [];\n }\n if (vm.Comment.Id && vm.Comment.Id > 0) {\n var toRemove = vm.acquisitionRisk.Comments.filter(function (item) {\n return item.Id == vm.Comment.Id;\n });\n if (toRemove.length > 0) {\n vm.acquisitionRisk.Comments.splice(toRemove);\n }\n }\n var newComment = {\n Id: angular.copy(vm.Comment.Id),\n CreatedDate: moment().format('DD/MM/YYYY'),\n CreatedBy: USER,\n Comments: angular.copy(vm.Comment.Comments),\n Invoice: angular.copy(vm.Comment.Invoice),\n Selected: true,\n EtdDateTemp: vm.Comment.EtdDate ? moment(angular.copy(vm.Comment.EtdDate)).format('DD-MMM-YYYY') : undefined,\n EtaDateTemp: vm.Comment.EtaDate ? moment(angular.copy(vm.Comment.EtaDate)).format('DD-MMM-YYYY') : undefined,\n EtafDateTemp: vm.Comment.EtafDate ? moment(angular.copy(vm.Comment.EtafDate)).format('DD-MMM-YYYY') : undefined,\n EtdDate: vm.Comment.EtdDate ? moment(angular.copy(vm.Comment.EtdDate)).format('DD/MM/YYYY') : undefined,\n EtaDate: vm.Comment.EtaDate ? moment(angular.copy(vm.Comment.EtaDate)).format('DD/MM/YYYY') : undefined,\n EtafDate: vm.Comment.EtafDate ? moment(angular.copy(vm.Comment.EtafDate)).format('DD/MM/YYYY') : undefined,\n NameLetters: $window.localStorage.userInitiais,\n Photo: $window.localStorage.photoAqms && $window.localStorage.photoAqms != \"null\" ? $window.localStorage.photoAqms : undefined\n };\n\n vm.acquisitionRisk.Comments.push(angular.copy(newComment));\n vm.CommentsList = vm.acquisitionRisk.Comments;\n\n vm.Comment = {\n Id: 0,\n CreatedDate: null,\n CreatedBy: USER,\n Comments: '',\n Invoice: '',\n EtdDate: '',\n EtaDate: '',\n EtafDate: ''\n };\n }\n\n };\n\n function buildAcquisitionRiskToSave() {\n var acquisitionToSave = {\n Id: angular.copy(vm.acquisitionRisk.Id),\n Category: vm.acquisitionRisk.Category ? angular.copy(vm.acquisitionRisk.Category) : undefined,\n LevelRisk: vm.High ? 3 : vm.Medium ? 2 : vm.Low ? 1 : vm.NoRisk ? 0 : undefined,\n Description: vm.acquisitionRisk.Description ? angular.copy(vm.acquisitionRisk.Description) : undefined,\n Material: vm.acquisitionRisk.Material ? angular.copy(vm.acquisitionRisk.Material) : undefined,\n Project: vm.acquisitionRisk.Project ? {Id: angular.copy(vm.acquisitionRisk.Project.Id)} : undefined,\n Buyer: vm.acquisitionRisk.Buyer ? {Id: angular.copy(vm.acquisitionRisk.Buyer.Id)} : undefined,\n Origin: vm.acquisitionRisk.Origin ? angular.copy(vm.acquisitionRisk.Origin) : undefined,\n RequestId: vm.acquisitionRisk.RequestId ? angular.copy(vm.acquisitionRisk.RequestId) : undefined,\n ReorderPoint: vm.acquisitionRisk.ReorderPoint ? angular.copy(vm.acquisitionRisk.ReorderPoint) : undefined,\n PurchaseOrder: vm.acquisitionRisk.PurchaseOrder ? angular.copy(vm.acquisitionRisk.PurchaseOrder) : undefined,\n Quantity: vm.acquisitionRisk.Quantity ? angular.copy(vm.acquisitionRisk.Quantity) : undefined,\n UnitMeasure: vm.acquisitionRisk.UnitMeasure ? angular.copy(vm.acquisitionRisk.UnitMeasure.Id) : undefined,\n Vendor: vm.acquisitionRisk.Vendor ? {Id: angular.copy(vm.acquisitionRisk.Vendor.Id)} : undefined,\n ActualStock: vm.acquisitionRisk.ActualStock ? angular.copy(vm.acquisitionRisk.ActualStock) : undefined,\n StockCoverage: vm.acquisitionRisk.StockCoverage ? moment(angular.copy(vm.acquisitionRisk.StockCoverage)).format('DD/MM/YYYY') : undefined,\n Comments: angular.copy(vm.acquisitionRisk.Comments),\n Status: angular.copy(vm.Status)\n };\n\n if ( acquisitionToSave.Comments && acquisitionToSave.Comments.length > 0 ) {\n acquisitionToSave.Comments.forEach(function (item) {\n item.EtdDate = item.EtdDate ? angular.copy(item.EtdDate) : undefined;\n item.EtaDate = item.EtaDate ? angular.copy(item.EtaDate) : undefined;\n item.EtafDate = item.EtafDate ? angular.copy(item.EtafDate) : undefined;\n item.EtdDateTemp = item.EtdDateTemp ? angular.copy(item.EtdDateTemp) : undefined;\n item.EtaDateTemp = item.EtaDateTemp ? angular.copy(item.EtaDateTemp) : undefined;\n item.EtafDateTemp = item.EtafDateTemp ? angular.copy(item.EtafDateTemp) : undefined;\n });\n }\n\n return acquisitionToSave;\n }\n\n function fillAcquisitionRisk(acquisitionRiskTemp) {\n if ( acquisitionRiskTemp ) {\n vm.Comment = {\n Comments: undefined,\n Invoice: undefined,\n EtdDate: undefined,\n EtaDate: undefined,\n EtafDate: undefined\n };\n var TemplateRisk = {\n Id: angular.copy(acquisitionRiskTemp.Id),\n Category: angular.copy(acquisitionRiskTemp.Category),\n LevelRisk: angular.copy(acquisitionRiskTemp.LevelRisk),\n Description: angular.copy(acquisitionRiskTemp.Description),\n Material: angular.copy(acquisitionRiskTemp.Material),\n Project: angular.copy(acquisitionRiskTemp.Project),\n Buyer: angular.copy(acquisitionRiskTemp.Buyer),\n Origin: angular.copy(acquisitionRiskTemp.Origin),\n RequestId: angular.copy(acquisitionRiskTemp.RequestId),\n ReorderPoint: angular.copy(acquisitionRiskTemp.ReorderPoint),\n PurchaseOrder: angular.copy(acquisitionRiskTemp.PurchaseOrder),\n Quantity: angular.copy(acquisitionRiskTemp.Quantity),\n UnitMeasure: getUnitMeasure(angular.copy(acquisitionRiskTemp.UnitMeasure)),\n Vendor: angular.copy(acquisitionRiskTemp.Vendor),\n ActualStock: angular.copy(acquisitionRiskTemp.ActualStock),\n StockCoverage: angular.copy(acquisitionRiskTemp.StockCoverage),\n Status: angular.copy(acquisitionRiskTemp.Status),\n Comments: angular.copy(acquisitionRiskTemp.Comments)\n };\n\n if ( TemplateRisk.StockCoverage ) {\n TemplateRisk.StockCoverage = moment(acquisitionRiskTemp.StockCoverage, 'DD/MM/YYYY')._d;\n }\n\n vm.acquisitionRisk = TemplateRisk;\n if ( vm.acquisitionRisk.Comments != null && vm.acquisitionRisk.Comments.length > 0 ) {\n vm.acquisitionRisk.Comments.forEach(function (item) {\n item.EtdDateTemp = item.EtdDate ? moment(item.EtdDate, 'DD/MM/YYYY').format('DD-MMM-YYYY') : undefined;\n item.EtaDateTemp = item.EtaDate ? moment(item.EtaDate, 'DD/MM/YYYY').format('DD-MMM-YYYY'): undefined;\n item.EtafDateTemp = item.EtafDate ? moment(item.EtafDate, 'DD/MM/YYYY').format('DD-MMM-YYYY') : undefined;\n item.Invoice = item.Invoice ? item.Invoice : undefined;\n item.Selected = true\n });\n }\n\n vm.CommentsList = vm.acquisitionRisk.Comments;\n\n vm.Status = vm.acquisitionRisk.Status ? vm.acquisitionRisk.Status : 0;\n vm.High = vm.acquisitionRisk.LevelRisk != null ? vm.acquisitionRisk.LevelRisk === 3 : false;\n vm.Medium = vm.acquisitionRisk.LevelRisk != null ? vm.acquisitionRisk.LevelRisk === 2 : false;\n vm.Low = vm.acquisitionRisk.LevelRisk != null ? vm.acquisitionRisk.LevelRisk === 1 : false;\n vm.NoRisk = vm.acquisitionRisk.LevelRisk != null ? vm.acquisitionRisk.LevelRisk === 0 : false;\n\n }\n }\n\n function getUnitMeasure(unitMeasure) {\n if (unitMeasure) {\n var unit = vm.unitMeasureList.filter(function (item) {\n return item.Id == unitMeasure;\n })[0];\n return unit;\n }\n return null;\n }\n\n function getBuyer(buyer) {\n if (buyer) {\n var b = vm.unitMeasureList.filter(function (item) {\n return item.Id == buyer;\n })[0];\n return b;\n }\n return null;\n }\n\n function loadAcquisitionRiskToEdit() {\n AcquisitionRiskService.getById(vm.idToEdit).then(function (response) {\n vm.acquisitionRisk = angular.copy(response);\n vm.DisableBasicFields = vm.acquisitionRisk.Status == 1;\n var copyAcquisitionRisk = angular.copy(response);\n fillAcquisitionRisk(copyAcquisitionRisk);\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"document.flow.msg.load.error\"), ToastUtil.ToastType.ERROR);\n });\n }\n\n function loadProfileModules() {\n var profileModule = {};\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.moduleAcquisition;\n DefaultService.loadModules(profileModule).then(function (response) {\n vm.profile = angular.copy(response);\n vm.idToEdit = $stateParams.Id;\n if (vm.idToEdit) {\n if (!vm.profile.CanEdit) {\n $state.go('not-authorized', {});\n } else {\n loadAcquisitionRiskToEdit();\n }\n }\n\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n });\n }\n\n function loadRisks() {\n AcquisitionRisksService.getRisks().then(function (response) {\n vm.levelRiskList = angular.copy(response);\n fillDescriptionRisks();\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n });\n }\n\n function init() {\n loadRisks();\n loadProfileModules();\n }\n\n init();\n\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .directive('tag', tag);\n\n /** @ngInject */\n function tag(ToastUtil,$translate) {\n\n var taskDirective = {};\n taskDirective.restrict = 'EA';\n taskDirective.scope = {\n data: \"=\",\n description: \"=\",\n disabled: \"=\"\n };\n taskDirective.scope.callback = '&';\n taskDirective.templateUrl = 'app/Util/directives/tag.html';\n taskDirective.controller = function ($scope) {\n var vm = $scope;\n\n vm.add = function () {\n\n if (vm.content) {\n vm.data.push(\n {\n Id: undefined,\n Number: vm.content,\n }\n );\n vm.content = '';\n } else {\n ToastUtil.showToastMessage($translate.instant('document.flow.solicitationPo.error'), ToastUtil.ToastType.WARN);\n }\n\n console.log(\"------ Add ---------\")\n console.log(vm.data)\n }\n\n vm.delete = function (index) {\n var removeIndex = vm.data.map(function (item) { return item.Number; }).indexOf(vm.data[index].Number);\n vm.data.splice(removeIndex, 1);\n console.log(\"------ Delete ---------\")\n console.log(vm.data)\n }\n\n function contains(list, data) {\n return (list.map(function (item) { return item.Number; }).indexOf(data)) ? false : true;\n }\n };\n\n return taskDirective;\n }\n\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('VendorOriginService', VendorOriginService);\n\n /** @ngInject */\n function VendorOriginService($window, $injector, $q, ConfigurationService) {\n var BASE = \"/vendor/origin\";\n return {\n\n list: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + \"/list\", {\n params: filter,\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n save: function (origin) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + BASE + \"/\", origin, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n\n getById: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + '/byId/' + id, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n delete: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + BASE + \"/\" + id, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n\n };\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('TasktypeService', TasktypeService);\n\n /** @ngInject */\n function TasktypeService($window, $injector, $q, ConfigurationService) {\n return {\n listTypes: function (filter) {\n\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/tasktype/list', {\n params: filter,\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n //Basic insertions\n saveType: function (model) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n var domain = \"/tasktype\";\n\n $http.post(ConfigurationService.getServiceHost() + domain, model, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getTypeById: function (Id) {\n var domain = \"/tasktype\";\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n $http.get(ConfigurationService.getServiceHost() + domain + '/byId/' + Id, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n deleteType: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n var domain = \"/tasktype\";\n\n $http.delete(ConfigurationService.getServiceHost() + domain + '/' + id, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n };\n }\n})();\n\n(function() {\n\t'use strict';\n\tangular\n\t.module('aqmsFrontend')\n\t.factory('EffectTypeService', EffectTypeService);\n\n var EFFECT_TYPE_BASE = '/effect-type/';\n\t/** @ngInject */\n\tfunction EffectTypeService($window, $injector, $q, ConfigurationService) {\n\t\treturn {\n\t\t\tlist: function(filter) {\n\t\t\t\tvar $http = $injector.get(\"$http\");\n\t\t\t\tvar deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + EFFECT_TYPE_BASE + \"list\", {\n params: filter,\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n\t\t\t\t.then(\n\t\t\t\t\tfunction(response) {\n\t\t\t\t\t\tdeferred.resolve(response.data);\n\t\t\t\t\t\treturn deferred.promise;\n\t\t\t\t\t}\n\t\t\t\t\t,function(error) {\n\t\t\t\t\t\tdeferred.reject(error);\n\t\t\t\t\t\treturn deferred.promise;\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\treturn deferred.promise;\n\t\t\t},\n\n\n saveEffectType: function (effect) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + EFFECT_TYPE_BASE, effect, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n\n getById: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + EFFECT_TYPE_BASE + 'byId/' + id, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n delete: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + EFFECT_TYPE_BASE + \"/\" + id, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n\n\n\n\n\t\t};\n\t}\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(TaskControlTranslate);\n\n /** @ngInject */\n function TaskControlTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'title.taskControl': 'Task Control',\n 'title.newTask': 'New Task',\n 'title.edit': 'Task Editing',\n 'label.titleId': 'Title or Id',\n 'label.taskTitle': 'Title',\n 'label.taskSetDates': 'Set Dates',\n 'label.taskStart': 'Due Date Initial',\n 'label.taskWeek': 'Week',\n 'label.taskDueDate': 'Due Date Final',\n 'label.taskDRI': 'DRI',\n 'label.taskProject': 'Project',\n 'label.taskClient': 'Client',\n 'label.taskStatus': 'Status',\n 'label.Priority': 'Priority',\n 'label.veryHigh': 'Very High',\n 'label.high': 'High',\n 'label.medium': 'Medium',\n 'label.low': 'Low',\n 'label.model': 'Model',\n 'label.session': 'Section/area',\n 'label.station': 'Station/sub-area',\n 'label.type': 'Type',\n 'label.issue': 'Issues/subject',\n 'label.action': 'Action/result',\n 'task.label.remark': 'Close Task - Remark',\n 'label.information': 'Feedback',\n 'label.identification.task': 'Task Identification',\n 'label.action.result.task': 'Action And Result',\n 'label.cancel.task': 'Cancel task',\n 'label.reject.task': 'Reject task',\n 'label.accept.task': 'Accept and finalize task',\n 'label.button.back': 'Back',\n 'label.button.save': 'Save',\n 'placeholder.title': 'Write the task title...',\n 'placeholder.dri': 'Write the DRI name...',\n 'placeholder.search-name': 'Search tasks by name',\n 'placeholder.search-id': 'Search tasks by id',\n 'placeholder.search-date': 'Any due date',\n 'placeholder.search-DRI': 'Anybody',\n 'placeholder.search-status': 'All status',\n 'placeholder.issue.subject': 'Solder paste expired.',\n 'placeholder.nameId': 'Search tasks by title or id',\n 'placeholder.search-project': 'Search by project',\n 'select.default.section': 'Select a section...',\n 'select.default.station': 'Select a station...',\n 'select.default.tasktype': 'Select a type of task...',\n 'validation.title.required': 'The title is required.',\n 'validation.startdate.required': 'Start date does not can be bigger than due date.',\n 'validation.duedate.required': 'Due date does not can be smaller than start date.',\n 'validation.dri.required': 'The field must have a valid D.R.I. ',\n 'validation.priority.required': 'One level of priority needs to be selected.',\n 'validation.model.required': 'At least one model needs to be selected.',\n 'validation.station.required': 'You need to select one stattion.',\n 'validation.type.required': 'You need to select one type.',\n 'validation.session.more.than.zero': 'You need at least one session as pre condition.',\n 'task.save.sucess': 'Task saved with success.',\n 'task.save.fail': 'An error occurred when trying to save a new task, please contact your administrator.',\n 'validation.issueSubject.required': 'Issue is required.',\n 'task.file.deleted.success': 'File deleted with success.',\n 'toDO': 'Pending Approval',\n 'onGoing': 'On Going',\n 'closed': 'Closed',\n 'canceled': 'Canceled',\n 'VeryHigh': 'Very High',\n 'High': 'High',\n 'Medium': 'Medium',\n 'addTask': 'New Task',\n 'active': 'Active',\n 'archived': 'Archived',\n 'Low': 'Low',\n 'notFoundTask': 'Tasks not found.',\n 'notFoundTaskDelay': 'No delay tasks found.',\n 'task.edit.load.fail': 'An error occurred when trying to load a task.',\n 'task.edit.load.unauthorized': 'Unauthorized user.',\n 'task.list.loading.erro': 'Could not load task list, try again or contact an administrator.',\n 'cancelarTask': 'Cancel Task',\n 'rejeitarTask': 'Reject Task',\n 'aceitarFechar': 'Accept And Close Task',\n 'aceitar': 'Accept Task',\n 'items.per.page.title': 'Items per page:',\n 'filter.text.title': 'Search:',\n 'filter.text.place.holder': 'Filter text',\n 'placeholder.search.name-id': 'Search by title or id',\n 'titleReject': 'Task Rejected',\n 'task.report.noData': 'No Task To Export.',\n 'task.report.filename': 'Report_of_Tasks_',\n 'task.report.erro': 'Could not export task report, try again or contact an administrator.',\n 'task.title.late': 'Delay',\n 'task.dialog.confirmation.general.report.title': 'Confirm Notification',\n 'task.dialog.confirmation.general.report.subtitle': 'Attention will be sent an email with the Task General Report to all users of the selected business. Do you really want to send?',\n 'msg.success.send.email.task.general': 'Task General Report sent successfully.'\n\t});\n\n $translateProvider.translations('pt', {\n 'title.taskControl': 'Controle de Tarefas',\n 'title.newTask': 'Nova Tarefa',\n 'title.edit': 'Edição de Tarefas',\n 'label.titleId': 'Título ou Id',\n 'label.taskTitle': 'Título',\n 'label.taskSetDates': 'Definir Datas',\n 'label.taskStart': 'Prazo Inicial',\n 'label.taskWeek': 'Semana',\n 'label.taskDueDate': 'Prazo Final',\n 'label.taskDRI': 'DRI',\n 'label.taskProject': 'Projeto',\n 'label.taskClient': 'Cliente',\n 'label.taskStatus': 'Status',\n 'label.Priority': 'Prioridade',\n 'label.veryHigh': 'Muito Alta',\n 'label.high': 'Alta',\n 'label.medium': 'Média',\n 'label.low': 'Baixa',\n 'label.model': 'Modelo',\n 'label.session': 'Seção/área',\n 'label.station': 'Estação/subárea',\n 'label.type': 'Tipo',\n 'label.issue': 'Questão/assunto',\n 'label.action': 'Ação/resultado',\n 'task.label.remark': 'Fechar Tarefa - Observação',\n 'label.information': 'Feedback',\n 'label.identification.task': 'Identificação da Tarefa',\n 'label.action.result.task': 'Ações e Resoluções',\n 'label.cancel.task': 'Cancelar tarefa',\n 'label.reject.task': 'Rejeitar tarefa',\n 'label.accept.task': 'Aceitar e finalizar tarefa',\n 'label.button.back': 'Voltar',\n 'label.button.save': 'Salvar',\n 'placeholder.title': 'Digite o título da tarefa...',\n 'placeholder.dri': 'Digite o nome do DRI...',\n 'placeholder.search-name': 'Buscar tarefas pelo nome',\n 'placeholder.search-id': 'Buscar tarefas pelo id',\n 'placeholder.search-date': 'Qualquer prazo',\n 'placeholder.search-DRI': 'Qualquer pessoa',\n 'placeholder.search-status': 'Todos os status',\n 'placeholder.issue.subject': 'Pasta de solda vencida.',\n 'placeholder.nameId': 'Buscar tasks por nome ou id',\n 'placeholder.search-project': 'Buscar por projeto',\n 'select.default.section': 'Selecione uma seção...',\n 'select.default.station': 'Selecione uma estação...',\n 'select.default.tasktype': 'Selecione o tipo da tarefa...',\n 'validation.title.required': 'Título é obrigatório.',\n 'validation.startdate.required': 'Data inicial não pode ser maior que a data prazo.',\n 'validation.duedate.required': 'Prazo não pode ser menor que a data inicial.',\n 'validation.dri.required': 'O campo precisa ter um D.R.I válido.',\n 'validation.priority.required': 'Um nível de prioridade precisa ser escolhido.',\n 'validation.model.required': 'Pelo menos um modelo precisa ser selecionado.',\n 'validation.station.required': 'Você precisa selecionar uma estação.',\n 'validation.type.required': 'Você precisa selecionar um tipo.',\n 'validation.session.more.than.zero': 'Você precisa de pelo menos uma sessão como pré-condição.',\n 'task.save.sucess': 'Tarefa salva com sucesso.',\n 'task.save.fail': 'Ocorreu um erro ao cadastrar nova tarefa, entre em contato com o administrador.',\n 'validation.issueSubject.required': 'O assunto é obrigatório.',\n 'task.file.deleted.success': 'Arquivo removido com sucesso.',\n 'toDO': 'Pendente de Aprovação',\n 'onGoing': 'Em Andamento',\n 'closed': 'Fechado',\n 'canceled': 'Cancelado',\n 'VeryHigh': 'Muito Alta',\n 'High': 'Alta',\n 'Medium': 'Média',\n 'addTask': 'Nova Tarefa',\n 'active': 'Ativo',\n 'archived': 'Arquivado',\n 'Low': 'Baixa',\n 'task.edit.load.fail': 'Ocorreu um erro ao carregar a tarefa.',\n 'task.edit.load.unauthorized': 'Seu usuário não possui permissão para editar esta tarefa.',\n 'notFoundTask': 'Nenhuma tarefa encontrada.',\n 'notFoundTaskDelay': 'Nenhuma tarefa atrasada encontrada.',\n 'task.list.loading.erro': 'Não foi possível carregar a lista de tarefas, tente novamente ou contate um administrador.',\n 'cancelarTask': 'Cancelar Tarefa',\n 'rejeitarTask': 'Rejeitar Tarefa',\n 'aceitarFechar': 'Aceitar e Finalizar Tarefa',\n 'aceitar': 'Aceitar Tarefa',\n 'items.per.page.title': 'Itens por página:',\n 'filter.text.title': 'Pesquisa:',\n 'filter.text.place.holder': 'Filtro',\n 'placeholder.search.name-id': 'Buscar pelo nome ou id',\n 'titleReject': 'Tarefa Rejeitada',\n 'task.report.noData': 'Não há tarefas a serem exportadas.',\n 'task.report.filename': 'Relatório_de_Tarefas_',\n 'task.report.erro': 'Não foi possível exportar o relatório da tarefa, tente novamente ou entre em contato com um administrador.',\n 'task.title.late': 'Atrasada',\n 'task.dialog.confirmation.general.report.title': 'Confirmar Notificação',\n 'task.dialog.confirmation.general.report.subtitle': 'Será enviado um email com o Relatório Geral de Tarefa para todos usuários do negócio selecionado. Deseja realmente enviar?',\n 'msg.success.send.email.task.general': 'Relatório Geral de Tarefas enviado com sucesso.'\n });\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(taskRouterConfig);\n\n /** @ngInject */\n function taskRouterConfig($stateProvider) {\n\n $stateProvider.state('newTask', {\n url: '/task/new',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/task/newtask.html',\n controller: 'TaskController',\n controllerAs: 'task'\n }\n },\n params: {\n menuName: 'label.task.control'\n },\n authorize: true\n });\n\n $stateProvider.state('editTask', {\n url: '/task/edit/:Id',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/task/newtask.html',\n controller: 'TaskController',\n controllerAs: 'task'\n }\n },\n params: {\n menuName: 'label.task.control'\n },\n authorize: true\n });\n\n $stateProvider.state('taskControl', {\n url: '/task/kanban',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/task/tasklist.html',\n controller: 'TaskListController',\n controllerAs: 'controller'\n }\n },\n params: {\n menuName: 'label.task.control'\n },\n authorize: true\n });\n\n $stateProvider.state('taskArchived', {\n url: '/task/archived',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/task/taskarchived.html',\n controller: 'TaskArchivedController',\n controllerAs: 'controller'\n }\n },\n params: {\n menuName: 'label.task.control'\n },\n authorize: true\n });\n\n }\n})();\n\n/**\n * Created by roberto.sousa on 09/11/2016.\n */\n/*eslint no-unused-vars: 0*/\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('TaskListController', TaskListController);\n\n\n function TaskListController($scope, $log, TaskService, moment, toastr, $translate, $state, AuthService, ToastUtil, DefaultService, $document, DialogController) {\n\n var vm = this;\n vm.taskToDo = [];\n vm.taskOnGoing = [];\n vm.taskClosed = [];\n vm.toDoFilteredList = [];\n vm.onGoingFilteredList = [];\n vm.closedFilteredList = [];\n vm.arquivedList = [];\n vm.arquivedFilteredList = [];\n vm.todoCurrentPage = 1;\n vm.defaultTodoPageSize = 5;\n vm.onGoingCurrentPage = 1;\n vm.defaultOnGoingPageSize = 5;\n vm.closedCurrentPage = 1;\n vm.defaultClosedPageSize = 5;\n vm.disableExport = true;\n vm.taskToDoTotalLista = 0;\n vm.taskOnGoingTotalLista = 0;\n vm.taskClosedTotalLista = 0;\n \n vm.itensPerPageList = [\n {name: '5', value: 5, before: 0, after: 6}, \n {name: '10', value: 10, before: 5, after: 11}, \n {name: '20', value: 20, before: 10, after: 21}, \n {name: '30', value: 30, before: 20, after: 31}, \n {name: '40', value: 40, before: 30, after: 41}, \n {name: '50', value: 50, before: 40, after: 51}]\n\n vm.itemPerPageToDo = vm.itensPerPageList[0];\n vm.itemPerPageOnGoing = vm.itensPerPageList[0];\n vm.itemPerPageClosed = vm.itensPerPageList[0];\n\n vm.ToDoSearchParam = {\n Page: 1,\n MaxPerPage: vm.itemPerPageToDo.value\n };\n\n vm.OnGoingSearchParam = {\n Page: 1,\n MaxPerPage: vm.itemPerPageOnGoing.value\n };\n\n vm.ClosedSearchParam = {\n Page: 1,\n MaxPerPage: vm.itemPerPageClosed.value\n };\n\n vm.filter = {\n StartDate: '',\n FinalDate: '',\n DRITemp: '',\n DRIId: '',\n IdOrName: ''\n };\n\n vm.clearSearchFields = function() {\n vm.filter.StartDate = '';\n vm.filter.FinalDate = '';\n vm.filter.DRITemp = '';\n vm.filter.DRIId = '';\n vm.filter.IdOrName = '';\n vm.filter.Project = null;\n vm.filter.Client = null;\n }\n\n vm.init = function () {\n loadProfileModules();\n vm.listAllPendingTasks();\n vm.listAllOnGoingTasks();\n vm.listAllClosedTasks();\n getArchivedTasksTotal();\n };\n\n vm.shouldShowToDo = function (item) {\n if(vm.taskToDoTotalLista > 0 && item != undefined) {\n return vm.taskToDoTotalLista >= item.value || (vm.taskToDoTotalLista < item.after && vm.taskToDoTotalLista > item.before);\n }\n return false;\n }\n \n vm.changeItemsPerPageToDo = function() {\n if ( vm.itemPerPageToDo == null ) {\n vm.itemPerPageToDo = vm.itensPerPageList[0];\n }\n vm.ToDoSearchParam.Page = 1;\n vm.ToDoSearchParam.MaxPerPage = vm.itemPerPageToDo.value;\n vm.listAllPendingTasks()\n }\n\n vm.shouldShowOnGoing = function (item) {\n if(vm.taskOnGoingTotalLista > 0 && item != undefined) {\n return vm.taskOnGoingTotalLista >= item.value || (vm.taskOnGoingTotalLista < item.after && vm.taskOnGoingTotalLista > item.before);\n }\n return false;\n }\n \n vm.changeItemsPerPageOnGoing = function() {\n if ( vm.itemPerPageOnGoing == null ) {\n vm.itemPerPageOnGoing = vm.itensPerPageList[0];\n }\n vm.OnGoingSearchParam.Page = 1;\n vm.OnGoingSearchParam.MaxPerPage = vm.itemPerPageOnGoing.value;\n vm.listAllOnGoingTasks()\n }\n\n vm.shouldShowClosed = function (item) {\n if(vm.taskClosedTotalLista > 0 && item != undefined) {\n return vm.taskClosedTotalLista >= item.value || (vm.taskClosedTotalLista < item.after && vm.taskClosedTotalLista > item.before);\n }\n return false;\n }\n \n vm.changeItemsPerPageClosed = function() {\n if ( vm.itemPerPageClosed == null ) {\n vm.itemPerPageClosed = vm.itensPerPageList[0];\n }\n vm.ClosedSearchParam.Page = 1;\n vm.ClosedSearchParam.MaxPerPage = vm.itemPerPageClosed.value;\n vm.listAllClosedTasks()\n }\n\n vm.listAllPendingTasks = function () {\n var searchParams = {\n IdOrName: '',\n StartDate: '',\n FinalDate: '',\n DRIId: '',\n ProjectId: 0,\n ClientId: 0,\n BusinessId: AuthService.getBusinessId(),\n UserLoggedId: AuthService.getUserID(),\n Page: vm.ToDoSearchParam.Page,\n MaxPerPage: vm.ToDoSearchParam.MaxPerPage,\n KanbanStatus: 0\n };\n\n searchParams.IdOrName = !vm.filter.IdOrName ? null : angular.copy(vm.filter.IdOrName);\n searchParams.ProjectId = !vm.filter.Project ? 0 : angular.copy(vm.filter.Project.Id);\n searchParams.ClientId = !vm.filter.Client ? 0 : angular.copy(vm.filter.Client.Id);\n searchParams.StartDate = vm.filter.StartDate == '' || vm.filter.StartDate == null ? '' : moment(vm.filter.StartDate).format('DD/MM/YYYY');\n searchParams.FinalDate = vm.filter.FinalDate == '' || vm.filter.FinalDate == null ? '' : moment(vm.filter.FinalDate).format('DD/MM/YYYY');\n searchParams.DRIId = vm.filter.DRITemp != '' ? vm.filter.DRITemp.Id : -1;\n\n TaskService.listAll(searchParams)\n .then(function (response) {\n vm.taskToDo = response.resultList;\n vm.taskToDoTotalLista = response.total;\n vm.toDoFilteredList = vm.taskToDo;\n })\n .catch(function (error) {\n if (error.status === $scope.HttpStatusCodeConflict) {\n $state.go('taskControl');\n ToastUtil.showToastMessage($translate.instant(\"msg.error.model.already.updated\"), ToastUtil.ToastType.WARN);\n } else if (error.data && error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n } else if (error.status != $scope.HttpStatusUnauthorized) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"task.list.loading.erro\"), ToastUtil.ToastType.ERROR);\n }\n });\n };\n\n vm.listAllOnGoingTasks = function () {\n var searchParams = {\n IdOrName: '',\n StartDate: '',\n FinalDate: '',\n DRIId: '',\n ProjectId: 0,\n ClientId: 0,\n BusinessId: AuthService.getBusinessId(),\n UserLoggedId: AuthService.getUserID(),\n Page: vm.OnGoingSearchParam.Page,\n MaxPerPage: vm.OnGoingSearchParam.MaxPerPage,\n KanbanStatus: 1\n };\n\n searchParams.IdOrName = !vm.filter.IdOrName ? null : angular.copy(vm.filter.IdOrName);\n searchParams.ProjectId = !vm.filter.Project ? 0 : angular.copy(vm.filter.Project.Id);\n searchParams.ClientId = !vm.filter.Client ? 0 : angular.copy(vm.filter.Client.Id);\n searchParams.StartDate = vm.filter.StartDate == '' || vm.filter.StartDate == null ? '' : moment(vm.filter.StartDate).format('DD/MM/YYYY');\n searchParams.FinalDate = vm.filter.FinalDate == '' || vm.filter.FinalDate == null ? '' : moment(vm.filter.FinalDate).format('DD/MM/YYYY');\n searchParams.DRIId = vm.filter.DRITemp != '' ? vm.filter.DRITemp.Id : -1;\n\n TaskService.listAll(searchParams)\n .then(function (response) {\n vm.taskOnGoing = response.resultList;\n vm.taskOnGoingTotalLista = response.total;\n vm.onGoingFilteredList = vm.taskOnGoing;\n })\n .catch(function (error) {\n if (error.status === $scope.HttpStatusCodeConflict) {\n $state.go('taskControl');\n ToastUtil.showToastMessage($translate.instant(\"msg.error.model.already.updated\"), ToastUtil.ToastType.WARN);\n } else if (error.data && error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n } else if (error.status != $scope.HttpStatusUnauthorized) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"task.list.loading.erro\"), ToastUtil.ToastType.ERROR);\n }\n });\n };\n\n vm.listAllClosedTasks = function () {\n var searchParams = {\n IdOrName: '',\n StartDate: '',\n FinalDate: '',\n DRIId: '',\n ProjectId: 0,\n ClientId: 0,\n BusinessId: AuthService.getBusinessId(),\n UserLoggedId: AuthService.getUserID(),\n Page: vm.ClosedSearchParam.Page,\n MaxPerPage: vm.ClosedSearchParam.MaxPerPage,\n KanbanStatus: 2\n };\n\n searchParams.IdOrName = !vm.filter.IdOrName ? null : angular.copy(vm.filter.IdOrName);\n searchParams.ProjectId = !vm.filter.Project ? 0 : angular.copy(vm.filter.Project.Id);\n searchParams.ClientId = !vm.filter.Client ? 0 : angular.copy(vm.filter.Client.Id);\n searchParams.StartDate = vm.filter.StartDate == '' || vm.filter.StartDate == null ? '' : moment(vm.filter.StartDate).format('DD/MM/YYYY');\n searchParams.FinalDate = vm.filter.FinalDate == '' || vm.filter.FinalDate == null ? '' : moment(vm.filter.FinalDate).format('DD/MM/YYYY');\n searchParams.DRIId = vm.filter.DRITemp != '' ? vm.filter.DRITemp.Id : -1;\n\n TaskService.listAll(searchParams)\n .then(function (response) {\n vm.taskClosed = response.resultList;\n vm.taskClosedTotalLista = response.total;\n vm.closedFilteredList = vm.taskClosed;\n })\n .catch(function (error) {\n if (error.status === $scope.HttpStatusCodeConflict) {\n $state.go('taskControl');\n ToastUtil.showToastMessage($translate.instant(\"msg.error.model.already.updated\"), ToastUtil.ToastType.WARN);\n } else if (error.data && error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n } else if (error.status != $scope.HttpStatusUnauthorized) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"task.list.loading.erro\"), ToastUtil.ToastType.ERROR);\n }\n });\n };\n\n vm.searchTasks = function() {\n vm.itemPerPageToDo = vm.itensPerPageList[0];\n vm.itemPerPageOnGoing = vm.itensPerPageList[0];\n vm.itemPerPageClosed = vm.itensPerPageList[0];\n vm.ToDoSearchParam = {\n Page: 1,\n MaxPerPage: vm.itemPerPageToDo.value\n };\n \n vm.OnGoingSearchParam = {\n Page: 1,\n MaxPerPage: vm.itemPerPageOnGoing.value\n };\n \n vm.ClosedSearchParam = {\n Page: 1,\n MaxPerPage: vm.itemPerPageClosed.value\n };\n vm.search();\n }\n\n vm.search = function () {\n vm.listAllPendingTasks();\n vm.listAllOnGoingTasks();\n vm.listAllClosedTasks();\n };\n\n function getArchivedTasksTotal() {\n var searchParams = {\n BusinessId: AuthService.getBusinessId()\n };\n\n TaskService.getArchivedTasksTotal(searchParams)\n .then(function (response) {\n vm.taskArchivedTotal = response;\n vm.disableExport = false;\n })\n .catch(function (error) {\n if (error.status === $scope.HttpStatusCodeConflict) {\n $state.go('taskControl');\n ToastUtil.showToastMessage($translate.instant(\"msg.error.model.already.updated\"), ToastUtil.ToastType.WARN);\n } else if (error.data && error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n } else if (error.status != $scope.HttpStatusUnauthorized) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"task.list.loading.erro\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n vm.exportAll = function () {\n if (validateExportPermission()) {\n if (!vm.disableExport) {\n vm.disableExport = true;\n\n var searchParams = {\n BusinessId: AuthService.getBusinessId()\n };\n\n TaskService.download(searchParams, $translate.use())\n .then(function (response) {\n var date = moment().format(\"DD_MM_YYYY_HH_mm_ss\");\n var newFIle = new Blob([response], {\n type: 'application/vnd.ms-excel'\n });\n var fileURL = URL.createObjectURL(newFIle);\n var a = $document[0].createElement(\"a\");\n $document[0].body.appendChild(a);\n a.style = \"display: none\";\n a.href = fileURL;\n a.download = $translate.instant('task.report.filename') + $translate.instant(\"label.business\") +\"_[\" + AuthService.getBusinessName() + \"]_\" + date + \".xls\";\n a.click();\n vm.disableExport = false;\n }).catch(function (error) {\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if (error.status === $scope.HttpStatusCodeConflict) {\n $state.go('taskControl');\n ToastUtil.showToastMessage($translate.instant(\"msg.error.model.already.updated\"), ToastUtil.ToastType.WARN);\n } else if (error.data && error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n } else {\n $log.log(error);\n toastr.clear();\n toastr['error']($translate.instant('task.report.erro') + \"\", {\n closeButton: true,\n preventDuplicates: false\n });\n }\n });\n }\n }\n };\n\n vm.edit = function (task) {\n if (validateEditPermission()) {\n $state.transitionTo('editTask', {\n Id: task.Id\n }, true);\n }\n };\n\n function loadProfileModules() {\n var profileModule = {};\n\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.moduleTaskControl;\n\n DefaultService.loadModules(profileModule)\n .then(\n function (response) {\n vm.profile = angular.copy(response);\n\n validateViewPermission();\n })\n .catch(\n function (error) {\n $log.log(error);\n\n if (error.status === $scope.HttpStatusCodeConflict) {\n $state.go('taskControl');\n ToastUtil.showToastMessage($translate.instant(\"msg.error.model.already.updated\"), ToastUtil.ToastType.WARN);\n } else if (error.data && error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n } else if (error.status != $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n }\n\n });\n }\n\n function validateViewPermission() {\n if (!vm.profile.CanView && !AuthService.isSysAdmin()) {\n $state.go('not-authorized', {}, {});\n }\n }\n\n function validateExportPermission() {\n if (!vm.profile.CanExport && !AuthService.isSysAdmin()) {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n return false;\n }\n\n return true;\n }\n\n function validateEditPermission() {\n if (!vm.profile.CanEdit && !AuthService.isSysAdmin()) {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n return false;\n }\n\n return true;\n }\n\n function validateAddPermission() {\n if (!vm.profile.CanAdd && !AuthService.isSysAdmin()) {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n return false;\n }\n\n return true;\n }\n\n vm.goToNewTask = function () {\n if (validateAddPermission()) {\n $state.go('newTask', {});\n }\n\n };\n\n vm.confirmSendReportGeneral = function () {\n\n DialogController.show($translate.instant(\"task.dialog.confirmation.general.report.title\"), '',\n actionConfirmNotificationGeneralReport, $translate.instant(\"task.dialog.confirmation.general.report.subtitle\"));\n\n };\n\n function actionConfirmNotificationGeneralReport() {\n TaskService.getTaskReportGeneral()\n .then(function (response) {\n ToastUtil.showToastMessage($translate.instant(\"msg.success.send.email.task.general\"), ToastUtil.ToastType.SUCCESS);\n }).catch(function (error) {\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n });\n }\n\n vm.init();\n\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('TaskArchivedController', TaskArchivedController);\n\n function TaskArchivedController($scope, $log, TaskService, ToastUtil, $document, moment, $translate, $state, AuthService, DefaultService) {\n\n var vm = this;\n\n vm.taskArchived = [];\n vm.Status = [];\n \n vm.itensPerPageList = [\n {name: '5', value: 5, before: 0, after: 6}, \n {name: '10', value: 10, before: 5, after: 11}, \n {name: '20', value: 20, before: 10, after: 21}, \n {name: '30', value: 30, before: 20, after: 31}, \n {name: '40', value: 40, before: 30, after: 41}, \n {name: '50', value: 50, before: 40, after: 51}]\n\n vm.itemPerPage = vm.itensPerPageList[0];\n\n vm.searchParams = {\n IdOrName: null,\n BusinessId: AuthService.getBusinessId(),\n DRI: '',\n Status: null,\n Page: 1,\n MaxPerPage: vm.itemPerPage.value,\n dateTime: '',\n dateTimeFinal: ''\n }\n \n vm.taskArchivedTotal = 0;\n vm.activeTasksCount = 0;\n vm.status = null;\n vm.totalList = 0;\n\n vm.shouldShow = function (item) {\n if(vm.totalList > 0 && item != undefined) {\n return vm.totalList >= item.value || (vm.totalList < item.after && vm.totalList > item.before);\n }\n return false;\n }\n \n vm.changeItemsPerPage = function() {\n if ( vm.itemPerPage == null ) {\n vm.itemPerPage = vm.itensPerPageList[0];\n }\n vm.searchParams.Page = 1;\n vm.searchParams.MaxPerPage = vm.itemPerPage.value;\n vm.search()\n }\n\n\n // Values of Status to persist in DB for Archived Tasks.\n var ETaskStatusArchived = {\n CLOSED: 1,\n CANCELLED: 2\n };\n\n vm.statusList = [{\n id: ETaskStatusArchived.CLOSED,\n Name: 'closed',\n Type: \"Closed\"\n },\n {\n id: ETaskStatusArchived.CANCELLED,\n Name: 'canceled',\n Type: \"Canceled\"\n }\n ];\n\n vm.clearFields = function () {\n vm.searchParams.IdOrName = null;\n vm.searchParams.DRI = '';\n vm.searchParams.Status = null;\n vm.searchParams.dateTime = '';\n vm.searchParams.dateTimeFinal = '';\n vm.dateTime = null;\n vm.dateTimeFinal = null;\n vm.status = null;\n\n setFoucusElement('#idSearch');\n };\n\n vm.filter = function (keyEvent) {\n if (keyEvent.which === 13)\n vm.search();\n };\n\n vm.validateDRI = function () {\n var isInValid = true;\n\n if (!vm.searchParams.DRI) {\n isInValid = false;\n }\n\n if (angular.isString(vm.searchParams.DRI)) {\n isInValid = false;\n }\n\n return isInValid;\n };\n\n vm.searchTasks = function() {\n vm.itemPerPage = vm.itensPerPageList[0];\n vm.searchParams.Page = 1;\n vm.searchParams.MaxPerPage = vm.itemPerPage.value;\n vm.search();\n }\n\n vm.search = function () {\n var searchParams = angular.copy(vm.searchParams);\n\n searchParams.DRI = '';\n searchParams.dateTime = '';\n searchParams.dateTimeFinal = '';\n\n vm.searchParams.GroupId = 0;\n vm.searchParams.UserId = 0;\n\n if (vm.searchParams.dateTime) {\n searchParams.StartDate = moment(vm.searchParams.dateTime).format('DD/MM/YYYY');\n } else {\n searchParams.StartDate = null;\n }\n\n if (vm.searchParams.dateTimeFinal) {\n searchParams.FinalDate = moment(vm.searchParams.dateTimeFinal).format('DD/MM/YYYY');\n } else {\n searchParams.FinalDate = null;\n }\n\n if (vm.searchParams.DRI) {\n if (!angular.isString(vm.searchParams.DRI)) {\n if (vm.searchParams.DRI.IsGroup) {\n searchParams.GroupId = vm.searchParams.DRI.Id;\n } else {\n searchParams.UserId = vm.searchParams.DRI.Id;\n }\n }\n }\n\n if (vm.searchParams.Status) {\n searchParams.Status = vm.searchParams.Status.Type;\n }\n\n // TODO get list of canceled and closed only.\n TaskService.getArchivedTasks(searchParams)\n .then(function (response) {\n vm.taskArchived = response.resultList;\n vm.totalList = response.total;\n setFoucusElement('#idSearch');\n })\n .catch(function (error) {\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if (error.status === $scope.HttpStatusCodeConflict) {\n $state.go('taskControl');\n ToastUtil.showToastMessage($translate.instant(\"msg.error.model.already.updated\"), ToastUtil.ToastType.WARN);\n } else if (error.data && error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n } else {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n }\n });\n };\n\n vm.init = function () {\n loadProfileModules();\n vm.search();\n getArchivedTasksTotal();\n getActiveTasksCount();\n };\n\n vm.filterByStatus = function (status) {\n if (status) {\n vm.searchParams.Status = status.Type;\n } else {\n vm.searchParams.Status = null;\n }\n };\n\n vm.edit = function (task) {\n if (validateEditPermission) {\n $state.transitionTo('editTask', {\n Id: task.Id\n }, true);\n }\n };\n\n function getActiveTasksCount() {\n var searchParams = {\n BusinessId: AuthService.getBusinessId(),\n UserLoggedId: AuthService.getUserID()\n };\n\n TaskService.getActiveTasksCount(searchParams)\n .then(function (response) {\n vm.activeTasksCount = response;\n })\n .catch(function (error) {\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if (error.status === $scope.HttpStatusCodeConflict) {\n $state.go('taskControl');\n ToastUtil.showToastMessage($translate.instant(\"msg.error.model.already.updated\"), ToastUtil.ToastType.WARN);\n } else if (error.data && error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n } else {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n }\n\n });\n }\n\n function getArchivedTasksTotal() {\n var searchParams = {\n BusinessId: AuthService.getBusinessId()\n };\n\n TaskService.getArchivedTasksTotal(searchParams)\n .then(function (response) {\n vm.taskArchivedTotal = response;\n })\n .catch(function (error) {\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if (error.status === $scope.HttpStatusCodeConflict) {\n $state.go('taskControl');\n ToastUtil.showToastMessage($translate.instant(\"msg.error.model.already.updated\"), ToastUtil.ToastType.WARN);\n } else if (error.data && error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n } else {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n }\n\n });\n }\n\n function setFoucusElement(element) {\n if (element) {\n var input = $document[0].querySelector(element);\n if (input !== null) {\n input.focus();\n }\n }\n }\n\n function validateEditPermission() {\n if (!vm.profile.CanEdit && !AuthService.isSysAdmin()) {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n return false;\n }\n\n return true;\n }\n\n function validateViewPermission() {\n if (!vm.profile.CanView && !AuthService.isSysAdmin()) {\n $state.go('not-authorized', {}, {});\n }\n }\n\n function loadProfileModules() {\n var profileModule = {};\n\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.moduleTaskControl;\n\n DefaultService.loadModules(profileModule)\n .then(\n function (response) {\n vm.profile = angular.copy(response);\n\n validateViewPermission();\n })\n .catch(\n function (error) {\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if (error.status === $scope.HttpStatusCodeConflict) {\n $state.go('taskControl');\n ToastUtil.showToastMessage($translate.instant(\"msg.error.model.already.updated\"), ToastUtil.ToastType.WARN);\n } else if (error.data && error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n } else {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n vm.init();\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('TaskService', TaskService);\n\n /** @ngInject */\n function TaskService($window, $injector, $q, ConfigurationService, $translate) {\n return {\n save: function (newTask) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + '/task/' + $translate.use(), newTask)\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n }\n , function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n listAll: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/task/list/',\n {\n params : filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n }\n , function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getTaskById: function (taskId) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/task/byId/'+ taskId)\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n }\n , function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getTaskReportGeneral: function () {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/task/general/report')\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n }\n , function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getArchivedTasks: function(filtro)\n {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/task/list/archived', {\n params: filtro\n })\n .then(function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n }\n , function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getArchivedTasksTotal: function(searchParams)\n {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/task/list/archived/total', {\n params: searchParams\n })\n .then(function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n }\n , function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getActiveTasksCount: function(searchParams)\n {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/task/list/active/count/',\n {\n params: searchParams\n })\n .then(function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n }\n , function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n download: function (searchParams, language) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + '/task/export/' + language, searchParams, {responseType: 'arraybuffer'})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n }\n , function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n };\n }\n})();\n\n/* Eslint notes 0 off - 1 warning - 2 error*/\n\n/*eslint no-unused-vars: [0, { \"args\": \"after-used\" }]*/\n/*eslint angular/document-service: 1*/\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('TaskController', TaskController);\n\n /** @ngInject */\n function TaskController($scope, $window, $location, TaskService, $log, DefaultService, moment, ToastUtil, $translate, $state, FileService, $uibModal, $stateParams, AuthService, $document) {\n\n var vm = this;\n vm.idToEdit = -1;\n\n vm.persistedAttachments = [];\n\n vm.newTask = {\n CompanyName: AuthService.getCompanyName(),\n BusinessId: AuthService.getBusinessId(),\n BusinessName: AuthService.getBusinessName()\n };\n\n vm.chbxRemark = false;\n vm.chbxAction = false;\n\n vm.editTask = {};\n\n vm.Models = [];\n vm.Types = [];\n\n //Css To timeline Steps.\n vm.onGoingCss = \"\";\n vm.closedCss = \"\";\n vm.archivedCss = \"\";\n\n vm.KanBanStatus = [{\n clazz: 'label aqms-label-toDo',\n text: 'toDO'\n },\n {\n clazz: 'label aqms-label-ongoing',\n text: 'onGoing'\n },\n {\n clazz: 'label aqms-label-closed ',\n text: 'closed'\n }\n ];\n\n // Attrs used in values of radio button.\n vm.approvalSelectedValue = \"-1\";\n vm.approvalValuesEnum = {\n CANCEL: \"0\",\n REJECT: \"1\",\n ACCEPT: \"2\",\n ACCEPT_CLOSE: \"3\"\n };\n\n //Values of Status to persist in DB\n vm.ETaskStatus = {\n APPROVEPENDING: 0,\n ACCEPTED: 1,\n CANCELLED: 2, //Archived by fail\n REJECTED: 3\n };\n\n //Values of Kanban Status to persist in DB\n vm.ETaskKanbanStatus = {\n PENDING: 0,\n ONGOING: 1,\n CLOSED: 2,\n ARCHIVED: 3\n };\n\n //Values of Task Attachment Type to persist in DB\n var ETaskAttachmentType = {\n Issue: 0,\n Action: 1\n };\n\n vm.BulletCssClasses = {\n RED_BULLET: \"steps-bullets-red\",\n GREEN_BULLET: \"steps-bullets-green\",\n GRAY_BULLET: \"steps-bullets\"\n };\n\n vm.IsBoss = false; //TODO: give a better name\n vm.DisableBasicFields = false; //Desabilita os campos báscios da TASK\n vm.DisableResponseFields = true;\n\n function getTask() {\n TaskService.getTaskById(vm.idToEdit)\n .then(function (response) {\n\n //Load object to edit.\n vm.newTask = response;\n vm.newTask.BusinessId = AuthService.getBusinessId();\n vm.newTask.Issue = {\n Attachments: []\n };\n vm.newTask.Action = {\n Attachments: []\n };\n\n if (angular.isDefined(vm.newTask.TaskAttachments) && vm.newTask.TaskAttachments != null) {\n angular.forEach(vm.newTask.TaskAttachments, function (item) {\n if (item.AttachmentType == ETaskAttachmentType.Issue) {\n vm.newTask.Issue.Attachments.push(item);\n }\n\n if (item.AttachmentType == ETaskAttachmentType.Action) {\n vm.newTask.Action.Attachments.push(item);\n }\n });\n }\n\n var startDt = moment(vm.newTask.StartDate, 'DD/MM/YYYY');\n var DuoDt = moment(vm.newTask.DuoDate, 'DD/MM/YYYY');\n vm.newTask.StartDate = new Date(startDt.year(), startDt.month(), startDt.date());\n vm.newTask.DuoDate = new Date(DuoDt.year(), DuoDt.month(), DuoDt.date());\n vm.newTask.Priority = vm.newTask.Priority.toString();\n vm.chbxRemark = (vm.newTask.RemarkChkBox == 1);\n vm.chbxAction = vm.newTask.ActionSubject != null && vm.newTask.ActionSubject.length > 0;\n\n filterPermissions();\n\n if (angular.isDefined(vm.newTask.Group) && vm.newTask.Group != null && vm.newTask.Group != '') {\n vm.newTask.DRI = vm.newTask.Group;\n vm.newTask.DRI.IsGroup = true;\n } else {\n vm.newTask.DRI = vm.newTask.User;\n }\n })\n .catch(function (error) {\n $log.log(error);\n\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if (error.status === $scope.HttpStatusCodeConflict) {\n $state.go('taskControl');\n ToastUtil.showToastMessage($translate.instant(\"msg.error.model.already.updated\"), ToastUtil.ToastType.WARN);\n } else if (error.data && error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant('task.edit.load.fail') + \"\", ToastUtil.ToastType.ERROR);\n }\n\n $state.go('taskControl', {});\n });\n }\n\n vm.disableAcceptAllRadio = function (chbxRemarkValue) {\n var disabled = false;\n if (!chbxRemarkValue) {\n disabled = true;\n if (vm.approvalSelectedValue == vm.approvalValuesEnum.ACCEPT_CLOSE) {\n vm.approvalSelectedValue = \"-1\";\n }\n }\n return disabled;\n };\n\n //** Methods to control timeline steps css.\n vm.getToDoStepClass = function (statusKanban) {\n var cssClass = vm.BulletCssClasses.GRAY_BULLET;\n if (statusKanban != undefined && statusKanban >= vm.ETaskKanbanStatus.PENDING) {\n cssClass = vm.BulletCssClasses.GREEN_BULLET;\n }\n return cssClass;\n };\n\n vm.getOnGoingStepClass = function (statusKanban, taskStatus) {\n var cssClass = vm.BulletCssClasses.GRAY_BULLET;\n\n if (statusKanban != undefined && statusKanban >= vm.ETaskKanbanStatus.ONGOING) {\n if (statusKanban == vm.ETaskKanbanStatus.ONGOING && taskStatus == vm.ETaskStatus.REJECTED) {\n cssClass = vm.BulletCssClasses.RED_BULLET;\n } else {\n cssClass = vm.BulletCssClasses.GREEN_BULLET;\n }\n\n }\n vm.onGoingCss = cssClass;\n return true;\n };\n\n vm.getClosedStepClass = function (statusKanban) {\n var cssClass = vm.BulletCssClasses.GRAY_BULLET;\n if (statusKanban != undefined && statusKanban >= vm.ETaskKanbanStatus.CLOSED) {\n\n cssClass = vm.BulletCssClasses.GREEN_BULLET;\n\n }\n vm.closedCss = cssClass;\n return true;\n };\n\n vm.getArchivedStepClass = function (statusKanban) {\n var cssClass = vm.BulletCssClasses.GRAY_BULLET;\n if (statusKanban != undefined && statusKanban >= vm.ETaskKanbanStatus.ARCHIVED) {\n cssClass = vm.BulletCssClasses.GREEN_BULLET;\n }\n vm.archivedCss = cssClass;\n return true;\n };\n\n vm.clearAction = function () {\n if (!vm.chbxAction) {\n vm.newTask.ActionSubject = '';\n vm.newTask.Action.Attachments = [];\n }\n };\n\n vm.clearCloseTask = function () {\n if (!vm.chbxRemark) {\n vm.newTask.Remark = '';\n }\n };\n\n function filterPermissions() {\n\n vm.DisableBasicFields = true;\n\n if (vm.IsBoss || (vm.newTask.KanbanStatus == 0 && vm.newTask.Status == 0)) {\n vm.DisableBasicFields = false;\n }\n\n vm.DisableResponseFields = vm.newTask.KanbanStatus == 0;\n\n if (vm.newTask.KanbanStatus == 2 && !vm.IsBoss) {\n vm.DisableResponseFields = true;\n }\n if (vm.newTask.KanbanStatus == 3 && !vm.IsBoss) {\n vm.DisableResponseFields = true;\n }\n }\n\n function fillTypeAreaToEdit() {\n var isSStationInative = true;\n\n if (vm.newTask != undefined && vm.newTask.Type != undefined && vm.Types != null && vm.Types != undefined) {\n angular.forEach(vm.Types, function (value) {\n if (value.Title == vm.newTask.Type.Title) {\n vm.newTask.Type = value;\n isSStationInative = false;\n }\n });\n\n if (isSStationInative) {\n vm.Types.push(vm.newTask.Type);\n }\n }\n }\n\n //Callback for directive\n vm.AttachTo = function (data, property) {\n if (!vm.newTask[property] || !vm.newTask[property].Attachments) {\n vm.newTask[property] = {};\n vm.newTask[property].Attachments = [];\n }\n vm.newTask[property].Attachments.push(data);\n };\n\n vm.removeFile = function (file) {\n FileService.remove(file).then(function () {\n vm.newTask.Issue.Attachments = vm.newTask.Issue.Attachments.filter(function (item) {\n return item.Id != file.Id;\n });\n ToastUtil.showToastMessage($translate.instant(\"task.file.deleted.success\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(function (error) {\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if (error.status === $scope.HttpStatusCodeConflict) {\n $state.go('taskControl');\n ToastUtil.showToastMessage($translate.instant(\"msg.error.model.already.updated\"), ToastUtil.ToastType.WARN);\n } else if (error.data && error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n } else {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n }\n });\n };\n\n vm.downloadFile = function (file) {\n FileService.download(file).then(function (response) {\n var newFIle = new Blob([response], {});\n var fileURL = URL.createObjectURL(newFIle);\n\n //TODO : remove hardcoded\n var a = $document[0].createElement(\"a\");\n $document[0].body.appendChild(a);\n a.style = \"display: none\";\n a.href = fileURL;\n a.download = file.FileName;\n a.click();\n })\n .catch(function (error) {\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if (error.status === $scope.HttpStatusCodeConflict) {\n $state.go('taskControl');\n ToastUtil.showToastMessage($translate.instant(\"msg.error.model.already.updated\"), ToastUtil.ToastType.WARN);\n } else if (error.data && error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n } else {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n //TODO remove to component\n vm.open = function (file) {\n var modalInstance = $uibModal.open({\n animation: true,\n ariaLabelledBy: 'modal-title',\n ariaDescribedBy: 'modal-body',\n templateUrl: 'app/modal/info-modal.html',\n controller: 'ModalInfoController',\n controllerAs: 'ctrl'\n });\n\n modalInstance.result.then(function () {\n vm.removeFile(file);\n }, function () {\n //TODO: do something when user cancel\n });\n };\n\n function CopyTask(otherTask) {\n var other = Object.create(otherTask);\n for (var property in otherTask) {\n other[property] = otherTask[property];\n }\n\n return other;\n }\n\n vm.save = function () {\n\n vm.changeDRI();\n\n vm.newTask.TaskAttachments = [];\n\n if (angular.isDefined(vm.newTask.Issue.Attachments) && vm.newTask.Issue.Attachments != null) {\n angular.forEach(vm.newTask.Issue.Attachments, function (item) {\n item.AttachmentType = ETaskAttachmentType.Issue;\n vm.newTask.TaskAttachments.push(item);\n });\n }\n\n if (angular.isDefined(vm.newTask.Action.Attachments) && vm.newTask.Action.Attachments != null) {\n angular.forEach(vm.newTask.Action.Attachments, function (item) {\n item.AttachmentType = ETaskAttachmentType.Action;\n vm.newTask.TaskAttachments.push(item);\n });\n }\n\n var taskToSave = CopyTask(vm.newTask);\n\n taskToSave.RemarkChkBox = (vm.chbxRemark ? 1 : 0);\n taskToSave = vm.setApprovalStatus(taskToSave);\n taskToSave.StartDate = moment(taskToSave.StartDate).format('DD/MM/YYYY');\n taskToSave.DuoDate = moment(taskToSave.DuoDate).format(\"DD/MM/YYYY\");\n taskToSave.UserLogged = $window.localStorage.userID;\n TaskService.save(taskToSave).then(function () {\n $state.go('taskControl', {});\n ToastUtil.showToastMessage($translate.instant(\"task.save.sucess\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(function (error) {\n $log.log(error);\n\n if (error.status === $scope.HttpStatusCodeConflict) {\n $state.go('taskControl');\n ToastUtil.showToastMessage($translate.instant(\"msg.error.model.already.updated\"), ToastUtil.ToastType.WARN);\n } else if (error.data && error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant('task.save.fail'), ToastUtil.ToastType.ERROR);\n }\n });\n };\n\n vm.setApprovalStatus = function (task) {\n switch (vm.approvalSelectedValue) {\n\n case vm.approvalValuesEnum.ACCEPT:\n task.Status = vm.ETaskStatus.ACCEPTED;\n task.KanbanStatus = vm.ETaskKanbanStatus.ONGOING;\n\n break;\n case vm.approvalValuesEnum.REJECT:\n task.Status = vm.ETaskStatus.REJECTED;\n task.KanbanStatus = vm.ETaskKanbanStatus.ONGOING;\n task.RemarkChkBox = 0;\n break;\n\n case vm.approvalValuesEnum.CANCEL:\n task.Status = vm.ETaskStatus.CANCELLED;\n task.KanbanStatus = vm.ETaskKanbanStatus.ARCHIVED;\n break;\n\n case vm.approvalValuesEnum.ACCEPT_CLOSE:\n task.Status = vm.ETaskStatus.ACCEPTED;\n task.KanbanStatus = vm.ETaskKanbanStatus.ARCHIVED;\n\n break;\n }\n\n return task;\n };\n\n vm.SetWeek = function () {\n vm.newTask.Week = moment(vm.newTask.StartDate).isoWeek();\n };\n\n vm.SectionChange = function () {\n if (!vm.newTask.Section.Id)\n return;\n\n var selectedSession = vm.Sections.filter(function (currentSession) {\n return currentSession.Id == vm.newTask.Section.Id;\n });\n if (selectedSession[0]) {\n vm.Stations = selectedSession[0].Stations;\n if (vm.Stations.length == 1) {\n\n vm.newTask.Station = vm.Stations[0];\n }\n } else {\n vm.Stations = [];\n }\n\n };\n\n vm.ModelChange = function () {\n vm.newTask.Models = vm.Models.filter(function (model) {\n return model.Selected;\n });\n };\n\n vm.Init = function () {\n\n vm.idToEdit = $stateParams[\"Id\"];\n\n loadProfileModules();\n\n //IF No Task Edition\n if (angular.isUndefined(vm.idToEdit) || vm.idToEdit > 0) {\n vm.selectedModels = [];\n vm.newTask.StartDate = new Date();\n vm.newTask.DuoDate = new Date();\n vm.newTask.Issue = {};\n vm.newTask.Issue.Attachments = [];\n vm.SetWeek();\n\n loadTaskTypes();\n }\n };\n\n function loadProfileModules() {\n var profileModule = {};\n\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.moduleTaskControl;\n\n DefaultService.loadModules(profileModule)\n .then(\n function (response) {\n vm.profile = angular.copy(response);\n\n if (vm.profile.CanApprove) {\n vm.IsBoss = true;\n }\n\n InitPageValidatePermissions();\n })\n .catch(\n function (error) {\n $log.log(error);\n\n if (error.status === $scope.HttpStatusCodeConflict) {\n $state.go('taskControl');\n ToastUtil.showToastMessage($translate.instant(\"msg.error.model.already.updated\"), ToastUtil.ToastType.WARN);\n } else if (error.data && error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n } else if (error.status != $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n }\n\n });\n }\n\n function InitPageValidatePermissions() {\n\n //IF Task Edition\n if (angular.isDefined(vm.idToEdit) && vm.idToEdit > 0) {\n validateEditPermission();\n getTask();\n } else {\n validateAddPermission();\n }\n\n }\n\n function validateEditPermission() {\n if (!vm.profile.CanEdit) {\n $state.go('not-authorized', {}, {});\n }\n }\n\n function validateAddPermission() {\n if (!vm.profile.CanAdd) {\n $state.go('not-authorized', {}, {});\n }\n }\n\n //===========================================\n // VALIDATIONS\n //==========================================\n\n vm.ValidateStartDate = function () {\n return vm.newTask.StartDate > vm.newTask.DuoDate;\n };\n\n vm.ValidateDuoDate = function () {\n return vm.newTask.DuoDate < vm.newTask.StartDate;\n };\n\n vm.ValidateStation = function () {\n return vm.newTask.Station;\n };\n\n vm.ValidateArea = function () {\n return angular.isDefined(vm.newTask.Area) && vm.newTask.Area != '' && vm.newTask.Area != null;\n };\n\n vm.ValidateType = function () {\n return angular.isDefined(vm.newTask) && angular.isDefined(vm.newTask.Type) && vm.newTask.Type.Id > 0;\n };\n\n vm.ValidateProjectClientModel = function () {\n return angular.isDefined(vm.newTask) &&\n angular.isDefined(vm.newTask.Project) &&\n angular.isDefined(vm.newTask.Client) &&\n angular.isDefined(vm.newTask.Models) && vm.newTask.Models.length > 0;\n };\n\n vm.ValidatePriority = function () {\n if (vm.newTask.Priority)\n return false;\n\n return true;\n };\n\n vm.ValidateDRI = function () {\n if (!vm.newTask.DRI)\n return true;\n if (typeof vm.newTask.DRI == 'string')\n return true;\n return false;\n };\n\n vm.changeDRI = function () {\n if (vm.newTask.DRI.IsGroup) {\n vm.newTask.Group = vm.newTask.DRI;\n vm.newTask.User = null;\n } else {\n vm.newTask.User = vm.newTask.DRI;\n vm.newTask.Group = null;\n }\n };\n\n vm.ValidateIssue = function () {\n try {\n if (vm.newTask.IssueSubject) {\n return false;\n } else {\n return true;\n }\n } catch (e) {\n return true;\n }\n };\n\n vm.back = function () {\n\n var modalInstance = $uibModal.open({\n animation: true,\n ariaLabelledBy: 'modal-title',\n ariaDescribedBy: 'modal-body',\n templateUrl: 'app/modal/info-modal.back.html',\n controller: 'ModalInfoController',\n controllerAs: 'ctrl'\n });\n\n modalInstance.result.then(function (ok) {\n if (ok) {\n $location.hash('top');\n $state.go('taskControl', {});\n } else {\n ToastUtil.showToastMessage($translate.instant(\"task.back.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n };\n\n function loadTaskTypes() {\n\n var searchParams = {\n Title: \"\",\n CsActive: 1\n };\n\n DefaultService.loadTypes(searchParams)\n .then(function (response) {\n vm.Types = response;\n fillTypeAreaToEdit();\n })\n .catch(function (error) {\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if (error.status === $scope.HttpStatusCodeConflict) {\n $state.go('taskControl');\n ToastUtil.showToastMessage($translate.instant(\"msg.error.model.already.updated\"), ToastUtil.ToastType.WARN);\n } else if (error.data && error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n } else {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n }\n });\n\n }\n\n //Cancel Radio Button validation\n var lastCancelRadioValue = false;\n\n vm.changeCancelRadio = function () {\n\n var checked = $document[0].getElementById('cancelTaskId').checked;\n\n if (checked == lastCancelRadioValue) {\n lastCancelRadioValue = !checked;\n $document[0].getElementById('cancelTaskId').checked = !checked;\n vm.approvalSelectedValue = undefined;\n } else {\n lastCancelRadioValue = checked;\n\n lastRejectRadioValue = false;\n lastAcceptRadioValue = false;\n lastAcceptAndCloseRadioValue = false;\n lastAcceptAndCloseDisableRadioValue = false;\n\n disableRadioButtonsById(['rejectTaskId', 'acceptedTaskId', 'acceptedAndCloselTaskId', 'acceptedAndCloseDisablelTaskId']);\n }\n };\n //Cancel Radio Button validation\n\n //Reject Radio Button validation\n var lastRejectRadioValue = false;\n\n vm.changeRejectRadio = function () {\n\n var checked = $document[0].getElementById('rejectTaskId').checked;\n\n if (checked == lastRejectRadioValue) {\n lastRejectRadioValue = !checked;\n $document[0].getElementById('rejectTaskId').checked = !checked;\n vm.approvalSelectedValue = undefined;\n } else {\n lastRejectRadioValue = checked;\n\n lastCancelRadioValue = false;\n lastAcceptRadioValue = false;\n lastAcceptAndCloseRadioValue = false;\n lastAcceptAndCloseDisableRadioValue = false;\n\n disableRadioButtonsById(['cancelTaskId', 'acceptedTaskId', 'acceptedAndCloselTaskId', 'acceptedAndCloseDisablelTaskId']);\n }\n };\n //Reject Radio Button validation\n\n //Accept Radio Button validation\n var lastAcceptRadioValue = false;\n\n vm.changeAcceptRadio = function () {\n\n var checked = $document[0].getElementById('acceptedTaskId').checked;\n\n if (checked == lastAcceptRadioValue) {\n lastAcceptRadioValue = !checked;\n $document[0].getElementById('acceptedTaskId').checked = !checked;\n vm.approvalSelectedValue = undefined;\n } else {\n lastAcceptRadioValue = checked;\n\n lastCancelRadioValue = false;\n lastRejectRadioValue = false;\n lastAcceptAndCloseRadioValue = false;\n lastAcceptAndCloseDisableRadioValue = false;\n\n disableRadioButtonsById(['cancelTaskId', 'rejectTaskId', 'acceptedAndCloselTaskId', 'acceptedAndCloseDisablelTaskId']);\n }\n };\n //Accept Radio Button validation\n\n //Accept and Close Radio Button validation\n var lastAcceptAndCloseRadioValue = false;\n\n vm.changeAcceptAndCloseRadio = function () {\n\n var checked = $document[0].getElementById('acceptedAndCloselTaskId').checked;\n\n if (checked == lastAcceptAndCloseRadioValue) {\n lastAcceptAndCloseRadioValue = !checked;\n $document[0].getElementById('acceptedAndCloselTaskId').checked = !checked;\n vm.approvalSelectedValue = undefined;\n } else {\n lastAcceptAndCloseRadioValue = checked;\n\n lastCancelRadioValue = false;\n lastRejectRadioValue = false;\n lastAcceptRadioValue = false;\n lastAcceptAndCloseDisableRadioValue = false;\n\n disableRadioButtonsById(['cancelTaskId', 'rejectTaskId', 'acceptedTaskId', 'acceptedAndCloseDisablelTaskId']);\n }\n };\n //Accept and Close Radio Button validation\n\n //Accept and Close Disable Radio Button validation\n var lastAcceptAndCloseDisableRadioValue = false;\n\n vm.changeAcceptAndCloseDisableRadio = function () {\n\n var checked = $document[0].getElementById('acceptedAndCloseDisablelTaskId').checked;\n\n if (checked == lastAcceptRadioValue) {\n lastAcceptAndCloseDisableRadioValue = !checked;\n $document[0].getElementById('acceptedAndCloseDisablelTaskId').checked = !checked;\n vm.approvalSelectedValue = undefined;\n } else {\n lastAcceptAndCloseDisableRadioValue = checked;\n\n lastCancelRadioValue = false;\n lastRejectRadioValue = false;\n lastAcceptRadioValue = false;\n lastAcceptAndCloseRadioValue = false;\n\n disableRadioButtonsById(['cancelTaskId', 'rejectTaskId', 'acceptedTaskId', 'acceptedAndCloselTaskId']);\n }\n };\n //Accept and Close Disable Radio Button validation\n\n function disableRadioButtonsById(ids) {\n angular.forEach(ids, function () {\n if ($document[0].getElementById('valueId') != undefined && $document[0].getElementById('valueId') != null) {\n $document[0].getElementById('valueId').checked = false;\n }\n });\n }\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('SynthesisService', SynthesisService);\n\n var BASE = '/synthesis/';\n /** @ngInject */\n function SynthesisService($window, $injector, $q, ConfigurationService) {\n return {\n\n list: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + \"list\", {\n params: filter,\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n\n save: function (synthesis) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + BASE, synthesis, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n\n getById: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + 'byId/' + id, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n delete: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + BASE + id, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n\n };\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('StationService', StationService);\n\n /** @ngInject */\n function StationService($window, $injector, $q, ConfigurationService) {\n var BASE = \"/station\";\n return {\n\n list: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + \"/list\", {\n params: filter,\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n save: function (station) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + BASE + \"/\", station, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n\n getById: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + '/byId/' + id, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n delete: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + BASE + \"/\" + id, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n\n\n\n\n };\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(SourcingTranslate);\n\n /** @ngInject */\n function SourcingTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'title.sourcing': 'Sourcing',\n 'new.title.sourcing': 'New Sourcing',\n 'title.vendor': 'Supplier Registration',\n 'vendor.list.notfound': 'No vendor found',\n 'visit.list.notfound': 'No technical visit found',\n 'label.new.vendor': 'New Vendor',\n 'label.edit.vendor': 'Vendor Editing',\n 'vendor.label.id': 'ID',\n 'vendor.label.productline': 'Product Line',\n 'vendor.label.economicactivity': 'Economic Activity',\n 'vendor.label.origin': 'Origin',\n 'vendor.label.fantasyname': 'Supplier Name',\n 'vendor.label.address': 'Address',\n 'vendor.label.district': 'District',\n 'vendor.label.city': 'City',\n 'vendor.label.uf': 'UF',\n 'vendor.label.site': 'Home Page / Site',\n 'vendor.placeholder.site.page': 'Ex: http://www.site.com.br',\n 'vendor.label.registrationstatus': 'Registration Status',\n 'vendor.label.cadastralsituation': 'Cadastral Situation',\n 'vendor.label.type': 'Mat. Type',\n 'vendor.label.companyname': 'Vendor',\n 'vendor.label.contactus': 'Contact Name',\n 'vendor.label.phone': 'Phone',\n 'vendor.label.lastupdate': 'Last Update',\n 'vendor.label.cicafregistration': 'CICAF Registration',\n 'vendor.placeholder.id': 'Search by ID',\n 'vendor.placeholder.productline': 'Search by Product Line',\n 'vendor.placeholder.economicactivity': 'Search by Economic Activity',\n 'vendor.placeholder.origin': 'Search by Origin',\n 'vendor.placeholder.fantasyname': 'Search by Supplier Name',\n 'vendor.placeholder.address': 'Search by Address',\n 'vendor.placeholder.district': 'Search by District',\n 'vendor.placeholder.city': 'Search by City',\n 'vendor.placeholder.uf': 'Search by UF (only letters)',\n 'vendor.placeholder.site': 'Search by Home Page/Site',\n 'vendor.placeholder.registrationstatus': 'Search by Registration Status',\n 'vendor.placeholder.cadastralsituation': 'Search by Cadastral Situation',\n 'vendor.placeholder.select.registrationstatus': 'Select the Registration Status',\n 'vendor.placeholder.select.cadastralsituation': 'Select the Cadastral Situation',\n 'vendor.placeholder.codesap': 'Search by Code SAP',\n 'vendor.registrationstatus.bank': 'Database',\n 'vendor.registrationstatus.approved': 'Approved',\n 'vendor.registrationstatus.suspended': 'Suspended',\n 'vendor.registrationstatus.deaccredited': 'Disqualified',\n 'vendor.registrationstatus.notapplicable': 'Not Applicable',\n 'vendor.cadastralsituation.registered': 'Registered in SAP',\n 'vendor.cadastralsituation.notregistered': 'Not Registered',\n 'vendor.vendortype.product': 'Product',\n 'vendor.vendortype.service': 'Service',\n 'vendor.vendortype.direct': 'Direct',\n 'vendor.vendortype.indirect': 'Indirect',\n 'vendor.title.identification': 'Vendor Identification',\n 'vendor.label.createdby': 'Created By',\n 'milestone.label.createdby': 'Created By',\n 'vendor.label.email': 'E-mail',\n 'vendor.label.codesap': 'Code SAP',\n 'vendor.label.status': 'Status',\n 'vendor.placeholder.status': 'Select status',\n 'vendor.status.active': 'Active',\n 'vendor.status.inactive': 'Inactive',\n 'vendor.label.createddate': 'Created Date',\n 'error.vendor.search': 'An error occurred when trying to load a list of Vendors.',\n 'vendor.placeholder.select.origin': 'Select origin',\n 'vendor.label.phones': 'Phones',\n 'vendor.label.technicalvisit': 'Enabled Technical Visit',\n 'vendor.phone.mask': '+9 999 9?9999-9999',\n 'vendor.save.success': 'Vendor was successfully saved',\n 'milestone.save.success': 'Milestone was successfully saved',\n 'vendor.save.error': 'An error occurred when try to save Vendor',\n 'milestone.save.error': 'An error occurred when try to save Milestone',\n 'vendor.load.all.error': 'An error occurred when try to load vendor list',\n 'vendor.load.byid.error': 'An error occurred when try to load the vendor',\n 'vendor.remove.success': 'Vendor was successfully removed',\n 'vendor.remove.error': 'An error occurred when try to remove vendor',\n 'vendor.placeholder.select.type': 'Select the Type',\n 'validation.vendor.origins.required': 'You need to add at least 01 origin.',\n 'validation.vendor.phones.required': 'You need to add at least 01 phone.',\n 'validation.vendor.origins.duplicated': 'Origin already added to the list.',\n 'validation.vendor.phone.duplicated': 'Contact already added to list.',\n 'error.vendor.listprofilemodules.error': 'An error occurred when trying to load a list of Profile Modules.',\n 'validation.vendor.uf.invalid': 'Letters only',\n 'vendor.remove.error.conflict': 'The Vendor can not be removed because it is being used by the system.',\n 'validation.vendor.site.invalid': 'Invalid URL',\n 'vendor.phone': 'Country code and area code can be supplemented with leading zeros.',\n 'vendor.label.attachment': 'Attachment Catalog',\n 'vendor.update.success': 'Vendor was successfully updated',\n 'milestone.update.success': 'Milestone was successfully updated',\n 'vendor.label.remark': 'Remark',\n 'milestone.label.remark': 'Remark',\n 'validation.vendor.codesap.invalid': 'Invalid Code SAP',\n 'vendor.label.phones.mask': 'Ex: 001 011 12398-5555',\n 'vendor.contacts': 'Contacts',\n 'vendor.contact.contactus.required': 'Contact name is required.',\n 'vendor.contact.email.required': 'Email is required',\n 'vendor.contact.phone.required': 'Phone is required',\n 'validation.vendor.contact.required': 'You need to add at least 01 contact.',\n 'vendor.label.notified': 'Notified',\n 'vendor.label.target': 'Target',\n 'vendor.notifications': 'Notifications',\n 'vendor.visit.tab.label': 'Technical Visit',\n 'vendor.milestone.tab.label': 'MILESTONE',\n 'label.new.visit': 'New Visit',\n 'label.new.milestone': 'New Milestone',\n 'vendor.label.accepted': 'Accepted (%)',\n 'vendor.label.points': 'Points',\n 'vendor.label.visit.date': 'Visit Date',\n 'vendor.label.approver': 'Approver',\n 'milestone.label.approver': 'Approver',\n 'error.visit.search': 'An error occurred when trying to load a list of Visits.',\n 'error.visit.edit': 'An error occurred when trying to edit a visit.',\n 'visit.remove.success': 'Visit was successfully removed',\n 'visit.remove.error': 'An error occurred when try to remove visit',\n 'visit.remove.error.conflict': 'The Visit can not be removed because it is being used by the system.',\n 'visit.label.status.waiting.approval': 'Pending Approval',\n 'visit.label.status.approved': 'Approved',\n 'visit.label.status.rejected': 'Reject',\n 'label.edit.visit': 'Technical Visit Editing',\n 'visit.sendapproval': 'Send Approval',\n 'milestone.sendapproval': 'Send Approval',\n 'visit.title.identification': 'Technical Visit Identification',\n 'milestone.title.identification': 'Milestone Identification',\n 'visit.label.date': 'Date',\n 'milestone.label.date': 'Date',\n 'milestone.label.milestone': 'Milestone',\n 'visit.label.approver': 'Approver',\n 'visit.save.success': 'Technical Visit was successfully saved',\n 'visit.save.error': 'An error occurred when try to save Technical Visit',\n 'visit.remove.warning.not.creator.appover': 'Technical visit can only be removed by the creator or approver of the same.',\n 'visit.remove.warning.unauthorized': 'Item has already been approved or rejected and cannot be removed.',\n 'visit.approved.error': 'Approver must be different from the creator of the technical visit',\n 'milestone.approved.error': 'Approver must be different from the creator of the milestone',\n 'visit.label.attachment':'Attachment Visit',\n 'milestone.label.attachment':'Attachment Milestone',\n 'visit.label.accepted': 'Accepted (%)',\n 'visit.label.points': 'Points',\n 'visit.reject': 'Reject',\n 'visit.approve': 'Approve',\n 'visit.update.success': 'Technical Visit was successfully updated',\n 'visit.remark.required': 'Please complete the remark to justify rejection of this technical visit',\n 'visit.report.name': 'Report_Techincal_Visit_',\n 'milestone.remark.required': 'Please complete the remark to justify rejection of this milestone',\n 'visit.hint.vendor': 'Only vendors with active status and enabled for technical visits will be listed.',\n 'label.milestone.status.temporarywaiver': 'Temporary Waiver Approval',\n 'error.milestones.search': 'An error occurred when trying to load a list of Milestones.',\n 'milestones.tab.label': 'Supplier Approval Milestones',\n 'milestones.remove.success': 'Milestone was successfully removed',\n 'milestones.remove.error': 'An error occurred when try to remove milestone',\n 'milestones.remove.error.conflict': 'The Milestone can not be removed because it is being used by the system.',\n 'milestones.remove.warning.unauthorized': 'Item has already been approved or rejected and cannot be removed.',\n 'milestones.hint.vendor': 'Only sellers with active status and with last technical visit approved will be listed.',\n 'milestones.report.name': 'Report_Supplier_Approval_Milestone_',\n 'label.milestone': 'Milestone',\n 'milestone.deleted.failed': 'Milestone can not be deleted. There are one or more associated records.',\n 'error.milestone.duplicated': 'Milestone has already been registered with this Vendor.',\n 'label.edit.milestone': 'Milestone Editing',\n 'milestone.temporaryApprove': 'Temporary Waiver Approval',\n 'vendor.report.name': 'Vendor_report_',\n 'vendor.label.department': 'Department / Role',\n 'title.temporary.approval.justification': 'Temporary Waiver Approval - Justification',\n 'milestone.label.justification': 'Justification',\n 'milestone.label.deadline': 'Deadline for regulation',\n 'error.avaliations.search': 'An error occurred when trying to load a list of Evaluations.',\n 'avaliations.remove.success': 'Evaluation was successfully removed',\n 'avaliations.remove.warning.unauthorized': 'Can not perform this action',\n 'label.new.avaliation': 'New Evaluation',\n 'vendor.avaliation.tab.label': 'Supplier Evaluation',\n 'avaliations.label.id': 'Id',\n 'avaliations.label.id.avaliation': 'Id Evaluation',\n 'avaliations.remove.error': 'An error occurred when try to remove evaluation',\n 'avaliations.remove.error.conflict': 'The Avaliation can not be removed because it is being used by the system.',\n 'avaliations.hint.keyword': 'Activity/Service/Product/Mark',\n 'avaliations.label.start.year': 'Start Year',\n 'avaliations.label.end.year': 'End Year',\n 'avaliations.label.frequency': 'Frequency',\n 'avaliations.label.month': 'Month',\n 'avaliations.label.quarter': 'Quarter',\n 'avaliations.label.semester': 'Semester',\n 'avaliations.label.year': 'Year',\n 'avaliations.label.price': 'Price',\n 'avaliations.label.quality': 'Quality',\n 'avaliations.label.logistics': 'Logistics',\n 'avaliations.label.technology': 'Technology',\n 'avaliations.label.total': 'Total',\n 'avaliations.label.remark': 'Remark',\n 'avaliations.placeholder.keyword': 'Keyword',\n 'avaliations.placeholder.quartile': 'Quartile',\n 'avaliations.placeholder.start.year': 'Start year',\n 'avaliations.placeholder.year': 'Year',\n 'avaliations.list.notfound': 'No evaluation found',\n 'avaliations.placeholder.end.year': 'End year',\n 'avaliations.start.year.less.end.year' : 'Start year must be less than or equal to end year.',\n 'avaliation.title.identification': 'Evaluation identification',\n 'avaliation.title.score': 'Score / Month',\n 'avaliation.label.year': 'Year',\n 'avaliation.label.createdby': 'Created By',\n 'avaliation.label.updatedby': 'Updated By',\n 'avaliation.label.createddate': 'Created Date',\n 'avaliation.label.updateddate': 'Updated Date',\n 'error.avaliation.score.empty': 'The avaliation score list is required.',\n 'label.edit.avaliation': 'Evaluation Edit',\n 'avaliation.update.success': 'Evaluation was successfully updated',\n 'error.avaliation.duplicated': 'There is already a registered evaluation for the given year.',\n 'avaliation.hint.vendor': 'Only supplier with active status and approved milestones will be listed.',\n 'avaliation.add.score.already.exist': 'There is already a score for this quartile.',\n 'avaliation.save.success': 'Evaluation was successfully saved.',\n 'avaliation.remove.confirm': 'If remove this item (#item) all in the evaliations and scores of the year (#year) will be removed. Do you want to confirm?',\n 'avaliation.placeholder.chart.button': 'Chart',\n 'avaliation.placeholder.select.category': 'Select category',\n 'avaliations.label.btn.grafico': ' ',\n 'avaliations.change.view.graphic.label': 'View chart',\n 'avaliations.change.view.list.label': 'View list',\n 'avaliations.chart.label.viewby.total': 'View by total',\n 'avaliations.chart.label.viewby.category': 'View by category',\n 'avaliations.vendor.by.price': 'Supplier Avaliations by Price',\n 'avaliations.vendor.by.logistics': 'Supplier Evaluations by Logistics',\n 'avaliations.vendor.by.quality': 'Supplier Evaluations by Quality',\n 'avaliations.vendor.by.technology': 'Supplier Evaluations by Technology',\n 'avaliations.vendor.by.total': 'Supplier Evaluations by Total',\n \"avaliation.chart.generate.message.alert\": \"Select a category or total to generate the updated chart.\",\n \"avaliations.chart.labelx\": \"Year\",\n 'avaliations.score.error': 'Enter one score valid.',\n 'avaliation.report.name': 'Report_Supplier_Evaluation_',\n 'visit.label.id': 'Vendor ID',\n 'visit.placeholder.id': 'Search by Vendor ID',\n 'contract.report.name': 'Report_Contract_',\n 'vendor.save.same.sap.error': 'SAP code already registered for a vendor.'\n });\n\n $translateProvider.translations('pt', {\n 'title.sourcing': 'Desenvolvimento de Fornecedor',\n 'new.title.sourcing': 'Novo Desenvolvimento do Fornecedor',\n 'title.vendor': 'Cadastro de Fornecedor',\n 'vendor.list.notfound': 'Nenhum fornecedor encontrado',\n 'visit.list.notfound': 'Nenhuma visita técnica encontrada',\n 'label.new.vendor': \"Novo Fornecedor\",\n 'label.edit.vendor': 'Edição de Fornecedor',\n 'vendor.label.id': 'ID',\n 'vendor.label.productline': 'Linha do Produto',\n 'vendor.label.economicactivity': 'Atividade Econômica',\n 'vendor.label.origin': 'Origem',\n 'vendor.label.fantasyname': 'Nome Fantasia',\n 'vendor.label.address': 'Endereço',\n 'vendor.label.district': 'Bairro',\n 'vendor.label.city': 'Cidade',\n 'vendor.label.uf': 'UF',\n 'vendor.label.site': 'Home Page / Site',\n 'vendor.placeholder.site.page': 'Ex: http://www.site.com.br',\n 'vendor.label.registrationstatus': 'Situação do Registro',\n 'vendor.label.cadastralsituation': 'Situação Cadastral',\n 'vendor.label.type': 'Mat. Tipo',\n 'vendor.label.companyname': 'Fornecedor',\n 'vendor.label.contactus': ' Nome do Contato',\n 'vendor.label.phone': 'Telefone',\n 'vendor.label.lastupdate': 'Última alteração',\n 'vendor.label.cicafregistration': 'CICAF Registro',\n 'vendor.placeholder.id': 'Consulta por ID',\n 'vendor.placeholder.productline': 'Consulta por Linha do Produto',\n 'vendor.placeholder.economicactivity': 'Consulta por Atividade Econômica',\n 'vendor.placeholder.origin': 'Consulta por Origem',\n 'vendor.placeholder.fantasyname': 'Consulta por Nome Fantasia',\n 'vendor.placeholder.address': 'Consulta por Endereço',\n 'vendor.placeholder.district': 'Consulta por Bairro',\n 'vendor.placeholder.city': 'Consulta por Cidade',\n 'vendor.placeholder.uf': 'Consulta por UF (apenas letras)',\n 'vendor.placeholder.site': 'Consulta por Home Page/Site',\n 'vendor.placeholder.registrationstatus': 'Consulta por Status do Registro',\n 'vendor.placeholder.cadastralsituation': 'Consulta por Situação Cadastral',\n 'vendor.placeholder.select.registrationstatus': 'Selecione o Status do Registro',\n 'vendor.placeholder.select.cadastralsituation': 'Selecione a Situação Cadastral ',\n 'vendor.placeholder.codesap': 'Consulta por código do SAP',\n 'vendor.registrationstatus.bank': 'Banco',\n 'vendor.registrationstatus.approved': 'Aprovado',\n 'vendor.registrationstatus.suspended': 'Suspenso',\n 'vendor.registrationstatus.deaccredited': 'Descredenciado',\n 'vendor.registrationstatus.notapplicable': 'Não Aplicável',\n 'vendor.cadastralsituation.registered': 'Registrado no SAP',\n 'vendor.cadastralsituation.notregistered': 'Não Registrado',\n 'vendor.vendortype.product': 'Produto',\n 'vendor.vendortype.service': 'Serviço',\n 'vendor.vendortype.direct': 'Direto',\n 'vendor.vendortype.indirect': 'Indireto',\n 'vendor.title.identification': 'Identificação do Fornecedor',\n 'milestone.title.identification': 'Identificação da Etapa de aprovação',\n 'vendor.label.createdby': 'Criado Por',\n 'milestone.label.createdby': 'Criado Por',\n 'vendor.label.email': 'E-mail',\n 'vendor.label.codesap': 'Código do SAP',\n 'vendor.label.status': 'Situação',\n 'vendor.placeholder.status': 'Selecione a situação',\n 'vendor.status.active': 'Ativo',\n 'vendor.status.inactive': 'Inativo',\n 'vendor.label.createddate': 'Data de criação',\n 'error.vendor.search': 'Não foi possível carregar a lista de Fornecedores, tente novamente ou contate um administrador.',\n 'vendor.placeholder.select.origin': 'Selecione a origem',\n 'vendor.label.phones': 'Fones',\n 'vendor.label.technicalvisit': 'Visita Técnica Habilitada',\n 'vendor.phone.mask': '+99 999 9?9999-9999',\n 'vendor.save.success': 'Fornecedor salvo com sucesso',\n 'milestone.save.success': 'Etapa de aprovação salva com sucesso',\n 'vendor.save.error': 'Ocorreu um erro ao tentar salvar o fornecedor',\n 'milestone.save.error': 'Ocorreu um erro ao tentar salvar o milestone',\n 'vendor.load.all.error': 'Ocorreu um erro ao tentar carregar a lista de fornecedor',\n 'vendor.load.byid.error': 'Ocorreu um erro ao tentar carregar o fornecedor',\n 'vendor.remove.success': 'Fornecedor removido com sucesso',\n 'vendor.remove.error': 'Ocorreu um erro ao tentar remover o fornecedor',\n 'vendor.remove.error.conflict': 'O Fornecedor não pode ser removido pois está sendo usado pelo sistema',\n 'vendor.placeholder.select.type': 'Selecione o Tipo',\n 'validation.vendor.origins.required': 'Você precisa adicionar ao menos uma origem.',\n 'validation.vendor.phones.required': 'Você precisa adicionar ao menos um telefone.',\n 'validation.vendor.origins.duplicated': 'Origem já foi adicionada na lista.',\n 'validation.vendor.phone.duplicated': 'O contato já foi adicionado na lista.',\n 'error.vendor.listprofilemodules.error': 'Ocorreu um erro ao tentar carregar as permissões de acesso.',\n 'validation.vendor.uf.invalid': 'Apenas letras',\n 'validation.vendor.site.invalid': 'URL inválida',\n 'vendor.phone': 'Código do país e código de área podem ser complementados com zeros a esquerda.',\n 'vendor.label.attachment': 'Anexo do Catálogo',\n 'vendor.update.success': 'Fornecedor atualizado com sucesso',\n 'milestone.update.success': 'Etapa de aprovação atualizada com sucesso',\n 'vendor.label.remark': 'Observação',\n 'milestone.label.remark': 'Observação',\n 'validation.vendor.codesap.invalid': 'Código do SAP inválido',\n 'vendor.label.phones.mask': 'Ex: 001 011 12398-5555',\n 'vendor.contacts': 'Contatos',\n 'vendor.contact.contactus.required': 'Nome do contato é obrigatório',\n 'vendor.contact.email.required': 'Email do contato é obrigatório',\n 'vendor.contact.phone.required': 'Telefone do contato é obrigatório',\n 'validation.vendor.contact.required': 'Você precisa adicionar ao menos um contato.',\n 'vendor.label.target': 'Target',\n 'vendor.label.notified': 'Notificados',\n 'vendor.notifications': 'Notificações',\n 'vendor.visit.tab.label': 'Visita Técnica',\n 'vendor.milestone.tab.label': 'MILESTONE',\n 'label.new.visit': 'Nova Visita',\n 'vendor.label.accepted': '% Aceitação',\n 'vendor.label.points': 'Pontos',\n 'vendor.label.visit.date': 'Data da Visita',\n 'vendor.label.approver': 'Aprovador',\n 'milestone.label.approver': 'Aprovador',\n 'error.visit.search': 'Não foi possível carregar a lista de Visitas, tente novamente ou contate um administrador.',\n 'error.visit.edit': 'Não foi possível carregar a tela de edição da visita, tente novamente ou contate um administrador.',\n 'visit.remove.success': 'Visita Técnica removida com sucesso',\n 'visit.remove.error': 'Ocorreu um erro ao tentar remover a Visita Técnica',\n 'visit.remove.error.conflict': 'A Visita Técnica não pode ser removida pois está sendo usada pelo sistema',\n 'visit.label.status.waiting.approval': 'Pendente de Aprovação',\n 'visit.label.status.approved': 'Aprovado',\n 'visit.label.status.rejected': 'Rejeitado',\n 'label.edit.visit': 'Edição de Visita Técnica',\n 'visit.sendapproval': 'Enviar Aprovação',\n 'milestone.sendapproval': 'Enviar Aprovação',\n 'visit.title.identification': 'Identificação da Visita Técnica',\n 'visit.label.date': 'Data',\n 'milestone.label.date': 'Data',\n 'milestone.label.milestone': 'Etapa de aprovação',\n 'visit.label.approver': 'Aprovador',\n 'visit.save.success': 'Visita Técnica salva com sucesso',\n 'visit.save.error': 'Ocorreu um erro ao tentar salvar a Visita Ténica',\n 'visit.remove.warning.not.creator.appover': 'Visita Técnica só pode ser removida pelo criador ou aprovador da mesma.',\n 'visit.remove.warning.unauthorized': 'Item já foi aprovado ou rejeitado e não pode ser removido.',\n 'visit.approved.error': 'O aprovador precisa ser diferente do criador da visita técnica',\n 'milestone.approved.error': 'O aprovador precisa ser diferente do criador da milestone',\n 'visit.label.attachment':'Anexo da Visita',\n 'milestone.label.attachment':'Anexo da etapa de aprovação',\n 'visit.label.accepted': '% Aceitação',\n 'visit.label.points': 'Pontos',\n 'visit.reject': 'Rejeitar',\n 'visit.approve': 'Aprovar',\n 'visit.update.success': 'Visita Técnica atualizada com sucesso',\n 'visit.remark.required': 'Preencha a observação para justificar a rejeição desta visita técnica',\n 'visit.report.name': 'Relatório_Visitas_Técnicas_',\n 'milestone.remark.required': 'Preencha a observação para justificar a rejeição deste milestone',\n 'visit.hint.vendor': 'Apenas forncedores com status ativo e habilitados para visita técnica serão listados.',\n 'label.milestone.status.temporarywaiver': 'Aprovação Temporária',\n 'error.milestones.search': 'Não foi possível carregar a lista de Milestones, tente novamente ou contate um administrador.',\n 'milestones.tab.label': 'Etapas de aprovação',\n 'milestones.remove.success': 'Etapa de aprovação removida com sucesso',\n 'milestones.remove.error': 'Ocorreu um erro ao tentar remover a etapa de aprovação',\n 'milestones.remove.error.conflict': 'A Milestone não pode ser removida pois está sendo usada pelo sistema',\n 'milestones.remove.warning.unauthorized': 'Item já foi aprovado ou rejeitado e não pode ser removido.',\n 'milestones.hint.vendor': 'Apenas os fornecedores com status ativo e com a última visita técnica aprovada serão listados.',\n 'milestones.report.name': 'Relatório_Etapas_de_Aprovação_',\n 'label.milestone': 'Etapa de aprovação',\n 'label.new.milestone': 'Nova Etapa de Aprovação',\n 'milestone.deleted.failed': 'Etapa de aprovação não pode ser excluída. Há um ou mais registros associados.',\n 'error.milestone.duplicated': 'A Etapa de aprovação já foi cadastrada para esse Fornecedor.',\n 'label.edit.milestone': 'Edição de etapa de aprovação',\n 'milestone.temporaryApprove': 'Aprovação Temporária',\n 'vendor.report.name': 'Relatório_fornecedor_',\n 'vendor.label.department': 'Departamento / Função',\n 'title.temporary.approval.justification': 'Aprovação Temporária - Justificativa',\n 'milestone.label.justification': 'Justificativa',\n 'milestone.label.deadline': 'Prazo para regulamentação',\n 'error.avaliations.search': 'Não foi possível carregar a lista de Avaliações, tente novamente ou contate um administrador.',\n 'avaliations.remove.success': 'Avaliação removida com sucesso',\n 'avaliations.remove.warning.unauthorized': 'Não é possível realizar esta ação',\n 'label.new.avaliation': 'Nova Avaliação',\n 'vendor.avaliation.tab.label': 'Avaliação do Fornecedor',\n 'avaliations.label.id': 'Id',\n 'avaliations.label.id.avaliation': 'Id Avaliação',\n 'avaliations.remove.error': 'Ocorreu um erro ao tentar remover a avaliação',\n 'avaliations.remove.error.conflict': 'A Avaliação não pode ser removida pois está sendo usada pelo sistema',\n 'avaliations.hint.keyword': 'Atividade/Serviço/Produto/Marca',\n 'avaliations.label.start.year': 'Ano Inicial',\n 'avaliations.label.end.year': 'Ano Final',\n 'avaliations.label.frequency': 'Freqüência',\n 'avaliations.label.month': 'Mês',\n 'avaliations.label.quarter': 'Trimestre',\n 'avaliations.label.semester': 'Semestre',\n 'avaliations.label.year': 'Ano',\n 'avaliations.label.price': 'Preço',\n 'avaliations.label.quality': 'Qualidade',\n 'avaliations.label.logistics': 'Entrega',\n 'avaliations.label.technology': 'Tecnologia',\n 'avaliations.label.total': 'Total',\n 'avaliations.label.remark': 'Observação',\n 'avaliations.placeholder.keyword': 'Palavra-chave',\n 'avaliations.placeholder.quartile': 'Quartil',\n 'avaliations.placeholder.year': 'Ano',\n 'avaliations.list.notfound': 'Nenhuma avaliação encontrada',\n 'avaliations.placeholder.start.year': 'Ano Inicial',\n 'avaliations.placeholder.end.year': 'Ano Final',\n 'avaliations.start.year.less.end.year' : 'O ano inicial deve ser menor ou igual ao ano final.',\n 'avaliation.title.identification': 'Identificação da avaliação',\n 'avaliation.title.score': 'Ponto / Mês',\n 'avaliation.label.year': 'Ano',\n 'avaliation.label.createdby': 'Criado por',\n 'avaliation.label.updatedby': 'Atualizado por',\n 'avaliation.label.createddate': 'Data de criação',\n 'avaliation.label.updateddate': 'Data de atualização',\n 'error.avaliation.score.empty': 'A lista de pontuação da avaliação é obrigatória.',\n 'label.edit.avaliation': 'Edição de Avaliação',\n 'avaliation.update.success': 'Avaliação atualizada com sucesso',\n 'error.avaliation.duplicated': 'Já existe uma avaliação registrada para o ano informado.',\n 'avaliation.hint.vendor': 'Apenas os fornecedores com status ativo e com milestones aprovadas serão listados.',\n 'avaliation.add.score.already.exist': 'Já existe uma pontuação para o quartil informado.',\n 'avaliation.save.success': 'Avaliação salva com sucesso.',\n 'avaliation.remove.confirm': 'Se remover o ítem (#item) todas as avaliações e seus pontos do ano (#year) serão removidos. Deseja Confirmar?',\n 'avaliation.placeholder.chart.button': 'Gráfico',\n 'avaliation.placeholder.select.category': 'Selecione a categoria',\n 'avaliations.label.btn.grafico': ' ',\n 'avaliations.change.view.graphic.label': 'Visualizar gráfico',\n 'avaliations.change.view.list.label': 'Visualizar lista',\n 'avaliations.chart.label.viewby.total': 'Visualizar por total',\n 'avaliations.chart.label.viewby.category': 'Visualizar por categoria',\n 'avaliations.vendor.by.logistics': 'Avaliação Fornecedor Por Entrega',\n 'avaliations.vendor.by.price': 'Avaliação Fornecedor Por Preço',\n 'avaliations.vendor.by.quality': 'Avaliação Fornecedor Por Qualidade',\n 'avaliations.vendor.by.technology': 'Avaliação Fornecedor Por Tecnologia',\n 'avaliations.vendor.by.total': 'Avaliação Fornecedor Por Total',\n \"avaliation.chart.generate.message.alert\": \"Selecione uma categoria ou total para gerar o gráfico atualizado.\",\n \"avaliations.chart.labelx\": \"Ano\",\n 'avaliations.score.error': 'É necessário inserir pelo menos uma pontuação.',\n 'avaliation.report.name': 'Relatório_Avaliacao_de_Fornecedor_',\n 'visit.label.id': 'ID do Fornecedor',\n 'visit.placeholder.id': 'Consulta por ID do Fornecedor',\n 'contract.report.name': 'Relatório_Contratos_',\n 'vendor.save.same.sap.error': 'Código SAP já registrado para um fornecedor.'\n });\n }\n})();\n\n/*eslint no-unused-vars: 0*/\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('SourcingService', SourcingService);\n\n /** @ngInject */\n function SourcingService($state, $translate, $q, $log, ToastUtil, AuthService, DefaultService, VendorService, VendorOriginService, VisitService, MilestoneService, AvaliationService, ContractService) {\n\n function validateEditPermission(profile) {\n if (!profile.CanEdit && !profile.CanConsult) {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n return false;\n }\n\n return true;\n }\n\n function validateDeletePermission(vm) {\n if (vm.profile.hasLoad && !vm.profile.CanDelete) {\n return false;\n }\n\n return true;\n }\n\n function validateExportPermission(vm) {\n if (vm.profile.hasLoad && !vm.profile.CanExport) {\n return false;\n }\n\n return true;\n }\n\n function validateAddPermission(vm) {\n if (vm.profile.hasLoad && !vm.profile.CanAdd) {\n return false;\n }\n\n return true;\n }\n\n function validateViewPermission(vm) {\n if (vm.profile.hasLoad && !vm.profile.CanView) {\n ToastUtil.showToastMessage($translate.instant(\"msg.not.authorized\"), ToastUtil.ToastType.WARN);\n $state.go('not-authorized', {}, {});\n return false;\n }\n\n return true;\n }\n\n function validateApproveViewPermission(vm) {\n if (vm.profile.hasLoad && vm.profile.CanApprove && vm.profile.CanView) {\n return true;\n } else {\n ToastUtil.showToastMessage($translate.instant(\"msg.not.authorized\"), ToastUtil.ToastType.WARN);\n $state.go('not-authorized', {}, {});\n return false;\n }\n\n }\n\n function validateApproveDeletePermission(vm) {\n if (vm.profile.hasLoad && !vm.profile.CanDelete) {\n return false;\n }\n\n return true;\n }\n\n function validateApprovePermission(vm) {\n if (vm.profile.hasLoad && !vm.profile.CanApprove) {\n return false;\n }\n\n return true;\n }\n\n function validateApproveAddPermission(vm) {\n if (vm.profile.hasLoad && !vm.profile.CanApprove && !vm.profile.CanAdd) {\n return false;\n }\n\n return true;\n }\n\n function validateApproveEditPermission(profile) {\n if (!profile.CanEdit) {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n return false;\n }\n\n return true;\n }\n\n function searchVendors(vm, filtro) {\n if (validateViewPermission(vm)) {\n return VendorService.listVendors(filtro);\n } else {\n return $q.reject('not authorized');\n }\n }\n\n function createVendor(vm) {\n if (validateAddPermission(vm)) {\n $state.go('vendor-create');\n } else {\n ToastUtil.showToastMessage($translate.instant(\"msg.not.authorized\"), ToastUtil.ToastType.WARN);\n }\n }\n\n function createMilestone(vm) {\n if (validateAddPermission(vm)) {\n $state.go('milestone-create');\n } else {\n ToastUtil.showToastMessage($translate.instant(\"msg.not.authorized\"), ToastUtil.ToastType.WARN);\n }\n }\n\n function createVisit(vm) {\n if (validateAddPermission(vm)) {\n $state.go('visit-create');\n } else {\n ToastUtil.showToastMessage($translate.instant(\"msg.not.authorized\"), ToastUtil.ToastType.WARN);\n }\n }\n\n function createAvaliation(vm) {\n if (validateAddPermission(vm)) {\n $state.go('avaliation-create');\n } else {\n ToastUtil.showToastMessage($translate.instant(\"msg.not.authorized\"), ToastUtil.ToastType.WARN);\n }\n }\n\n function searchVisits(vm, filtro) {\n if (validateApproveViewPermission(vm)) {\n return VisitService.listVisits(filtro);\n } else {\n return $q.reject('not authorized');\n }\n }\n\n function searchMilestones(vm, filtro) {\n if (validateApproveViewPermission(vm)) {\n return MilestoneService.listMilestones(filtro);\n } else {\n return $q.reject('not authorized');\n }\n }\n\n function searchAvaliations(vm, filtro) {\n if (validateApproveViewPermission(vm)) {\n return AvaliationService.listAvaliations(filtro);\n } else {\n return $q.reject('not authorized');\n }\n }\n\n function createContract(vm) {\n if (validateAddPermission(vm)) {\n $state.go('contract-create');\n } else {\n ToastUtil.showToastMessage($translate.instant(\"msg.not.authorized\"), ToastUtil.ToastType.WARN);\n }\n }\n\n function createComponent(vm) {\n if (validateAddPermission(vm)) {\n $state.go('component-development-create');\n } else {\n ToastUtil.showToastMessage($translate.instant(\"msg.not.authorized\"), ToastUtil.ToastType.WARN);\n }\n }\n\n return {\n\n hasApprovePermission: validateApprovePermission,\n\n createContract: function (vm, $scope) {\n if (vm.profile.hasLoad) {\n createContract(vm);\n } else {\n this.loadProfileModules(vm, $scope)\n .then(function () {\n createContract(vm);\n })\n .catch(function (error) {\n $log.log(error);\n })\n }\n },\n\n editContract: function (id, profile) {\n if (validateEditPermission(profile)) {\n $state.go('contract-edit', {\n Id: id\n });\n }\n },\n\n exportContract: function (vm, filtro, language) {\n if (validateExportPermission(vm)) {\n return ContractService.downloadAll(filtro, language);\n } else {\n return $q.reject('not authorized');\n }\n },\n\n createComponentDevelopment: function (vm, $scope) {\n if (vm.profile.hasLoad) {\n createComponent(vm);\n } else {\n this.loadProfileModules(vm, $scope)\n .then(function () {\n createComponent(vm);\n })\n .catch(function (error) {\n $log.log(error);\n })\n }\n },\n\n editComponentDevelopment: function (id, profile) {\n if (validateEditPermission(profile)) {\n $state.go('component-development-edit', {\n Id: id\n });\n }\n },\n\n createVendor: function (vm, $scope) {\n if (vm.profile.hasLoad) {\n createVendor(vm);\n } else {\n this.loadProfileModules(vm, $scope)\n .then(function () {\n createVendor(vm);\n })\n .catch(function (error) {\n $log.log(error);\n })\n }\n\n },\n\n editVendor: function (id, profile) {\n if (validateEditPermission(profile)) {\n $state.go('vendor-edit', {\n Id: id\n });\n }\n },\n\n removeVendor: function (vm, vendorId) {\n if (validateDeletePermission(vm)) {\n return VendorService.delete(vendorId);\n } else {\n return $q.reject('not authorized');\n }\n },\n\n loadProfileModules: function (vm, $scope) {\n var profileModule = {};\n\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.moduleSourcing;\n\n return DefaultService.loadModules(profileModule)\n .then(function (response) {\n vm.profile = angular.copy(response);\n vm.profile.hasLoad = true;\n });\n },\n\n loadProfileTechnicalVisitModules: function (vm, $scope) {\n var profileModule = {};\n\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.moduleTechnicalVisit;\n\n return DefaultService.loadModules(profileModule)\n .then(function (response) {\n vm.profile = angular.copy(response);\n vm.profile.hasLoad = true;\n });\n },\n\n loadProfileSupplierApprovalMilestonesModules: function (vm, $scope) {\n var profileModule = {};\n\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.moduleSupplierApprovalMilestones;\n\n return DefaultService.loadModules(profileModule)\n .then(function (response) {\n vm.profile = angular.copy(response);\n vm.profile.hasLoad = true;\n });\n },\n\n loadProfileSupplierEvaluationModules: function (vm, $scope) {\n var profileModule = {};\n\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.moduleSupplierEvaluation;\n\n return DefaultService.loadModules(profileModule)\n .then(function (response) {\n vm.profile = angular.copy(response);\n vm.profile.hasLoad = true;\n });\n },\n\n loadProfileContractModules: function (vm, $scope) {\n var profileModule = {};\n\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.moduleContract;\n\n return DefaultService.loadModules(profileModule)\n .then(function (response) {\n vm.profile = angular.copy(response);\n vm.profile.hasLoad = true;\n });\n },\n\n loadProfileComponentDevelopmentModules: function (vm, $scope) {\n var profileModule = {};\n\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.moduleComponentDevelopment;\n\n return DefaultService.loadModules(profileModule)\n .then(function (response) {\n vm.profile = angular.copy(response);\n vm.profile.hasLoad = true;\n });\n },\n\n searchVendors: function (vm, filtro, $scope) {\n if (vm.profile.hasLoad) {\n return searchVendors(vm, filtro);\n } else {\n return this.loadProfileModules(vm, $scope)\n .then(function () {\n return searchVendors(vm, filtro);\n })\n .catch(function () {\n return $q.reject();\n })\n }\n },\n\n autoCompleteVendor: function (filter) {\n return VendorService.listVendorsAutocomplete(filter);\n },\n\n listAllVendorOrigin: function () {\n return VendorOriginService.list().catch(function () {\n ToastUtil.showToastMessage($translate.instant(\"error.vendor.search\"), ToastUtil.ToastType.ERROR);\n });\n },\n\n listAllActiveVendorOrigin: function () {\n return VendorOriginService.list({\n Title: '',\n CsActive: 1\n }).catch(function () {\n ToastUtil.showToastMessage($translate.instant(\"error.vendor.search\"), ToastUtil.ToastType.ERROR);\n });\n },\n\n constantToList: function (constant, list) {\n angular.forEach(constant, function (value, key) {\n list.push({\n Id: value,\n Title: key\n });\n });\n },\n\n saveVendor: function (vendor) {\n return VendorService.save(vendor);\n },\n\n updateVendor: function (id, vendor) {\n return VendorService.update(id, vendor);\n },\n\n getVendorById: function (id) {\n return VendorService.getById(id);\n },\n\n exportVendors: function (vm, filtro, language) {\n if (validateExportPermission(vm)) {\n return VendorService.downloadAll(filtro, language);\n } else {\n return $q.reject('not authorized');\n }\n },\n\n exportVisits: function (vm, filtro, language) {\n if (validateExportPermission(vm)) {\n return VisitService.downloadAll(filtro, language);\n } else {\n return $q.reject('not authorized');\n }\n },\n\n createVisit: function (vm, $scope) {\n if (vm.profile.hasLoad) {\n createVisit(vm);\n } else {\n this.loadProfileModules(vm, $scope)\n .then(function () {\n createVisit(vm);\n })\n .catch(function (error) {\n $log.log(error);\n })\n }\n\n },\n\n editVisit: function (id, vm) {\n if (validateApproveViewPermission(vm)) {\n $state.go('visit-edit', {\n Id: id\n });\n }\n },\n\n createMilestone: function (vm, $scope) {\n if (vm.profile.hasLoad) {\n createMilestone(vm);\n } else {\n this.loadProfileModules(vm, $scope)\n .then(function () {\n createMilestone(vm);\n })\n .catch(function (error) {\n $log.log(error);\n })\n }\n\n },\n\n editMilestone: function (id, vm) {\n if (validateApproveViewPermission(vm)) {\n $state.go('milestone-edit', {\n Id: id\n });\n }\n },\n\n removeVisit: function (vm, visitId) {\n if (validateApproveViewPermission(vm)) {\n return VisitService.delete(visitId);\n } else {\n return $q.reject('not authorized');\n }\n },\n\n searchVisits: function (vm, filtro, $scope) {\n if (vm.profile.hasLoad) {\n return searchVisits(vm, filtro);\n } else {\n return this.loadProfileModules(vm, $scope)\n .then(function () {\n return searchVisits(vm, filtro);\n })\n .catch(function () {\n return $q.reject();\n })\n }\n },\n\n saveVisit: function (visit) {\n return VisitService.save(visit);\n },\n\n updateVisit: function (id, visit) {\n return VisitService.update(id, visit);\n },\n\n getVisitById: function (id) {\n return VisitService.getById(id);\n },\n\n getVendorTypeOptions: function () {\n return VendorService.getVendorTypeOptions();\n },\n\n getCadastralSituationOptions: function () {\n return VendorService.getCadastralSituationOptions();\n },\n\n getRegistrationStatusOptions: function () {\n return VendorService.getRegistrationStatusOptions();\n },\n\n getStatusOptions: function () {\n return VendorService.getStatusOptions();\n },\n\n hasApproveAndViewPermission: function (vm) {\n return validateApproveViewPermission(vm);\n },\n\n removeMilestones: function (vm, MilestoneId) {\n if (validateApproveDeletePermission(vm)) {\n return MilestoneService.delete(MilestoneId);\n } else {\n return $q.reject('not authorized');\n }\n },\n\n searchMilestones: function (vm, filtro, $scope) {\n if (vm.profile.hasLoad) {\n return searchMilestones(vm, filtro);\n } else {\n return this.loadProfileModules(vm, $scope)\n .then(function () {\n return searchMilestones(vm, filtro);\n })\n .catch(function () {\n return $q.reject();\n })\n }\n },\n\n exportMilestones: function (vm, filtro, language) {\n if (validateExportPermission(vm)) {\n return MilestoneService.downloadAll(filtro, language);\n } else {\n return $q.reject('not authorized');\n }\n },\n\n createAvaliation: function (vm, $scope) {\n if (vm.profile.hasLoad) {\n createAvaliation(vm);\n } else {\n this.loadProfileModules(vm, $scope)\n .then(function () {\n createAvaliation(vm);\n })\n .catch(function (error) {\n $log.log(error);\n })\n }\n\n },\n\n searchAvaliations: function (vm, filtro, $scope) {\n var searchParams = angular.copy(filtro);\n searchParams.VendorId = searchParams.VendorId ? searchParams.VendorId.Id : searchParams.VendorId;\n searchParams.Quartile = searchParams.Quartile ? searchParams.Quartile.value : searchParams.Quartile;\n if (vm.profile.hasLoad) {\n return searchAvaliations(vm, searchParams);\n } else {\n return this.loadProfileModules(vm, $scope)\n .then(function () {\n return searchAvaliations(vm, searchParams);\n })\n .catch(function () {\n return $q.reject();\n })\n }\n },\n\n editAvaliation: function (id, vm) {\n if (validateApproveViewPermission(vm)) {\n $state.go('avaliation-edit', {\n Id: id\n });\n }\n },\n\n removeAvaliation: function (vm, avaliationId) {\n if (validateApproveViewPermission(vm)) {\n return AvaliationService.delete(avaliationId);\n } else {\n return $q.reject('not authorized');\n }\n }\n\n };\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(SourcingRouter);\n\n /** @ngInject */\n function SourcingRouter($stateProvider) {\n\n\n $stateProvider.state('vendor-list', {\n url: '/sourcing/vendor',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/sourcing/vendor/vendor-list.html',\n controller: 'VendorListController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.sourcing'\n },\n authorize: true\n });\n\n $stateProvider.state('vendor-create', {\n url: '/sourcing/vendor/create',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/sourcing/vendor/vendor-edit.html',\n controller: 'VendorController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.sourcing'\n },\n authorize: true\n });\n\n $stateProvider.state('vendor-edit', {\n url: '/sourcing/vendor/edit/:Id',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/sourcing/vendor/vendor-edit.html',\n controller: 'VendorController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.sourcing'\n },\n authorize: true\n });\n\n $stateProvider.state('visit-list', {\n url: '/sourcing/visit',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/sourcing/technical_visit/visit-list.html',\n controller: 'VisitListController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.sourcing'\n },\n authorize: true\n });\n\n $stateProvider.state('visit-create', {\n url: '/sourcing/visit/create',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/sourcing/technical_visit/technical-visit-edit.html',\n controller: 'TechnicalVisitController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.sourcing'\n },\n authorize: true\n });\n\n $stateProvider.state('visit-edit', {\n url: '/sourcing/visit/edit/:Id',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/sourcing/technical_visit/technical-visit-edit.html',\n controller: 'TechnicalVisitController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.sourcing'\n },\n authorize: true\n });\n\n $stateProvider.state('milestone-create', {\n url: '/sourcing/milestone/create',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/sourcing/milestone/milestone-edit.html',\n controller: 'MilestoneController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.sourcing'\n },\n authorize: true\n });\n\n $stateProvider.state('milestone-edit', {\n url: '/sourcing/milestone/edit/:Id',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/sourcing/milestone/milestone-edit.html',\n controller: 'MilestoneController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.sourcing'\n },\n authorize: true\n });\n\n $stateProvider.state('milestone-list', {\n url: '/sourcing/milestone',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/sourcing/milestone/milestone-list.html',\n controller: 'MilestoneListController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.sourcing'\n },\n authorize: true\n });\n\n $stateProvider.state('avaliation-list', {\n url: '/sourcing/avaliation',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/sourcing/avaliation/avaliation-list.html',\n controller: 'AvaliationListController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.sourcing'\n },\n authorize: true\n });\n\n $stateProvider.state('avaliation-create', {\n url: '/sourcing/avaliation/create',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/sourcing/avaliation/avaliation-edit.html',\n controller: 'AvaliationController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.sourcing'\n },\n authorize: true\n });\n\n $stateProvider.state('avaliation-edit', {\n url: '/sourcing/avaliation/edit/:Id',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/sourcing/avaliation/avaliation-edit.html',\n controller: 'AvaliationController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.sourcing'\n },\n authorize: true\n });\n\n $stateProvider.state('kpi-import', {\n url: '/sourcing/kpi/import',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/sourcing/kpi/kpi-import-list.html',\n controller: 'SourcingKpiImportListController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.sourcing'\n },\n authorize: true\n });\n\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .constant('RegistrationStatusConstant', {\n \"vendor.registrationstatus.bank\": 1,\n \"vendor.registrationstatus.approved\": 2,\n \"vendor.registrationstatus.suspended\": 3,\n \"vendor.registrationstatus.deaccredited\": 4,\n \"vendor.registrationstatus.notapplicable\": 5\n })\n .constant('CadastralSituationConstant', {\n 'vendor.cadastralsituation.registered': 1,\n 'vendor.cadastralsituation.notregistered': 2\n })\n .constant('VendorTypeConstant', {\n 'vendor.vendortype.product': 1,\n 'vendor.vendortype.service': 2,\n 'vendor.vendortype.direct': 3,\n 'vendor.vendortype.indirect': 4\n });\n})();\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(SgiTranslate);\n\n /** @ngInject */\n function SgiTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'title.sgi': 'SGI',\n 'sgi.title.internal.license': 'Internal Environmental Services',\n 'sgi.label.internal.license.edit': 'Edit Internal Environmental Services',\n 'sgi.label.internal.license.new': 'New Internal Environmental Service',\n 'sgi.label.internal.license.identification': 'Internal Environmental Services Identification',\n 'sgi.label.internal.license.direct.identification': 'Licenses',\n\n 'sgi.title.license': 'Environmental Services',\n 'sgi.label.license.edit': 'Edit Environmental Services',\n 'sgi.label.license.new': 'New Environmental Services',\n 'sgi.label.license.identification': 'Environmental Services Identification',\n 'sgi.label.license.direct.identification': 'Licenses Direct Vendor',\n 'sgi.label.license.indirect.identification': 'Licenses Indirect Vendor',\n\n 'sgi.label.license.id.service': 'ID Service',\n 'sgi.label.license.vendor': 'Vendor',\n 'sgi.label.license.license.type': 'License Type',\n 'sgi.label.license.license.type.all': 'All Types',\n 'sgi.label.license.has.protocol': 'Has Protocol',\n 'sgi.label.license.has.protocol.all': 'All',\n 'sgi.label.license.has.protocol.yes': 'Yes',\n 'sgi.label.license.has.protocol.no': 'No',\n 'sgi.label.license.initial.emission': 'Initial Emission',\n 'sgi.label.license.end.emission': 'End Emission',\n 'sgi.label.license.initial.expiration': 'Initial Expiration',\n 'sgi.label.license.end.expiration': 'End Expiration',\n 'sgi.label.license.id': 'Id',\n 'sgi.label.license.contact': 'Contact Us / Fone',\n 'sgi.label.license.last.update': 'Last Update',\n 'sgi.label.license.area': 'Department',\n\n 'sgi.label.createdby': 'Created By',\n 'sgi.label.created.date': 'Created Date',\n 'sgi.label.updatedby': 'Updated By',\n 'sgi.label.updated.date': 'Updated Date',\n\n 'sgi.label.license.direct.vendor': 'Direct Vendor',\n 'sgi.label.license.indirect.vendor': 'Indirect Vendor',\n 'sgi.label.license.department': 'Department / Support Area',\n 'sgi.label.license.service.description': 'Service Description',\n 'sgi.label.license.type': 'Type',\n 'sgi.label.license.number': 'Number',\n 'sgi.label.license.emission.date': 'Emission Date',\n 'sgi.label.license.expiration.date': 'Expiration Date',\n 'sgi.label.license.remark': 'Remark',\n 'sgi.label.license.protocol': 'Active Protocol',\n 'sgi.label.license.status': 'Status',\n 'sgi.label.license.status.all': 'Search by status',\n 'sgi.label.license.status.active': 'Active',\n 'sgi.label.license.status.inactive': 'Inactive',\n\n 'sgi.label.button.attachments': 'Attachments',\n 'sgi.placeholder.vendor': 'Search by code SAP or vendor name',\n 'sgi.vendor.error.license.duplicated': 'Vendor already exists in list of licenses',\n 'sgi.vendor.error.license.indirect': 'Indirect vendor can not be the same direct vendor',\n 'sgi.vendor.error.license.direct.required': 'Direct license registration is required',\n 'sgi.vendor.error.license.number.exists': 'The value entered in the \"Number\" field has already been registered: ',\n 'sgi.environmental.save.success': 'Environmental Services was successfully saved',\n 'sgi.environmental.dates.invalid': 'Expiration Date is less than Emission Date',\n 'sgi.environmental.error.search': 'An error occurred when trying to load a list of license.',\n 'sgi.environmental.remove.success': 'License was successfully removed',\n 'sgi.environmental.remove.error': 'An error occurred when try to remove license',\n 'sgi.environmental.remove.error.conflict': 'The License can not be removed because it is being used by the system',\n 'sgi.environmental.save.error.vendor.license.active': 'The direct vendor selected, registered with active direct or indirect licenses!'\n });\n\n $translateProvider.translations('pt', {\n 'title.sgi': 'SGI',\n 'sgi.title.internal.license': 'Serviço Ambiental Interno',\n 'sgi.label.internal.license.edit': 'Editar Serviço Ambiental Interno',\n 'sgi.label.internal.license.new': 'Novo Serviço Ambiental Interno',\n 'sgi.label.internal.license.identification': 'Identificação de Serviços Ambientais Internos',\n 'sgi.label.internal.license.direct.identification': 'Licenças',\n\n 'sgi.title.license': 'Serviços Ambientais',\n 'sgi.label.license.edit': 'Editar Serviço Ambiental',\n 'sgi.label.license.new': 'Novo Serviço Ambiental',\n 'sgi.label.license.identification': 'Identificação de Serviços Ambientais',\n 'sgi.label.license.direct.identification': 'Licenças Fornecedor Direto',\n 'sgi.label.license.indirect.identification': 'Licenças Fornecedor Indireto',\n\n 'sgi.label.license.id.service': 'ID Serviço',\n 'sgi.label.license.vendor': 'Fornecedor',\n 'sgi.label.license.license.type': 'Tipo de Licença',\n 'sgi.label.license.license.type.all': 'Todos os Tipos',\n 'sgi.label.license.has.protocol': 'Tem Protocolo',\n 'sgi.label.license.has.protocol.all': 'Todos',\n 'sgi.label.license.has.protocol.yes': 'Sim',\n 'sgi.label.license.has.protocol.no': 'Não',\n 'sgi.label.license.initial.emission': 'Emissão Inicial',\n 'sgi.label.license.end.emission': 'Emissão Final',\n 'sgi.label.license.initial.expiration': 'Inicio Expiração',\n 'sgi.label.license.end.expiration': 'Final Expiração',\n 'sgi.label.license.id': 'Id',\n 'sgi.label.license.contact': 'Contato / Telefone',\n 'sgi.label.license.last.update': 'Última Atualização',\n 'sgi.label.license.area': 'Departamento',\n\n 'sgi.label.createdby': 'Criado Por',\n 'sgi.label.created.date': 'Data De Criação',\n 'sgi.label.updatedby': 'Atualizado Por',\n 'sgi.label.updated.date': 'Data Atualização',\n\n 'sgi.label.license.direct.vendor': 'Fornecedor Direto',\n 'sgi.label.license.indirect.vendor': 'Fornecedor Indireto',\n 'sgi.label.license.department': 'Departamento / Área de suporte',\n 'sgi.label.license.service.description': 'Descrição do Serviço',\n 'sgi.label.license.type': 'Tipo',\n 'sgi.label.license.number': 'Número',\n 'sgi.label.license.emission.date': 'Data de Emissão',\n 'sgi.label.license.expiration.date': 'Data de Expiração',\n 'sgi.label.license.remark': 'Observação',\n 'sgi.label.license.protocol': 'Protocolo Ativo',\n 'sgi.label.license.status': 'Situação',\n 'sgi.label.license.status.all': 'Buscar pela situação',\n 'sgi.label.license.status.active': 'Ativo',\n 'sgi.label.license.status.inactive': 'Inativo',\n\n 'sgi.label.button.attachments': 'Anexos',\n 'sgi.placeholder.vendor': 'Consulta por código do SAP ou nome do fornecedor',\n 'sgi.vendor.error.license.duplicated': 'Fornecedor já existe na lista de licenças',\n 'sgi.vendor.error.license.indirect': 'Fornecedor indireto não pode ser o mesmo fornecedor direto',\n 'sgi.vendor.error.license.direct.required': 'É necessário o cadastro de licença direta',\n 'sgi.vendor.error.license.number.exists': 'O valor digitado no campo \"Número\" já foi cadastrado: ',\n 'sgi.environmental.save.success': 'Serviço Ambiental salvo com sucesso',\n 'sgi.environmental.dates.invalid': 'Data de Expiração é menor que Data de Emissão',\n 'sgi.environmental.error.search': 'Não foi possível carregar a lista de licenças, tente novamente ou contate um administrador.',\n 'sgi.environmental.remove.success': 'Licença removida com sucesso',\n 'sgi.environmental.remove.error': 'Ocorreu um erro ao tentar remover a licença',\n 'sgi.environmental.remove.error.conflict': 'A Licença não pode ser removida pois está sendo usada pelo sistema',\n 'sgi.environmental.save.error.vendor.license.active': 'O fornecedor direto selecionado, consta cadastrado com licenças diretas ou indiretas ativas!'\n });\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(SgiRouter);\n\n /** @ngInject */\n function SgiRouter($stateProvider) {\n\n $stateProvider.state('environmental-list', {\n url: '/sgi/environmental',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/sgi/environmental/environmental-list.html',\n controller: 'EnvironmentalListController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.sgi',\n internal: false\n },\n authorize: true\n });\n\n $stateProvider.state('environmental-create', {\n url: '/sgi/environmental/create',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/sgi/environmental/environmental-edit.html',\n controller: 'EnvironmentalEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.sgi',\n internal: false\n },\n authorize: true\n });\n\n $stateProvider.state('environmental-edit', {\n url: '/sgi/environmental/edit/:Id',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/sgi/environmental/environmental-edit.html',\n controller: 'EnvironmentalEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.sgi',\n internal: false\n },\n authorize: true\n });\n\n $stateProvider.state('internal-environmental-list', {\n url: '/sgi/internal-environmental',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/sgi/environmental/environmental-list.html',\n controller: 'EnvironmentalListController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.sgi',\n internal: true\n },\n authorize: true\n });\n\n $stateProvider.state('internal-environmental-create', {\n url: '/sgi/internal-environmental/create',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/sgi/environmental/environmental-edit.html',\n controller: 'EnvironmentalEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.sgi',\n internal: true\n },\n authorize: true\n });\n\n $stateProvider.state('internal-environmental-edit', {\n url: '/sgi/internal-environmental/edit/:Id',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/sgi/environmental/environmental-edit.html',\n controller: 'EnvironmentalEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.sgi',\n internal: true\n },\n authorize: true\n });\n\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('SectionService', SectionService);\n\n /** @ngInject */\n function SectionService($window, $injector, $q, ConfigurationService) {\n var BASE = \"/section/\";\n return {\n\n list: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + \"list\", {\n params: filter,\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n\n save: function (area) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + BASE, area, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n\n getById: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + 'byId/' + id, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n delete: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + BASE + \"/\" + id, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n\n\n };\n }\n})();\n\n/**\n * Created by anderson.lins on 03/03/2017.\n */\n(function() {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('RoleService', RoleService);\n\n /** @ngInject */\n function RoleService($injector, $q, ConfigurationService) {\n return {\n load: function() {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/profile-module/')\n .then(\n function(response) {\n deferred.resolve(response.data);\n return deferred.promise;\n }\n ,function(error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n };\n }\n})();\n\n/**\n * Created by anderson.lins on 20/03/2017.\n */\n(function(){\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(MainReportTranslate);\n\n function MainReportTranslate($translateProvider){\n $translateProvider.translations('en',{\n 'title.main.report' : 'Main Report',\n 'title.email.group' : 'Email Group',\n 'title.button.main.report' : 'Submit Report',\n 'title.button.config' : 'Config',\n 'title.button.email.group' : 'Email Group',\n 'title.export-report' : 'Export to report',\n 'title.import.report' : 'Import a report',\n 'title.emails.send.report' : 'Emails to be sent',\n 'title.select.date.report' : 'Select a date and click on \"Export\" to generate a report:',\n 'title.click.import.report' : 'Click on \"Attachments\" to import your report and other files:',\n 'placeholder.main.report.email.group.filterby.email': 'Filter by email...',\n 'label.main.report.email.group': 'Email',\n 'label.main.report.email.group.description' : 'Main Report Notification Emails',\n 'label.attachment' : 'Attachments',\n 'label.main.report.search.email' : 'Search by email',\n 'label.main.report.add.email' : 'Add emails',\n 'msg.main.report.error.load.group.email' : 'There was an error loading the email group.',\n 'msg.main.report.success.send.email' : 'Email successfully sent.',\n 'msg.main.report.error.send.email' : 'An error occurred while sending the email, the email was not sent.',\n 'msg.main.report.invalid.attachments' : 'You need to add at least one attachment to send the email.',\n 'msg.main.report.invalid.emails' : 'You need to add at least one email.',\n 'msg.main.report.not.authorized' : 'You do not have permission to access this module.',\n 'title.all.in.one.report.name' : 'All_in_One_'\n });\n\n $translateProvider.translations('pt',{\n 'title.main.report' : 'Relatório Principal',\n 'title.email.group' : 'Grupo de E-mail',\n 'title.button.main.report' : 'Enviar Relatório',\n 'title.button.config' : 'Configuração',\n 'title.export-report' : 'Exportar relatório',\n 'title.import.report' : 'Importar para relatório',\n 'title.emails.send.report' : 'E-mails a serem enviados',\n 'title.select.date.report' : 'Selecione uma data e clique em \"Exportar\" para gerar o relatório:',\n 'title.click.import.report' : 'Clique em \"Anexos\" para importar seu relatório e demais arquivos:',\n 'title.button.email.group' : 'Grupo de E-mail',\n 'placeholder.main.report.email.group.filterby.email': 'Filtrar por e-mail...',\n 'label.main.report.email.group': 'E-mail',\n 'label.main.report.email.group.description' : 'E-mails para notificação do relatório geral',\n 'label.attachment' : 'Anexos',\n 'label.main.report.search.email' : 'Pesquisar por email',\n 'label.main.report.add.email' : 'Adicionar e-mails',\n 'msg.main.report.error.load.group.email' : 'Ocorreu um erro ao carregar o grupo de e-mail.',\n 'msg.main.report.success.send.email' : 'E-mail enviado com sucesso.',\n 'msg.main.report.error.send.email' : 'Um erro ocorreu ao enviar o e-mail, o e-mail não foi enviado.',\n 'msg.main.report.invalid.attachments' : 'É preciso adicionar pelo menos um anexo para enviar o e-mail.',\n 'msg.main.report.invalid.emails' : 'É preciso adicionar pelo menos um email.',\n 'msg.main.report.not.authorized' : 'Você não possui autorização para acessar este módulo.',\n 'title.all.in.one.report.name' : 'All_in_One_'\n });\n }\n})();\n\n/**\n * Created by anderson.lins on 20/03/2017.\n */\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .factory('MainReportService', MainReportService);\n\n /** @ngInject */\n function MainReportService($injector, $q, ConfigurationService, $window) {\n return {\n\n downloadAll: function (filtro) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n var domain = \"/main-report\";\n\n $http.get(ConfigurationService.getServiceHost() + domain + '/export/',\n {\n params : filtro,\n responseType: 'arraybuffer'\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n }\n , function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n sendEmail: function (obj) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n var domain = \"/main-report\";\n\n $http.post(ConfigurationService.getServiceHost() + domain + '/', obj, {headers: {'Authorization': $window.localStorage.aqmsToken}})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n }\n , function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n\n }\n }\n})();\n\n/**\n * Created by anderson.lins on 20/03/2017.\n */\n(function(){\n 'use strict'\n\n angular\n .module('aqmsFrontend')\n .config(ReportRouter);\n\n function ReportRouter($stateProvider) {\n $stateProvider.state('main-report', {\n url: '/main-report',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/report/main-report.html',\n controller: 'MainReportController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'label.reports'\n },\n authorize: true\n });\n }\n})();\n\n/**\n * Created by anderson.lins on 20/03/2017.\n */\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('MainReportController', MainReportController);\n\n function MainReportController(AuthService, MainReportService, InputListEmailService, ToastUtil,\n $log, $translate, $state, moment, $document) {\n\n var vm = this;\n\n vm.searchParams = {\n StartDate: new Date()\n };\n\n vm.filterModel = \"\";\n vm.emailToNotifyList = [];\n vm.Attachments = [];\n\n var Email = {\n Attachments: []\n };\n\n vm.init = init;\n vm.export = exportMainReport;\n vm.sendEmail = sendEmail;\n\n function exportMainReport() {\n getMainReport();\n }\n\n function getMainReport() {\n vm.disableExport = true;\n\n var origStartDate = angular.copy(vm.searchParams.StartDate);\n if (origStartDate) {\n vm.searchParams.StartDate = moment(vm.searchParams.StartDate).format('DD/MM/YYYY');\n MainReportService.downloadAll(vm.searchParams)\n .then(\n function (response) {\n\n var date = moment().format(\"DD_MM_YYYY_HH_mm_ss\");\n\n var newFile = new Blob([response], {\n type: 'application/vnd.ms-excel'\n });\n\n var fileURL = URL.createObjectURL(newFile);\n\n var a = $document[0].createElement(\"a\");\n\n $document[0].body.appendChild(a);\n\n a.style = \"display: none\";\n a.href = fileURL;\n a.download = $translate.instant('title.all.in.one.report.name') + AuthService.getBusinessName() + \"_\" + date + \".xls\";\n a.click();\n\n vm.disableExport = false;\n vm.searchParams.StartDate = origStartDate;\n })\n .catch(\n function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"service.load.error\"), ToastUtil.ToastType.ERROR);\n\n vm.disableExport = false;\n vm.searchParams.StartDate = origStartDate;\n });\n } else {\n vm.disableExport = false;\n }\n }\n\n function sendEmail() {\n\n if (!(vm.Attachments.length > 0)) {\n ToastUtil.showToastMessage($translate.instant('msg.main.report.invalid.attachments'), ToastUtil.ToastType.WARN);\n return;\n }\n\n if (!(vm.emailToNotifyList.length > 0)) {\n ToastUtil.showToastMessage($translate.instant('msg.main.report.invalid.emails'), ToastUtil.ToastType.WARN);\n return;\n }\n\n angular.forEach(vm.Attachments, function (value) {\n Email.Attachments.push({\n Id: value.Id,\n Path: value.Path,\n FileName: value.FileName\n });\n });\n\n MainReportService.sendEmail(Email)\n .then(function () {\n ToastUtil.showToastMessage($translate.instant('msg.main.report.success.send.email'), ToastUtil.ToastType.SUCCESS);\n Email = {\n Attachments: []\n };\n })\n .catch(function (error) {\n Email = {\n Attachments: []\n };\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant('msg.main.report.error.send.email'), ToastUtil.ToastType.ERROR);\n });\n }\n\n function listEmails() {\n InputListEmailService.listAllMainReportEmails()\n .then(\n function (response) {\n vm.emailToNotifyList = angular.copy(response);\n })\n .catch(\n function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant('msg.main.report.error.load.group.email'), ToastUtil.ToastType.ERROR);\n });\n }\n\n function init() {\n if (!AuthService.isApproverRole()) {\n ToastUtil.showToastMessage($translate.instant('msg.main.report.not.authorized'), ToastUtil.ToastType.WARN);\n $state.go('dashBoard', {});\n }\n\n listEmails();\n }\n\n vm.init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(ProductionPlanTranslate);\n\n /** @ngInject */\n function ProductionPlanTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'title.production.plan': 'Production Plan',\n 'title.production.plan.email.group' : 'Email Group',\n 'production.plan.email.group.description': 'Production Plan Notification Emails',\n 'label.new.production.plan': 'New Production Plan',\n 'label.edit.production.plan': 'Production Plan Editing',\n 'label.planned': 'Planned',\n 'label.status': 'Status',\n 'production.plan.allmodels': 'Search all models',\n 'placeholder.clean.plan.button': 'Clean',\n 'placeholder.search.plan.button': 'Search',\n 'production.plan.ongoing': 'On Going',\n 'production.plan.close': 'Closed',\n 'production.plan.search.allstatus': 'Search all status',\n 'error.production.plan.search': 'An error occurred when trying to load a list of production plan.',\n 'production.plan.not.found': 'Production Plan not found.',\n 'production.plan.placeholder.id': 'Search by id',\n 'production.plan.search.allTurns': 'Search all shifts',\n 'production.plan.search.allSections': 'Search all sections',\n 'msg.error.listSections': 'An error occurred when trying to load a list of sections.',\n 'label.section': 'Section/Line',\n 'label.production.plan.variant': 'Variant',\n 'label.turn': 'Shift',\n 'label.hour': 'Hour',\n 'label.realized': 'Realized',\n 'label.occurrence': 'Occurrence',\n 'production.plan.identification': 'Production Plan Identification',\n 'production.plan.daily': 'Daily Production Plan',\n 'production.plan.default.model': 'Select a model...',\n 'production.plan.default.turn': 'Select a shift',\n 'production.plan.default.sections': 'Select a section...',\n 'production.plan.default.status': 'Select a status',\n 'production.plan.validation.planned.required': 'Report planned',\n 'production.plan.search.save.failed': 'There was an error trying to save production plan',\n 'production.plan.description': 'Description',\n 'production.plan.title.newOccurrence': 'New occurrence',\n 'production.plan.title.editOccurrence': 'Edit occurrence',\n 'production.plan.title.newScrap': 'New scrap',\n 'production.plan.title.editScrap': 'Edit scrap',\n 'production.plan.save.success': 'Production plan saved with success.',\n 'production.plan.quantity.label': 'Quantity',\n 'production.plan.validation.quantity.required': 'Report quantity',\n 'production.plan.reason': 'Describe the reason for closing the Production Plan.',\n 'production.plan.reason.scrap': 'Describe the reason for scrap',\n 'production.plan.deleted.success': \"Production plan was successfully deleted.\",\n 'production.plan.countermeasure': 'Countermeasure',\n 'production.plan.close.occurrence': 'Close occurrence',\n 'production.plan.save.hour.alert': 'You must close all occurrences.',\n 'production.plan.scrap.add.success': 'Scrap added successfully.',\n 'production.plan.occurrence.add.success': 'Occurrence added successfully.',\n 'production.plan.scrap.add.failed': 'There was an error adding scrap.',\n 'production.plan.occurrence.add.failed': 'There was an error adding the occurrence.',\n 'production.plan.scrap.remove.success': 'Scrap removed successfully.',\n 'production.plan.occurrence.remove.success': 'Occurrence removed successfully.',\n 'production.plan.scrap.remove.failed': 'There was an error removing the scrap.',\n 'production.plan.occurrence.remove.failed': 'There was an error removing the occurrence.',\n 'production.plan.scrap.edit.success': 'Scrap saved successfully.',\n 'production.plan.occurrence.edit.success': 'Occurrence saved successfully.',\n 'production.plan.scrap.edit.failed': 'There was an error saving the scrap.',\n 'production.plan.occurrence.edit.failed': 'There was an error saving the occurrence.',\n 'production.plan.realized.quantity.alert': 'Realized less that planned. Please report an occurrence.',\n 'production.plan.hour': 'Start time',\n 'production.plan.occurrence.elapsed': 'Occurrence resolution time',\n 'production.plan.occurrence.minutes': 'minutes',\n 'production.plan.occurrence.minute': 'minute',\n 'production.plan.occurrence.resolved': 'Resolved',\n 'production.plan.occurrence.process.normally': 'Equipment / Process operating normally',\n 'production.plan.occurrence.process.restrictions': 'Equipment / Process operating with restrictions',\n 'production.plan.occurrence.process.unavailable': 'Equipment / Process unavailable',\n 'production.plan.occurrence.not.resolved': 'Not resolved',\n 'label.process': 'Line Process Status',\n 'select.default.process': 'Select the status of the process',\n 'label.synthesis': 'Synthesis',\n 'select.default.synthesis': 'Select the synthesis',\n 'production.plan.occurrence.reuse': 'Reuse occurrence',\n 'select.default.reuse.occurrence': 'Select the occurrence',\n 'production.plan.is.exists': 'There is already a production plan in progress with the selected settings.',\n 'production.plan.occurrence.load': 'There was an error loading the production plan',\n 'production.plan.model.samename': 'There is already a Production Plan with this same model and variant.',\n 'production.plan.button.close.plan': 'Close Plan',\n 'production.plan.view': 'View',\n 'production.plan.view.occurrence': 'View occurrence',\n 'production.plan.view.scrap': 'View scrap',\n 'production.plan.model.two.sections': 'There are 2 different models for #value with status in progress.',\n 'production.plan.no.effect.found': 'None Effect found. It is necessary to register it first.'\n });\n\n $translateProvider.translations('pt', {\n 'title.production.plan': 'Plano de Produção',\n 'title.production.plan.email.group' : 'Grupo de e-mail',\n 'production.plan.email.group.description': 'E-mails para notificação do Plano de Produção',\n 'label.new.production.plan': 'Novo Plano de Produção',\n 'label.edit.production.plan': 'Edição de Plano de Produção',\n 'label.planned': 'Planejado',\n 'label.status': 'Status',\n 'production.plan.allmodels': 'Pesquisar todos os modelos',\n 'placeholder.clean.plan.button': 'Limpar',\n 'placeholder.search.plan.button': 'Pesquisa',\n 'production.plan.ongoing': 'Em andamento',\n 'production.plan.close': 'Fechado',\n 'production.plan.search.allstatus': 'Pesquisar todos os status',\n 'error.production.plan.search': 'Ocorreu um erro ao tentar carregar uma lista do plano de produção.',\n 'production.plan.not.found': 'Nenhum plano de produção encontrado.',\n 'production.plan.placeholder.id': 'Pesquisar por id',\n 'production.plan.search.allTurns': 'Pesquisar todos os turnos',\n 'production.plan.search.allSections': 'Pesquisar todas as seções',\n 'msg.error.listSections': 'Ocorreu um erro ao tentar carregar uma lista de seções.',\n 'label.production.plan.variant': 'Variante',\n 'label.section': 'Seção/Linha',\n 'label.turn': 'Turno',\n 'label.hour': 'Hora',\n 'label.realized': 'Realizado',\n 'label.occurrence': 'Ocorrência',\n 'production.plan.identification': 'Identificação do Plano de Produção',\n 'production.plan.daily': 'Plano Diário de Produção',\n 'production.plan.default.model': 'Selecione um modelo...',\n 'production.plan.default.turn': 'Selecione um turno...',\n 'production.plan.default.sections': 'Selecione uma seção...',\n 'production.plan.default.status': 'Selecione a situação',\n 'production.plan.search.save.failed': 'Ocorreu um erro ao tentar salvar o plano de produção',\n 'production.plan.description': 'Descrição',\n 'production.plan.title.newOccurrence': 'Nova ocorrência',\n 'production.plan.title.editOccurrence': 'Editar ocorrência',\n 'production.plan.title.editScrap': 'Edit scrap',\n 'production.plan.title.newScrap': 'Novo scrap',\n 'production.plan.save.success': 'Plano de produção salvo com sucesso.',\n 'production.plan.validation.planned.required': 'Informe o planejado',\n 'production.plan.quantity.label': 'Quantidade',\n 'production.plan.validation.quantity.required': 'Informe a quantidade',\n 'production.plan.reason': 'Descreva o motivo para o encerramento do Plano de Produção.',\n 'production.plan.reason.scrap': 'Descreva o motivo do descarte',\n 'production.plan.deleted.success': \"Plano de produção excluído com sucesso\",\n 'production.plan.countermeasure': 'Contramedida',\n 'production.plan.close.occurrence': 'Fechar ocorrência',\n 'production.plan.save.hour.alert': 'É necessário fechar todas as ocorrências.',\n 'production.plan.scrap.add.success': 'Scrap adicionado com sucesso.',\n 'production.plan.occurrence.add.success': 'Ocorrência adicionada com sucesso.',\n 'production.plan.scrap.add.failed': 'Ocorreu um erro ao adicionar o scrap.',\n 'production.plan.occurrence.add.failed': 'Ocorreu um erro ao adicionar a ocorrência.',\n 'production.plan.scrap.remove.success': 'Scrap removido com sucesso.',\n 'production.plan.occurrence.remove.success': 'Ocorrência removida com sucesso.',\n 'production.plan.scrap.remove.failed': 'Ocorreu um erro ao remover o scrap.',\n 'production.plan.occurrence.remove.failed': 'Ocorreu um erro ao remover a ocorrência.',\n 'production.plan.scrap.edit.success': 'Scrap salvo com sucesso.',\n 'production.plan.occurrence.edit.success': 'Ocorrência salva com sucesso.',\n 'production.plan.scrap.edit.failed': 'Ocorreu um erro ao salvar o scrap.',\n 'production.plan.occurrence.edit.failed': 'Ocorreu um erro ao salvar a ocorrência.',\n 'production.plan.realized.quantity.alert': 'Realizado menor que planejado. Informe uma ocorrência.',\n 'production.plan.hour': 'Hora inicial',\n 'production.plan.occurrence.elapsed': 'Tempo da resolução da ocorrência',\n 'production.plan.occurrence.minute': 'minuto',\n 'production.plan.occurrence.minutes': 'minutos',\n 'production.plan.occurrence.resolved': 'Resolvido',\n 'production.plan.occurrence.not.resolved': 'Não resolvido',\n 'production.plan.occurrence.process.normally': 'Equipamento / Processo de funcionamento normal',\n 'production.plan.occurrence.process.restrictions': 'Equipamento / Processo com restrições',\n 'production.plan.occurrence.process.unavailable': 'Equipamento / Processo indisponível',\n 'label.process': 'Status do processo da linha',\n 'select.default.process': 'Selecione o status do processo',\n 'label.synthesis': 'Síntese',\n 'select.default.synthesis': 'Selecione a síntese',\n 'production.plan.occurrence.reuse': 'Reutilizar ocorrência',\n 'select.default.reuse.occurrence': 'Selecione a ocorrência',\n 'production.plan.is.exists': 'Já existe uma plano de produção em andamento com as configurações selecionadas.',\n 'production.plan.occurrence.load': 'Ocorreu um erro ao carregar o plano de ocorrência',\n 'production.plan.model.samename': 'Já existe um Plano de Produção com este mesmo modelo e variante.',\n 'production.plan.button.close.plan': 'Encerrar Plano',\n 'production.plan.view': 'Visualizar',\n 'production.plan.view.occurrence': 'Visualizar ocorrência',\n 'production.plan.view.scrap': 'Visualizar scrap',\n 'production.plan.model.two.sections': 'Existem 2 modelos diferentes para a #value com status em andamento.',\n 'production.plan.no.effect.found': 'Nenhum Efeito encontrado. É necessário cadastra-lo primeiro.'\n });\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('ProductionPlanService', ProductionPlanService);\n\n /** @ngInject */\n function ProductionPlanService($window, $injector, $q, ConfigurationService) {\n var BASE = \"/production\";\n return {\n listAll: function (filtro) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + '/', {\n params: filtro\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n checkAlreadyExists: function (production) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + BASE + \"/checkAlreadyExists/\", production, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n save: function (production) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + BASE + \"/\", production, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n loadById: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + '/loadById/' + id, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n delete: function (Id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + BASE + '/' + Id, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n };\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(ProductionPlanRouter);\n\n /** @ngInject */\n function ProductionPlanRouter($stateProvider) {\n\n $stateProvider.state('production-plan-list', {\n url: '/production_plan',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/production_plan/production-plan-list.html',\n controller: 'ProductionPlanListController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.production.plan'\n },\n\n authorize: true\n });\n\n $stateProvider.state('production-plan-section', {\n url: '/production_plan',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/production_plan/production-plan-section.html',\n controller: 'ProductionPlanListController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.production.plan'\n },\n authorize: true\n });\n\n $stateProvider.state('production-plan-create', {\n url: '/production_plan/create',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/production_plan/production-plan-edit.html',\n controller: 'ProductionPlanEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.production.plan'\n },\n authorize: true\n });\n\n $stateProvider.state('production-plan-email-group', {\n url: '/production_plan/email_group/',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/production_plan/emailGroup/production-plan-email-group.html',\n controller: 'ProductionPlanEmailGroupController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.production.plan'\n },\n authorize: true\n });\n\n $stateProvider.state('production-plan-edit', {\n url: '/production_plan/edit/:Id',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/production_plan/production-plan-edit.html',\n controller: 'ProductionPlanEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.production.plan'\n },\n authorize: true\n });\n\n }\n})();\n\n/*eslint angular/json-functions: 0*/\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('ProductionPlanListController', ProductionPlanListController);\n\n function ProductionPlanListController(ProductionPlanService, $document, DefaultService, $translate, $state, ToastUtil, $scope, moment, $log, AuthService) {\n\n var vm = this;\n \n vm.itensPerPageList = [\n {name: '5', value: 5, before: 0, after: 6}, \n {name: '10', value: 10, before: 5, after: 11}, \n {name: '20', value: 20, before: 10, after: 21}, \n {name: '30', value: 30, before: 20, after: 31}, \n {name: '40', value: 40, before: 30, after: 41}, \n {name: '50', value: 50, before: 40, after: 51}]\n\n vm.itemPerPage = vm.itensPerPageList[0];\n\n var profilePermission = {\n CanAdd: false,\n CanEdit: false,\n CanDelete: false,\n CanView: false,\n CanApprove: false,\n CanExport: false,\n CanConsult: false\n };\n\n var pagePermission = {\n CanAdd: 1,\n CanEdit: 2,\n CanDelete: 3,\n CanView: 4,\n CanApprove: 5,\n CanConsult: 6\n };\n\n vm.productionList = [];\n vm.totalList = 0;\n vm.status = null;\n vm.dateTime = null;\n vm.dateTimeFinal = null;\n\n vm.StatusId = {\n ONGOING: 0,\n CLOSED: 1\n };\n\n vm.statusList = [{\n id: vm.StatusId.ONGOING,\n Name: 'production.plan.ongoing',\n Type: \"On Going\"\n },\n {\n id: vm.StatusId.CLOSED,\n Name: 'production.plan.close',\n Type: \"Close\"\n }\n ];\n \n vm.searchParams = {\n Id: null,\n StartDate: null,\n FinalDate: null,\n Model: null,\n Variant: null,\n Status: null,\n Section: null,\n Turn: null,\n Business: null,\n Page: 1,\n MaxPerPage: vm.itemPerPage.value\n };\n\n vm.shouldShow = function (item) {\n if(vm.totalList > 0 && item != undefined) {\n return vm.totalList >= item.value || (vm.totalList < item.after && vm.totalList > item.before);\n }\n return false;\n }\n \n vm.changeItemsPerPage = function() {\n if ( vm.itemPerPage == null ) {\n vm.itemPerPage = vm.itensPerPageList[0];\n }\n vm.searchParams.Page = 1;\n vm.searchParams.MaxPerPage = vm.itemPerPage.value;\n vm.search()\n }\n\n vm.onPageChange = function () {\n search(vm.searchParams.Page, vm.searchParams.MaxPerPage);\n };\n\n function validatePagePermission(index) {\n var result = true;\n switch (index) {\n case pagePermission.CanAdd:\n if (!profilePermission.CanAdd) {\n result = false;\n }\n break;\n case pagePermission.CanDelete:\n if (!profilePermission.CanDelete) {\n result = false;\n }\n break;\n case pagePermission.CanView:\n if (!profilePermission.CanView) {\n result = false;\n }\n break;\n case pagePermission.CanEdit:\n if (!profilePermission.CanEdit) {\n result = false;\n }\n break;\n case pagePermission.CanApprove:\n if (!profilePermission.CanApprove) {\n result = false;\n }\n break;\n case pagePermission.CanConsult:\n if (!profilePermission.CanConsult) {\n result = false;\n }\n break;\n }\n\n if (!result) {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n return result;\n }\n\n return result;\n }\n\n vm.clearFields = function () {\n vm.searchParams.Id = null;\n vm.searchParams.StartDate = null;\n vm.searchParams.FinalDate = null;\n vm.searchParams.Model = undefined;\n vm.searchParams.Variant = undefined;\n vm.searchParams.Status = undefined;\n vm.searchParams.Section = undefined;\n vm.searchParams.Project = undefined;\n vm.searchParams.Client = undefined;\n vm.searchParams.Turn = undefined;\n\n vm.model = null;\n vm.variant = null;\n vm.section = null;\n vm.turn = null;\n vm.status = null;\n vm.dateTime = null;\n vm.dateTimeFinal = null;\n\n setFoucusElement('#idSearch');\n };\n\n vm.setStatusType = function (status) {\n if (status) {\n vm.searchParams.Status = status.Type;\n } else {\n vm.searchParams.Status = null;\n }\n };\n\n vm.searchPlan = function () {\n vm.itemPerPage = vm.itensPerPageList[0];\n vm.searchParams.Page = 1;\n vm.searchParams.MaxPerPage = vm.itemPerPage.value;\n vm.search();\n }\n\n function buildSearchParams() {\n var params = angular.copy(vm.searchParams);\n if (params.MaxPerPage == undefined ) {\n vm.itemPerPage = vm.itensPerPageList[0];\n params.MaxPerPage = vm.itemPerPage.value;\n }\n\n if (vm.dateTime) {\n params.StartDate = moment(vm.dateTime).format('DD/MM/YYYY');\n } else {\n params.StartDate = null;\n }\n\n if (vm.dateTimeFinal) {\n params.FinalDate = moment(vm.dateTimeFinal).format('DD/MM/YYYY');\n } else {\n params.FinalDate = null;\n }\n\n params.ClientId = undefined;\n params.ProjectId = undefined;\n params.ModelId = undefined;\n params.VariantId = undefined;\n params.TurnId = undefined;\n params.SectionId = undefined;\n\n params.BusinessId = AuthService.getBusinessId();\n if (params.Client && params.Client.Id) {\n params.ClientId = params.Client.Id;\n }\n if (params.Project && params.Project.Id) {\n params.ProjectId = params.Project.Id;\n }\n if (params.Model && params.Model.Id) {\n params.ModelId = params.Model.Id;\n }\n if (params.Variant && params.Variant.Id) {\n params.VariantId = params.Variant.Id;\n }\n if (params.Turn && params.Turn.Id) {\n params.TurnId = params.Turn.Id;\n }\n if (params.Section && params.Section.Id) {\n params.SectionId = params.Section.Id;\n }\n if (params.Status && params.Status) {\n params.Status = params.Status;\n }\n return params;\n }\n\n vm.search = function() {\n if (sessionStorage.getItem(\"searchParams\")) {\n vm.searchParams = JSON.parse(sessionStorage.getItem(\"searchParams\"));\n sessionStorage.removeItem(\"searchParams\");\n vm.itensPerPageList.forEach(function(element) {\n if (element.value == vm.searchParams.MaxPerPage) {\n vm.itemPerPage = element;\n return;\n }\n });\n }\n var paramsPlan = buildSearchParams();\n\n ProductionPlanService.listAll(paramsPlan)\n .then(\n function (response) {\n vm.productionList = response.resultList;\n vm.totalList = response.total;\n })\n .catch(\n function (error) {\n if (error.status !== $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"error.production.plan.search\"), ToastUtil.ToastType.ERROR);\n }\n vm.clearFields();\n });\n };\n\n function setFoucusElement(element) {\n if (element) {\n var input = $document[0].querySelector(element);\n if (input !== null) {\n input.focus();\n }\n }\n }\n\n vm.filter = function (keyEvent) {\n if (keyEvent.which === 13)\n vm.search();\n };\n\n vm.view = function () {\n if (profilePermission.CanView || profilePermission.CanApprove || pagePermission.CanConsult) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('production-plan-list', {});\n } else {\n $state.go('not-authorized', {});\n }\n };\n\n vm.createGroup = function () {\n var result = validatePagePermission(pagePermission.CanApprove);\n if (result) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('production-plan-email-group', {});\n }\n return result;\n };\n\n vm.create = function () {\n if (profilePermission.CanAdd || profilePermission.CanApprove) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('production-plan-create', {});\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n };\n\n vm.edit = function (id) {\n if (profilePermission.CanEdit || profilePermission.CanConsult || profilePermission.CanApprove) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('production-plan-edit', {\n Id: id\n });\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n };\n\n vm.delete = function (id) {\n if (profilePermission.CanDelete || profilePermission.CanApprove) {\n ProductionPlanService.delete(id).then(\n function () {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go($state.current, {}, {\n reload: true\n });\n ToastUtil.showToastMessage($translate.instant(\"production.plan.deleted.success\"), ToastUtil.ToastType.SUCCESS);\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"msg.error.delete.generic\"), ToastUtil.ToastType.ERROR);\n });\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n };\n\n function loadProfileModules() {\n var profileModule = {};\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.moduleProductionPlan;\n DefaultService.loadModules(profileModule).then(function (response) {\n profilePermission = angular.copy(response);\n validateViewPermission();\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n });\n }\n\n function validateViewPermission() {\n if (!profilePermission.CanView) {\n $state.go('not-authorized', {}, {});\n }\n }\n\n function init() {\n loadProfileModules();\n vm.searchPlan();\n }\n\n init();\n\n function search(page, max) {\n vm.searchParams.Page = page;\n vm.searchParams.MaxPerPage = max;\n vm.search();\n }\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('ProductionPlanEditController', ProductionPlanEditController);\n\n function ProductionPlanEditController(ProductionPlanService, $state, $window,\n DefaultService, ToastUtil, $translate, DialogController, DialogControllerTemplate, moment, $log,\n AuthService, $stateParams, $scope, $rootScope) {\n\n var vm = this, NOW = new Date();\n\n var profilePermission = {\n CanAdd: false,\n CanEdit: false,\n CanDelete: false,\n CanView: false,\n CanApprove: false,\n CanExport: false,\n CanConsult: false\n };\n\n var oldTurn = null;\n var selectedIndex = 0;\n var isEdit = false;\n var sectionLine = {\n IsNewRegister: true,\n Session: null,\n ReuseOccurrences: []\n };\n var reuseOccurrences = [];\n\n // Validates the status of the respondent to validate the rules when saving a new production plan.\n var responseStatus = {\n ISEXISTS: 0,\n MODELSAMENAME: 1,\n TWOSECTIONS: 2,\n SAVE: 3\n };\n\n vm.accordionIdentification = true;\n vm.accordionDaily = false;\n vm.dailyDisabled = false;\n\n var types = {\n SCRAP: 0,\n OCCURRENCE: 1\n };\n\n var modificationsType = {\n ADD: 0,\n REMOVE: 1,\n EDIT: 2\n };\n\n vm.StatusId = {\n ONGOING: 0,\n CLOSED: 1\n };\n\n vm.statusProcessId = {\n PROCESSUNAVAILABLE: 0,\n PROCESSWITHRESTRICTIONS: 1,\n PROCESSNORMALLY: 2\n };\n\n vm.productionPlan = {\n Id: 0,\n Section: null,\n Turn: null,\n Model: null,\n Variant: null,\n Planned: null,\n StartDate: NOW,\n Status: null,\n ReasonClose: null,\n UpdatedRegister: null,\n ProductionPlanControls: [],\n Business: {}\n };\n\n function init() {\n loadProfileModules();\n }\n\n function loadProfileModules() {\n var profileModule = {};\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.moduleProductionPlan;\n\n DefaultService.loadModules(profileModule).then(function (response) {\n profilePermission = angular.copy(response);\n\n if ($stateParams.Id) {\n if (profilePermission.CanEdit || profilePermission.CanApprove || profilePermission.CanConsult) {\n loadProductionPlanById($stateParams.Id);\n } else {\n $state.go('not-authorized', {});\n }\n } else {\n if (!profilePermission.CanAdd) {\n $state.go('not-authorized', {});\n }\n }\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n });\n }\n\n function replanningPlannedSave() {\n var planned = vm.productionPlan.Planned;\n var total = 0;\n var plannedDiv = parseInt(planned / vm.productionPlan.ProductionPlanControls.length);\n var i;\n\n for (i = 0; i < vm.productionPlan.ProductionPlanControls.length; i++) {\n vm.productionPlan.ProductionPlanControls[i].Planned = plannedDiv;\n total = total + plannedDiv;\n }\n\n var addDife = planned - total;\n vm.productionPlan.ProductionPlanControls[vm.productionPlan.ProductionPlanControls.length - 1].Planned += parseInt(addDife);\n\n if (vm.productionPlan.Id > 0) {\n if (vm.productionPlan && vm.productionPlan.ProductionPlanControls.length > 0) {\n\n var index;\n for (index = 0; index < vm.productionPlan.ProductionPlanControls.length; index++) {\n vm.productionPlan.ProductionPlanControls[index].Active = false;\n }\n\n vm.productionPlan.ProductionPlanControls[0].Active = true;\n }\n }\n }\n\n // Reschedule the share by dividing by the total hours of the shift.\n vm.replanningPlanned = function () {\n if (isEdit && profilePermission.CanApprove) {\n replanningPlannedSave();\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n };\n\n // Opens modal to inform the reason for closing the production plan without having closed all the hours.\n vm.endDailyProductionPlan = function () {\n // Rule for displaying the button to close the occurrence plane.\n if (isEdit && vm.isApprover()) {\n DialogControllerTemplate.showWithCloseListener('production.plan.button.close.plan', 'production.plan.reason',\n '', vm.confirmEndProductionPlanDaily);\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n };\n\n // Confirmation of the modal of closing the production plan.\n vm.confirmEndProductionPlanDaily = function (reason) {\n if (vm.productionPlan.Id == 0) {\n productionPlanDaily();\n replanningPlannedSave();\n }\n\n realizedEndProductionPlan();\n\n vm.productionPlan.Status = vm.StatusId.CLOSED;\n vm.productionPlan.ReasonClose = reason.value;\n ProductionPlanService.save(vm.productionPlan)\n .then(\n function () {\n $state.go('production-plan-list');\n ToastUtil.showToastMessage($translate.instant(\"production.plan.save.success\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(\n function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusCodeConflict) {\n $state.go('production-plan-list');\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n }\n });\n };\n\n vm.validateSave = function () {\n if (profilePermission.CanConsult && (profilePermission.CanApprove || profilePermission.CanEdit || profilePermission.CanAdd)) {\n save();\n } else if (profilePermission.CanApprove || profilePermission.CanEdit || profilePermission.CanAdd) {\n save();\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n }\n\n // Saves production plan.\n function save() {\n\n vm.productionPlan.Business.Id = AuthService.getBusinessId();\n\n if (isEdit) {\n saveIdentification();\n } else {\n vm.productionPlan.Id = 0;\n vm.productionPlan.Status = -1;\n ProductionPlanService.checkAlreadyExists(vm.productionPlan)\n .then(\n function (result) {\n\n switch (result) {\n case responseStatus.ISEXISTS:\n $state.go('production-plan-list');\n ToastUtil.showToastMessage($translate.instant(\"production.plan.is.exists\"), ToastUtil.ToastType.WARN);\n break;\n case responseStatus.MODELSAMENAME:\n $state.go('production-plan-list');\n ToastUtil.showToastMessage($translate.instant(\"production.plan.model.samename\"), ToastUtil.ToastType.WARN);\n break;\n case responseStatus.TWOSECTIONS:\n $state.go('production-plan-list');\n ToastUtil.showToastMessage($translate.instant(\"production.plan.model.two.sections\").replace(\"#value\", vm.productionPlan.Section.Title), ToastUtil.ToastType.WARN);\n break;\n case responseStatus.SAVE:\n saveIdentification();\n break;\n }\n })\n .catch(\n function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n });\n }\n }\n\n // Saves production time specific time, validating all necessary rules.\n vm.saveHour = function (index) {\n if (pendingOccurrences(index)) {\n ToastUtil.showToastMessage($translate.instant(\"production.plan.save.hour.alert\"), ToastUtil.ToastType.WARN);\n } else if (vm.verifyRealizedQuantity(index)) {\n ToastUtil.showToastMessage($translate.instant(\"production.plan.realized.quantity.alert\"), ToastUtil.ToastType.WARN);\n } else {\n validateRealized(index);\n validateStatusProductionPlan();\n saveService();\n }\n };\n\n // Verify if realized is less than planned.\n vm.verifyRealizedQuantity = function (index) {\n var result = false;\n if (index > -1) {\n if (vm.productionPlan && vm.productionPlan.ProductionPlanControls.length > 0) {\n if (vm.productionPlan.ProductionPlanControls[index].Realized < vm.productionPlan.ProductionPlanControls[index].Planned) {\n result = true;\n if (vm.productionPlan.ProductionPlanControls[index].Occurrences && vm.productionPlan.ProductionPlanControls[index].Occurrences.length > 0) {\n result = false;\n }\n }\n }\n }\n\n return result;\n }\n\n // Adds the occurrence in the production plan.\n vm.addOccurrencePlan = function (plan) {\n\n if (plan.IsNew) {\n vm.productionPlan.ProductionPlanControls[selectedIndex].Occurrences.push(plan);\n\n saveModifications(types.OCCURRENCE, modificationsType.ADD);\n } else {\n var index = vm.productionPlan.ProductionPlanControls[selectedIndex].Occurrences.map(function (x) {\n return x.Id;\n }).indexOf(plan.Id);\n\n vm.productionPlan.ProductionPlanControls[selectedIndex].Occurrences[index] = null;\n vm.productionPlan.ProductionPlanControls[selectedIndex].Occurrences[index] = plan;\n\n saveModifications(types.OCCURRENCE, modificationsType.EDIT);\n }\n };\n\n // Adds the scrap in the production plan.\n vm.addScrapPlan = function (plan) {\n if (plan.IsNew) {\n vm.productionPlan.ProductionPlanControls[selectedIndex].Scraps.push(plan);\n saveModifications(types.SCRAP, modificationsType.ADD);\n } else {\n var index = vm.productionPlan.ProductionPlanControls[selectedIndex].Scraps.map(function (x) {\n return x.Id;\n }).indexOf(plan.Id);\n\n vm.productionPlan.ProductionPlanControls[selectedIndex].Scraps[index] = plan;\n saveModifications(types.SCRAP, modificationsType.EDIT);\n }\n };\n\n // Visualize occurrence data.\n vm.viewOccurrence = function (parentIndex, index) {\n var occurrence = vm.productionPlan.ProductionPlanControls[parentIndex].Occurrences[index];\n occurrence.Section = vm.productionPlan.Section;\n DialogController.show('production.plan.view.occurrence', '', vm, occurrence, null, 'lg');\n };\n\n // Visualize scrap data.\n vm.viewScrap = function (parentIndex, index) {\n var scrap = vm.productionPlan.ProductionPlanControls[parentIndex].Scraps[index];\n scrap.Section = vm.productionPlan.Section;\n DialogController.show('production.plan.view.scrap', '', vm, scrap);\n };\n\n // Opens modal to add a new occurrence.\n vm.addOccurrence = function (index) {\n selectedIndex = index;\n sectionLine.Section = vm.productionPlan.Section;\n sectionLine.ReuseOccurrences = reuseOccurrences;\n sectionLine.IdOccurrence = vm.productionPlan.ProductionPlanControls[index].Occurrences.length;\n resetSendEmailOccurrences();\n DialogController.show('production.plan.title.newOccurrence', '', vm, sectionLine, null, 'lg');\n };\n\n // Opens modal to add a new scrap.\n vm.addScrap = function (index) {\n if (vm.productionPlan.ProductionPlanControls[index].Active) {\n selectedIndex = index;\n sectionLine.Section = vm.productionPlan.Section;\n sectionLine.IdScrap = vm.productionPlan.ProductionPlanControls[index].Scraps.length;\n DialogController.show('production.plan.title.newScrap', '', vm, sectionLine);\n }\n };\n\n // Remove occurrence.\n vm.removeItemOccurrence = function (parentIndex, index) {\n if (vm.productionPlan.ProductionPlanControls[parentIndex].Active) {\n vm.productionPlan.ProductionPlanControls[parentIndex].Occurrences.splice(index, 1);\n saveModifications(types.OCCURRENCE, modificationsType.REMOVE);\n }\n };\n\n // Remove scrap.\n vm.removeItemScrap = function (parentIndex, index) {\n if (vm.productionPlan.ProductionPlanControls[parentIndex].Active) {\n vm.productionPlan.ProductionPlanControls[parentIndex].Scraps.splice(index, 1);\n saveModifications(types.SCRAP, modificationsType.REMOVE);\n }\n };\n\n // Open modal for occurrence editing.\n vm.editItemOccurrence = function (parentIndex, index) {\n if (vm.productionPlan.ProductionPlanControls[parentIndex].Active) {\n selectedIndex = parentIndex;\n var occurrence = vm.productionPlan.ProductionPlanControls[parentIndex].Occurrences[index];\n occurrence.Section = vm.productionPlan.Section;\n resetSendEmailOccurrences();\n if (vm.isApprover() || profilePermission.CanEdit) {\n DialogController.show('production.plan.title.editOccurrence', '', vm, occurrence, null, 'lg');\n } else {\n DialogController.show('production.plan.view.occurrence', '', vm, occurrence, null, 'lg');\n }\n }\n };\n\n // Opens modal for scrap editing.\n vm.editItemScrap = function (parentIndex, index) {\n if (vm.productionPlan.ProductionPlanControls[parentIndex].Active) {\n selectedIndex = parentIndex;\n var scrap = vm.productionPlan.ProductionPlanControls[parentIndex].Scraps[index];\n scrap.Section = vm.productionPlan.Section;\n\n if (vm.isApprover() || profilePermission.CanEdit) {\n DialogController.show('production.plan.title.editScrap', '', vm, scrap);\n } else {\n DialogController.show('production.plan.view.scrap', '', vm, scrap);\n }\n }\n };\n\n // Validate screen rules for display of save button.\n vm.canSave = function () {\n var canSave = true;\n\n if (vm.productionPlan.Planned && vm.productionPlan.Planned > 0 &&\n !canEditItem() && (vm.productionPlan.Status === vm.StatusId.ONGOING)) {\n canSave = false;\n }\n\n if (!profilePermission.CanApprove) {\n canSave = true;\n }\n\n return canSave;\n };\n\n // Validate screen rules for editing.\n\n vm.canEditPlanned = function () {\n var canSave = false;\n\n if (vm.productionPlan.Id === 0) {\n return canSave;\n }\n\n var startDate = moment(vm.productionPlan.StartDate, 'YYYY/MM/DD').toDate();\n var dateNow = moment(new Date(), 'YYYY/MM/DD').toDate();\n\n if (startDate < dateNow) {\n canSave = true;\n }\n\n if (profilePermission.CanConsult) {\n canSave = true;\n }\n\n if (isEdit) {\n if (profilePermission.CanApprove) {\n canSave = false;\n } else {\n canSave = true;\n }\n }\n\n return canSave;\n };\n\n vm.canEdit = function () {\n\n var canSave = false;\n\n if (vm.productionPlan.Id === 0) {\n return canSave;\n }\n\n var startDate = moment(vm.productionPlan.StartDate, 'YYYY/MM/DD').toDate();\n var dateNow = moment(new Date(), 'YYYY/MM/DD').toDate();\n\n if (startDate < dateNow) {\n canSave = true;\n }\n\n if (profilePermission.CanConsult) {\n canSave = true;\n }\n\n if (profilePermission.CanApprove || profilePermission.CanEdit || profilePermission.CanAdd) {\n canSave = false;\n }\n\n return canSave;\n };\n\n vm.validateReplanningPlanned = function () {\n if (vm.productionPlan.Id === 0) {\n return false;\n }\n\n var startDate = moment(vm.productionPlan.StartDate, 'YYYY/MM/DD').toDate();\n var dateNow = moment(new Date(), 'YYYY/MM/DD').toDate();\n\n if (startDate < dateNow) {\n return true;\n }\n\n if (!profilePermission.CanApprove) {\n return true;\n }\n };\n\n // Checks whether the save time button is enabled.\n vm.validateSaveHour = function (index) {\n if (profilePermission.CanConsult && (profilePermission.CanApprove || profilePermission.CanEdit)) {\n var saveHour = false;\n\n if (vm.productionPlan.ProductionPlanControls[index].Realized && IsNumeric(vm.productionPlan.ProductionPlanControls[index].Realized)) {\n saveHour = false;\n } else {\n saveHour = true;\n }\n return saveHour;\n } else {\n if (profilePermission.CanApprove || profilePermission.CanEdit) {\n var result = false;\n if (vm.productionPlan.ProductionPlanControls[index].Realized && IsNumeric(vm.productionPlan.ProductionPlanControls[index].Realized)) {\n result = false;\n } else {\n result = true;\n }\n return result;\n }\n return true;\n }\n };\n\n vm.validateActionRemove = function (action) {\n if (profilePermission.CanConsult && (profilePermission.CanApprove || profilePermission.CanEdit)) {\n if (action === false) {\n return false;\n } else {\n return true;\n }\n } else {\n if (profilePermission.CanApprove || profilePermission.CanEdit) {\n if (action === false) {\n return false;\n } else {\n return true;\n }\n }\n return false;\n }\n };\n\n vm.validateActionsView = function (action) {\n if (profilePermission.CanConsult && (profilePermission.CanApprove || profilePermission.CanEdit)) {\n if (action === false) {\n return true;\n } else {\n return false;\n }\n } else {\n if (profilePermission.CanApprove || profilePermission.CanEdit) {\n if (action === false) {\n return true;\n } else {\n return false;\n }\n }\n return true;\n }\n };\n\n vm.validateActionAdd = function (action) {\n if (profilePermission.CanConsult && (profilePermission.CanApprove || profilePermission.CanEdit)) {\n if (action) {\n return true;\n } else {\n return false;\n }\n } else {\n if (profilePermission.CanApprove || profilePermission.CanEdit) {\n if (action) {\n return true;\n } else {\n return false;\n }\n } else {\n return false;\n }\n }\n };\n\n // when change language.\n var unregister = $rootScope.$on('CHANGE-LANGUAGE-DATA', function () {\n getProductionPlanDate();\n });\n\n $scope.$on('$destroy', unregister);\n\n // Returns true for user type approver.\n vm.isApprover = function () {\n return profilePermission.CanApprove;\n };\n\n vm.isCanConsult = function () {\n return profilePermission.CanConsult;\n };\n\n vm.disabledConsult = function (value) {\n if (profilePermission.CanConsult && (profilePermission.CanApprove || profilePermission.CanEdit)) {\n if (value) {\n return false;\n } else {\n return true;\n }\n } else {\n if (profilePermission.CanApprove || profilePermission.CanEdit) {\n if (value) {\n return false;\n } else {\n return true;\n }\n }\n return true;\n }\n };\n\n function getProductionPlanDate() {\n if (vm.productionPlan.StartDate) {\n vm.currentDate = vm.productionPlan.StartDate;\n } else {\n vm.currentDate = moment(new Date());\n }\n }\n\n // Save changes to occurrences and scrap, add, edit and remove.\n function saveModifications(type, modifications) {\n vm.productionPlan.LinkProductionPlan = $window.location.href;\n changeDRI();\n ProductionPlanService.save(vm.productionPlan)\n .then(\n function (response) {\n vm.productionPlan.UpdatedRegister = response.UpdatedRegister;\n findFeedbackMessageSuccess(type, modifications);\n })\n .catch(\n function (error) {\n $log.log(error);\n\n if (error.status === $scope.HttpStatusCodeConflict) {\n $state.go('production-plan-list');\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n } else {\n findFeedbackMessageFailed(type, modifications);\n }\n });\n }\n\n // Resets sending emails of occurrences.\n function resetSendEmailOccurrences() {\n if (vm.productionPlan && vm.productionPlan.ProductionPlanControls.length > 0) {\n angular.forEach(vm.productionPlan.ProductionPlanControls, function (value) {\n if (value.Occurrences && value.Occurrences.length > 0) {\n angular.forEach(value.Occurrences, function (value) {\n value.SendEmail = false;\n });\n }\n });\n }\n }\n\n // Set 0 for 'Realized' that were not filled when closing the production plan.\n function realizedEndProductionPlan() {\n if (vm.productionPlan && vm.productionPlan.ProductionPlanControls.length > 0) {\n var index;\n for (index = 0; index < vm.productionPlan.ProductionPlanControls.length; index++) {\n if (!vm.productionPlan.ProductionPlanControls[index].Realized) {\n vm.productionPlan.ProductionPlanControls[index].Realized = 0;\n }\n }\n }\n }\n\n // Saves production plan.\n // If it is new, replanning of the day.\n // If it is editing, validate change of shift, replanning of the day and validates rules of the occurrence.\n function saveIdentification() {\n if (vm.productionPlan.Id == 0) {\n productionPlanDaily();\n replanningPlannedSave();\n vm.productionPlan.UpdatedRegister = 0;\n vm.productionPlan.Status = vm.StatusId.ONGOING;\n validateStatusProductionPlan();\n saveService();\n } else {\n if (oldTurn && oldTurn.Id !== vm.productionPlan.Turn.Id) {\n vm.productionPlan.ProductionPlanControls = [];\n productionPlanDaily();\n replanningPlannedSave();\n oldTurn = vm.productionPlan.Turn;\n }\n\n var index = findProductionPlanActive();\n if (index > -1 && vm.validateSaveHour(index)) {\n vm.productionPlan.ProductionPlanControls[index].Realized = null;\n }\n\n vm.saveHour(index);\n }\n }\n\n // Searches the active hour of the production plan.\n function findProductionPlanActive() {\n var indexHourActive = -1;\n if (vm.productionPlan && vm.productionPlan.ProductionPlanControls.length > 0) {\n angular.forEach(vm.productionPlan.ProductionPlanControls, function (value, index) {\n if (value.Active) {\n indexHourActive = index;\n }\n });\n }\n\n return indexHourActive;\n }\n\n // Save production plan.\n // If it is new, redirects to edit screen.\n // Fills occurrences that can be reused.\n // Refresh field date with the current UpdatedRegister.\n function saveService() {\n resetSendEmailOccurrences();\n var isGoEdit = vm.productionPlan.Id;\n\n vm.productionPlan.BusinessId = AuthService.getBusinessId();\n\n ProductionPlanService.save(vm.productionPlan)\n .then(\n function (response) {\n\n vm.dailyDisabled = true;\n vm.accordionIdentification = false;\n vm.accordionDaily = true;\n vm.productionPlan.Id = response.Id;\n vm.productionPlan.UpdatedRegister = response.UpdatedRegister;\n\n if (isGoEdit == 0) {\n $state.go('production-plan-edit', {\n Id: vm.productionPlan.Id\n });\n }\n\n reuseOccurrences = [];\n checkReuseOccurrences();\n\n ToastUtil.showToastMessage($translate.instant(\"production.plan.save.success\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(\n function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusCodeConflict) {\n $state.go('production-plan-list');\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n } else {\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n }\n }\n });\n }\n\n // Updates scraps id.\n function checkIdsScraps() {\n if (vm.productionPlan && vm.productionPlan.ProductionPlanControls.length > 0) {\n angular.forEach(vm.productionPlan.ProductionPlanControls, function (value) {\n if (value.Scraps && value.Scraps.length > 0) {\n angular.forEach(value.Scraps, function (value, index) {\n value.Id = index;\n });\n }\n });\n }\n }\n\n // Fills occurrences that can be reused.\n function checkReuseOccurrences() {\n // Updates occurrences id.\n if (vm.productionPlan && vm.productionPlan.ProductionPlanControls.length > 0) {\n angular.forEach(vm.productionPlan.ProductionPlanControls, function (value) {\n if (value.Occurrences && value.Occurrences.length > 0) {\n angular.forEach(value.Occurrences, function (value, index) {\n value.Id = index;\n });\n }\n });\n }\n\n // Get occurrence active.\n if (vm.productionPlan && vm.productionPlan.ProductionPlanControls.length > 0) {\n var indexHourActive = -1;\n angular.forEach(vm.productionPlan.ProductionPlanControls, function (value, index) {\n if (value.Active) {\n indexHourActive = index;\n return;\n }\n });\n\n if (indexHourActive <= 0) {\n // First time of day, there is no previous occurrence, or closed occurrence plan.\n reuseOccurrences = [];\n } else {\n // Check if there are occurrences in the previous hour with status PROCESSUNAVAILABLE and PROCESSWITHRESTRICTIONS.\n indexHourActive = indexHourActive - 1;\n if (vm.productionPlan.ProductionPlanControls[indexHourActive].Occurrences &&\n vm.productionPlan.ProductionPlanControls[indexHourActive].Occurrences.length > 0) {\n angular.forEach(vm.productionPlan.ProductionPlanControls[indexHourActive].Occurrences, function (value) {\n if ((value.Process === vm.statusProcessId.PROCESSWITHRESTRICTIONS) ||\n (value.Process === vm.statusProcessId.PROCESSUNAVAILABLE)) {\n reuseOccurrences.push(value);\n }\n });\n } else {\n // There are no occurrences in the previous hour.\n reuseOccurrences = []\n }\n }\n }\n }\n\n // Displays success message according to the parameters.\n function findFeedbackMessageSuccess(type, modifications) {\n if (type === types.SCRAP) {\n if (modifications === modificationsType.ADD) {\n ToastUtil.showToastMessageTime($translate.instant(\"production.plan.scrap.add.success\"), ToastUtil.ToastType.SUCCESS, ToastUtil.constants.getTime1());\n } else if (modifications === modificationsType.REMOVE) {\n ToastUtil.showToastMessageTime($translate.instant(\"production.plan.scrap.remove.success\"), ToastUtil.ToastType.SUCCESS, ToastUtil.constants.getTime1());\n } else {\n ToastUtil.showToastMessageTime($translate.instant(\"production.plan.scrap.edit.success\"), ToastUtil.ToastType.SUCCESS, ToastUtil.constants.getTime1());\n }\n } else {\n if (modifications === modificationsType.ADD) {\n ToastUtil.showToastMessageTime($translate.instant(\"production.plan.occurrence.add.success\"), ToastUtil.ToastType.SUCCESS, ToastUtil.constants.getTime1());\n } else if (modifications === modificationsType.REMOVE) {\n ToastUtil.showToastMessageTime($translate.instant(\"production.plan.occurrence.remove.success\"), ToastUtil.ToastType.SUCCESS, ToastUtil.constants.getTime1());\n } else {\n ToastUtil.showToastMessageTime($translate.instant(\"production.plan.occurrence.edit.success\"), ToastUtil.ToastType.SUCCESS, ToastUtil.constants.getTime1());\n }\n }\n }\n\n // Displays failed message according to the parameters.\n function findFeedbackMessageFailed(type, modifications) {\n if (type.SCRAP) {\n if (modifications.ADD) {\n ToastUtil.showToastMessageTime($translate.instant(\"production.plan.scrap.add.failed\"), ToastUtil.ToastType.ERROR, ToastUtil.constants.getTime1());\n } else if (modifications === modificationsType.REMOVE) {\n ToastUtil.showToastMessageTime($translate.instant(\"production.plan.scrap.remove.failed\"), ToastUtil.ToastType.ERROR, ToastUtil.constants.getTime1());\n } else {\n ToastUtil.showToastMessageTime($translate.instant(\"production.plan.scrap.edit.failed\"), ToastUtil.ToastType.ERROR, ToastUtil.constants.getTime1());\n }\n } else {\n if (modifications.ADD) {\n ToastUtil.showToastMessageTime($translate.instant(\"production.plan.occurrence.add.failed\"), ToastUtil.ToastType.ERROR, ToastUtil.constants.getTime1());\n } else if (modifications === modificationsType.REMOVE) {\n ToastUtil.showToastMessageTime($translate.instant(\"production.plan.occurrence.remove.failed\"), ToastUtil.ToastType.ERROR, ToastUtil.constants.getTime1());\n } else {\n ToastUtil.showToastMessageTime($translate.instant(\"production.plan.occurrence.edit.failed\"), ToastUtil.ToastType.ERROR, ToastUtil.constants.getTime1());\n }\n }\n }\n\n // Validate if you can add scrap and occurrence.\n function canEditItem() {\n\n var canSave = false;\n\n if (vm.productionPlan.Id === 0) {\n return canSave;\n }\n\n var startDate = moment(vm.productionPlan.StartDate, 'YYYY/MM/DD').toDate();\n var dateNow = moment(new Date(), 'YYYY/MM/DD').toDate();\n if (startDate < dateNow) {\n canSave = true;\n }\n\n return canSave;\n }\n\n // Activates the next hour of the production plan and deactivates the current hour.\n function validateRealized(index) {\n if (index > -1) {\n if (vm.productionPlan && vm.productionPlan.ProductionPlanControls.length > 0) {\n if (vm.productionPlan.ProductionPlanControls[index].Realized && vm.productionPlan.ProductionPlanControls[index].Realized.length > 0) {\n if (index !== (vm.productionPlan.ProductionPlanControls.length - 1)) {\n vm.productionPlan.ProductionPlanControls[index + 1].Active = true;\n vm.productionPlan.ProductionPlanControls[index].Active = false;\n } else {\n vm.productionPlan.ProductionPlanControls[index].Active = false;\n }\n }\n }\n }\n }\n\n // Validates the status of the production plan. ONGOING and CLOSE.\n function validateStatusProductionPlan() {\n\n var allStatusClosed = true;\n\n angular.forEach(vm.productionPlan.ProductionPlanControls, function (value) {\n if (value.Realized) {\n allStatusClosed = true;\n } else {\n allStatusClosed = false;\n return;\n }\n });\n\n if (allStatusClosed) {\n vm.productionPlan.Status = vm.StatusId.CLOSED;\n }\n }\n\n // Plan the daily production plan according to the selected shift.\n function productionPlanDaily() {\n var turn = angular.copy(vm.productionPlan.Turn);\n\n var hourInit = Number(turn.StartingTime.substring(0, 2));\n var hourInterval = Number(turn.TimeInterval.substring(0, 2));\n var hourFinal = Number(turn.FinalTime.substring(0, 2));\n\n var dateInit = new Date();\n dateInit.setHours(hourInit);\n\n var dateFinal = new Date();\n dateFinal.setHours(hourFinal);\n \n if (hourInit == hourFinal)\n {\n dateFinal.setDate(dateFinal.getDate() + 1);\n }\n else{\n var next_day_hour = hourInit;\n\n if (hourInit === 0)\n {\n next_day_hour = 24;\n }\n \n // Se a hora inicial for 00:00 indica que a hora é outro dia\n if(next_day_hour != 24)\n {\n // Se a hora final for menor que a hora inicial, indica que o turno é de outro dia\n if(hourFinal < next_day_hour) {\n dateFinal.setDate(dateFinal.getDate() + 1);\n }\n }\n }\n\n var dateSequence = new Date();\n dateSequence.setHours(hourInit + 1);\n\n var difference = Math.abs(dateInit - dateFinal) / 36e5;\n var dayHour = dateSequence.getHours();\n var x;\n for (x = 0; x < difference; x++) {\n\n dayHour = dateSequence.getHours();\n\n if (hourInit == hourInterval) {\n hourInit = hourInit + 1;\n dateInit.setHours(hourInit);\n dateSequence.setHours(hourInit + 1);\n } else {\n if (dayHour == hourInterval + 1) {\n hourInit = hourInit + 1;\n dateInit.setHours(hourInit);\n dateSequence.setHours(hourInit + 1);\n } else {\n var control = {};\n control.Id = 0;\n control.Planned = 0;\n control.Hour = moment(dateInit.getHours(), \"h\").format(\"HH:mm\") + ' - ' + moment(dateSequence.getHours(), \"h\").format(\"HH:mm\");\n control.Sequence = x;\n control.Realized = null;\n if (x === 0) {\n control.Active = true;\n } else {\n control.Active = false;\n }\n control.Scraps = [];\n control.Occurrences = [];\n\n hourInit = hourInit + 1;\n dateInit.setHours(hourInit);\n dateSequence.setHours(hourInit + 1);\n\n vm.productionPlan.ProductionPlanControls.push(control);\n }\n }\n }\n }\n\n // Validates the production plan in the edition.\n function validateRealizedEdit() {\n\n var isActive = true;\n\n if (vm.productionPlan && vm.productionPlan.ProductionPlanControls.length > 0) {\n\n angular.forEach(vm.productionPlan.ProductionPlanControls, function (value, index) {\n\n var isOccurrence = pendingOccurrences(index);\n\n if (isOccurrence) {\n value.Active = true;\n\n if (index !== (vm.productionPlan.ProductionPlanControls.length - 1)) {\n vm.productionPlan.ProductionPlanControls[index + 1].Active = false;\n }\n } else {\n if (value.Realized && value.Realized > 0) {\n if (parseInt(value.Realized) < parseInt(value.Planned) && value.Occurrences.length == 0) {\n vm.productionPlan.ProductionPlanControls[index].Active = true;\n value.Active = true;\n isActive = false;\n } else {\n if (index !== (vm.productionPlan.ProductionPlanControls.length - 1)) {\n vm.productionPlan.ProductionPlanControls[index + 1].Active = true;\n value.Active = false;\n isActive = false;\n } else {\n vm.productionPlan.ProductionPlanControls[index].Active = false;\n }\n }\n }\n }\n });\n }\n\n // If isActive == true all \"Realized\" are empty, activate first line for editing.\n if (isActive) {\n vm.productionPlan.ProductionPlanControls[0].Active = true;\n }\n }\n\n // Checks for pending occurrences.\n function pendingOccurrences(index) {\n var result = false;\n if (index > -1) {\n if (vm.productionPlan && vm.productionPlan.ProductionPlanControls.length > 0) {\n if (vm.productionPlan.ProductionPlanControls[index].Occurrences && vm.productionPlan.ProductionPlanControls[index].Occurrences.length > 0) {\n angular.forEach(vm.productionPlan.ProductionPlanControls[index].Occurrences, function (value) {\n if (value.Status === vm.StatusId.ONGOING) {\n result = true;\n return;\n }\n });\n }\n }\n }\n\n return result;\n }\n\n // Load production plan by id.\n function loadProductionPlanById(id) {\n if (profilePermission.CanEdit || profilePermission.CanApprove || profilePermission.CanConsult) {\n ProductionPlanService.loadById(id)\n .then(\n function (response) {\n isEdit = true;\n vm.productionPlan = angular.copy(response);\n\n vm.dailyDisabled = true;\n vm.accordionIdentification = false;\n vm.accordionDaily = true;\n\n oldTurn = vm.productionPlan.Turn;\n\n validateRealizedEdit();\n\n checkReuseOccurrences();\n checkIdsScraps();\n getProductionPlanDate();\n\n //Setting DRI\n angular.forEach(vm.productionPlan.ProductionPlanControls, function (productionPlanControl) {\n\n //Occurrence\n angular.forEach(productionPlanControl.Occurrences, function (occurrence) {\n if (occurrence.CreatedByGroup != null && angular.isDefined(occurrence.CreatedByGroup)) {\n occurrence.CreatedByDRI = occurrence.CreatedByGroup;\n occurrence.CreatedByDRI.IsGroup = true;\n } else {\n occurrence.CreatedByDRI = occurrence.CreatedByUser;\n }\n });\n\n //Scrap\n angular.forEach(productionPlanControl.Scraps, function (scrap) {\n if (scrap.CreatedByGroup != null && angular.isDefined(scrap.CreatedByGroup)) {\n scrap.CreatedByDRI = scrap.CreatedByGroup;\n scrap.CreatedByDRI.IsGroup = true;\n } else {\n scrap.CreatedByDRI = scrap.CreatedByUser;\n }\n });\n });\n }\n )\n .catch(\n function () {\n ToastUtil.showToastMessage($translate.instant(\"production.plan.occurrence.load\"), ToastUtil.ToastType.ERROR);\n });\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n }\n\n function changeDRI() {\n //Setting DRI\n angular.forEach(vm.productionPlan.ProductionPlanControls, function (productionPlanControl) {\n\n //Occurrence\n angular.forEach(productionPlanControl.Occurrences, function (occurrence) {\n if (occurrence.CreatedByDRI.IsGroup) {\n occurrence.CreatedByGroup = occurrence.CreatedByDRI;\n occurrence.CreatedByUser = null;\n } else {\n occurrence.CreatedByUser = occurrence.CreatedByDRI;\n occurrence.CreatedByGroup = null;\n }\n });\n\n //Scrap\n angular.forEach(productionPlanControl.Scraps, function (scrap) {\n if (scrap.CreatedByDRI.IsGroup) {\n scrap.CreatedByGroup = scrap.CreatedByDRI;\n scrap.CreatedByUser = null;\n } else {\n scrap.CreatedByUser = scrap.CreatedByDRI;\n scrap.CreatedByGroup = null;\n }\n });\n });\n }\n\n // Checks the value is numeric.\n function IsNumeric(input) {\n return (input - 0) == input && ('' + input).trim().length > 0;\n }\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(SourcingTranslate);\n\n /** @ngInject */\n function SourcingTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'title.preferences': 'Preferences',\n 'title.dashboard': 'Dashboard',\n 'preferences.label.no': 'NO.',\n 'preferences.label.order': '#',\n 'preferences.label.card': 'Card',\n 'preferences.label.show': 'Show',\n 'preferences.error.search': 'An error occurred when trying to load a list of Dashboards.',\n 'preferences.dashboard.save.success.msg': 'Dashboard successfully saved.',\n 'preferences.dashboard.save.error.msg': 'An error occurred when try to save dashboard.',\n 'approval.reservation.title': 'Approval Reservation',\n 'approval.reservation.startdate': 'Start Date',\n 'approval.reservation.enddate': 'End Date',\n 'approval.reservation.reservation': 'Reservation',\n 'approval.reservation.placeholder.reservation': 'Search by Name',\n 'approvat.reservation.target': 'Target',\n 'approval.reservation.role': 'Role',\n 'approval.reservation.status': 'Status',\n 'approval.reservation.processingdate': 'Processing Date',\n 'approval.reservation.parallel': 'Parallel',\n 'approval.reservation.approver.consent': 'Approver / Consent',\n 'approval.reservation.date.format': 'YYYY-MM-DD',\n 'approval.reservation.message.confirm': 'All approval records that are ssociated with you in the period #startdate to #enddate and that are not approved wil be transferred to the #reservation.',\n 'approval.reservation.save.error.msg': 'An error occurred when try to save approval reservation.',\n 'preferences.approve.reservation.startdate.required': 'Start Date is required.',\n 'preferences.approve.reservation.enddate.required': 'End Date is required.',\n 'preferences.approve.reservation.user.required': 'User in Reservation is required.',\n 'preferences.approve.reservation.enddate.lessthen.startdate': 'Start Date must be less than or equal to End Date.',\n 'preferences.approve.reservation.user.different': 'User Reservation must be different from the logged in user.'\n });\n\n $translateProvider.translations('pt', {\n 'title.preferences': 'Preferências',\n 'title.dashboard': 'Painel',\n 'preferences.label.no': 'NO.',\n 'preferences.label.order': '#',\n 'preferences.label.card': 'Cartão',\n 'preferences.label.show': 'Exibir',\n 'preferences.error.search': 'Não foi possível carregar a lista de Painéis, tente novamente ou contate um administrador.',\n 'preferences.dashboard.save.success.msg': 'Painéis salvos com sucesso.',\n 'preferences.dashboard.save.error.msg': 'Ocorreu um erro ao tentar salvar o painel.',\n 'approval.reservation.title': 'Reserva de Aprovação',\n 'approval.reservation.startdate': 'Data Inicial',\n 'approval.reservation.enddate': 'Data Final',\n 'approval.reservation.reservation': 'Reserva',\n 'approval.reservation.placeholder.reservation': 'Busca por Nome',\n 'approvat.reservation.target': 'Alvo',\n 'approval.reservation.role': 'Função',\n 'approval.reservation.status': 'Situação',\n 'approval.reservation.processingdate': 'Data de Processamento',\n 'approval.reservation.parallel': 'Paralelo',\n 'approval.reservation.approver.consent': 'Aprovador / Consentimento', \n 'approval.reservation.date.format': 'DD/MM/YYYY',\n 'approval.reservation.message.confirm': 'Todos os registros de aprovação que estão associados a você no período de #startdate a #enddate e que não foram aprovados serão transferidos para #reservation.',\n 'approval.reservation.save.error.msg': 'Ocorreu um erro ao tentar salvar o aprovador reserva.',\n 'preferences.approve.reservation.startdate.required': 'Data Inicial é obrigatório.',\n 'preferences.approve.reservation.enddate.required': 'Data Final é obrigatório',\n 'preferences.approve.reservation.user.required': 'Usuário do campo Reserva é obrigatório.',\n 'preferences.approve.reservation.enddate.lessthen.startdate': 'Data Inicial precisa ser menor ou igual Data Final.',\n 'preferences.approve.reservation.user.different': 'Usuário do campo Reserva precisa ser diferente do usuário logado.'\n });\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('PreferencesService', PreferencesService);\n\n /** @ngInject */\n function PreferencesService($window, $injector, $q, ConfigurationService) {\n var domain = \"/dashboard\";\n return {\n\n getReservationByApproveAndDate: function(approve) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n $http.get(ConfigurationService.getServiceHost() + domain + '/reservation/', {\n params: approve\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n listPreferenceDashboard: function () {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + domain + '/preferences-list/',\n {\n headers : {'Authorization': $window.localStorage.aqmsToken}\n })\n .then(\n function (response) {\n deferred.resolve(response);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n save: function (preferences) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + domain + \"/preferences/\", preferences, {headers: {'Authorization': $window.localStorage.aqmsToken}})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n\n };\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(SourcingRouter);\n\n /** @ngInject */\n function SourcingRouter($stateProvider) {\n\n\n $stateProvider.state('preferences-edit', {\n url: '/preferences/dashboard',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/preferences/preferences-edit.html',\n controller: 'PreferencesEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.preferences'\n },\n authorize: true\n });\n \n }\n})();\n\n(function () {\n 'use_strict';\n\n angular\n .module('aqmsFrontend')\n .controller('PreferencesEditController', PreferencesEditController);\n\n function PreferencesEditController($scope, $log, $translate, $filter, $state, $window, $document, ToastUtil, moment, PreferencesService, DialogController) {\n\n var vm = this;\n\n var USER = {\n Id: parseInt($window.localStorage.userID),\n Name: $window.localStorage.aliasAqms\n };\n\n vm.preferencesOrigin = null;\n\n var listDashboardCopy = [];\n vm.dashboard = '';\n vm.listDashboard = [];\n vm.dashboardRequired = false;\n vm.CreatedBy = USER;\n vm.StartDate = null;\n vm.EndDate = null;\n vm.Reservation = {\n Id: null,\n Name: null\n }\n\n vm.preferencesToSave = {\n ListDashboard: vm.listDashboard,\n ApproveReservation: null,\n StartDate: null,\n EndDate: null\n }\n\n var group = [];\n var qtdGroup = [];\n\n vm.updateModel = function (value) {\n vm.dashboard = value;\n }\n\n vm.moveItem = function (pos, dashboard, down) {\n vm.dragstart();\n if ( down ) {\n if (vm.listDashboard[pos + 1]) {\n vm.listDashboard.splice(pos, 1);\n vm.listDashboard.splice(pos + 1, 0, dashboard);\n }\n } else {\n if (pos > 0 && vm.listDashboard[pos - 1]) {\n vm.listDashboard.splice(pos, 1);\n vm.listDashboard.splice(pos - 1, 0, dashboard);\n }\n }\n \n listDashboard();\n sortDashboard();\n listDashboardCopy = null;\n }\n\n \n vm.orderedDashboard = function () {\n vm.dragstart(); \n sortDashboard();\n listDashboardCopy = null; \n }\n\n function sortDashboard() {\n for (var i = 0; i < vm.listDashboard.length; i++) {\n vm.listDashboard[i].OrderDashboard = i + 1;\n }\n }\n\n vm.disabledShowDashboard = function (index, dashboard) {\n if (index == 0 && vm.listDashboard[index + 1].CsActive) {\n vm.listDashboard.splice(index, 1);\n vm.listDashboard.push(dashboard);\n } else if(index - 1 >= 0 && dashboard.CsActive) {\n for( var i = index-1; i >= 0; i--) {\n if ( i == 0 && !vm.listDashboard[i].CsActive) {\n vm.listDashboard.splice(index, 1);\n vm.listDashboard.unshift(dashboard);\n break;\n } else if( vm.listDashboard[i] && vm.listDashboard[i].CsActive && vm.listDashboard[i].Id != dashboard.Id) {\n vm.listDashboard.splice(index, 1);\n vm.listDashboard.unshift(dashboard);\n break;\n }\n }\n } else if (vm.listDashboard.length !== (index + 1) && ( index - 1 >= 0 && vm.listDashboard[index - 1].CsActive && vm.listDashboard[index + 1].CsActive)) {\n vm.listDashboard.splice(index, 1);\n vm.listDashboard.push(dashboard);\n }\n listDashboard();\n }\n\n function listDashboard() {\n for (var i = 0; i < vm.listDashboard.length; i++) {\n vm.listDashboard[i].OrderDashboard = i + 1;\n }\n }\n\n \n function getGroup(list) {\n group = [];\n qtdGroup = [];\n for (var i = 0; i < list.length; i++) {\n if (list[i].Id) {\n if (group.length > 1) {\n qtdGroup.push(group);\n }\n group = [];\n }\n }\n if (group.length > 1) {\n qtdGroup.push(group);\n }\n }\n\n vm.dragstart = function () {\n listDashboardCopy = angular.copy(vm.listDashboard);\n getGroup(listDashboardCopy);\n }\n\n vm.clearReservationFields = function () {\n vm.StartDate = null;\n vm.EndDate = null;\n vm.Reservation = {\n Id: null,\n Name: null\n }\n };\n\n vm.searchPreferences = function() {\n PreferencesService.listPreferenceDashboard().then(function (response) {\n vm.preferencesToSave = angular.copy(response.data);\n if ( vm.preferencesToSave.ReservationId > 0 ) {\n vm.StartDate = moment(vm.preferencesToSave.StartDate, 'YYYY/MM/DD').toDate();\n vm.EndDate = moment(vm.preferencesToSave.EndDate, 'YYYY/MM/DD').toDate();\n vm.preferencesToSave.StartDate = vm.StartDate;\n vm.preferencesToSave.EndDate = vm.EndDate;\n vm.preferencesOrigin = angular.copy(vm.preferencesToSave);\n vm.Reservation = {\n Id: vm.preferencesToSave.ReservationId,\n Name: vm.preferencesToSave.ReservationName\n }\n }\n \n vm.listDashboard = vm.preferencesToSave.Dashboards; \n }).catch(function (error) {\n $log.log(error);\n if (error.status !== $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"preferences.dashboard.error.msg\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function validateApproveReservationForm() {\n if (vm.Reservation && vm.Reservation.Id && vm.Reservation.Id != null && vm.Reservation.Id > 0) {\n if (vm.CreatedBy.Id == vm.Reservation.Id) {\n return $translate.instant(\"preferences.approve.reservation.user.different\");\n } \n if ( !vm.StartDate ) {\n return $translate.instant(\"preferences.approve.reservation.startdate.required\");\n } else if ( vm.StartDate && !vm.EndDate ) {\n return $translate.instant(\"preferences.approve.reservation.enddate.required\");\n } else if ((vm.StartDate && vm.EndDate) && (vm.EndDate < vm.StartDate)) {\n return $translate.instant(\"preferences.approve.reservation.enddate.lessthen.startdate\");\n }\n } else if ( vm.StartDate || vm.EndDate ) {\n vm.Reservation = {\n Id: null,\n Name: null\n }\n return $translate.instant(\"preferences.approve.reservation.user.required\");\n }\n return null;\n }\n\n vm.confirmReservation = function() {\n var messageValidation = validateApproveReservationForm();\n if ( messageValidation ) {\n ToastUtil.showToastMessage(messageValidation, ToastUtil.ToastType.ERROR);\n } else {\n vm.showConfirm($translate.instant(\"approval.reservation.message.confirm\")\n .replace(\"#startdate\", moment(vm.StartDate).format($translate.instant('approval.reservation.date.format')))\n .replace(\"#enddate\", moment(vm.EndDate).format($translate.instant('approval.reservation.date.format')))\n .replace(\"#reservation\", vm.Reservation.Name), vm.updatePreferencesDashboard );\n }\n };\n\n vm.showConfirm = function(text, action) {\n DialogController.show($translate.instant('approval.reservation.title'),'', action, text);\n };\n \n vm.validaViewModalConfirm = function() {\n var now = new Date();\n return ( vm.StartDate && compareDates(vm.StartDate, now ) );\n }\n\n function compareDates(data1, data2) {\n return moment(data1).format(\"YYYY-MM-DD\") <= moment(data2).format(\"YYYY-MM-DD\");\n }\n\n vm.updatePreferencesDashboard = function() {\n var messageValidation = validateApproveReservationForm();\n if ( messageValidation ) {\n ToastUtil.showToastMessage(messageValidation, ToastUtil.ToastType.ERROR);\n } else {\n createListDashboardToUpdate();\n PreferencesService.save(vm.preferencesToSave)\n .then(\n function () {\n vm.searchPreferences();\n ToastUtil.showToastMessage($translate.instant(\"preferences.dashboard.save.success.msg\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(\n function (error) {\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(\"preferences.dashboard.save.error.msg\"), ToastUtil.ToastType.ERROR);\n }\n }\n });\n }\n\n }\n\n function createListDashboardToUpdate() {\n var preferences = angular.copy(vm.preferencesToSave);\n var listDashboardToUpdate = angular.copy(vm.listDashboard);\n delete vm.listDashboard;\n vm.listDashboard = [];\n for (var i = 0; i < listDashboardToUpdate.length; i++) {\n var dashboardToUpdate = {\n Id: listDashboardToUpdate[i].Id,\n DashboardId: listDashboardToUpdate[i].DashboardId,\n Title: listDashboardToUpdate[i].Title,\n OrderDashboard: listDashboardToUpdate[i].OrderDashboard,\n CsActive: listDashboardToUpdate[i].CsActive,\n Company: { Id: listDashboardToUpdate[i].Company_Id } ,\n User: { Id: listDashboardToUpdate[i].User_Id },\n CreatedDate: listDashboardToUpdate[i].CreatedDate\n }\n vm.listDashboard.push(dashboardToUpdate);\n }\n preferences.Dashboards = vm.listDashboard;\n preferences.StartDate = vm.StartDate;\n preferences.EndDate = vm.EndDate; \n preferences.ReservationId = vm.Reservation ? vm.Reservation.Id : null;\n preferences.ReservationName = vm.Reservation ? vm.Reservation.Name : null;\n vm.preferencesToSave = preferences;\n }\n function init() {\n vm.searchPreferences();\n }\n \n init();\n }\n \n\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(PDCATranslate);\n\n /** @ngInject */\n function PDCATranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'title.pdca': 'PDCA',\n 'title.pdca.complete': 'PDCA - Plan/Do/Check/Act',\n 'label.new.pdca': 'New PDCA',\n 'label.edit.pdca': 'PDCA Editing',\n 'label.status': 'Status',\n 'label.pdca.status.ongoing': 'On Going',\n 'label.pdca.status.closed': 'Closed',\n 'label.pdca.status': 'Status',\n 'label.pdca.cycle': 'Cycle',\n 'label.pdca.Date': 'Date',\n 'label.pdca.Week': 'Week',\n 'label.pdca.identification': 'Identification',\n 'label.pdca.plan': 'Plan',\n 'label.pdca.do': 'Do',\n 'label.pdca.checkAct': 'Check and Act',\n 'label.pdca.check': 'Check',\n 'label.pdca.load.all.notFound': 'No PDCA found.',\n 'label.pdca.btn.new' : 'New PDCA',\n 'label.pdca.allStatus': 'Search all status',\n 'label.pdca.name': 'Title',\n 'label.pdca.date': 'Date',\n 'label.pdca.title': 'PDCA',\n 'label.pdca.problem': 'Problem',\n 'label.pdca.goaltarget': 'Goal/Target',\n 'label.pdca.containmentplan': 'Containment Plan',\n 'label.pdca.whys': 'Whys',\n 'label.pdca.ishikawa.title' : 'Ishikawa',\n 'label.pdca.causeanalysis.title' : 'Cause Analysis',\n 'label.pdca.howhappened.title' : 'How Happened',\n 'label.pdca.whynotwasdetected.title' : 'Why Not Was Detected',\n 'label.pdca.causehowhappened.title' : 'Cause - How Happened',\n 'label.pdca.causewhynotwasdetected.title' : 'Cause - Why Not Was Detected',\n 'label.pdca.countermeasure': 'Counter-measure',\n 'label.pdca.act': 'Act - Actions to prevent recurrences',\n 'label.pdca.cycle.title': 'Cycle #cycle',\n 'label.pdca.before': 'Before',\n 'label.pdca.after': 'After',\n 'label.pdca.result': 'Result',\n 'label.pdca.goalaccomplished': 'Goal Accomplished',\n 'label.pdca.goalnotaccomplished': 'Goal not Accomplished',\n 'label.pdca.efficacy': 'Efficiency',\n 'label.pdca.needconfirmation': 'Need Confirmation',\n 'label.pdca.dontneedconfirmation': 'Dont need confirmation',\n 'label.pdca.startdate': 'Start Date for Evaluation',\n 'label.pdca.nextrevisionexpected': 'Next Revision Expected',\n 'label.pdca.30days': '30 days',\n 'label.pdca.60days': '60 days',\n 'label.pdca.90days': '90 days',\n 'label.pdca.reviewby': 'Review by',\n 'label.pdca.reviewdate': 'Review Date',\n 'label.pdca.efficacy.select.status': 'Select...',\n 'label.pdca.efficacy.ok.status': 'OK',\n 'label.pdca.efficacy.notgood.status': 'Not Good',\n 'label.pdca.status.evaluationcycle': 'Evaluation Cycle',\n 'title.confirmgoal': 'Confirmation',\n\n 'placeholder.clean.pdca.button': 'Clean',\n 'placeholder.search.pdca.button': 'Search',\n 'placeholder.title.pdca': 'Write the pdca title...',\n 'placeholder.search.pdca': 'Search PDCA by title or id',\n\n 'msg.pdca.save.success': 'PDCA saved with success.',\n 'msg.pdca.save.error': 'An error occoured when trying to save PDCA, please contact your administrator.',\n 'msg.pdca.delete.success': 'PDCA deleted with success.',\n 'msg.pdca.checkfields.invalid': 'You must complete all fields before and after to confirm the PDCA result.',\n 'msg.pdca.dialog.confirmation.title': 'Result Confirmation',\n 'msg.pdca.dialog.efficiency.confirmation.title': 'Efficiency Confirmation',\n 'msg.pdca.dialog.result.goal.accomplished': 'Do you want to confirm the goals full achievement?',\n 'msg.pdca.dialog.result.goal.not.accomplished': 'A new evaluation cycle will be created. Do you want to confirm that you have missed the goal?',\n 'msg.pdca.dialog.efficacy.need.confirmation' : 'A 90-day evaluation cycle will be created. Do you want to confirm effectiveness in this period?',\n 'msg.pdca.dialog.efficacy.dont.need.confirmation' : 'Do you want to confirm the effectiveness and completeness of the PDCA?',\n 'msg.pdca.dialog.save.not.good.status' : 'A new evaluation cycle will be created. Do you want to confirm the non-active effectiveness?',\n 'msg.pdca.dialog.save.confirmation.title': 'Save PDCA',\n 'msg.pdca.dialog.save.day90' : 'The evaluation cycle of PDCA effectiveness will be completed. Do you want to confirm?',\n 'msg.error.pdca.delete.has.associations': 'This PDCA could not be deleted. There are one or more associated records.',\n 'msg.error.pdca.already.updated': 'An error occurred when try to save the PDCA. The item has already updated.',\n 'msg.error.pdca.task.already.updated': 'An error occurred when try to edit the Task. The item has already updated.'\n\n });\n\n $translateProvider.translations('pt', {\n 'title.pdca': 'PDCA',\n 'title.pdca.complete': 'PDCA - Planejar/Executar/Checar/Agir',\n 'label.new.pdca': 'Novo PDCA',\n 'label.edit.pdca': 'Edição de PDCA',\n 'label.status': 'Status',\n 'label.pdca.status.ongoing': 'Em andamento',\n 'label.pdca.status.closed': 'Fechado',\n 'label.pdca.status': 'Status',\n 'label.pdca.cycle': 'Ciclo',\n 'label.pdca.Date': 'Data',\n 'label.pdca.Week': 'Semana',\n 'label.pdca.identification': 'Identificação',\n 'label.pdca.plan': 'Planejar',\n 'label.pdca.do': 'Fazer',\n 'label.pdca.checkAct': 'Verificar e agir',\n 'label.pdca.check': 'Verificar',\n 'label.pdca.load.all.notFound': 'Nenhum PDCA encontrado.',\n 'label.pdca.btn.new' : 'Novo PDCA',\n 'label.pdca.allStatus': 'Pesquisar todos os status',\n 'label.pdca.name': 'Título',\n 'label.pdca.date': 'Data',\n 'label.pdca.title': 'PDCA',\n 'label.pdca.problem': 'Problema',\n 'label.pdca.goaltarget': 'Objetivo',\n 'label.pdca.containmentplan': 'Plano de Contenção',\n 'label.pdca.whys': 'Porquês',\n 'label.pdca.ishikawa.title' : 'Ishikawa',\n 'label.pdca.causeanalysis.title' : 'Análise da Causa',\n 'label.pdca.howhappened.title' : 'Como aconteceu',\n 'label.pdca.whynotwasdetected.title' : 'Por que não foi detectado',\n 'label.pdca.causehowhappened.title' : 'Causa - Como aconteceu',\n 'label.pdca.causewhynotwasdetected.title' : 'Causa - Por que não foi detectado',\n 'label.pdca.countermeasure': 'Contra Medida',\n 'label.pdca.act': 'Agir - Ações para evitar recorrências',\n 'label.pdca.cycle.title': 'Ciclo #cycle',\n 'label.pdca.before': 'Antes',\n 'label.pdca.after': 'Depois',\n 'label.pdca.result': 'Resultado',\n 'label.pdca.goalaccomplished': 'Objetivo Alcançado',\n 'label.pdca.goalnotaccomplished': 'Objetivo não alcançado',\n 'label.pdca.efficacy': 'Eficácia',\n 'label.pdca.needconfirmation': 'Necessita de confirmação',\n 'label.pdca.dontneedconfirmation': 'Não necessita de confirmação',\n 'label.pdca.startdate': 'Data Inicial para avaliação',\n 'label.pdca.nextrevisionexpected': 'Próxima revisão esperada',\n 'label.pdca.30days': '30 dias',\n 'label.pdca.60days': '60 dias',\n 'label.pdca.90days': '90 dias',\n 'label.pdca.reviewby': 'Revisado por',\n 'label.pdca.reviewdate': 'Data da revisão',\n 'label.pdca.efficacy.select.status': 'Selecione...',\n 'label.pdca.efficacy.ok.status': 'OK',\n 'label.pdca.efficacy.notgood.status': 'Not Good',\n 'label.pdca.status.evaluationcycle': 'Ciclo de Avaliação',\n 'title.confirmgoal': 'Confirmação',\n\n 'placeholder.clean.plan.button': 'Limpar',\n 'placeholder.search.plan.button': 'Pesquisa',\n 'placeholder.title.pdca': 'Escreva o título do pdca...',\n 'placeholder.search.pdca': 'Buscar PDCA por título ou id',\n\n 'msg.pdca.save.success': 'PDCA salvo com sucesso.',\n 'msg.pdca.save.error': 'Ocorreu um erro ao cadastrar o PDCA, entre em contato com o administrador.',\n 'msg.pdca.delete.success': 'PDCA excluído com sucesso.',\n 'msg.pdca.checkfields.invalid': 'Você precisa preencher todos os campos antes e depois para confirmar o resultado do PDCA.',\n 'msg.pdca.dialog.confirmation.title': 'Confirmação de Resultado',\n 'msg.pdca.dialog.efficiency.confirmation.title': 'Confirmação de Eficácia',\n 'msg.pdca.dialog.result.goal.accomplished': 'Deseja confirmar o atingimento completo meta?',\n 'msg.pdca.dialog.result.goal.not.accomplished': 'Será criado um novo ciclo de avaliação. Deseja confirmar o não atingimento da meta?',\n 'msg.pdca.dialog.efficacy.need.confirmation' : 'Será criado um ciclo de avaliação de 90 dias. Deseja confirmar a eficácia neste período?',\n 'msg.pdca.dialog.efficacy.dont.need.confirmation' : 'Deseja confirmar a eficácia e concluir o PDCA?',\n 'msg.pdca.dialog.save.not.good.status' : 'Será criado um novo ciclo de avaliação. Deseja confirmar o não atingimento da eficácia? ',\n 'msg.pdca.dialog.save.confirmation.title': 'Salvar PDCA',\n 'msg.pdca.dialog.save.day90' : 'O ciclo de avaliação da eficácia do PDCA será concluído. Deseja confirmar?',\n 'msg.error.pdca.delete.has.associations': 'Este PDCA não pôde ser removido. Há um ou mais registros associados.',\n 'msg.error.pdca.already.updated': 'Ocorreu um erro ao salvar o PDCA. O item foi modificado anteriormente.',\n 'msg.error.pdca.task.already.updated': 'Ocorreu um erro ao editar a tarefa. O item foi modificado anteriormente.'\n\n });\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('PDCAService', PDCAService);\n\n /** @ngInject */\n function PDCAService($window, $injector, $q, ConfigurationService) {\n var BASE = \"/pdca\";\n return {\n listAll: function (filtro) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + '/list', {\n params: filtro\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n export: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + '/export/' + id, {\n responseType: 'arraybuffer'\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n save: function (pdca) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + BASE + \"/\", pdca, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n loadPlan: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + '/plan/' + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n loadById: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + '/byId/' + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n listAllIshikawaType: function () {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/ishikawa' + '/list/ishikawatype', {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n delete: function (Id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + BASE + '/' + Id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n };\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(PDCARouter);\n\n /** @ngInject */\n function PDCARouter($stateProvider) {\n\n $stateProvider.state('pdca-list', {\n url: '/pdca',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/pdca/pdca-list.html',\n controller: 'PDCAListController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.pdca'\n },\n\n authorize: true\n });\n\n $stateProvider.state('pdca-create', {\n url: '/pdca/create',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/pdca/identification/pdca-edit-identification.html',\n controller: 'PDCAEditIdentificationController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.pdca'\n },\n authorize: true\n });\n\n $stateProvider.state('pdca-edit', {\n url: '/pdca/edit/:Id',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/pdca/identification/pdca-edit-identification.html',\n controller: 'PDCAEditIdentificationController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.pdca'\n },\n authorize: true\n });\n\n $stateProvider.state('pdca-identification', {\n url: '/pdca/edit/:Id',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/pdca/identification/pdca-edit-identification.html',\n controller: 'PDCAEditIdentificationController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.pdca',\n Id: '-1'\n },\n authorize: true\n });\n\n $stateProvider.state('pdca-plan', {\n url: '/pdca/plan/edit/:Id',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/pdca/plan/pdca-edit-plan.html',\n controller: 'PDCAEditPlanController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.pdca',\n Id: '-1'\n },\n authorize: true\n });\n\n $stateProvider.state('pdca-do', {\n url: '/pdca/do/edit/:Id',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/pdca/do/pdca-edit-do.html',\n controller: 'PDCAEditDoController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.pdca',\n Id: '-1'\n },\n authorize: true\n });\n\n $stateProvider.state('pdca-check-act', {\n url: '/pdca/check/edit/:Id',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/pdca/check-act/pdca-edit-check.html',\n controller: 'PDCAEditCheckActController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.pdca',\n Id: '-1'\n },\n authorize: true\n });\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('PDCAListController', PDCAListController);\n\n function PDCAListController($state, ToastUtil, moment, $translate, $log, $scope, PDCAService,\n DefaultService, AuthService, $document) {\n\n var vm = this;\n\n vm.itensPerPageList = [\n {name: '5', value: 5, before: 0, after: 6}, \n {name: '10', value: 10, before: 5, after: 11}, \n {name: '20', value: 20, before: 10, after: 21}, \n {name: '30', value: 30, before: 20, after: 31}, \n {name: '40', value: 40, before: 30, after: 41}, \n {name: '50', value: 50, before: 40, after: 51}]\n\n vm.itemPerPage = vm.itensPerPageList[0];\n\n var profile = {\n CanAdd: false,\n CanEdit: false,\n CanDelete: false,\n CanView: false,\n CanExport: false\n };\n\n vm.StatusId = {\n ONGOING : 1,\n CLOSED: 2,\n EvaluationCycle: 3\n };\n\n vm.statusList = [\n { id : vm.StatusId.ONGOING, Name : 'label.pdca.status.ongoing'},\n { id : vm.StatusId.CLOSED, Name : 'label.pdca.status.closed'},\n { id : vm.StatusId.EvaluationCycle, Name : 'label.pdca.status.evaluationcycle'}\n ];\n\n vm.totalLista = 0;\n\n vm.searchParams = {\n IdOrTitle: '',\n DateTemp: '',\n Date: '',\n StatusTemp: {},\n Status: 0,\n Page: 1,\n MaxPerPage: vm.itemPerPage.value,\n BusinessId: AuthService.getBusinessId()\n };\n\n vm.clearSearchFields = function() {\n vm.searchParams.IdOrTitle = '';\n vm.searchParams.DateTemp = '';\n vm.searchParams.Date = '';\n vm.searchParams.StatusTemp = {};\n vm.searchParams.Status = 0;\n }\n \n vm.shouldShow = function (item) {\n if(vm.totalLista > 0 && item != undefined) {\n return vm.totalLista >= item.value || (vm.totalLista < item.after && vm.totalLista > item.before);\n }\n return false;\n }\n \n vm.changeItemsPerPage = function() {\n if ( vm.itemPerPage == null ) {\n vm.itemPerPage = vm.itensPerPageList[0];\n }\n vm.searchParams.Page = 1;\n vm.searchParams.MaxPerPage = vm.itemPerPage.value;\n vm.search()\n }\n\n vm.searchPDCA = function () {\n vm.itemPerPage = vm.itensPerPageList[0];\n vm.searchParams.Page = 1;\n vm.searchParams.MaxPerPage = vm.itemPerPage.value;\n vm.search();\n }\n\n function init() {\n loadProfileModules();\n vm.search();\n }\n\n vm.export = function (id) {\n if (profile.CanExport) {\n if (!vm.exporting) {\n vm.exporting = true;\n\n PDCAService.export(id).then(function (response) {\n var newFile = new Blob([response], {\n type: 'application/application/vnd.openxmlformats-officedocument.wordprocessingml.document'\n });\n var fileURL = URL.createObjectURL(newFile);\n var date = moment().format(\"DD_MM_YYYY_HH_mm_ss\");\n var a = $document[0].createElement(\"a\");\n $document[0].body.appendChild(a);\n a.style = \"display: none\";\n a.href = fileURL;\n a.download = \"PDCA_\" + AuthService.getBusinessName() + \"_\" + date + \".docx\";\n\n a.click();\n vm.exporting = false;\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"service.load.error\"), ToastUtil.ToastType.ERROR);\n vm.exporting = false;\n });\n }\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n };\n\n function validateSearchParams(){\n if (vm.searchParams.MaxPerPage == undefined ) {\n vm.searchParams.MaxPerPage = 5;\n }\n\n if (vm.searchParams.DateTemp != undefined && vm.searchParams.DateTemp != ''){\n vm.searchParams.Date = moment(angular.copy(vm.searchParams.DateTemp)).format('DD/MM/YYYY');\n }\n else{\n vm.searchParams.Date = '';\n }\n }\n\n vm.getFormatedDate = function (date) {\n var dateFormated = moment.utc(date).format('DD/MM/YYYY');\n return dateFormated;\n };\n\n vm.search = function () {\n if (sessionStorage.getItem(\"searchParams\")) {\n vm.searchParams = JSON.parse(sessionStorage.getItem(\"searchParams\"));\n sessionStorage.removeItem(\"searchParams\");\n vm.itensPerPageList.forEach(function(element) {\n if (element.value == vm.searchParams.MaxPerPage) {\n vm.itemPerPage = element;\n return;\n }\n });\n }\n \n validateSearchParams();\n\n PDCAService.listAll(angular.copy(vm.searchParams))\n .then(function (response) {\n vm.pdcas = angular.copy(response);\n vm.totalLista = response.total;\n })\n .catch(function (error) {\n $log.log(error);\n\n if(error.status != $scope.HttpStatusUnauthorized){\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n }\n });\n };\n\n vm.edit = function (pdca) {\n if(validateEditPermission()){\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('pdca-edit', {\n Id: pdca.Id\n });\n }\n };\n\n vm.delete = function (id) {\n if(validateDeletePermission()){\n PDCAService.delete(id).then(function () {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n vm.search();\n ToastUtil.showToastMessage($translate.instant(\"msg.pdca.delete.success\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(function (error) {\n $log.log(error);\n\n if(error.status == $scope.HttpStatusCodeConflict){\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n else if(error.status != $scope.HttpStatusUnauthorized){\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n }\n });\n }\n };\n\n vm.getStatusName = function (statusId) {\n var statusTitle = \"\";\n angular.forEach(vm.statusList, function (value) {\n if (value.id == statusId) {\n statusTitle = value.Name;\n }\n });\n return statusTitle;\n };\n\n vm.setStatusId = function (id) {\n vm.searchParams.Status = id;\n };\n\n vm.addPdca = function(){\n if(validateAddPermission()){\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('pdca-create', {});\n }\n };\n\n function loadProfileModules() {\n var profileModule = {};\n\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.modulePdca;\n\n DefaultService.loadModules(profileModule)\n .then(function (response) {\n profile = angular.copy(response);\n validateViewPermission();\n })\n .catch(function (error) {\n $log.log(error);\n\n if(error.data && error.data.ToastType == 1)\n {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n else if(error.status != $scope.HttpStatusUnauthorized){\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function validateViewPermission(){\n if(!profile.CanView){\n $state.go('not-authorized', {}, {});\n }\n }\n\n function validateEditPermission(){\n if(!profile.CanEdit){\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n return false;\n }\n\n return true;\n }\n\n function validateAddPermission(){\n if(!profile.CanAdd){\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n return false;\n }\n\n return true;\n }\n\n function validateDeletePermission() {\n if (!profile.CanDelete) {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n return false;\n }\n\n return true;\n }\n\n vm.getStatusIconClass = function (statusId) {\n if (statusId == vm.StatusId.EvaluationCycle) {\n return 'ic-sent';\n } else if (statusId == vm.StatusId.CLOSED) {\n return 'ic-approved';\n }\n\n return '';\n };\n\n vm.disablePDCADelete = function(item){\n if(item.Status == vm.StatusId.CLOSED || item.Status == vm.StatusId.EvaluationCycle){\n return true;\n }else{\n return false;\n }\n };\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(OqcObaTranslate);\n\n /** @ngInject */\n function OqcObaTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'title.oqc.oba': 'OQC / OBA',\n 'title.oqc.oba.complete': 'OQC / OBA - Outgoing Quality Control / Outgoing Boundary Analisys',\n 'title.oqc.oba.new': 'New OQC / OBA',\n 'title.oqc.oba.edit': 'OQC / OBA Editing',\n 'label.lotId':'Lot or Id',\n 'label.new.oqc.oba': 'New Inspection Lot',\n 'oqc.oba.status.ongoing.title': 'Ongoing',\n 'oqc.oba.status.accepted.title': 'Accepted',\n 'oqc.oba.status.rejected.title': 'Rejected',\n 'load.all.oqcoba.error': 'Error on load OQC/OBA.',\n 'delete.oqcoba.success': 'OQC/OBA successfully removed.',\n 'delete.oqcoba.error': 'Error on remove OQC/OBA.',\n 'load.all.oqcoba.notFound': 'OQC/OBA not found.',\n 'new.oqcoba.panel.identification': 'OQC / OBA Identification',\n 'new.oqcoba.title.label': 'Lot',\n 'new.oqcoba.title.placeholder': 'Write a OQC/OBA title...',\n 'new.oqcoba.date.label': 'Date',\n 'new.oqcoba.week.label': 'Week',\n 'new.oqcoba.createdbydri.label': 'Created by',\n 'new.oqcoba.approvedbydri.label': 'Approved by',\n 'new.oqcoba.project.label': 'Project',\n 'new.oqcoba.client.label': 'Client',\n 'new.oqcoba.model.label': 'Model',\n 'new.oqcoba.variant.label': 'Variant',\n 'new.oqcoba.cmb.model.hint': 'Select a model',\n 'new.oqcoba.lot.quantity.label': 'Lot Qty.',\n 'new.oqcoba.inspection.quantity.label': 'Inspection Qty.',\n 'new.oqcoba.serial.label': 'Serial',\n 'new.oqcoba.inspectiontype.label': 'Inspection type',\n 'new.oqcoba.obafunctional.label': 'OBA (Functional)',\n 'new.oqcoba.oqccosmetic.label': 'OQC (Cosmetic)',\n 'new.oqcoba.inspectresult.label': 'Inspection findings',\n 'new.oqcoba.inspectresult.type.label': 'Type',\n 'new.oqcoba.inspectresult.oba.label': 'OBA',\n 'new.oqcoba.inspectresult.oqc.label': 'OQC',\n 'new.oqcoba.inspectresult.quantity.label': 'Quantity',\n 'new.oqcoba.inspectresult.description.label': 'Description',\n 'new.oqcoba.inspectresult.picture.label': 'Picture',\n 'new.oqcoba.inspectresult.attachments.label': 'Attachments',\n 'new.oqcoba.action.label': 'Action',\n 'new.oqcoba.inspectresult.add.warn': 'Serial (#value) not read in OBA or OQC inspection.',\n 'new.oqcoba.inspectresult.add.duplicated.warn': 'Serial (#value) already exists in list.',\n 'new.oqcoba.acceptlot.label': 'Approve lot',\n 'new.oqcoba.rejectlot.label': 'Reject lot',\n 'new.oqcoba.rejectlot.remark.label': 'Remark',\n 'new.oqcoba.rejected.status.label': 'Rejected',\n 'new.oqcoba.inspections.attachments.label': 'Inspections Attachments',\n 'oqc.oba.status.label': 'Status',\n 'oqc.oba.reinspect.label': 'Reinspection',\n 'oqc.oba.stopline.label': 'Stop line',\n 'oqc.oba.notify.label': 'Notify',\n 'save.oqcoba.success': 'OQC/OBA successfully saved.',\n 'save.oqcoba.error': 'Error on save OQC/OBA.',\n 'oqcoba.remove.inspection.alert': 'If the serial (#serial) is in the result inspection both will be removed. Do you want to confirm?',\n 'oqcoba.required.message.title': 'Title field is required',\n 'oqcoba.required.message.date': 'Date field is required',\n 'oqcoba.required.message.model': 'Model field is required',\n 'oqcoba.required.message.lotqty': 'Lot quantity field is required',\n 'oqcoba.required.message.remark': 'Remark field is required',\n 'oqcoba.search.allstatus.label': 'All status',\n 'oqcoba.placeholder.search.week': 'Search by week',\n 'oqcoba.placeholder.search.year': 'Search by year',\n 'oqcoba.placeholder.rejectedreinspect.directive': 'Write a Rejected Lot in Inspection...',\n 'oqcoba.rejectedreinspect.directive.required.message': 'OQC/OBA is required to reinspection.',\n 'oqcoba.load.edit.error.message': 'An error occurred while trying to load OQC / OBA.',\n 'oqcoba.delete.exists.reference.error.message': 'There is a re-inspection associated with this lot.',\n 'new.oqcoba.filter.oba.serial.placeholder': 'Filter by OBA serial...',\n 'new.oqcoba.filter.oqc.serial.placeholder': 'Filter by OQC serial...',\n 'last.id.oqcoba.error': 'There was an error fetching the last OQC / OBA id',\n 'load.rejected.oqcoba.error': 'An error occurred while retrieving OQC / OBA list for re-inspection',\n 'error.oqcoba.search': 'There was an error loading OQC / OBA data',\n 'oqcoba.save.failed': 'An error occurred while trying to save OQC / OBA',\n 'error.oqcoba.not.found': 'OQC / OBA not found',\n 'placeholder.search.lotId':'Search By Lot or Id',\n 'update.old.oqc.oba.lot.success': 'OQC/OBA list successfully updated.',\n 'update.old.oqc.oba.lot.error': 'An error occurred when try to update OQC/OBA list.',\n 'help.lot.hint.format': 'Format: Two first digits of the year + Number of the week in two digits + code of the section / line registered + Sequential number of 4 digits restarted with each new week.'\n\n\n });\n\n $translateProvider.translations('pt', {\n 'title.oqc.oba': 'OQC / OBA',\n 'title.oqc.oba.complete': 'OQC / OBA - Controle de Qualidade de Saída / Inspeção Final de Produto Acabado',\n 'title.oqc.oba.new': 'Novo OQC / OBA',\n 'title.oqc.oba.edit': 'Edição de OQC / OBA',\n 'label.lotId':'Lote ou Id',\n 'label.new.oqc.oba': 'Novo Lote de Inspeção',\n 'oqc.oba.status.ongoing.title': 'Em andamento',\n 'oqc.oba.status.accepted.title': 'Aceito',\n 'oqc.oba.status.rejected.title': 'Rejeitado',\n 'load.all.oqcoba.error': 'Erro ao carregar o OQC/OBA.',\n 'delete.oqcoba.success': 'OQC/OBA removido com sucesso.',\n 'delete.oqcoba.error': 'Erro ao remover o OQC/OBA.',\n 'load.all.oqcoba.notFound': 'Nenhum OQC/OBA encontrado.',\n 'new.oqcoba.panel.identification': 'Identificação do OQC / OBA',\n 'new.oqcoba.title.label': 'Lote',\n 'new.oqcoba.title.placeholder': 'Digite um título para o OQC/OBA...',\n 'new.oqcoba.date.label': 'Data',\n 'new.oqcoba.week.label': 'Semana',\n 'new.oqcoba.createdbydri.label': 'Criado por',\n 'new.oqcoba.approvedbydri.label': 'Aprovado por',\n 'new.oqcoba.project.label': 'Projeto',\n 'new.oqcoba.client.label': 'Cliente',\n 'new.oqcoba.model.label': 'Modelo',\n 'new.oqcoba.variant.label': 'Variante',\n 'new.oqcoba.cmb.model.hint': 'Selecione um modelo',\n 'new.oqcoba.lot.quantity.label': 'Qtd. Lote',\n 'new.oqcoba.inspection.quantity.label': 'Qtd. Inspeção',\n 'new.oqcoba.serial.label': 'Serial',\n 'new.oqcoba.inspectiontype.label': 'Tipo da inspeção',\n 'new.oqcoba.obafunctional.label': 'OBA (Funcional)',\n 'new.oqcoba.oqccosmetic.label': 'OQC (Cosmético)',\n 'new.oqcoba.inspectresult.label': 'Ocorrências',\n 'new.oqcoba.inspectresult.type.label': 'Tipo',\n 'new.oqcoba.inspectresult.oba.label': 'OBA',\n 'new.oqcoba.inspectresult.oqc.label': 'OQC',\n 'new.oqcoba.inspectresult.quantity.label': 'Quantidade',\n 'new.oqcoba.inspectresult.description.label': 'Descrição',\n 'new.oqcoba.inspectresult.picture.label': 'Figura',\n 'new.oqcoba.inspectresult.attachments.label': 'Anexos',\n 'new.oqcoba.action.label': 'Ação',\n 'new.oqcoba.inspectresult.add.warn': 'Serial (#value) não foi lido na inspeção OBA ou OQC.',\n 'new.oqcoba.inspectresult.add.duplicated.warn': 'Serial (#value) já existe na lista.',\n 'new.oqcoba.acceptlot.label': 'Aprovar lote',\n 'new.oqcoba.rejectlot.label': 'Rejeitar lote',\n 'new.oqcoba.rejectlot.remark.label': 'Observação',\n 'new.oqcoba.rejected.status.label': 'Rejeitado',\n 'new.oqcoba.inspections.attachments.label': 'Anexos das Inspeções',\n 'oqc.oba.status.label': 'Status',\n 'oqc.oba.reinspect.label': 'Reinspeção',\n 'oqc.oba.stopline.label': 'Parar a linha',\n 'oqc.oba.notify.label': 'Notificar',\n 'save.oqcoba.success': 'OQC/OBA salvo com sucesso.',\n 'save.oqcoba.error': 'Erro ao tentar salvar o OQC/OBA.',\n 'oqcoba.remove.inspection.alert': 'Caso o serial (#serial) conste nas ocorrências, ambos serão removidos. Deseja Confirmar?',\n 'oqcoba.required.message.title': 'O campo título é obrigatório',\n 'oqcoba.required.message.date': 'O campo data é obrigatório',\n 'oqcoba.required.message.model': 'O campo model é obrigatório',\n 'oqcoba.required.message.lotqty': 'O campo quantidade do lote é obrigatório',\n 'oqcoba.required.message.remark': 'O campo observação é obrigatório',\n 'oqcoba.search.allstatus.label': 'Todos os status',\n 'oqcoba.placeholder.search.week': 'Buscar pela semana',\n 'oqcoba.placeholder.search.year': 'Buscar pelo ano',\n 'oqcoba.placeholder.rejectedreinspect.directive': 'Insira um Lot Rejeitado nas Inspeções...',\n 'oqcoba.rejectedreinspect.directive.required.message': 'OQC/OBA é obrigatório para a reinspeção.',\n 'oqcoba.load.edit.error.message': 'Ocorreu um erro ao tentar carregar o OQC / OBA.',\n 'oqcoba.delete.exists.reference.error.message': 'Existe uma reinspeção associada a este lote.',\n 'new.oqcoba.filter.oba.serial.placeholder': 'Filtrar pelo serial OBA...',\n 'new.oqcoba.filter.oqc.serial.placeholder': 'Filtrar pelo serial OQC...',\n 'last.id.oqcoba.error': 'Ocorreu um erro ao obter o ultimo id do OQC/OBA',\n 'load.rejected.oqcoba.error': 'Ocorreu um erro ao obter lista de OQC/OBA para reinspeção',\n 'error.oqcoba.search': 'Ocorreu um erro ao carregar os dados do OQC/OBA',\n 'oqcoba.save.failed': 'Ocorreu um erro ao tentar salvar o OQC/OBA',\n 'error.oqcoba.not.found': 'OQC/OBA não encontrado',\n 'placeholder.search.lotId':'Buscar por Lote ou Id',\n 'update.old.oqc.oba.lot.success': 'Lista de OQC/OBA atualizada com sucesso.',\n 'update.old.oqc.oba.lot.error': 'Ocorreu um erro ao tentar atualizar a lista de OQC/OBA.',\n 'help.lot.hint.format': 'Formato: Dois primeiro dígitos do ano + Número da semana em dois dígitos + código da seção/linha cadastrado + Número sequencial de 4 dígitos reiniciado a cada nova semana.'\n\n });\n\n\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('OqcObaService', OqcObaService);\n\n var OQC_OBA_BASE = '/oqc_oba';\n /** @ngInject */\n function OqcObaService($window, $injector, $q, ConfigurationService) {\n return {\n\n\n listAll: function (filterParams) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + OQC_OBA_BASE + '/', {\n params: filterParams\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n delete: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + OQC_OBA_BASE + \"/\" + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n save: function (oqcOba) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + OQC_OBA_BASE, oqcOba, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getById: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + OQC_OBA_BASE + '/byId/' + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n listAllRejectedReinspect: function (businessId) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + OQC_OBA_BASE + '/reject-reinspect/' + businessId, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getLastId: function () {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + OQC_OBA_BASE + '/last-oqc-oba-id/', {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n\n updateOldOqcObaLot: function () {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + OQC_OBA_BASE + '/update-old-oqcoba-lot/', {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n \n exportXlsReport: function (searchReport) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + OQC_OBA_BASE + '/export-excel/', {\n params: searchReport,\n responseType: 'arraybuffer'\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n \n\n };\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(OqcObaRouter);\n\n /** @ngInject */\n function OqcObaRouter($stateProvider) {\n\n\n $stateProvider.state('oqc-oba-list', {\n url: '/oqc-oba',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/oqc_oba/oqc-oba-list.html',\n controller: 'OqcObaListController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'label.oqc.oba'\n },\n authorize: true\n });\n\n $stateProvider.state('oqc-oba-create', {\n url: '/oqc-oba/create',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/oqc_oba/oqc-oba-edit.html',\n controller: 'OqcObaEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'label.oqc.oba'\n },\n authorize: true\n });\n\n $stateProvider.state('oqc-oba-edit', {\n url: '/oqc-oba/edit/:Id',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/oqc_oba/oqc-oba-edit.html',\n controller: 'OqcObaEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'label.oqc.oba'\n },\n authorize: true\n });\n\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('OqcObaListController', OqcObaListController);\n\n function OqcObaListController($window, $translate, $state, moment, OqcObaService, $log, AuthService, ToastUtil,\n $scope, ListModel, DefaultService, $document) {\n\n var vm = this;\n var exporting = false;\n\n vm.StatusId = {\n ONGOING: 0,\n PENDING_APPROVAL: 1,\n APPROVED: 2,\n REJECTED: 3\n };\n\n var profile = {\n CanAdd: false,\n CanEdit: false,\n CanDelete: false,\n CanView: false,\n CanApprove: false,\n CanExport: false\n };\n\n vm.isApprover = function(){\n return profile.CanApprove;\n }\n\n vm.statusList = [{\n id: vm.StatusId.ONGOING,\n Name: 'checklist.label.ongoing'\n },\n {\n id: vm.StatusId.PENDING_APPROVAL,\n Name: 'checklist.label.sent'\n },\n {\n id: vm.StatusId.APPROVED,\n Name: 'checklist.label.approved'\n },\n {\n id: vm.StatusId.REJECTED,\n Name: 'new.oqcoba.rejected.status.label'\n }\n ];\n\n vm.oqcObaList = [];\n vm.totalList = 0;\n vm.listModelValues = {};\n\n vm.searchParams = {\n IdOrTitle: '',\n StartDate: '',\n EndDate: '',\n ProjectId: '',\n ClientId: '',\n ModelId: '',\n VariantId: '',\n StatusId: '',\n Serial: '',\n Week: '',\n Year: '',\n Project: '',\n Client: '',\n Model: '',\n Variant: '',\n Turn: '',\n TurnId: '',\n Status: {},\n Section: '',\n SectionTemp: '',\n Station: '',\n StationTemp: '',\n Page: 1,\n MaxPerPage: 5,\n BusinessId: AuthService.getBusinessId()\n };\n\n vm.clearSearchFields = function () {\n vm.searchParams.IdOrTitle = '',\n vm.searchParams.StartDate = '',\n vm.searchParams.EndDate = '';\n vm.searchParams.ProjectId = '';\n vm.searchParams.ClientId = '';\n vm.searchParams.ModelId = '';\n vm.searchParams.VariantId = '';\n vm.searchParams.StatusId = '';\n vm.searchParams.Serial = '';\n vm.searchParams.Week = '';\n vm.searchParams.Year = '';\n vm.searchParams.Project = '';\n vm.searchParams.Client = '';\n vm.searchParams.Model = '';\n vm.searchParams.Variant = '';\n vm.searchParams.Turn = '';\n vm.searchParams.TurnId = '';\n vm.searchParams.Status = {};\n vm.searchParams.Section = '';\n vm.searchParams.SectionTemp = '';\n vm.searchParams.Station = '';\n vm.searchParams.StationTemp = '';\n }\n\n function init() {\n loadProfileModules();\n }\n\n function initListViewModel(items) {\n\n var idStyle = \"width: 5%;\";\n var nameStyle = \"width: 15%;\";\n //PROPERTIES PARAMS: header: *, rowAttr: *, isHighlight: *, valueFn: *, style: *, cssClass: *, cssClassFn:\n var properties = [\n ListModel.getProperties(\"label.id\", \"Id\", false, null, idStyle, null, null),\n ListModel.getProperties(\"new.oqcoba.title.label\", \"Title\", true, null, nameStyle, null, null),\n ListModel.getProperties(\"label.date\", \"Date\", false, null, \"\", null, null),\n ListModel.getProperties(\"label.week\", \"Week\", false, null, \"\", null, null),\n ListModel.getProperties(\"new.oqcoba.project.label\", \"Project\", false, null, \"width: 8%;\", null, null),\n ListModel.getProperties(\"new.oqcoba.client.label\", \"Client\", false, null, \"width: 8%;\", null, null),\n ListModel.getProperties(\"new.oqcoba.model.label\", \"Model\", false, null, \"width: 8%;\", null, null),\n ListModel.getProperties(\"new.oqcoba.variant.label\", \"Variant\", false, null, \"\", null, null),\n ListModel.getProperties(\"new.oqcoba.inspectresult.oba.label\", \"InspectResultOba\", false, getInspectResultText, \"width: 4%;\", null, getOqcObaCss),\n ListModel.getProperties(\"new.oqcoba.inspectresult.oqc.label\", \"InspectResultOqc\", false, getInspectResultText, \"width: 4%;\", null, getOqcObaCss),\n ListModel.getProperties(\"oqc.oba.status.label\", \"Status\", false, getStatusText, \"\", \"width: 30%;\", getStatusClass, null)\n ];\n //Build menu: menuType: *, identificationKey: *, descriptionKey: *, actionFn: *\n var actionMenuItems = [\n ListModel.getActionMenuItem(ListModel.ActionMenuEnum.EXPORTXLS, \"Id\", null, exportExcel),\n ListModel.getActionMenuItem(ListModel.ActionMenuEnum.EDIT, \"Id\", null, edit),\n ListModel.getActionMenuItem(ListModel.ActionMenuEnum.DELETE, \"Id\", \"Title\", deleteOqcOba)\n ];\n //Get parent Action Menu: menuItems: *, type: *\n var actionMenu = ListModel.getActionMenu(actionMenuItems, ListModel.ActionMenuTypeEnum.INLINE)\n vm.listModelValues = ListModel.getListModel(properties, items, actionMenu);\n }\n\n vm.search = function() {\n vm.searchParams.Page = 1;\n vm.searchParams.MaxPerPage = 5;\n vm.searchOqcObas();\n }\n\n vm.searchOqcObas = function () {\n\n if (sessionStorage.getItem(\"searchParams\")) {\n vm.searchParams = JSON.parse(sessionStorage.getItem(\"searchParams\"));\n sessionStorage.removeItem(\"searchParams\");\n }\n\n var originalStartDateFormat = \"\";\n var originalEndDateFormat = \"\";\n if (vm.searchParams.StartDate != undefined && vm.searchParams.StartDate != '') {\n originalStartDateFormat = angular.copy(vm.searchParams.StartDate);\n vm.searchParams.StartDate = moment(vm.searchParams.StartDate).format('DD/MM/YYYY');\n }\n\n if (vm.searchParams.EndDate != undefined && vm.searchParams.EndDate != '') {\n originalEndDateFormat = angular.copy(vm.searchParams.EndDate);\n vm.searchParams.EndDate = moment(vm.searchParams.EndDate).format('DD/MM/YYYY');\n }\n\n vm.searchParams.Section = !vm.searchParams.SectionTemp ? '' : angular.copy(vm.searchParams.SectionTemp.Id);\n vm.searchParams.Station = !vm.searchParams.StationTemp ? '' : angular.copy(vm.searchParams.StationTemp.Id);\n vm.searchParams.StatusId = !vm.searchParams.Status ? null : vm.searchParams.Status.id;\n vm.searchParams.ProjectId = !vm.searchParams.Project ? null : vm.searchParams.Project.Id;\n vm.searchParams.ClientId = !vm.searchParams.Client ? null : vm.searchParams.Client.Id;\n vm.searchParams.ModelId = !vm.searchParams.Model ? null : vm.searchParams.Model.Id;\n vm.searchParams.VariantId = !vm.searchParams.Variant ? null : vm.searchParams.Variant.Id;\n vm.searchParams.TurnId = !vm.searchParams.Turn ? null : vm.searchParams.Turn.Id;\n var searchParams = angular.copy(vm.searchParams);\n searchParams.Project = null;\n searchParams.Client = null;\n searchParams.Model = null;\n searchParams.Variant = null;\n searchParams.Turn = null;\n searchParams.Status = null;\n OqcObaService.listAll(searchParams).then(function (response) {\n vm.oqcObaList = angular.copy(response);\n vm.totalList = response.total;\n initListViewModel(angular.copy(response.resultList));\n }).catch(function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n }\n }\n });\n\n if (vm.searchParams.StartDate != undefined && vm.searchParams.StartDate != '') {\n vm.searchParams.StartDate = originalStartDateFormat;\n }\n if (vm.searchParams.EndDate != undefined && vm.searchParams.EndDate != '') {\n vm.searchParams.EndDate = originalEndDateFormat;\n }\n };\n\n\n vm.updateOldOqcObaLot = function() {\n OqcObaService.updateOldOqcObaLot().then(function (response) {\n $log.log(response)\n ToastUtil.showToastMessage($translate.instant('update.old.oqc.oba.lot.success'), ToastUtil.ToastType.SUCCESS)\n $window.location.reload();\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant('update.old.oqc.oba.lot.error'), ToastUtil.ToastType.WARN)\n });\n }\n\n\n\n function deleteOqcOba(id) {\n if (validateDeletePermission()) {\n OqcObaService.delete(id).then(function () {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n vm.searchOqcObas();\n ToastUtil.showToastMessage($translate.instant('delete.oqcoba.success'), ToastUtil.ToastType.SUCCESS);\n }).catch(function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n }\n }\n });\n }\n }\n\n function edit(id) {\n if (validateEditPermission()) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('oqc-oba-edit', {\n Id: id\n });\n }\n }\n \n function getLotDescription(id) {\n var lotes = vm.oqcObaList.resultList.filter(function(element) {\n if ( element.Id == id ) {\n return element.Title;\n }\n });\n if ( lotes.length > 0) {\n return lotes[0];\n }\n return \"\";\n }\n\n function exportExcel(id) {\n if (validateExportPermission()) {\n var lote = getLotDescription(id);\n if (!exporting) {\n exporting = true;\n var xlsReport = {};\n xlsReport.Id = id;\n xlsReport.Business = AuthService.getBusinessName();\n xlsReport.Company = AuthService.getCompanyName();\n xlsReport.language = $translate.use();\n //// xlsReport.Language = $translate.use();\n OqcObaService.exportXlsReport(xlsReport)\n .then(function (response) {\n\n var date = moment().format(\"DD_MM_YYYY_HH_mm_ss\");\n\n var newFIle = new Blob([response], {\n type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\n });\n var fileURL = URL.createObjectURL(newFIle);\n var a = $document[0].createElement(\"a\");\n $document[0].body.appendChild(a);\n a.style = \"display: none\";\n a.href = fileURL;\n a.download = \"Report_\" + AuthService.getBusinessName() + \"_OQC_OBA[\" + lote.Title + \"]_\" + date + \".xlsx\";\n a.click();\n vm.disableExport = false;\n exporting = false;\n\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"service.load.error\"), ToastUtil.ToastType.ERROR);\n vm.disableExport = false;\n exporting = false;\n });\n }\n }\n }\n\n function getInspectResultText(InspectResult) {\n return InspectResult ? \"NG\" : \"Ok\";\n }\n\n function getStatusText(statusId) {\n var txt = \"\";\n switch (statusId) {\n case vm.StatusId.ONGOING:\n txt = \"oqc.oba.status.ongoing.title\";\n break;\n case vm.StatusId.PENDING_APPROVAL:\n txt = \"checklist.label.sent\";\n break;\n case vm.StatusId.APPROVED:\n txt = \"checklist.label.approved\";\n break;\n case vm.StatusId.REJECTED:\n txt = \"oqc.oba.status.rejected.title\";\n break;\n }\n return txt;\n }\n\n function getStatusClass(statusId) {\n var clazz = \"\";\n switch (statusId) {\n case vm.StatusId.ONGOING:\n clazz = \"label label-ongoing\";\n break;\n case vm.StatusId.PENDING_APPROVAL:\n clazz = \"label label-pending\";\n break;\n case vm.StatusId.APPROVED:\n clazz = \"label label-success\";\n break;\n case vm.StatusId.REJECTED:\n clazz = \"label label-danger\";\n break;\n }\n return clazz;\n }\n\n function getOqcObaCss(isInspectResult) {\n var css = \"\";\n if (isInspectResult) {\n css = \"label label-danger\";\n } else {\n css = \"label label-success\";\n }\n return css;\n }\n\n vm.isDisableDatePeriodFilter = function () {\n var isDisabled = false;\n if ((vm.searchParams.Week != undefined && vm.searchParams.Week != \"\") || (vm.searchParams.Year != undefined && vm.searchParams.Year != \"\")) {\n vm.searchParams.StartDate = \"\";\n vm.searchParams.EndDate = \"\";\n isDisabled = true;\n }\n return isDisabled;\n };\n\n function loadProfileModules() {\n var profileModule = {\n UserProfileModule: AuthService.getUserProfileBusiness(),\n ModuleName: $scope.moduleOqcOba\n };\n\n DefaultService.loadModules(profileModule)\n .then(function (response) {\n profile = angular.copy(response);\n if (validateViewPermission()) {\n vm.searchOqcObas();\n }\n })\n .catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n });\n }\n\n function validateViewPermission() {\n if (!profile.CanView) {\n $state.go('not-authorized', {}, {});\n }\n return profile.CanView;\n }\n\n function validateDeletePermission() {\n if (!profile.CanDelete) {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n return profile.CanDelete;\n }\n\n function validateEditPermission() {\n if (!profile.CanEdit) {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n return profile.CanEdit;\n }\n\n function validateExportPermission() {\n if (!profile.CanExport) {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n return profile.CanExport;\n }\n\n init();\n\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('OqcObaEditController', OqcObaEditController);\n\n function OqcObaEditController($window, $location, $anchorScroll, DefaultService, $log, $translate, $state,\n DialogController, ListUtil, moment, $stateParams, ModelService, OqcObaService, AuthService, ToastUtil, $scope) {\n\n var vm = this;\n\n vm.profile = {\n CanAdd: false,\n CanEdit: false,\n CanDelete: false,\n CanView: false,\n CanApprove: false,\n CanExport: false\n };\n\n vm.idToEdit = undefined;\n /** Type of OQcOba */\n vm.OqcObaType = {\n OQC: 0,\n OBA: 1\n };\n\n vm.StatusId = {\n ONGOING: 0,\n PENDING_APPROVAL: 1,\n APPROVED: 2,\n REJECTED: 3\n };\n\n vm.reinspection = false;\n\n vm.statusList = [{\n id: vm.StatusId.ONGOING,\n Name: 'checklist.label.ongoing'\n },\n {\n id: vm.StatusId.PENDING_APPROVAL,\n Name: 'checklist.label.sent'\n },\n {\n id: vm.StatusId.APPROVED,\n Name: 'checklist.label.approved'\n },\n {\n id: vm.StatusId.REJECTED,\n Name: 'new.oqcoba.rejected.status.label'\n }\n ];\n\n vm.inspectResultList = [];\n vm.inspectResult = {\n Attachments: []\n };\n\n vm.isSaving = false;\n\n /** Id to compose name. */\n vm.idTitle = 0;\n vm.emailList = [];\n vm.filterObaModel = \"\";\n vm.filterOqcModel = \"\";\n vm.isAcceptOqcOba = null;\n vm.idToEdit = $stateParams.Id;\n\n loadProfileModules();\n\n function init() {\n if (vm.idToEdit) {\n vm.getOqcObaToEdit(vm.idToEdit);\n } else {\n //New OQC/OBA\n initNewOqcOba();\n getLastId();\n }\n }\n\n /**\n * Init Object to new OQC/OBA.\n */\n function initNewOqcOba() {\n vm.oqcOba = {\n Business: {\n Id: AuthService.getBusinessId()\n },\n DateTemp: moment(new Date())._d,\n Date: moment(new Date()).format('DD/MM/YYYY'),\n CsActive: true,\n Client: '',\n Project: '',\n Model: '',\n Turn: '',\n Variant: '',\n OqcObaReinspected: '',\n CreatedBy: getCurrentDri(),\n Status: vm.statusList[0].id, //OnGoing\n OqcObaInspections: [],\n OqcObaAttachments: []\n };\n }\n\n\n\n vm.setWeek = function () {\n vm.oqcOba.Week = moment(vm.oqcOba.DateTemp).isoWeek();\n };\n\n /**\n * Return last id to compose OQC/OBA Title.\n */\n function getLastId() {\n OqcObaService.getLastId().then(function (response) {\n vm.idTitle = (response + 1);\n vm.oqcOba.TempIdTitle = vm.idTitle;\n vm.setWeek();\n }).catch(function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n }\n }\n });\n }\n\n vm.getOqcObaToEdit = function (id) {\n OqcObaService.getById(id).then(function (response) {\n vm.oqcOba = angular.copy(response);\n if (AuthService.getBusinessId() != vm.oqcOba.Business.Id) {\n $state.go('oqc-oba-list');\n } else {\n vm.idTitle = vm.oqcOba.Id;\n vm.oqcOba.TempIdTitle = (vm.idTitle + 1);\n vm.oqcOba.DateTemp = moment(vm.oqcOba.Date, 'DD/MM/YYYY')._d;\n vm.reinspection = !vm.oqcOba.OqcObaReinspected ? false : true;\n setRadioStatus();\n fillInspectResultList();\n }\n }).catch(function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n }\n }\n });\n };\n\n /**\n * Changes status to PENDING_APROVAL and saves oqcOba.\n */\n vm.sendOqcOba = function () {\n vm.saveOqcOba(true);\n };\n\n /**\n * Save OQC/OBA object.\n */\n vm.saveOqcOba = function (sendToApproval) {\n vm.isSaving = true;\n handleOqcObaObjToSave(sendToApproval);\n vm.oqcOba.Date = moment(vm.oqcOba.DateTemp).format('DD/MM/YYYY');\n OqcObaService.save(vm.oqcOba)\n .then(function () {\n vm.isSaving = false;\n $state.go('oqc-oba-list');\n ToastUtil.showToastMessage($translate.instant('save.oqcoba.success'), ToastUtil.ToastType.SUCCESS)\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if (error.status === $scope.HttpStatusCodeConflict) {\n $state.go('project-list');\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n } else {\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n }\n }\n vm.isSaving = false;\n });\n };\n\n function fillInspectResultList() {\n angular.forEach(vm.oqcOba.OqcObaInspections, function (inspec) {\n if (inspec.OqcObaInspectionResults != null && inspec.OqcObaInspectionResults.length > 0) {\n angular.forEach(inspec.OqcObaInspectionResults, function (result) {\n result.Type = inspec.Type;\n vm.inspectResultList.push(result);\n });\n }\n });\n }\n\n /**\n * Handle oqcOba obj to save.\n */\n function handleOqcObaObjToSave(sendToApproval) {\n mergeInspectResultList();\n if (sendToApproval) {\n vm.oqcOba.Status = vm.StatusId.PENDING_APPROVAL;\n }\n //set status:\n else if (vm.isAcceptOqcOba != null && userIsApprover()) {\n vm.oqcOba.ApprovedBy = getCurrentDri();\n vm.oqcOba.Status = vm.isAcceptOqcOba ? vm.StatusId.APPROVED : vm.StatusId.REJECTED;\n\n if (vm.emailList != undefined && vm.emailList.length > 0) {\n vm.oqcOba.Emails = vm.emailList;\n }\n }\n }\n\n /**\n * Return true if user is approver.\n * @returns {*}\n */\n function userIsApprover() {\n return vm.profile.CanApprove;\n }\n\n /**\n * Merge inspectResultList in main object (oqcOba) to save.\n */\n function mergeInspectResultList() {\n var existInspecResultInOba = false;\n var existInspecResultInOqc = false;\n\n angular.forEach(vm.inspectResultList, function (result) {\n angular.forEach(vm.oqcOba.OqcObaInspections, function (inspection) {\n if (inspection.Serial == result.Serial && inspection.Type == result.Type) {\n\n if (inspection.OqcObaInspectionResults == null || inspection.OqcObaInspectionResults == undefined) {\n inspection.OqcObaInspectionResults = [];\n }\n\n if (!vm.inspectionContainsResult(inspection, result)) {\n inspection.OqcObaInspectionResults.push(angular.copy(result));\n }\n\n if (inspection.Type == vm.OqcObaType.OBA) {\n existInspecResultInOba = true;\n } else {\n existInspecResultInOqc = true;\n }\n }\n });\n });\n\n vm.oqcOba.InspectResultOba = existInspecResultInOba;\n vm.oqcOba.InspectResultOqc = existInspecResultInOqc;\n }\n\n vm.inspectionContainsResult = function (inspection, result) {\n var contains = false;\n angular.forEach(inspection.OqcObaInspectionResults, function (resu) {\n if (resu.Serial == result.Serial && resu.Type == result.Type) {\n contains = true;\n }\n });\n\n return contains;\n };\n\n /**\n * Event called when reinspect obj changes.\n * This function changes model accord Reinspect obj.\n */\n vm.reinspectObjChanged = function (reinspect) {\n var Model = {\n Id: reinspect.ModelId,\n Title: reinspect.ModelName\n };\n vm.oqcOba.Model = Model;\n\n var Project = {\n Id: reinspect.ProjectId,\n Title: reinspect.ProjectName\n };\n vm.oqcOba.Project = Project;\n\n var Client = {\n Id: reinspect.ClientId,\n Title: reinspect.ClientName\n };\n vm.oqcOba.Client = Client;\n\n var Variant = {\n Id: reinspect.VariantId,\n Code: reinspect.VariantName\n };\n vm.oqcOba.Variant = Variant;\n\n vm.setWeek();\n };\n\n /**\n * Clean Reinspected Object, if unchecked.\n */\n vm.reinspectionCheckChange = function () {\n if (!vm.reinspection) {\n vm.oqcOba.OqcObaReinspected = \"\";\n }\n };\n\n /**\n * returns logged user.\n * @returns {{Name: *, Id: *}}\n */\n function getCurrentDri() {\n var CreatedBy = {\n Name: $window.localStorage.aliasAqms,\n Id: $window.localStorage.userID\n };\n\n return CreatedBy;\n }\n\n /**\n * Set radio button according Status.\n */\n function setRadioStatus() {\n if (vm.oqcOba.Status == vm.StatusId.APPROVED || vm.oqcOba.Status == vm.StatusId.REJECTED) {\n vm.isAcceptOqcOba = vm.oqcOba.Status == vm.StatusId.APPROVED ? true : false;\n } else {\n vm.isAcceptOqcOba = null;\n }\n }\n\n vm.addInspectResult = function () {\n if (vm.canAddInspectResult(vm.inspectResult.Serial, vm.inspectResult.Type) && vm.isInspectResultNotDuplicated(vm.inspectResult)) {\n vm.inspectResult.IdTemp = new Date().getTime();\n vm.inspectResultList.push(angular.copy(vm.inspectResult));\n //Clean inspectResult Obj.\n vm.inspectResult.Serial = \"\";\n vm.inspectResult.Description = \"\";\n vm.inspectResult.Attachments = [];\n }\n };\n\n /**\n * Remove inspection Result from list.\n * @param item\n */\n vm.deleteInspectresultItem = function (item) {\n var positionToRemove = vm.inspectResultList.indexOf(item);\n if (positionToRemove != -1) {\n removeInspectResultFromOqcObj(item);\n vm.inspectResultList.splice(positionToRemove, 1);\n }\n };\n\n function removeInspectResultFromOqcObj(item) {\n angular.forEach(vm.oqcOba.OqcObaInspections, function (inspec) {\n if (inspec.OqcObaInspectionResults != null && inspec.OqcObaInspectionResults.length > 0) {\n\n angular.forEach(inspec.OqcObaInspectionResults, function (result) {\n\n if (result.Serial == item.Serial && result.Type == item.Type && inspec.Serial == item.Serial && inspec.Type == item.Type) {\n var positionToRemove = inspec.OqcObaInspectionResults.indexOf(result);\n inspec.OqcObaInspectionResults.splice(positionToRemove, 1);\n }\n\n });\n }\n });\n }\n\n /**\n * Listener called by div-inpu-list-oqc-oba.directive\n * when item is removed from list.\n * @param item\n */\n vm.removedInspectionListener = function (item) {\n angular.forEach(vm.inspectResultList, function (result) {\n if (result.Serial == item.Serial && result.Type == item.Type) {\n vm.deleteInspectresultItem(result);\n }\n\n });\n };\n\n /**\n * Get properly label according Inspect result type.\n * @param type\n * @returns {string}\n */\n vm.getInspectResultTypeLabel = function (type) {\n return type == vm.OqcObaType.OBA ? 'new.oqcoba.inspectresult.oba.label' : 'new.oqcoba.inspectresult.oqc.label';\n };\n\n /**\n * Check if inspect result is in OqcObaInspections.Serial.\n */\n vm.canAddInspectResult = function (serial, type) {\n var canAddInspectResult = false;\n angular.forEach(vm.oqcOba.OqcObaInspections, function (value) {\n if (value.Serial == serial && value.Type == type) {\n canAddInspectResult = true;\n }\n });\n\n if (!canAddInspectResult) {\n ToastUtil.showToastMessage($translate.instant('new.oqcoba.inspectresult.add.warn').replace(\"#value\", serial),\n ToastUtil.ToastType.WARN);\n }\n\n return canAddInspectResult;\n }\n\n /**\n * Checks if serial and type alread exists in list.\n * @param serial\n * @param type\n */\n vm.isInspectResultNotDuplicated = function (inspectResult) {\n var isNotDuplicated = true;\n angular.forEach(vm.inspectResultList, function (value) {\n if (value.Serial == inspectResult.Serial && value.Type == inspectResult.Type) {\n isNotDuplicated = false;\n }\n\n });\n\n if (!isNotDuplicated) {\n ToastUtil.showToastMessage($translate.instant('new.oqcoba.inspectresult.add.duplicated.warn').replace(\"#value\",\n inspectResult.Serial), ToastUtil.ToastType.WARN);\n }\n return isNotDuplicated;\n };\n\n /**\n * Validation to disable Add Inspect Result button.\n * @returns {boolean}\n */\n vm.isAddInspectResultDisabled = function () {\n var isDisabled = false;\n if (vm.inspectResult == undefined || vm.inspectResult.Serial == undefined || vm.inspectResult.Serial == \"\" ||\n vm.inspectResult.Type == undefined || vm.inspectResult.Type === \"\" || vm.inspectResult.Description == undefined || vm.inspectResult.Description == \"\") {\n isDisabled = true;\n }\n return isDisabled;\n };\n\n /**\n * Rules to show Action panel with (Reject and Accept) options\n * only if user is an approver and oqc/oba status != ONGOING.\n * @returns {*|boolean}\n */\n vm.showActionPanel = function () {\n return userIsApprover() && vm.oqcOba && vm.oqcOba.Status != vm.StatusId.ONGOING;\n };\n\n /** Validations */\n function canSaveOqcOba() {\n var canSave = false;\n if (vm.oqcOba.Project && vm.oqcOba.Client && vm.oqcOba.Model && vm.oqcOba.Variant && vm.oqcOba.Turn && vm.oqcOba.Title != undefined &&\n vm.oqcOba.Date != undefined && vm.isModelValid() && vm.isLotQtyValid() && vm.canEdit() &&\n (vm.isAcceptOqcOba == undefined || vm.isAcceptOqcOba || !vm.isAcceptOqcOba && vm.oqcOba.Remark != undefined)) {\n canSave = true;\n }\n return canSave;\n }\n\n /**\n * Rules to disable Send to approval button.\n * @returns {boolean}\n */\n vm.isSendButtonDisabled = function () {\n if (vm.oqcOba) {\n return vm.oqcOba.Status != vm.StatusId.ONGOING || !canSaveOqcOba();\n } else {\n return true;\n }\n }\n\n vm.isModelValid = function () {\n if (vm.oqcOba) {\n return vm.oqcOba.Model != undefined && vm.oqcOba.Model != null;\n } else {\n return true;\n }\n };\n\n vm.isLotQtyValid = function () {\n if (vm.oqcOba) {\n return vm.oqcOba.LotQuantity != undefined && vm.oqcOba.LotQuantity != null && vm.oqcOba.LotQuantity > 0;\n } else {\n return true;\n }\n };\n\n /**\n * User can edit only if status != APPROVED and REJECTED\n * @returns {boolean}\n */\n vm.canEdit = function () {\n if (vm.oqcOba) {\n return vm.oqcOba.Status != vm.StatusId.APPROVED && vm.oqcOba.Status != vm.StatusId.REJECTED && (vm.oqcOba.Status != vm.StatusId.PENDING_APPROVAL || userIsApprover());\n } else {\n return true;\n }\n }\n\n function loadProfileModules() {\n var profileModule = {\n UserProfileModule: AuthService.getUserProfileBusiness(),\n ModuleName: $scope.moduleOqcOba\n };\n DefaultService.loadModules(profileModule)\n .then(function (response) {\n vm.profile = angular.copy(response);\n if (vm.idToEdit) {\n validateEditPermission();\n } else {\n validateAddPermission();\n }\n init();\n })\n .catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n });\n }\n\n function validateEditPermission() {\n if (!vm.profile.CanEdit) {\n $state.go('not-authorized', {}, {});\n }\n }\n\n function validateAddPermission() {\n if (!vm.profile.CanAdd) {\n $state.go('not-authorized', {}, {});\n }\n }\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(ApprovalRoute);\n\n /** @ngInject */\n function ApprovalRoute($stateProvider) {\n\n $stateProvider.state('notifications-list', {\n url: '/notifications',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/notification/notification-list.html',\n controller: 'NotificationsListController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n type: null,\n menuName: 'label.notifications'\n },\n authorize: true\n });\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(ApprovalRouteTranslate);\n\n /** @ngInject */\n function ApprovalRouteTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n notifications: {\n labels: {\n empty: 'Theres no notifications',\n title: 'Notifications',\n list: {\n title: 'Showing all notifications from the last 30 days'\n },\n showAll: 'Show all'\n }\n }\n });\n\n $translateProvider.translations('pt', {\n notifications: {\n labels: {\n empty: 'Não há notificações',\n title: 'Notificações',\n list: {\n title: 'Exibindo todas as notificações dos últimos 30 dias'\n },\n showAll: 'Exibir tudo'\n }\n }\n });\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('NotificationsService', NotificationsService);\n\n var domain = '/notifications/';\n\n /** @ngInject */\n function NotificationsService($window, $injector, $q, ConfigurationService) {\n return {\n\n list: function (limit) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + domain + limit, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n markAsRead: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.patch(ConfigurationService.getServiceHost() + domain + id)\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n };\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('NotificationsListController', NotificationsListController);\n\n function NotificationsListController($scope, $state, $log, $translate, NotificationsService,\n ConfigurationService, $location, $rootScope, IndexConstant, amMoment, $window) {\n\n var vm = this;\n vm.hasUnread = false\n vm.notifications = []\n vm.connection = null\n\n vm.loadNotifications = function () {\n NotificationsService.list(0)\n .then(function (response) {\n vm.hasUnread = Number(response.NotRead) > 0;\n vm.notifications = response.Notifications\n })\n }\n\n vm.connect = function () {\n vm.connection = new WebSocket(ConfigurationService.getWebsocketHost() + '/notifications');\n vm.connection.addEventListener('message', vm.receivedMsg)\n vm.connection.addEventListener('error', function (err) {\n console.error(err)\n });\n }\n\n vm.markAsRead = function (notification) {\n NotificationsService.markAsRead(notification.Id).then(function () {\n $location.path(notification.Path);\n vm.loadNotifications()\n })\n }\n\n vm.receivedMsg = function () {\n vm.loadNotifications()\n }\n\n vm.sendMsg = function (data) {\n vm.connection.send(data)\n }\n\n vm.updateLocale = function (event, locale) {\n amMoment.changeLocale(locale === 'pt' ? 'pt-br' : 'en')\n }\n\n function init() {\n vm.loadNotifications();\n vm.connect()\n $rootScope.$on(IndexConstant.localeChangeEvent, vm.updateLocale)\n vm.updateLocale(null, $window.localStorage.defaultLanguage)\n }\n\n init();\n }\n})();\n\n(function() {\n\t'use strict';\n\n\tangular\n\t\t.module('aqmsFrontend')\n\t\t.config(ModalTranslate);\n\n\t/** @ngInject */\n\tfunction ModalTranslate ($translateProvider) {\n\t\t$translateProvider.translations('en', {\n\t\t\t'info.modal.title.delete': 'Confirm',\n\t\t\t'info.modal.message.delete' : 'Do you want to remove the item?',\n\t\t\t'info.modal.title.back': 'Back',\n\t\t\t'info.modal.message.back' : 'Do you really want to go back?',\n\t\t\t'info.modal.description':'Unsaved changes will be lost.',\n\t\t\t'button.delete':'Delete',\n\t\t\t'button.cancel':'Cancel',\n\t\t\t'button.yes':'Yes',\n\t\t\t'button.no':'No'\n\n\t\t});\n\t\t$translateProvider.translations('pt', {\n\t\t\t'info.modal.title.delete': 'Confirmar',\n\t\t\t'info.modal.message.delete' : 'Você deseja remover este item?',\n\t\t\t'info.modal.title.back': 'Voltar',\n\t\t\t'info.modal.message.back' : 'Deseja realmente voltar?',\n\t\t\t'info.modal.description':'Alterações serão perdidas.',\n\t\t\t'button.delete':'Deletar',\n\t\t\t'button.cancel':'Cancelar',\n\t\t\t'button.yes':'Sim',\n\t\t\t'button.no':'Não'\n\t\t});\n\t}\n})();\n\n(function() {\n\t'use strict';\n\n\tangular\n\t.module('aqmsFrontend')\n .controller('ModalInfoController',ModalInfoController);\n\n /** @ngInject */\n function ModalInfoController($uibModalInstance)\n {\n var vm = this;\n\n vm.ok = function()\n {\n $uibModalInstance.close('ok');\n };\n\n vm.cancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(LogisticTranslate);\n\n /** @ngInject */\n function LogisticTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'title.logistics': 'Logistics',\n 'logistic.month': 'Month',\n 'logistic.confirm.dialog.message': 'Do you really want to import this file?',\n 'logistic.title.import': 'Import',\n 'logistic.title.kpi': 'KPI',\n 'logistic.import.select.title': 'Spreadsheet',\n 'logistic.import.model.title': 'Select model',\n 'logistic.title.model': 'Model',\n 'logistic.title.year': 'Year',\n 'logistic.title.imported.by': 'Imported By',\n 'logistic.title.processing.date': 'Processing Date',\n 'logistic.title.file.uploaded': 'File Uploaded',\n 'logistic.title.status': 'Status',\n 'logistc.freight.cost.worksheet.notfound': 'No Freight Cost import found.',\n 'error.logistc.freight.cost.search': 'An error occurred when trying to load a list of Freight Cost Worksheets.',\n 'logistics.import.status.active': 'Active',\n 'logistics.import.status.inactive': 'Inactive',\n 'logistics.import.select.file': 'Select the file',\n 'logistics.import.buton': 'Import',\n 'logistics.import.file.upload.label': 'File Upload',\n 'logistics.import.success': 'Worksheet imported success',\n 'logistics.import.error': 'Error importing Worksheet',\n 'import.freightcost.error.required.field': 'Required field',\n 'logistics.import.errors.title': 'Import Error List',\n 'logistics.import.errors.label': 'Could not perform import. Please see below the list of errors found.',\n 'import.error.dialog.row': 'Row Number',\n 'import.error.dialog.column': 'Column Name',\n 'import.error.dialog.message': 'Description',\n 'import.freightcost.error.datetime.field': 'The field requires date valid',\n 'import.freightcost.error.year.field': 'The year is different from that reported on import',\n 'import.freightcost.error.decimal.field': 'The field requires a decimal value',\n 'import.freightcost.error.range': 'The value entered is outside the valid range',\n 'import.freightcost.error.numeric.long.field': \"The field requires a numeric value\",\n 'import.freightcost.error.integer.field': 'The field requires a integer value',\n 'import.freight.cost.worksheet.invalid': 'Worksheet format is invalid.',\n 'logistic.label.frequency': 'Frequency',\n 'logistic.label.frequency.monthly.alternative': 'Monthly',\n 'logistic.label.frequency.weekly.alternative': 'Weekly',\n 'logistic.label.frequency.weekly': 'Weekly',\n 'logistic.label.week': 'Week',\n 'logistic.label.month': 'Month',\n 'logistic.label.frequency.monthly': 'Monthly',\n 'logistic.label.frequency.month': 'Month',\n 'logistic.label.start.month': 'Start Month',\n 'logistic.label.end.month': 'End Month',\n 'logistic.label.start.week': 'Start Week',\n 'logistic.label.end.week': 'End Week',\n 'logistic.label.frequency.weekly.monthly': 'Frequency - {Weekly / Monthly}',\n 'logistic.label.fob.usd': 'FOB USD',\n 'logistic.label.freight.usd': 'FREIGHT USD',\n 'logistic.label.freight.perc': 'FREIGHT %',\n 'logistic.label.clearance.usd': 'CLEARANCE USD',\n 'logistic.label.clearance.perc': 'CLEARANCE %',\n 'logistic.label.landed.usd': 'LANDED USD',\n 'logistic.label.landed.perc': 'LANDED %',\n 'logistic.label.accumulated': 'ACCUMULATED',\n 'logistic.kpi.list.notfound': 'No Freight found',\n 'logistic.month.jan': 'January',\n 'logistic.month.fev': 'February',\n 'logistic.month.mar': 'March',\n 'logistic.month.abr': 'April',\n 'logistic.month.mai': 'May',\n 'logistic.month.jun': 'June',\n 'logistic.month.jul': 'July',\n 'logistic.month.ago': 'August',\n 'logistic.month.set': 'September',\n 'logistic.month.out': 'October',\n 'logistic.month.nov': 'November',\n 'logistic.month.dez': 'December',\n 'logistic.month.label.jan': 'Jan',\n 'logistic.month.label.fev': 'Fev',\n 'logistic.month.label.mar': 'Mar',\n 'logistic.month.label.abr': 'Apr',\n 'logistic.month.label.mai': 'May',\n 'logistic.month.label.jun': 'Jun',\n 'logistic.month.label.jul': 'Jul',\n 'logistic.month.label.ago': 'Aug',\n 'logistic.month.label.set': 'Sep',\n 'logistic.month.label.out': 'Oct',\n 'logistic.month.label.nov': 'Nov',\n 'logistic.month.label.dez': 'Dec',\n 'logistics.error.endmonth.greather.startmonth': 'End Month must be greather than or equal to Start Month',\n 'logistics.error.endweek.greather.startweek': 'End Wee must be greather than or equal to Start Week',\n 'logistics.error.startweek.endweek.invalid': 'Field with invalid maximum value',\n 'logistics.error.startweek.endweek.min.invalid': 'Field with invalid minimum value',\n 'logistics.hint.startweek.endweek.max': 'The maximum value of week in this year should be #MaxWeek',\n 'logistics.error.form': 'The search fields are invalid.',\n 'error.logistcs.freight.cost.list': 'An error occurred when trying to load a list of Freight Cost.',\n 'logistics.kpi.graphics.local.transport.freight.cost': 'Local Transport Freight Cost ',\n 'logistics.kpi.graphics.local.transport.freight.cost.title': 'Local Transport Freight Cost #Year',\n 'logistics.kpi.graphics.national.freight.cost.air': 'National Freight Air Cost',\n 'logistics.kpi.graphics.national.freight.cost.air.title': 'National Freight Cost - Air - Outbound #Year',\n 'logistics.kpi.graphics.national.freight.cost.air.inbound.title': 'National Freight Cost - Air - Inbound #Year',\n 'logistics.kpi.graphics.national.freight.cost.road.outbound.title': 'National Freight Cost - Road - Outbound #Year',\n 'logistics.kpi.graphics.national.freight.cost.road.outbound': 'Freight Cost - Domestic Outbound - Road shipment',\n 'logistics.kpi.graphics.national.freight.cost.air.inbound': 'Domestic Inbound - Air Shipment',\n 'logistics.kpi.graphics.air.national.inbound.time.accumulated': 'Total',\n 'logistics.kpi.graphics.gross.weight.lsp.outbound': 'Gross Weight per LSP - Air',\n 'logistics.kpi.graphics.gross.weight.lsp.outbound.air.title': 'Domestic Gross Weight - Air Freight',\n 'logistics.kpi.graphics.gross.weight.lsp.outbound.road.title': 'Domestic Gross Weight - Road Freight',\n 'logistics.kpi.graphics.gross.weight.lsp.outbound.road': 'Gross Weight per LSP - Road',\n 'logistics.kpi.graphics.productive.landed.cost': 'Productive Landed Cost',\n 'logistics.kpi.graphics.productive.landed.cost.title': 'Productive Landed Cost #Year',\n 'logistics.kpi.graphics.unproductive.landed.cost': 'Unproductive Landed Cost',\n 'logistics.kpi.graphics.unproductive.landed.cost.title': 'Unproductive Landed Cost #Year',\n 'logistics.kpi.graphics.landed.variation': 'Landed Variation',\n 'logistics.kpi.graphics.landed.variation.title': '#FromYear to #ToYear Landed Variation',\n 'logistics.kpi.graphics.total.fob': 'Total Fob Per Modal',\n 'logistics.kpi.graphics.total.fob.title': 'Total FOB Value Per Modal - #Year - (Productive and Unproductive)',\n 'logistics.kpi.graphics.total.lsp.chargeable': 'Total Chargeable Weight accumulated per LSP',\n 'logistics.kpi.graphics.total.lsp.chargeable.title': 'Total Chargeable Weight accumulated per LSP - All ship modes - #Year - (Productive and Unproductive)',\n 'logistics.kpi.graphics.lsp.chargeable': 'Chargeable Weight per LSP',\n 'logistics.kpi.graphics.lsp.chargeable.title': 'Chargeable Weight per LSP - Air Ship mode - #Year - Productive',\n 'logistics.kpi.graphics.transit.time': 'Transit Time',\n 'logistics.kpi.graphics.transit.time.title': 'T/T (airport to airport or port to port) L/T (door to door) - #Year - #Frequency - Productive',\n 'logistics.kpi.graphics.transit.time.accumulated': 'Accumulated Average TT & LT',\n 'logistics.kpi.graphics.channel.performance': 'DI Channel Performance',\n 'logistics.kpi.graphics.channel.performance.title': 'DI Channel Performance- #Year - (Productive and Unproductive)',\n 'logistics.kpi.graphics.gross.chargeable': 'Gross Weight',\n 'logistics.kpi.graphics.gross.chargeable.title': 'Gross Weight - #Year - Productive',\n 'logistics.kpi.graphics.total.chargeable': 'Chargeable Per Modal',\n 'logistics.kpi.graphics.total.chargeable.title': 'Total Chargeable Weight Per Modal - #Year - (Productive and Unproductive)',\n 'logistics.kpi.graphics.rate.variation': 'LSP Rate Variation',\n 'logistics.kpi.graphics.rate.variation.title': 'LSP\\'s Rate Variation - Based On Freight Cost From HKG - #Year',\n 'logistics.error.graphic.freight.cost.search': 'An error occurred when trying to load a list of Freight Cost.',\n 'logistic.label.project': 'Project',\n 'logistics.project.productive': 'Productive',\n 'logistics.project.unproductive': 'Unproductive',\n 'logistics.kpi.graphics.invoices.Issued.consolidated': 'Invoices Issued x Consolidated',\n 'logistics.kpi.graphics.invoices.Issued.consolidated.title': 'Invoices Issued x Consolidated - #Year',\n 'logistics.kpi.graphics.invoices.Issued.consolidated.scale.y': 'Invoice Qty',\n 'logistics.kpi.graphics.invoices.Issued.consolidated.scale.x': 'Target',\n 'logistics.kpi.graphics.invoices.Issued.consolidated.qtd.of.invoice.issued': 'Qty of invoice issued',\n 'logistics.kpi.graphics.invoices.Issued.consolidated.qty.of.invoice.consolidated': 'Qty of invoice consolidated',\n 'logistics.kpi.graphics.invoices.Issued.consolidated.total invoice consolidated': 'Total invoice consolidated in %',\n 'error.landed.variation.search': 'An error occurred when trying to load Landed Variation graphic.',\n 'logistics.percentage': 'Percentage',\n 'logistics.kpi.graphics.landed.cost.title': '#Project Landed Cost #Year',\n 'logistics.kpi.graphics.landed.cost.thousands': 'Thousands',\n 'logistics.kpi.graphics.local.transport.freigth.cost.thousands': 'Freigth Cost BRL (Thousands)',\n 'logistics.kpi.graphics.local.transport.freigth.cost.trips': 'Trips Qty',\n 'logistics.kpi.graphics.national.freight.cost.air.value': 'Freight Cost BRL (Thousands)',\n 'logistics.kpi.graphics.national.weight.gross.air': 'Gross Weight (Thousands)',\n 'logistics.kpi.graphics.mode.spend': 'Mode Spend',\n 'logistics.kpi.graphics.mode.spend.title': 'Mode Spend - #Year - Productive',\n 'logistics.kpi.graphics.cargo.ratio.title': 'Cargo Ratio % - #Year - Productive',\n 'logistics.kpi.graphics.cargo.ratio': 'Cargo Ratio',\n 'logistics.import.freight_cost': 'Freight Cost',\n 'logistics.import.local_transport_cost': 'Local Transport Cost',\n 'logistics.import.invoices': 'Invoices',\n 'logistics.import.national_freight_cost': 'National Freigth Cost',\n 'logistics.kpi.graphics.national.freight.cost.road.total.gw': 'Total GW',\n 'logistics.kpi.graphics.national.freight.cost.road.qty': 'Qty shipment'\n });\n\n $translateProvider.translations('pt', {\n 'title.logistics': 'Logística',\n 'logistic.month': 'Mês',\n 'logistic.title.import': 'Importação',\n 'logistic.confirm.dialog.message': 'Tem certeza que quer importar este arquivo?',\n 'logistic.title.kpi': 'KPI',\n 'logistic.import.select.title': 'Planilha',\n 'logistic.import.model.title': 'Selecione o modelo',\n 'logistic.title.model': 'Modelo',\n 'logistic.title.year': 'Ano',\n 'logistic.title.imported.by': 'Importado Por',\n 'logistic.title.processing.date': 'Data de Processamento',\n 'logistic.title.file.uploaded': 'Arquivo Importado',\n 'logistic.title.status': 'Situação',\n 'logistc.freight.cost.worksheet.notfound': 'Nenhuma importação de Freight Cost encontrada.',\n 'error.logistc.freight.cost.search': 'Não foi possível carregar a lista de Planilhas de Freight Cost, tente novamente ou contate um administrador.',\n 'logistics.import.status.active': 'Ativo',\n 'logistics.import.status.inactive': 'Inativo',\n 'logistics.import.select.file': 'Selecione o arquivo',\n 'logistics.import.buton': 'Importar',\n 'logistics.import.file.upload.label': 'Envio de Arquivo',\n 'logistics.import.success': 'Planilha importada com sucesso.',\n 'logistics.import.error': 'Erro ao importar a planilha.',\n 'import.freightcost.error.required.field': 'Campo obrigatório',\n 'logistics.import.errors.title': 'Lista de Erros na Importação',\n 'logistics.import.errors.label': 'Não foi possível realizar a importação. Por favor, consulte abaixo a lista de erros encontrados.',\n 'import.error.dialog.row': 'Número da Linha',\n 'import.error.dialog.column': 'Nome da Coluna',\n 'import.error.dialog.message': 'Descrição',\n 'import.freightcost.error.datetime.field': 'O campo requer data válida',\n 'import.freightcost.error.year.field': 'O ano esta diferente do informado na importação',\n 'import.freightcost.error.decimal.field': 'O campo requer um valor decimal',\n 'import.freightcost.error.range': 'O valor informado está fora do intervalo válido',\n 'import.freightcost.error.numeric.long.field': \"O campo requer um valor numérico\",\n 'import.freightcost.error.integer.field': 'O campo requer um valor inteiro',\n 'import.freight.cost.worksheet.invalid': 'O formato da planilha é inválido.',\n 'logistic.kpi.list.notfound': 'Nenhum Frete encontrado',\n 'logistic.label.frequency': 'Frequencia',\n 'logistic.label.frequency.monthly.alternative': 'Mensal',\n 'logistic.label.frequency.weekly.alternative': 'Semanal',\n 'logistic.label.frequency.weekly': 'Semanalmente',\n 'logistic.label.week': 'Semana',\n 'logistic.label.month': 'Mês',\n 'logistic.label.frequency.monthly': 'Mensalmente',\n 'logistic.label.frequency.month': 'Mês',\n 'logistic.label.start.month': 'Mês Inicial',\n 'logistic.label.end.month': 'Mês Final',\n 'logistic.label.start.week': 'Semana Inicial',\n 'logistic.label.end.week': 'Semana Final',\n 'logistic.label.frequency.weekly.monthly': 'Frequência - {Semanalmente / Mensalmente}',\n 'logistic.label.fob.usd': 'FOB USD',\n 'logistic.label.freight.usd': 'FRETE USD',\n 'logistic.label.freight.perc': 'FRETE %',\n 'logistic.label.clearance.usd': 'LIBERAÇÃO USD',\n 'logistic.label.clearance.perc': 'LIBERAÇÃO %',\n 'logistic.label.landed.usd': 'DESEMBARQUE USD',\n 'logistic.label.landed.perc': 'DESEMBARQUE %',\n 'logistic.label.accumulated': 'ACUMULADO',\n 'logistic.month.jan': 'Janeiro',\n 'logistic.month.fev': 'Fevereiro',\n 'logistic.month.mar': 'Março',\n 'logistic.month.abr': 'Abril',\n 'logistic.month.mai': 'Maio',\n 'logistic.month.jun': 'Junho',\n 'logistic.month.jul': 'Julho',\n 'logistic.month.ago': 'Agosto',\n 'logistic.month.set': 'Setembro',\n 'logistic.month.out': 'Outubro',\n 'logistic.month.nov': 'Novembro',\n 'logistic.month.dez': 'Dezembro',\n 'logistic.month.label.jan': 'Jan',\n 'logistic.month.label.fev': 'Fev',\n 'logistic.month.label.mar': 'Mar',\n 'logistic.month.label.abr': 'Abr',\n 'logistic.month.label.mai': 'Mai',\n 'logistic.month.label.jun': 'Jun',\n 'logistic.month.label.jul': 'Jul',\n 'logistic.month.label.ago': 'Ago',\n 'logistic.month.label.set': 'Set',\n 'logistic.month.label.out': 'Out',\n 'logistic.month.label.nov': 'Nov',\n 'logistic.month.label.dez': 'Dez',\n 'logistics.error.endmonth.greather.startmonth': 'Mês Final deve ser maior ou igual ao Mês Inicial',\n 'logistics.error.endweek.greather.startweek': 'Semana Final deve ser maior ou igual à Semana Inicial',\n 'logistics.error.startweek.endweek.invalid': 'Campo com valor máximo inválido',\n 'logistics.error.startweek.endweek.min.invalid': 'Campo com valor mínimo inválido',\n 'logistics.hint.startweek.endweek.max': 'O valor máximo de semana neste ano deve ser #MaxWeek',\n 'logistics.error.form': 'Os campos da busca estão inválidos.',\n 'error.logistcs.freight.cost.list': 'Não foi possível carregar a lista de Freight Cost, tente novamente ou contate um administrador.',\n 'logistics.kpi.graphics.local.transport.freight.cost': 'Custo de Frete Transporte Local ',\n 'logistics.kpi.graphics.local.transport.freight.cost.title': 'Custo de Frete Transporte Local #Year',\n 'logistics.kpi.graphics.national.freight.cost.air': 'Custo de Frete Aéreo Nacional',\n 'logistics.kpi.graphics.national.freight.cost.air.title': 'Custo de Frete Nacional - Aéreo - Saída #Year',\n 'logistics.kpi.graphics.national.freight.cost.air.inbound.title': 'Custo de Frete Nacional - Aéreo - Entrada #Year',\n 'logistics.kpi.graphics.national.freight.cost.road.outbound.title': 'Custo de Frete Nacional - Rodoviário- Saída #Year',\n 'logistics.kpi.graphics.national.freight.cost.road.outbound': 'Custo de frete - Saída doméstica - Embarque rodoviário',\n 'logistics.kpi.graphics.national.freight.cost.air.inbound': 'Entrada aérea - Embarque aéreo',\n 'logistics.kpi.graphics.air.national.inbound.time.accumulated': 'Total',\n 'logistics.kpi.graphics.gross.weight.lsp.outbound': 'Peso bruto por LSPs - Aéreo',\n 'logistics.kpi.graphics.gross.weight.lsp.outbound.air.title': 'Peso bruto Doméstico - Frete Aéreo',\n 'logistics.kpi.graphics.gross.weight.lsp.outbound.road.title': 'Peso bruto Doméstico - Frete Rodo',\n 'logistics.kpi.graphics.gross.weight.lsp.outbound.road': 'Peso bruto por LSPs - Rodoviário',\n 'logistics.kpi.graphics.productive.landed.cost': 'Custo de Desembarque Produtivo',\n 'logistics.kpi.graphics.productive.landed.cost.title': 'Custo de Desembarque Produtivo #Year',\n 'logistics.kpi.graphics.unproductive.landed.cost': 'Custo de Desembarque Improdutivo',\n 'logistics.kpi.graphics.unproductive.landed.cost.title': 'Custo de Desembarque Improdutivo #Year',\n 'logistics.kpi.graphics.landed.variation': 'Variação de Desembarque',\n 'logistics.kpi.graphics.landed.variation.title': '#FromYear a #ToYear Variação de Desembarque',\n 'logistics.kpi.graphics.total.fob': 'Total FOB Por Modal',\n 'logistics.kpi.graphics.total.fob.title': 'Valor Total FOB Por Modal - #Year - (Produtivo e Improdutivo)',\n 'logistics.kpi.graphics.total.lsp.chargeable': 'Total Peso acumulado por LSP',\n 'logistics.kpi.graphics.total.lsp.chargeable.title': 'Valor Total Peso acumulado por LSP - Todas as formas de transporte - #Year - (Produtivo e Improdutivo)',\n 'logistics.kpi.graphics.lsp.chargeable': 'Peso da Carga por LSP',\n 'logistics.kpi.graphics.lsp.chargeable.title': 'Valor Peso da Carga por LSP - Transporte Aéreo - #Year - Produtivo',\n 'logistics.kpi.graphics.channel.performance': 'DI Performance do Canal',\n 'logistics.kpi.graphics.channel.performance.title': 'DI Performance do Canal - #Year - (Produtivo e Improdutivo)',\n 'logistics.kpi.graphics.transit.time': 'Tempo de Trânsito',\n 'logistics.kpi.graphics.transit.time.title': 'T/T (aeroporto a aeroporto ou porto a porto) L/T (origem a origem) - #Year - #Frequency - Produtivo',\n 'logistics.kpi.graphics.transit.time.accumulated': 'Média Acumulada TT & LT',\n 'logistics.kpi.graphics.gross.chargeable': 'Peso Bruto',\n 'logistics.kpi.graphics.gross.chargeable.title': 'Peso Bruto - #Year - Produtivo',\n 'logistics.kpi.graphics.total.chargeable': 'Peso Por Modal',\n 'logistics.kpi.graphics.total.chargeable.title': 'Valor Total Peso Por Modal - #Year - (Produtivo e Improdutivo)',\n 'logistics.kpi.graphics.rate.variation': 'LSP Variação de Taxa',\n 'logistics.kpi.graphics.rate.variation.title': 'LSP\\'s Variação de Taxa - Baseado no custo de frete de HKG - #Year',\n 'logistics.error.graphic.freight.cost.search': 'Ocorreu um erro ao tentar carregar uma lista do Freight Cost.',\n 'logistic.label.project': 'Projeto',\n 'logistics.project.productive': 'Produtivo',\n 'logistics.project.unproductive': 'Improdutivo',\n 'logistics.kpi.graphics.invoices.Issued.consolidated': 'Notas Fiscais Emitidas x Consolidadas',\n 'logistics.kpi.graphics.invoices.Issued.consolidated.title': 'Notas Fiscais Emitidas x Consolidadas - #Year',\n 'logistics.kpi.graphics.invoices.Issued.consolidated.scale.y': 'Nota Qty',\n 'logistics.kpi.graphics.invoices.Issued.consolidated.scale.x': 'Target',\n 'logistics.kpi.graphics.invoices.Issued.consolidated.qtd.of.invoice.issued': 'Qty of invoice issued',\n 'logistics.kpi.graphics.invoices.Issued.consolidated.qty.of.invoice.consolidated': 'Qty of invoice consolidated',\n 'logistics.kpi.graphics.invoices.Issued.consolidated.total invoice consolidated': 'Total invoice consolidated in %',\n 'error.landed.variation.search': 'Ocorreu um erro ao tentar carregar o gráfico de Variação de Desembarque.',\n 'logistics.percentage': 'Porcentagem',\n 'logistics.kpi.graphics.landed.cost.title': 'Custo de Desembarque #Project #Year',\n 'logistics.kpi.graphics.landed.cost.thousands': 'Milhares',\n 'logistics.kpi.graphics.local.transport.freigth.cost.thousands': 'Custo do Frete BRL (Milhares)',\n 'logistics.kpi.graphics.local.transport.freigth.cost.trips': 'Viagens Qtd',\n 'logistics.kpi.graphics.national.freight.cost.air.value': 'Valor frete BRL (Thousands)',\n 'logistics.kpi.graphics.national.weight.gross.air': 'Peso (Thousands)',\n 'logistics.kpi.graphics.mode.spend': 'Modalidade de Despesa',\n 'logistics.kpi.graphics.mode.spend.title': 'Modalidade de Despesa - #Year - Produtivo',\n 'logistics.kpi.graphics.cargo.ratio.title': 'Relação de Carga % - #Year - Produtivo',\n 'logistics.kpi.graphics.cargo.ratio': 'Relação de Carga',\n 'logistics.import.freight_cost': 'Freight Cost',\n 'logistics.import.local_transport_cost': 'Local Transport Cost',\n 'logistics.import.invoices': 'Invoices',\n 'logistics.import.national_freight_cost': 'National Freight Cost',\n 'logistics.kpi.graphics.national.freight.cost.road.total.gw': 'Total Peso Bruto',\n 'logistics.kpi.graphics.national.freight.cost.road.qty': 'Qtd de embarque'\n });\n }\n})();\n\n/*eslint no-unused-vars: 0*/\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('LogisticsService', LogisticsService);\n\n /** @ngInject */\n function LogisticsService($state, $translate, $q, $log, ToastUtil, AuthService, DefaultService, LogisticsImportService, LogisticsKPIService) {\n\n var statusOptions, projectOptions, frequencyOptions, monthOptions;\n\n statusOptions = [{\n id: 1,\n Name: 'basic.header.status.active.label'\n }, {\n id: 0,\n Name: 'basic.header.status.inactive.label'\n }];\n\n projectOptions = [{\n Value: 'Productive',\n Name: 'logistics.project.productive'\n }, {\n Value: 'Unproductive',\n Name: 'logistics.project.unproductive'\n }];\n\n frequencyOptions = [{\n Title: 'logistic.label.frequency.weekly',\n Label: 'logistic.label.week',\n Value: 0,\n Alternative: 'logistic.label.frequency.weekly.alternative'\n }, {\n Title: 'logistic.label.frequency.monthly',\n Label: 'logistic.label.month',\n Value: 1,\n Alternative: 'logistic.label.frequency.monthly.alternative'\n }];\n\n monthOptions = [\n {Name: 'logistic.month.jan', Value: 1, Label: 'logistic.month.label.jan'},\n {Name: 'logistic.month.fev', Value: 2, Label: 'logistic.month.label.fev'},\n {Name: 'logistic.month.mar', Value: 3, Label: 'logistic.month.label.mar'},\n {Name: 'logistic.month.abr', Value: 4, Label: 'logistic.month.label.abr'},\n {Name: 'logistic.month.mai', Value: 5, Label: 'logistic.month.label.mai'},\n {Name: 'logistic.month.jun', Value: 6, Label: 'logistic.month.label.jun'},\n {Name: 'logistic.month.jul', Value: 7, Label: 'logistic.month.label.jul'},\n {Name: 'logistic.month.ago', Value: 8, Label: 'logistic.month.label.ago'},\n {Name: 'logistic.month.set', Value: 9, Label: 'logistic.month.label.set'},\n {Name: 'logistic.month.out', Value: 10, Label: 'logistic.month.label.out'},\n {Name: 'logistic.month.nov', Value: 11, Label: 'logistic.month.label.nov'},\n {Name: 'logistic.month.dez', Value: 12, Label: 'logistic.month.label.dez'}];\n\n function validateEditPermission(profile) {\n if (!profile.CanEdit && !profile.CanConsult) {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n return false;\n }\n\n return true;\n }\n\n function validateDeletePermission(vm) {\n if (vm.profile.hasLoad && !vm.profile.CanDelete) {\n return false;\n }\n\n return true;\n }\n\n function validateExportPermission(vm) {\n if (vm.profile.hasLoad && !vm.profile.CanExport) {\n return false;\n }\n\n return true;\n }\n\n function validateAddPermission(vm) {\n if (vm.profile.hasLoad && !vm.profile.CanAdd) {\n return false;\n }\n\n return true;\n }\n\n function validateViewPermission(vm) {\n if (vm.profile.hasLoad && !vm.profile.CanView) {\n ToastUtil.showToastMessage($translate.instant(\"msg.not.authorized\"), ToastUtil.ToastType.WARN);\n $state.go('not-authorized', {}, {});\n return false;\n }\n\n return true;\n }\n\n function validateApproveViewPermission(vm) {\n if (vm.profile.hasLoad && vm.profile.CanApprove && vm.profile.CanView) {\n return true;\n } else {\n ToastUtil.showToastMessage($translate.instant(\"msg.not.authorized\"), ToastUtil.ToastType.WARN);\n $state.go('not-authorized', {}, {});\n return false;\n }\n\n }\n\n function validateApproveDeletePermission(vm) {\n if (vm.profile.hasLoad && !vm.profile.CanDelete) {\n return false;\n }\n\n return true;\n }\n\n function validateApprovePermission(vm) {\n if (vm.profile.hasLoad && !vm.profile.CanApprove) {\n return false;\n }\n\n return true;\n }\n\n function validateApproveAddPermission(vm) {\n if (vm.profile.hasLoad && !vm.profile.CanApprove && !vm.profile.CanAdd) {\n return false;\n }\n\n return true;\n }\n\n function validateApproveEditPermission(profile) {\n if (!profile.CanEdit) {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n return false;\n }\n\n return true;\n }\n\n function searchFileFreightCost(vm, filtro) {\n if (validateViewPermission(vm)) {\n return LogisticsImportService.listFileFreightCost(filtro);\n } else {\n return $q.reject('not authorized');\n }\n }\n\n\n function listFreightCost(vm, filtro) {\n if (validateViewPermission(vm)) {\n return LogisticsKPIService.listFreightCost(filtro);\n } else {\n return $q.reject('not authorized');\n }\n }\n\n function listFreightCostGrouped(vm, filtro) {\n if (validateViewPermission(vm)) {\n return LogisticsKPIService.listFreightCostGrouped(filtro);\n } else {\n return $q.reject('not authorized');\n }\n }\n\n function createFileFreightCost(vm, freightcost) {\n if (validateAddPermission(vm)) {\n return LogisticsImportService.save(freightcost);\n } else {\n return $q.reject('not authorized');\n }\n }\n\n return {\n\n hasApprovePermission: validateApprovePermission,\n\n createFreightCostWorksheet: function (vm, file, $scope) {\n if (vm.profile.hasLoad) {\n return createFileFreightCost(vm, file);\n } else {\n this.loadProfileModules(vm, $scope)\n .then(function () {\n return createFileFreightCost(vm, file);\n })\n .catch(function (error) {\n $log.log(error);\n })\n }\n\n },\n\n loadProfileModules: function (vm, $scope) {\n var profileModule = {};\n\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.moduleLogistics;\n\n return DefaultService.loadModules(profileModule)\n .then(function (response) {\n vm.profile = angular.copy(response);\n vm.profile.hasLoad = true;\n });\n },\n\n searchFileFreightCost: function (vm, filtro, $scope) {\n if (vm.profile.hasLoad) {\n return searchFileFreightCost(vm, filtro);\n } else {\n return this.loadProfileModules(vm, $scope)\n .then(function () {\n return searchFileFreightCost(vm, filtro);\n })\n .catch(function () {\n return $q.reject();\n })\n }\n },\n\n listFreightCost: function (vm, filtro, $scope) {\n if (vm.profile.hasLoad) {\n return listFreightCost(vm, filtro);\n } else {\n return this.loadProfileModules(vm, $scope)\n .then(function () {\n return listFreightCost(vm, filtro);\n })\n .catch(function () {\n return $q.reject();\n })\n }\n },\n\n listFreightCostGrouped: function (vm, filtro, $scope) {\n if (vm.profile.hasLoad) {\n return listFreightCostGrouped(vm, filtro);\n } else {\n return this.loadProfileModules(vm, $scope)\n .then(function () {\n return listFreightCost(vm, filtro);\n })\n .catch(function () {\n return $q.reject();\n })\n }\n },\n\n listLandedVariation: function (filtro) {\n return LogisticsKPIService.listLandedVariation(filtro);\n },\n\n listRateVariation: function (filtro) {\n return LogisticsKPIService.listRateVariation(filtro);\n },\n\n listChannelPerformance: function (filtro) {\n return LogisticsKPIService.listChannelPerformance(filtro);\n },\n\n listTransitTime: function (filtro) {\n return LogisticsKPIService.listTransitTime(filtro);\n },\n\n listLocalTransportFreigthCost: function (filtro) {\n return LogisticsKPIService.listLocalTransportFreigthCost(filtro);\n },\n\n listInvoicesIssuedConsolidated: function (filtro) {\n return LogisticsKPIService.listInvoicesIssuedConsolidated(filtro);\n },\n\n hasApproveAndViewPermission: function (vm) {\n return validateApproveViewPermission(vm);\n },\n\n getStatusOptions: function () {\n return statusOptions;\n },\n\n getProjectOptions: function () {\n return projectOptions;\n },\n\n getFrequencyOptions: function () {\n return frequencyOptions;\n },\n\n getMonthOptions: function () {\n return monthOptions;\n },\n\n listNationalFreightCostAir: function (filtro) {\n return LogisticsKPIService.listNationalFreightCostAir(filtro);\n },\n\n listGrossWeightLspOutbound: function (filtro) {\n return LogisticsKPIService.listGrossWeightLspOutbound(filtro);\n }\n };\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(LogisticsRouter);\n\n /** @ngInject */\n function LogisticsRouter($stateProvider) {\n\n\n $stateProvider.state('import-freightcost-list', {\n url: '/logistics/import',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/logistics/import/logistics-import-list.html',\n controller: 'LogisticsImportListController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.logistics'\n },\n authorize: true\n });\n\n \n $stateProvider.state('kpi-freightcost-list', {\n url: '/logistics/kpi',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/logistics/kpi/logistics-kpi-list.html',\n controller: 'LogisticsKpiListController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.logistics'\n },\n authorize: true\n });\n\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('LicenseService', LicenseService);\n\n var BASE = '/license/';\n\n /** @ngInject */\n function LicenseService($window, $injector, $q, ConfigurationService) {\n\n return {\n\n delete: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + BASE + \"/\" + id, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n autoComplete: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + \"autocomplete\", {\n params: filter,\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n } \n\n };\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('LicenseTypeService', LicenseTypeService);\n\n var AREA_BASE = '/license-type/';\n /** @ngInject */\n function LicenseTypeService($window, $injector, $q, ConfigurationService) {\n return {\n\n\n listLicenseTypes: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + AREA_BASE + \"list\", {\n params: filter,\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n list: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + AREA_BASE + \"list\", {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n save: function (area) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + AREA_BASE, area, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getById: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + AREA_BASE + 'byId/' + id, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n delete: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + AREA_BASE + \"/\" + id, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n\n };\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(KpiTranslate);\n\n /** @ngInject */\n function KpiTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n\n 'title.kpi': 'Presentation',\n 'title.registration': 'Registration',\n 'title.kpi.complete': 'Presentation',\n 'kpi.new.label': 'New presentation',\n 'kpi.edit.label': 'Edit presentation',\n 'kpi.title.label': 'Title',\n 'kpi.createdby.label': 'Created By',\n 'kpi.updatedby.label': 'Updated By',\n 'kpi.created.date.label': 'Created Date',\n 'kpi.created.date.start.label': 'Created Date - Start',\n 'kpi.created.date.end.label': 'Created Date - End',\n 'kpi.updated.date.label': 'Updated Date',\n 'kpi.updated.date.start.label': 'Updated Date - Start',\n 'kpi.updated.date.end.label': 'Updated Date - End',\n 'kpi.identification.label': 'Presentation Identification',\n 'kpi.docs.label': 'Documents',\n 'kpi.remove.success': 'Presentation successfully removed.',\n 'kpi.remove.error': 'An error occurred when try to remove presentation.',\n 'kpi.save.success': 'Presentation successfully saved.',\n 'kpi.save.error': 'An error occurred when try to save presentation.',\n 'kpi.load.error': 'An error occurred when try to load presentation.',\n 'kpi.search.title.placeholder':'Search by title',\n 'kpi.presentation.label':'Presentation',\n 'kpi.section.label':'Section',\n 'kpi.station.label':'Station',\n 'kpi.not.found.msg':'Presentation not found.',\n 'kpi.attachments.label':'Presentation Attachments'\n });\n\n $translateProvider.translations('pt', {\n 'title.kpi': 'Apresentação',\n 'title.registration': 'Cadastro',\n 'title.kpi.complete': 'Apresentação',\n 'kpi.new.label': 'Nova Apresentação',\n 'kpi.edit.label': 'Editar Apresentação',\n 'kpi.title.label': 'Título',\n 'kpi.createdby.label': 'Criado Por',\n 'kpi.updatedby.label': 'Atualizado Por',\n 'kpi.created.date.label': 'Data de Criação',\n 'kpi.created.date.start.label': 'Data de Criação - Inicial',\n 'kpi.created.date.end.label': 'Data de Criação - Final',\n 'kpi.updated.date.label': 'Data de Atualização',\n 'kpi.updated.date.start.label': 'Data de Atualização - Inicial',\n 'kpi.updated.date.end.label': 'Data de Atualização - Final',\n 'kpi.identification.label': 'Identificação da Apresentação',\n 'kpi.docs.label': 'Documentos',\n 'kpi.remove.success': 'Apresentação removida com sucesso.',\n 'kpi.remove.error': 'Ocorreu um erro ao tentar remover a Apresentação.',\n 'kpi.save.success': 'Apresentação salva com sucesso.',\n 'kpi.save.error': 'Ocorreu um erro ao tentar salvar a Apresentação.',\n 'kpi.load.error': 'Ocorreu um erro ao tentar carregar a Apresentação.',\n 'kpi.search.title.placeholder':'Buscar por título',\n 'kpi.presentation.label':'Apresentação',\n 'kpi.section.label':'Seção',\n 'kpi.station.label':'Estação',\n 'kpi.not.found.msg':'Apresentação não encontrada.',\n 'kpi.attachments.label':'Anexos da Apresentação'\n });\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('KpiService', KpiService);\n\n var BASE = '/kpi/';\n /** @ngInject */\n function KpiService($window, $injector, $q, ConfigurationService) {\n return {\n\n\n\n save: function (part) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + BASE, part, {\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getById: function (Id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + 'byId/' + Id, {\n\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n\n getKpiToPresentation: function (Id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + 'getKpiToPresentation/' + Id, {\n\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n\n list: function (searchParams) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE, {\n params: searchParams\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n delete: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + BASE + \"/\" + id, {\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n\n\n };\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(KpiRouter);\n\n /** @ngInject */\n function KpiRouter($stateProvider) {\n\n\n $stateProvider.state('kpi-list', {\n url: '/presentation',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/kpi/kpi-list.html',\n controller: 'KpiListController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.kpi'\n },\n authorize: true\n });\n\n $stateProvider.state('kpi-create', {\n url: '/presentation/create',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/kpi/kpi-edit.html',\n controller: 'KpiEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.kpi'\n },\n authorize: true\n });\n\n $stateProvider.state('kpi-edit', {\n url: '/presentation/edit/:Id',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/kpi/kpi-edit.html',\n controller: 'KpiEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.kpi'\n },\n authorize: true\n });\n\n $stateProvider.state('kpi-doc', {\n url: '/presentation/doc/:Id',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/kpi/kpi-doc.html',\n controller: 'KpiDocController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.kpi'\n },\n authorize: true\n });\n\n\n\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('KpiListController', KpiListController);\n\n function KpiListController(KpiService, ToastUtil, $state, $translate, AuthService, $log,\n ListModel, $scope, DefaultService, moment) {\n\n var vm = this;\n\n var profilePermission = {\n CanAdd: false,\n CanEdit: false,\n CanDelete: false,\n CanView: false,\n CanApprove: false,\n CanExport: false,\n CanConsult: false\n }\n\n\n vm.searchParams = {\n Name: \"\",\n CreatedDateStart: \"\",\n CreatedDateStartTemp: \"\",\n CreatedDateEnd: \"\",\n CreatedDateEndTemp: \"\",\n UpdatedDateStart: \"\",\n UpdatedDateStartTemp: \"\",\n UpdatedDateEnd: \"\",\n UpdatedDateEndTemp: \"\",\n CreatedBy: \"\",\n CreatedByTemp: \"\",\n UpdatedBy: \"\",\n UpdatedByTemp: \"\",\n Page: 1,\n MaxPerPage: 5\n };\n\n vm.clearSearchFields = function() {\n vm.searchParams.Name = \"\";\n vm.searchParams.CreatedDateStart = \"\";\n vm.searchParams.CreatedDateStartTemp = \"\";\n vm.searchParams.CreatedDateEnd = \"\";\n vm.searchParams.CreatedDateEndTemp = \"\";\n vm.searchParams.UpdatedDateStart = \"\";\n vm.searchParams.UpdatedDateStartTemp = \"\";\n vm.searchParams.UpdatedDateEnd = \"\";\n vm.searchParams.UpdatedDateEndTemp = \"\";\n vm.searchParams.CreatedBy = \"\";\n vm.searchParams.CreatedByTemp = \"\";\n vm.searchParams.UpdatedBy = \"\";\n vm.searchParams.UpdatedByTemp = \"\";\n }\n\n vm.kpiList = [];\n vm.listModelValues = {}\n vm.totalList = 0;\n\n vm.sectionObj = {};\n vm.stationObj = {};\n\n\n vm.sectionSelectedEvent = function () {\n if (vm.sectionObj.Id && vm.sectionObj.Id > 0) {\n vm.searchParams.SectionId = vm.sectionObj.Id;\n } else {\n vm.searchParams.SectionId = 0;\n }\n }\n\n vm.stationSelectedEvent = function () {\n if (vm.stationObj.Id && vm.stationObj.Id > 0) {\n vm.searchParams.StationId = vm.stationObj.Id;\n } else {\n vm.searchParams.StationId = 0;\n }\n }\n\n vm.edit = function (id) {\n if (isTrue(profilePermission.CanEdit) || isTrue(profilePermission.CanApprove)) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('kpi-edit', {\n Id: id\n });\n } else if(isTrue(profilePermission.CanView)){\n searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('kpi-doc', {\n Id: id\n });\n }else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n };\n\n vm.delete = function (id) {\n if (isTrue(profilePermission.CanDelete) || isTrue(profilePermission.CanApprove)) {\n KpiService.delete(id).then(function () {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n vm.searchKpis();\n ToastUtil.showToastMessage($translate.instant(\"kpi.remove.success\"), ToastUtil.ToastType.SUCCESS);\n }).catch(function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n } else if (error.status == $scope.HttpStatusCodeConflict) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"kpi.remove.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n };\n\n vm.create = function () {\n if (isTrue(profilePermission.CanAdd) || isTrue(profilePermission.CanApprove)) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('kpi-create', {});\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n }\n\n vm.search = function() {\n vm.searchParams.Page = 1;\n vm.searchParams.MaxPerPage = 5;\n vm.searchKpis();\n }\n\n vm.searchKpis = function () {\n if (sessionStorage.getItem(\"searchParams\")) {\n vm.searchParams = JSON.parse(sessionStorage.getItem(\"searchParams\"));\n sessionStorage.removeItem(\"searchParams\");\n }\n handleSearchParams();\n KpiService.list(vm.searchParams).then(function (response) {\n vm.kpiList = angular.copy(response.resultList);\n vm.totalList = response.total;\n initListViewModel(angular.copy(vm.kpiList));\n }).catch(function (error) {\n $log.log(error);\n if (error.data != null && error.data != undefined && error.data.Message != undefined && error.data.Message != null && error.data.Message != \"\")\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n });\n\n }\n\n\n function init() {\n loadProfileModules();\n }\n\n\n function initListViewModel(items) {\n var idStyle = \"width: 5%;\";\n //PROPERTIES PARAMS: header: *, rowAttr: *, isHighlight: *, valueFn: *, style: *, cssClass: *, cssClassFn:\n var properties = [\n ListModel.getProperties(\"label.id\", \"Id\", false, null, idStyle, null, null),\n ListModel.getProperties(\"label.name\", \"Name\", true, null, null, null, null),\n ListModel.getProperties(\"kpi.created.date.label\", \"CreatedDateTemp\", false, null, \"\", null, null),\n ListModel.getProperties(\"kpi.createdby.label\", \"CreatedBy\", false, null, \"\", null, null),\n ListModel.getProperties(\"kpi.updated.date.label\", \"UpdateDateTemp\", false, null, \"\", null, null),\n ListModel.getProperties(\"kpi.updatedby.label\", \"UpdatedBy\", false, null, \"\", null, null)\n\n ];\n //Build menu: menuType: *, identificationKey: *, descriptionKey: *, actionFn: *\n var actionMenuItems = [\n ListModel.getActionMenuItem(ListModel.ActionMenuEnum.EDIT, \"Id\", null, vm.edit, (profilePermission.CanApprove || profilePermission.CanEdit)),\n ListModel.getActionMenuItem(ListModel.ActionMenuEnum.DELETE, \"Id\", \"Name\", vm.delete, (profilePermission.CanApprove || profilePermission.CanDelete)),\n ListModel.getActionMenuItem(ListModel.ActionMenuEnum.PLAY, \"Id\", null, goToKpiPresentation, (profilePermission.CanApprove || profilePermission.CanView))\n ];\n //Get parent Action Menu: menuItems: *, type: *\n var actionMenu = ListModel.getActionMenu(actionMenuItems, ListModel.ActionMenuTypeEnum.INLINE)\n vm.listModelValues = ListModel.getListModel(properties, items, actionMenu);\n }\n\n\n function goToKpiPresentation(id){\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('kpi-doc', {\n Id: id\n });\n }\n\n\n\n function handleSearchParams() {\n if (vm.searchParams.CreatedDateStartTemp != null && vm.searchParams.CreatedDateStartTemp != \"\")\n vm.searchParams.CreatedDateStart = moment(angular.copy(vm.searchParams.CreatedDateStartTemp)).format('DD/MM/YYYY');\n\n if (vm.searchParams.CreatedDateEndTemp != null && vm.searchParams.CreatedDateEndTemp != \"\")\n vm.searchParams.CreatedDateEnd = moment(angular.copy(vm.searchParams.CreatedDateEndTemp)).format('DD/MM/YYYY');\n\n if (vm.searchParams.UpdatedDateStartTemp != null && vm.searchParams.UpdatedDateStartTemp != \"\")\n vm.searchParams.UpdatedDateStart = moment(angular.copy(vm.searchParams.UpdatedDateStartTemp)).format('DD/MM/YYYY');\n\n if (vm.searchParams.UpdatedDateEndTemp != null && vm.searchParams.UpdatedDateEndTemp != \"\")\n vm.searchParams.UpdatedDateEnd = moment(angular.copy(vm.searchParams.UpdatedDateEndTemp)).format('DD/MM/YYYY');\n\n vm.searchParams.CreatedBy = !vm.searchParams.CreatedByTemp ? '' : vm.searchParams.CreatedByTemp.Id;\n vm.searchParams.UpdatedBy = !vm.searchParams.UpdatedByTemp ? '' : vm.searchParams.UpdatedByTemp.Id;\n\n }\n\n\n function isTrue(value){\n return (value === true || value === \"true\");\n }\n\n\n function loadProfileModules() {\n var profileModule = {};\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.kpi;\n DefaultService.loadModules(profileModule).then(function (response) {\n profilePermission = angular.copy(response);\n if (isTrue(profilePermission.CanView) ||isTrue(profilePermission.CanApprove) || isTrue(profilePermission.CanEdit)) {\n vm.searchKpis();\n } else {\n $state.go('not-authorized', {});\n }\n }).catch(function (error) {\n $log.log(error);\n if (error.data != null && error.data != undefined)\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n });\n }\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('KpiEditController', KpiEditController);\n\n function KpiEditController($window, $q, KpiService, ToastUtil, $stateParams, $state,\n $translate, $scope, $log, AuthService, DefaultService) {\n\n var vm = this;\n\n var profilePermission = {\n CanAdd: false,\n CanEdit: false,\n CanDelete: false,\n CanView: false,\n CanApprove: false,\n CanExport: false,\n CanConsult: false\n }\n\n vm.kpi = {\n KpiAttachments: [],\n Business: {\n Id: AuthService.getBusinessId()\n },\n CreatedBy: getCurrentUser(),\n UpdatedBy: getCurrentUser()\n }\n\n var currentDate = null;\n\n vm.idToEdit = undefined;\n\n\n vm.goToKpiDoc = function() {\n if(vm.kpi.Id && vm.kpi.Id > 0) {\n $state.go('kpi-doc', {\n Id: vm.kpi.Id\n });\n }\n }\n\n\n\n vm.save = function () {\n initKpiDates(true);\n handleKpiBeforeSave();\n KpiService.save(vm.kpi).then(function (response) {\n ToastUtil.showToastMessage($translate.instant(\"kpi.save.success\"), ToastUtil.ToastType.SUCCESS);\n vm.kpi.Id = angular.copy(response);\n }).catch(function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if (error.status === $scope.HttpStatusCodeConflict) {\n vm.goToKpiList();\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n } else {\n if (error.data && error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(\"kpi.save.error\"), ToastUtil.ToastType.ERROR);\n }\n }\n });\n\n }\n\n\n vm.goToKpiList = function(){\n $state.go('kpi-list');\n }\n\n function handleKpiBeforeSave() {\n if( vm.idToEdit && vm.idToEdit > 0){\n //Update user if action is an edit.\n vm.kpi.UpdatedBy = getCurrentUser();\n }\n\n }\n\n\n\n function init() {\n var currentDatePromisse = loadCurrentServerDate();\n $q.all([currentDatePromisse])\n .then(function () {\n loadProfileModules();\n });\n\n }\n\n /**\n * returns logged user.\n * @returns {{Name: *, Id: *}}\n */\n function getCurrentUser() {\n var createdBy = {\n Name: $window.localStorage.aliasAqms,\n Id: $window.localStorage.userID\n };\n\n return createdBy;\n }\n\n function isTrue(value){\n return (value === true || value === \"true\");\n }\n\n\n function loadProfileModules() {\n var profileModule = {};\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.kpi;\n DefaultService.loadModules(profileModule).then(function (response) {\n profilePermission = angular.copy(response);\n if (!isTrue(profilePermission.CanApprove) && !isTrue(profilePermission.CanAdd) && !isTrue(profilePermission.CanEdit) ) {\n $state.go('not-authorized', {});\n }\n\n vm.idToEdit = $stateParams.Id;\n if (vm.idToEdit) {\n if (!profilePermission.CanEdit && !isTrue(profilePermission.CanApprove)) {\n $state.go('not-authorized', {});\n } else {\n getKpiToEdit();\n }\n } else {\n if (!profilePermission.CanAdd && !isTrue(profilePermission.CanApprove)) {\n $state.go('not-authorized', {});\n }\n initKpiDates(false);\n }\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"generic.error.msg\"), ToastUtil.ToastType.ERROR);\n });\n }\n\n function getKpiToEdit() {\n KpiService.getById(vm.idToEdit).then(function (response) {\n vm.kpi = angular.copy(response);\n initKpiDates(false);\n\n if(vm.kpi && vm.kpi != null) {\n //Handle dates\n vm.kpi.CreatedDateTemp = vm.kpi.CreatedDate;\n vm.kpi.UpdatedDateTemp = vm.kpi.UpdatedDate;\n }\n\n\n\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"kpi.load.error\"), ToastUtil.ToastType.ERROR);\n });\n }\n\n\n function initKpiDates(forceUpdatedDate) {\n if(!vm.idToEdit) {\n vm.kpi.CreatedDateTemp = angular.copy(currentDate);\n }\n if(!vm.kpi.UpdatedDateTemp || vm.kpi.UpdatedDateTemp == null || forceUpdatedDate) {\n vm.kpi.UpdatedDateTemp = angular.copy(currentDate);\n }\n }\n\n function loadCurrentServerDate() {\n return DefaultService.loadDate(3).then(function(response){\n currentDate = response;\n }).catch(function(error){\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n });\n }\n\n\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('KpiDocController', KpiDocController);\n\n function KpiDocController(KpiService, ToastUtil, $stateParams, $state, ConfigurationService,\n $translate, $scope, $log, $document, AuthService, DefaultService) {\n\n var vm = this;\n\n var profilePermission = {\n CanAdd: false,\n CanEdit: false,\n CanDelete: false,\n CanView: false,\n CanApprove: false,\n CanExport: false,\n CanConsult: false\n }\n\n vm.EDirection = {\n PREVIOUS: 0,\n NEXT: 1\n }\n\n\n vm.kpi = {\n KpiAttachments: []\n }\n\n vm.idToEdit = undefined;\n\n var selectedKpiPosition = 0;\n\n var mozilaPdfApi = \"http://mozilla.github.io/pdf.js/web/viewer.html?file=\";\n\n\n\n\n vm.goToKpi = function() {\n if( isTrue(profilePermission.CanEdit) || (isTrue(profilePermission.CanAdd) && isTrue(profilePermission.CanEdit)) || isTrue(profilePermission.CanApprove) ) {\n $state.go('kpi-edit', {\n Id: vm.idToEdit\n });\n } else {\n $state.go('kpi-list', {});\n }\n }\n\n\n vm.userCanEditKpi = function() {\n return (isTrue(profilePermission.CanEdit || isTrue(profilePermission.CanApprove)));\n }\n\n\n function openDocument(attachment) {\n var paths = attachment.Path.split(\"\\\\\");\n var url = ConfigurationService.getServiceHost() + \"/fileupload/\" + paths[(paths.length-1)];\n $document[0].getElementById(\"containerPdfObj\").data = url;\n $document[0].getElementById(\"containerPdf\").src = mozilaPdfApi + url;\n\n }\n\n\n vm.changeDocument = function(direction){\n if(direction == vm.EDirection.PREVIOUS){\n selectedKpiPosition = (selectedKpiPosition > 0) ? (selectedKpiPosition-1) : selectedKpiPosition;\n }else {\n selectedKpiPosition = (selectedKpiPosition +1);\n\n }\n openDocument(vm.kpi.KpiAttachments[selectedKpiPosition]);\n\n }\n\n vm.isPreviousDisabled = function(){\n var isDisabled = false;\n\n if(selectedKpiPosition == 0 ){\n isDisabled = true;\n }\n\n return isDisabled;\n }\n\n vm.isNextDisabled = function(){\n var isDisabled = false;\n\n if(selectedKpiPosition == (vm.kpi.KpiAttachments.length-1) ){\n isDisabled = true;\n }\n\n return isDisabled;\n }\n\n\n vm.fullScreen = function (elem) {\n\n var element = $document[0].getElementById(elem);\n\n if (angular.isDefined(element.mozRequestFullScreen)) {\n element.mozRequestFullScreen();\n } else if (angular.isDefined(element.webkitRequestFullscreen)) {\n element.webkitRequestFullscreen();\n } else if (angular.isDefined(element.msRequestFullscreen)) {\n element.msRequestFullscreen();\n } else {\n ToastUtil.showToastMessage($translate.instant('fullscreen.error'), ToastUtil.ToastType.ERROR);\n }\n }\n\n vm.exitFullScreen = function () {\n\n if ($document[0].mozCancelFullScreen) {\n $document[0].mozCancelFullScreen();\n } else if ($document[0].webkitExitFullscreen) {\n $document[0].webkitExitFullscreen();\n } else if($document[0].msExitFullscreen){\n $document[0].msExitFullscreen();\n }\n }\n\n\n function init() {\n loadProfileModules();\n }\n\n\n function isTrue(value){\n return (value === true || value === \"true\");\n }\n\n function loadProfileModules() {\n var profileModule = {};\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.kpi;\n DefaultService.loadModules(profileModule).then(function (response) {\n profilePermission = angular.copy(response);\n if (!isTrue(profilePermission.CanApprove) && !isTrue(profilePermission.CanView)) {\n $state.go('not-authorized', {});\n }\n vm.idToEdit = $stateParams.Id;\n if (vm.idToEdit) {\n getKpiToPresentation();\n } else {\n ToastUtil.showToastMessage($translate.instant(\"kpi.not.found.msg\"), ToastUtil.ToastType.ERROR);\n $state.go('kpi-list', {});\n }\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"generic.error.msg\"), ToastUtil.ToastType.ERROR);\n });\n }\n\n function getKpiToPresentation() {\n KpiService.getKpiToPresentation(vm.idToEdit).then(function (response) {\n vm.kpi = angular.copy(response);\n openDocument(vm.kpi.KpiAttachments[selectedKpiPosition]);\n\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"kpi.load.error\"), ToastUtil.ToastType.ERROR);\n });\n }\n\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(HelpTranslate);\n\n /** @ngInject */\n function HelpTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'title.create.task': 'Create a Task',\n 'title.approval.task': 'Approval a Task',\n 'title.close.task': 'Close a Task',\n 'title.cancel.reject.task': 'Cancel And Reject a Task',\n 'title.create.approve.checklist':'Create And Approve a Checklist',\n 'title.create.template.checklist':'Create Template Checklist',\n 'title.create.approve.iqc':'Create And Approve a IQC',\n 'title.create.template.iqc':'Create a IQC Part / Template',\n 'title.create.approve.ort':'Create And Approve a ORT',\n 'title.create.template.ort':'Create a ORT Template',\n 'title.create.blocked.material': 'Create a Blocked Material',\n 'title.close.group.email.blocked.material':'Email Group and Close Blocked Material',\n 'title.create.profile': 'Create a Profile',\n 'title.create.user.group':'Create a User And Group',\n 'title.change.photo': 'Change Photo',\n 'title.change.password': 'Change Password',\n 'title.create.sourcing':'Create a Supplier Evaluation',\n 'title.create.visit':'Create a technical visit',\n 'sourcing.avaliation.label':'Supplier Evaluation',\n 'title.create.alert':'Create a alert',\n 'title.create.logistics':'Import Freight Cost',\n 'title.create.sgi':'Create a Environmental Service',\n 'title.dashboard': 'Dashboard',\n 'title.preferences': 'Preferences',\n 'title.create.financial': 'Create a archiving'\n });\n\n $translateProvider.translations('pt', {\n 'title.create.task': 'Criar uma Tarefa',\n 'title.approval.task': 'Aprovar uma Tarefa',\n 'title.close.task': 'Fechar uma Tarefa',\n 'title.cancel.reject.task': 'Cancelar e Rejeitar uma Tarefa',\n 'title.create.approve.checklist':'Criar e Aprovar um Checklist',\n 'title.create.template.checklist':'Criar Template de Checklist',\n 'title.create.approve.iqc':'Criar e Aprovar um IQC',\n 'title.create.template.iqc':'Criar um IQC - Peça / Template',\n 'title.create.approve.ort':'Criar e Aprovar um ORT',\n 'title.create.template.ort':'Criar um Template ORT',\n 'title.create.blocked.material': 'Criar um Material Bloqueado',\n 'title.close.group.email.blocked.material':'Grupo de Email e Fechar Material Bloqueado',\n 'title.create.profile': 'Criar um Perfil',\n 'title.create.user.group':'Criar um Usuário e Grupo',\n 'title.change.photo': 'Alterar Foto',\n 'title.change.password': 'Alterar Senha',\n 'title.create.sourcing':'Criar um fornecedor',\n 'title.create.visit': 'Criar uma visita técnica',\n 'sourcing.avaliation.label':'Avaliação do Fornecedor',\n 'title.create.alert':'Criar um alerta',\n 'title.create.logistics':'Importar Freight Cost',\n 'title.create.sgi':'Criar um Serviço Ambiental',\n 'title.dashboard': 'Painel',\n 'title.preferences': 'Preferências',\n 'title.create.financial': 'Criar um arquivamento'\n\n });\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(helpRouterConfig);\n\n /** @ngInject */\n function helpRouterConfig($stateProvider) {\n\n /* LOGIN */\n\n $stateProvider.state('help-signin', {\n url: '/help-signin',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/help/help-signin.html',\n controller: 'HelpController',\n controllerAs: 'ctrl'\n }\n },\n authorize: true\n });\n\n $stateProvider.state('help-singout', {\n url: '/help-singout',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/help/help-singout.html',\n controller: 'HelpController',\n controllerAs: 'ctrl'\n }\n },\n authorize: true\n });\n\n $stateProvider.state('help-forgot', {\n url: '/help-forgot',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/help/help-forgot.html',\n controller: 'HelpController',\n controllerAs: 'ctrl'\n }\n },\n authorize: true\n });\n\n /* TASK CONTROL */\n\n $stateProvider.state('help-task-create', {\n url: '/help-task-create',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/help/help-task-create.html',\n controller: 'HelpController',\n controllerAs: 'ctrl'\n }\n },\n authorize: true\n });\n\n $stateProvider.state('help-task-approval', {\n url: '/help-task-approval',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/help/help-task-approval.html',\n controller: 'HelpController',\n controllerAs: 'ctrl'\n }\n },\n authorize: true\n });\n\n $stateProvider.state('help-task-closed', {\n url: '/help-task-closed',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/help/help-task-closed.html',\n controller: 'HelpController',\n controllerAs: 'ctrl'\n }\n },\n authorize: true\n });\n\n $stateProvider.state('help-task-cancel', {\n url: '/help-task-cancel',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/help/help-task-cancel.html',\n controller: 'HelpController',\n controllerAs: 'ctrl'\n }\n },\n authorize: true\n });\n\n /* CHECKLIST */\n\n $stateProvider.state('help-checklist-create', {\n url: '/help-checklist-create',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/help/help-checklist-create.html',\n controller: 'HelpController',\n controllerAs: 'ctrl'\n }\n },\n authorize: true\n });\n\n $stateProvider.state('help-checklist-template', {\n url: '/help-checklist-template',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/help/help-checklist-template.html',\n controller: 'HelpController',\n controllerAs: 'ctrl'\n }\n },\n authorize: true\n });\n\n /* IQC */\n\n $stateProvider.state('help-iqc-create', {\n url: '/help-iqc-create',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/help/help-iqc-create.html',\n controller: 'HelpController',\n controllerAs: 'ctrl'\n }\n },\n authorize: true\n });\n\n $stateProvider.state('help-iqc-template', {\n url: '/help-iqc-template',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/help/help-iqc-template.html',\n controller: 'HelpController',\n controllerAs: 'ctrl'\n }\n },\n authorize: true\n });\n\n /* ORT */\n\n $stateProvider.state('help-ort-create', {\n url: '/help-ort-create',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/help/help-ort-create.html',\n controller: 'HelpController',\n controllerAs: 'ctrl'\n }\n },\n authorize: true\n });\n\n $stateProvider.state('help-ort-template', {\n url: '/help-ort-template',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/help/help-ort-template.html',\n controller: 'HelpController',\n controllerAs: 'ctrl'\n }\n },\n authorize: true\n });\n\n /* FACA */\n\n $stateProvider.state('help-faca-create', {\n url: '/help-faca-create',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/help/help-faca-create.html',\n controller: 'HelpController',\n controllerAs: 'ctrl'\n }\n },\n authorize: true\n });\n\n\n /* PDCA */\n\n $stateProvider.state('help-pdca-create', {\n url: '/help-pdca-create',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/help/help-pdca-create.html',\n controller: 'HelpController',\n controllerAs: 'ctrl'\n }\n },\n authorize: true\n });\n\n /* DEFECT */\n\n $stateProvider.state('help-defect-create', {\n url: '/help-defect-create',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/help/help-defect-create.html',\n controller: 'HelpController',\n controllerAs: 'ctrl'\n }\n },\n authorize: true\n });\n\n /* OQC OBA */\n\n $stateProvider.state('help-oqc-oba-create', {\n url: '/help-oqc-oba-create',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/help/help-oqc-oba-create.html',\n controller: 'HelpController',\n controllerAs: 'ctrl'\n }\n },\n authorize: true\n });\n\n /* PRODUCTION PLAN */\n\n $stateProvider.state('help-production-plan-create', {\n url: '/help-production-plan-create',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/help/help-production-plan-create.html',\n controller: 'HelpController',\n controllerAs: 'ctrl'\n }\n },\n authorize: true\n });\n\n /* BLOCKED MATERIAL */\n\n $stateProvider.state('help-blocked-material-create', {\n url: '/help-blocked-material-create',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/help/help-blocked-material-create.html',\n controller: 'HelpController',\n controllerAs: 'ctrl'\n }\n },\n authorize: true\n });\n\n $stateProvider.state('help-blocked-material-close', {\n url: '/help-blocked-material-close',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/help/help-blocked-material-close.html',\n controller: 'HelpController',\n controllerAs: 'ctrl'\n }\n },\n authorize: true\n });\n\n /* APPROVAL */\n\n $stateProvider.state('help-approval-create', {\n url: '/help-approval-create',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/help/help-approval-create.html',\n controller: 'HelpController',\n controllerAs: 'ctrl'\n }\n },\n authorize: true\n });\n\n /* KPI */\n\n $stateProvider.state('help-kpi-create', {\n url: '/help-kpi-create',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/help/help-kpi-create.html',\n controller: 'HelpController',\n controllerAs: 'ctrl'\n }\n },\n authorize: true\n });\n\n /* PERMISSION */\n\n $stateProvider.state('help-users-create', {\n url: '/help-users-create',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/help/help-users-create.html',\n controller: 'HelpController',\n controllerAs: 'ctrl'\n }\n },\n authorize: true\n });\n\n $stateProvider.state('help-profile-create', {\n url: '/help-profile-create',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/help/help-profile-create.html',\n controller: 'HelpController',\n controllerAs: 'ctrl'\n }\n },\n authorize: true\n });\n\n /* ACCOUNT */\n\n $stateProvider.state('help-account-change-photo', {\n url: '/help-account-change-photo',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/help/help-account-change-photo.html',\n controller: 'HelpController',\n controllerAs: 'ctrl'\n }\n },\n authorize: true\n });\n\n $stateProvider.state('help-account-change-password', {\n url: '/help-account-change-password',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/help/help-account-change-password.html',\n controller: 'HelpController',\n controllerAs: 'ctrl'\n }\n },\n authorize: true\n });\n\n /* Basic Type */\n\n $stateProvider.state('help-basic-type-create', {\n url: '/help-basic-type-create',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/help/help-basic-type-create.html',\n controller: 'HelpController',\n controllerAs: 'ctrl'\n }\n },\n authorize: true\n });\n\n /* Settings */\n\n $stateProvider.state('help-settings-create', {\n url: '/help-settings-create',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/help/help-settings-create.html',\n controller: 'HelpController',\n controllerAs: 'ctrl'\n }\n },\n authorize: true\n });\n\n /* Sourcing */\n\n $stateProvider.state('help-create-sourcing', {\n url: '/help-create-sourcing',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/help/help-create-sourcing.html',\n controller: 'HelpController',\n controllerAs: 'ctrl'\n }\n },\n authorize: true\n });\n\n $stateProvider.state('help-create-technical-visit', {\n url: '/help-create-technical-visit',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/help/help-create-technical-visit.html',\n controller: 'HelpController',\n controllerAs: 'ctrl'\n }\n },\n authorize: true\n });\n\n $stateProvider.state('help-create-milestone', {\n url: '/help-create-milestone',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/help/help-create-milestone.html',\n controller: 'HelpController',\n controllerAs: 'ctrl'\n }\n },\n authorize: true\n });\n\n $stateProvider.state('help-create-supplier-evaluation', {\n url: '/help-create-supplier-evaluation',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/help/help-create-supplier-evaluation.html',\n controller: 'HelpController',\n controllerAs: 'ctrl'\n }\n },\n authorize: true\n });\n\n $stateProvider.state('help-create-contract', {\n url: '/help-create-contract',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/help/help-create-contract.html',\n controller: 'HelpController',\n controllerAs: 'ctrl'\n }\n },\n authorize: true\n });\n\n $stateProvider.state('help-create-component-development', {\n url: '/help-create-component-development',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/help/help-create-component-development.html',\n controller: 'HelpController',\n controllerAs: 'ctrl'\n }\n },\n authorize: true\n });\n\n $stateProvider.state('help-create-alert', {\n url: '/help-create-alert',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/help/help-create-alert.html',\n controller: 'HelpController',\n controllerAs: 'ctrl'\n }\n },\n authorize: true\n });\n\n $stateProvider.state('help-logistics-import', {\n url: '/help-logistics-import',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/help/help-logistics-import.html',\n controller: 'HelpController',\n controllerAs: 'ctrl'\n }\n },\n authorize: true\n });\n\n \n $stateProvider.state('help-create-sgi', {\n url: '/help-create-sgi',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/help/help-create-sgi.html',\n controller: 'HelpController',\n controllerAs: 'ctrl'\n }\n },\n authorize: true\n });\n\n $stateProvider.state('help-create-financial', {\n url: '/help-create-financial',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/help/help-create-financial.html',\n controller: 'HelpController',\n controllerAs: 'ctrl'\n }\n },\n authorize: true\n });\n\n \n $stateProvider.state('help-view-kpi', {\n url: '/help-view-kpi',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/help/help-view-kpi.html',\n controller: 'HelpController',\n controllerAs: 'ctrl'\n }\n },\n authorize: true\n });\n\n $stateProvider.state('help-dashboard', {\n url: '/help-dashboard',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/help/help-dashboard.html',\n controller: 'HelpController',\n controllerAs: 'ctrl'\n }\n },\n authorize: true\n });\n\n \n $stateProvider.state('help-preferences', {\n url: '/help-preferences',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/help/help-preferences.html',\n controller: 'HelpController',\n controllerAs: 'ctrl'\n }\n },\n authorize: true\n });\n\n\n }\n\n})();\n\n(function() {\n\t'use strict';\n\n\tangular\n\t.module('aqmsFrontend')\n .controller('HelpController',HelpController);\n\n\n /** @ngInject */\n function HelpController($state) {\n var vm = this;\n\n vm.isLoginHelp = false;\n vm.isDashboard = false;\n vm.isTaskHelp = false;\n vm.isChecklist = false;\n vm.isFaca = false;\n vm.isPdca = false;\n vm.isDefect = false;\n vm.isOqc = false;\n vm.isOrt = false;\n vm.isIqc = false;\n vm.isApproval = false;\n vm.isKpi = false;\n vm.isSettings = false;\n vm.isPermission = false;\n vm.isBasicType = false;\n vm.isProfile = false;\n vm.isSourcing = false;\n vm.isAlert = false;\n vm.isLogistics = false;\n vm.isSGI = false;\n vm.isDashboard = false;\n vm.isPreferences = false;\n vm.isFinancial = false;\n\n vm.isDash = function () {\n vm.isDashboard = !vm.isDashboard;\n };\n\n vm.isLogin = function () {\n vm.isLoginHelp = !vm.isLoginHelp;\n };\n\n vm.isTask = function () {\n vm.isTaskHelp = !vm.isTaskHelp;\n }\n\n vm.isChecklist = function () {\n vm.isChecklistHelp = !vm.isChecklistHelp;\n }\n\n vm.isFaca = function () {\n vm.isFacaHelp = !vm.isFacaHelp;\n }\n\n vm.isPdca = function () {\n vm.isPdcaHelp = !vm.isPdcaHelp;\n }\n\n vm.isOrt = function () {\n vm.isOrtHelp = !vm.isOrtHelp;\n }\n\n vm.isIqc = function () {\n vm.isIqcHelp = !vm.isIqcHelp;\n }\n\n vm.isApproval = function () {\n vm.isApprovalHelp = !vm.isApprovalHelp;\n }\n\n vm.isKpi = function () {\n vm.isKpiHelp = !vm.isKpiHelp;\n }\n\n vm.isSettings = function () {\n vm.isSettingsHelp = !vm.isSettingsHelp;\n }\n\n vm.isPermission = function () {\n vm.isPermissionHelp = !vm.isPermissionHelp;\n }\n\n vm.isBasicType = function () {\n vm.isBasicTypeHelp = !vm.isBasicTypeHelp;\n }\n\n vm.isDefect = function () {\n vm.isDefectHelp = !vm.isDefectHelp;\n }\n\n vm.isOqc = function () {\n vm.isOqcHelp = !vm.isOqcHelp;\n }\n\n vm.isProductionPlan = function () {\n vm.isProductionPlanHelp = !vm.isProductionPlanHelp;\n }\n\n vm.isBlockedMaterial = function () {\n vm.isBlockedMaterialHelp = !vm.isBlockedMaterialHelp;\n }\n\n vm.isUsers = function () {\n vm.isUsersHelp = !vm.isUsersHelp;\n }\n\n vm.isProfile = function () {\n vm.isProfileHelp = !vm.isProfileHelp;\n }\n\n vm.isAccount = function () {\n vm.isAccountHelp = !vm.isAccountHelp;\n }\n\n vm.isSourcing = function () {\n vm.isSourcingHelp = !vm.isSourcingHelp;\n }\n\n vm.isAlert = function () {\n vm.isAlertHelp = !vm.isAlertHelp;\n }\n\n vm.isLogistics = function () {\n vm.isLogisticsHelp = !vm.isLogisticsHelp;\n }\n\n vm.isSGI = function () {\n vm.isSGIHelp = !vm.isSGIHelp;\n }\n\n vm.isFinancial = function () {\n vm.isFinancialHelp = !vm.isFinancialHelp;\n }\n\n vm.isDashboard = function () {\n vm.isDashboardHelp = !vm.isDashboardHelp;\n }\n\n vm.isPreferences = function () {\n vm.isPreferencesHelp = !vm.isPreferencesHelp;\n }\n\n vm.finishedWizard = function () {\n // alert(\"Fui chamado no finish do wizard\");\n };\n \n\n vm.checkMenuActive = function (params) {\n if(params.indexOf($state.current.name) > -1){\n var idMenu = params[0];\n }\n\n switch(parseInt(idMenu)) {\n case 1:\n vm.isLoginHelp = true;\n return true;\n case 2:\n vm.isTaskHelp = true;\n return true;\n case 3:\n vm.isChecklistHelp = true;\n return true;\n case 4:\n vm.isFacaHelp = true;\n return true;\n case 5:\n vm.isDefectHelp = true;\n return true;\n case 6:\n vm.isOqcHelp = true;\n return true;\n case 7:\n vm.isProductionPlanHelp = true;\n return true;\n case 8:\n vm.isBlockedMaterialHelp = true;\n return true;\n case 9:\n vm.isUsersHelp = true;\n return true;\n case 10:\n vm.isAccountHelp = true;\n return true;\n case 11:\n vm.isPdcaHelp = true;\n return true;\n case 12:\n vm.isIqcHelp = true;\n return true;\n case 13:\n vm.isOrtHelp = true;\n return true;\n case 14:\n vm.isApprovalHelp = true;\n return true;\n case 15:\n vm.isKpiHelp = true;\n return true;\n case 16:\n vm.isBasicTypeHelp = true;\n return true;\n case 17:\n vm.isPermissionHelp = true;\n return true;\n case 18:\n vm.isProfileHelp = true;\n return true;\n case 19:\n vm.isSettingsHelp = true;\n return true;\n case 20:\n vm.isSourcingHelp = true;\n return true;\n case 21:\n vm.isAlertHelp = true;\n return true; \n case 22:\n vm.isLogisticsHelp = true;\n return true; \n case 22:\n vm.isSGIHelp = true;\n return true; \n case 23:\n vm.isDashboardHelp = true;\n return true; \n case 24:\n vm.isPreferencesHelp = true; \n return true;\n case 25:\n vm.isFinancialHelp = true; \n return true;\n default:\n }\n\n }\n\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(FiscalTranslate);\n\n /** @ngInject */\n function FiscalTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'title.fiscal': 'Fiscal',\n 'fiscal.inValidation': 'Peding validation',\n 'fiscal.approval': 'Approval ID',\n 'fiscal.emissedDate': 'Emissed Start',\n 'fiscal.emissedDate.due': 'Emissed Final',\n 'fiscal.dueDate': 'Due Date Start',\n 'fiscal.dueDate.due': 'Due Date Final',\n 'fiscal.nf': '# NF',\n 'fiscal.codSap': 'cod. Sap supplier name',\n 'fiscal.searchService': 'Search Service Description',\n 'fiscal.hideAppovalsInProgress': 'Hide Approvals in Progress',\n\n 'fiscal.table.approvalID': 'Approval ID',\n 'fiscal.table.approvalDescription': 'Approval Description',\n 'fiscal.table.createdDate': 'Created Date Approval',\n 'fiscal.table.deadline': 'Deadline Approval',\n 'fiscal.table.status': 'Status Invoice',\n 'fiscal.table.status.approval': 'Status Approval',\n 'fiscal.table.status.peding': 'Pending',\n 'fiscal.table.status.registeredSap': 'Registered in SAP',\n 'fiscal.table.template.service': 'Service',\n 'fiscal.table.template': 'Template',\n 'fiscal.table.template.customsExpenses': 'Customs Expenses',\n\n 'fiscal.invoice.title': 'Invoice Validation',\n 'fiscal.invoice.bt.return': 'Return',\n 'fiscal.invoice.bt.registerSap': 'Register SAP',\n 'fiscal.invoice.approvalSub': 'Approval Subject',\n 'fiscal.invoice.provider': 'Provider',\n 'fiscal.invoice.nf': 'NF',\n 'fiscal.invoice.approvalResquestBy': 'Approval Resquest By',\n 'fiscal.invoice.approvalCreatedDate': 'Approval Created Date',\n 'fiscal.invoice.dateIssue': 'Date of issue',\n 'fiscal.invoice.serviceCod': 'Service Cod.',\n 'fiscal.invoice.dueDate': 'Due Date',\n 'fiscal.invoice.validateBy': 'Registered by',\n 'fiscal.invoice.validateDate': 'Registered date',\n 'fiscal.invoice.sap': 'SAP Record',\n 'fiscal.invoice.table.serviceDescription': 'Service Description',\n 'fiscal.invoice.table.value': 'Value',\n 'fiscal.invoice.table.po': 'PO',\n 'fiscal.invoice.table.itemPo': 'Item of PO',\n 'fiscal.invoice.table.checked': 'Checked',\n 'fiscal.invoice.totalCheck': 'Total Checked',\n 'fiscal.invoice.attachment': 'Attachment',\n 'fiscal.invoice.fileName': 'File Name',\n 'fiscal.checkbox.billet': 'Bring only records with Payment Slips?',\n 'fiscal.checkbox.approved': 'Approval Approved',\n\n 'fiscal.list.notfound': 'No fiscal found',\n 'error.fiscal.search': 'An error occurred when trying to load a list of Fiscal.',\n 'fiscal.tab.label': 'Fiscal',\n 'solicitation.label.total.checked': 'Total Checked',\n 'fiscal.msg.save.success': 'Invoice Validation successfully saved.',\n 'fiscal.msg.disable.return': 'It is not possible to return the Approval. The Approval Status is %s',\n\n 'document.flow.label.request.by': 'Request By',\n 'document.flow.predecessor': 'Predecessor',\n 'document.flow.predecessor.placeholder': 'Select a Predecessor',\n 'document.flow.return.sub.title': 'Describe any comments about the request return.',\n 'document.flow.return.success': 'Approval successfully returned.',\n 'document.flow.return.error': 'An error occurred when trying to returned the approval.',\n 'fiscal.register.sap.required': 'SAP Record is required.',\n 'fiscal.msg.status.registered': 'It is not possible to return the Approval. The Invoice Status is Registered in SAP',\n 'acquisition.label.status.approval': 'Status Approval'\n\n });\n\n $translateProvider.translations('pt', {\n 'title.fiscal': 'Fiscal',\n 'fiscal.inValidation': 'Validação pendente',\n 'fiscal.approval': 'ID de aprovação',\n 'fiscal.emissedDate': 'Emissão Inicial',\n 'fiscal.dueDate': 'Vencimento Inicial',\n 'fiscal.emissedDate.due': 'Emissão Final',\n 'fiscal.dueDate.due': 'Vencimento Final',\n 'fiscal.nf': '# NF',\n 'fiscal.codSap': 'cod. Nome do fornecedor Sap',\n 'fiscal.searchService': 'Descrição do serviço de pesquisa',\n 'fiscal.hideAppovalsInProgress': 'Ocultar aprovações em andamento',\n\n 'fiscal.table.status.approval': 'Situação da aprovação',\n 'fiscal.table.approvalID': 'ID de aprovação',\n 'fiscal.table.approvalDescription': 'Descrição da aprovação',\n 'fiscal.table.createdDate': 'Aprovação da data de criação',\n 'fiscal.table.deadline': 'Aprovação do prazo',\n 'fiscal.table.status': 'Situação da fatura',\n 'fiscal.table.status.peding': 'Pendente',\n 'fiscal.table.status.registeredSap': 'Registrado no SAP',\n 'fiscal.table.template.service': 'Serviço',\n 'fiscal.table.template': 'Template',\n 'fiscal.table.template.customsExpenses': 'Despesas Aduaneiras',\n\n 'fiscal.invoice.title': 'Validação de fatura',\n 'fiscal.invoice.bt.return': 'Retorna',\n 'fiscal.invoice.bt.registerSap': 'Registrar SAP',\n 'fiscal.invoice.approvalSub': 'Assunto de aprovação',\n 'fiscal.invoice.provider': 'Fornecedor',\n 'fiscal.invoice.nf': 'NF',\n 'fiscal.invoice.approvalResquestBy': 'Solicitação de aprovação por',\n 'fiscal.invoice.approvalCreatedDate': 'Data da aprovação',\n 'fiscal.invoice.dateIssue': 'Data de emissão',\n 'fiscal.invoice.serviceCod': ' Cod. do Serviço',\n 'fiscal.invoice.dueDate': 'Data de Vencimento',\n 'fiscal.invoice.validateBy': 'Lançado por ',\n 'fiscal.invoice.validateDate': 'Lançado em',\n 'fiscal.invoice.sap': 'Registro SAP',\n 'fiscal.invoice.table.serviceDescription': 'Descrição do Serviço',\n 'fiscal.invoice.table.value': 'Valor',\n 'fiscal.invoice.table.po': 'PO',\n 'fiscal.invoice.table.itemPo': 'Item do PO',\n 'fiscal.invoice.table.checked': 'Verificado',\n 'fiscal.invoice.totalCheck': 'Total verificado',\n 'fiscal.invoice.attachment': 'Anexo',\n 'fiscal.invoice.fileName': 'Nome do arquivo',\n 'fiscal.list.notfound': 'Nenhum arquivo de Validação da fatura encontrado',\n 'error.fiscal.search': 'Não foi possível carregar a lista de validação da fatura, tente novamente ou contate um administrador.',\n 'fiscal.tab.label': 'Fiscal',\n 'solicitation.label.total.checked': 'Total Selecionado',\n 'fiscal.msg.save.success': 'Validação da fatura salva com sucesso.',\n 'fiscal.msg.disable.return': 'Não é possível devolver a aprovação. A Situação da aprovação é %s',\n 'fiscal.checkbox.billet': 'Listar apenas registros com boletos?',\n 'fiscal.checkbox.approved': 'Aprovações Aprovadas',\n\n 'document.flow.label.request.by': 'Solicitante',\n 'document.flow.predecessor': 'Antecessor',\n 'document.flow.predecessor.placeholder': 'Selecione um Antecessor',\n 'document.flow.return.sub.title': 'Descreva alguma observação sobre a devolução da requisição.',\n 'document.flow.return.success': 'Aprovação retornada com sucesso.',\n 'document.flow.return.error': 'Não foi possível retornar a aprovação.',\n 'fiscal.register.sap.required': 'Registro SAP é obrigatório.',\n 'fiscal.msg.status.registered': 'Não é possível devolver a aprovação. A Situação da fatura é Registrado no SAP.',\n 'acquisition.label.status.approval': 'Situação Aprovação'\n\n });\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('FiscalService', FiscalService);\n\n var BASE = '/fiscal/';\n\n /** @ngInject */\n function FiscalService($state, $window, $injector, $q, $log, ToastUtil, $translate, ConfigurationService, AuthService, DefaultService) {\n var Status = [];\n\n var Templates = [];\n\n Status = [\n {Id: 0, Title: 'fiscal.table.status.peding'},\n {Id: 1, Title: 'fiscal.table.status.registeredSap'}\n ];\n\n Templates = [\n {Id: 6, Title: 'fiscal.table.template.service'},\n {Id: 7, Title: 'fiscal.table.template.customsExpenses'}\n ];\n\n function validateViewPermission(vm) {\n return (vm.profile.CanView);\n }\n\n function validateEditOrConsultPermission(vm) {\n return (vm.profile.CanEdit || vm.profile.CanConsult);\n }\n\n function validateDeletePermission(vm) {\n return (vm.profile.hasLoad && vm.profile.CanDelete);\n }\n\n function validateAddPermission(vm) {\n return (vm.profile.hasLoad && vm.profile.CanAdd);\n }\n\n function validateApprovePermission(vm) {\n return (vm.profile.hasLoad && vm.profile.CanApprove);\n }\n\n\n return {\n\n getStatus: function () {\n return Status;\n },\n\n getTemplate: function () {\n return Templates;\n },\n getDocumentFlowById: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n\n $http.get(ConfigurationService.getServiceHost() + BASE + 'documentFlow/byId/' + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n editFiscal: function (item, vm) {\n if (validateEditOrConsultPermission(vm)) {\n $state.go('service-invoice', {\n Id: item.Id,\n IdApproval: item.IdApproval\n });\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n },\n\n getListPendingValidation: function (vm, searchParams) {\n if (!validateViewPermission(vm)) {\n return $q.reject('not authorized');\n }\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + \"list/pending-validation\", {\n params: searchParams\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getHtmlSolicitation: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + \"documentFlow/byId/\" + id + \"/html-solicitation\", {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n loadProfileModules: function (vm, $scope) {\n var profileModule = {};\n\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.moduleFiscal;\n\n return DefaultService.loadModules(profileModule)\n .then(function (response) {\n vm.profile = angular.copy(response);\n vm.profile.hasLoad = true;\n });\n },\n\n save: function (fiscal) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + BASE, fiscal, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n };\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(FiscalRouter);\n\n /** @ngInject */\n function FiscalRouter($stateProvider) {\n\n $stateProvider.state('fiscal', {\n url: '/fiscal',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/fiscal/fiscal-main/fiscal-main.html',\n controller: 'FiscalMainController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: false,\n internal: false\n },\n authorize: true\n });\n\n\n $stateProvider.state('service-invoice', {\n url: '/fiscal/service-invoice/:IdApproval/:Id',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/fiscal/service-invoice/service-invoice.html',\n controller: 'ServiceInvoiceController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: false\n },\n authorize: true\n });\n\n\n // $stateProvider.state('acquisition-list', {\n // url: '/acquisition/acquisition-protocol',\n // views: {\n // 'signin-view': {},\n // 'main-view': {\n // templateUrl: 'app/acquisition/acquisition-protocol-list.html',\n // controller: 'AcquisitionProtocolListController',\n // controllerAs: 'ctrl'\n // }\n // },\n // params: {\n // menuName: 'title.acquisition',\n // internal: false,\n // approvals: null\n // },\n // authorize: true\n // });\n\n }\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *\n */\n function DialogReturnApprovalController($scope) {\n\n var vm = this;\n vm.value = \"\";\n vm.returnTo = '1';\n vm.targets = $scope.modelDialog.listTargetsApprovedRejected();\n vm.targetId = '0';\n\n vm.getSize = function(){\n return $scope.parentDialogSize;\n };\n\n vm.isConfirmDisabled = function(){\n if ( vm.returnTo === \"0\") {\n return !vm.targetId || !vm.value || vm.value.length < 3;\n }\n return !vm.value || vm.value.length < 3;\n };\n\n vm.close = function () {\n $scope.$close('cancel');\n $scope.$dismiss();\n };\n\n vm.confirm = function () {\n $scope.parentDialog({value: vm.value, returnTo: vm.returnTo, orderTarget: vm.targetId});\n $scope.$close('ok');\n };\n\n }\n\n function DialogReturnApprovalDirective() {\n return {\n restrict: 'E',\n replace: true,\n templateUrl: \"app/fiscal/dialog-return-approval.html\",\n controllerAs: 'ctrl',\n controller: 'DialogReturnApprovalController'\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('DialogReturnApprovalController', DialogReturnApprovalController)\n .directive('dialogReturnApproval', DialogReturnApprovalDirective);\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(FinancialTranslate);\n\n /** @ngInject */\n function FinancialTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'title.financial': 'Financial',\n 'title.financial.new': 'New Financial Archiving',\n 'title.financial.edit': 'Edit Financial Archiving',\n 'placeholder.search.financial': 'Search by id',\n 'placeholder.search.financial.id.approval': 'Search by id Approval',\n 'financial.label.created': 'Created Date',\n 'financial.label.updated': 'Updated Date',\n 'financial.label.peyment': 'Payment Date',\n 'financial.label.lastupdated': 'Last Updated Date',\n 'financial.label.id.approval': 'Id Approval',\n 'financial.label.start.created.date': 'Created Date - Start',\n 'financial.label.final.created.date': 'Created Date - Final',\n 'financial.label.start.updated.date': 'Updated Date - Start',\n 'financial.label.final.updated.date': 'Updated Date - Final',\n 'financial.label.createdby': 'Created By',\n 'financial.label.updatedby': 'Updated By',\n 'financial.label.status': 'Status',\n 'financial.label.note': 'Note',\n 'financial.placeholder.all': 'All',\n 'financial.list.notfound': 'No financial found',\n 'error.financial.search': 'An error occurred when trying to load a list of Financial Archiving.',\n 'financial.remove.success': 'Financial Archiving was successfully removed',\n 'financial.remove.error.conflict': 'The Financial Archiving can not be removed because it is being used by the system.',\n 'financial.remove.error': 'An error occurred when try to remove financial',\n 'financial.label.status.archiving.pending': 'Pre-Archiving',\n 'financial.label.status.pending.document': 'Pending Document',\n 'financial.label.status.archived': 'Archived',\n 'label.newArchiving': 'New Archiving',\n 'financial.title.identification': 'Archiving Payment Identification',\n 'financial.title.approval.dateApproval': 'Approval',\n 'financial.title.approval': 'Financial Approval',\n 'financial.title.approval.subject': 'Subject',\n 'financial.title.approval.type': 'Type',\n 'financial.title.approval.requestby': 'Request By',\n 'financial.title.approval.deadline': 'Deadline',\n 'financial.title.approval.solicitation': 'Solicitation',\n 'financial.title.approval.amount': 'Amount',\n 'financial.title.approval.attachments': 'Attachments of Approvals',\n 'financial.title.additional.attachment': 'Additional Attachments',\n 'financial.title.category': 'Category',\n 'financial.title.attachment': 'Attachment',\n 'financial.category.transfer.border': 'Transfer Border',\n 'financial.category.border.ticket': 'Border Ticket',\n 'financial.category.payment': 'Proof of Payment',\n 'financial.category.refund': 'Refund',\n 'financial.category.advance.travel': 'Advance Travel',\n 'financial.category.advance.payment': 'Advance Payment Supplier',\n 'financial.category.payment.sheet': 'Payment Sheet',\n 'financial.category.bank.statement': 'Bank Statement',\n 'financial.category.bank.others': 'Others',\n 'financial.placeholder.category.attachment': 'Select a Category',\n 'financial.update.success': 'Financial Archiving was successfully updated',\n 'financial.archiving.attachments.error': 'Financial Archiving must have at least one attachment in the Category: Bank Statement',\n 'financial.save.success': 'Financial was successfully saved.',\n 'placeholder.search.financial.vendor': 'Search by Vendor',\n 'placeholder.search.financial.vendor.codesap': 'Search by Cod. SAP',\n 'documentFlow.label.yes': 'Yes',\n 'documentFlow.label.no': 'No',\n 'financial.presentation.label':'Presentation',\n 'financial.archiving': 'Archiving',\n 'financial.payments': 'Payments',\n 'financial.pending': 'Pending',\n 'financial.pending.expirationInitial': 'Expiration - Initial',\n 'financial.pending.expirationEnd': 'Expiration - End',\n 'financial.pending.paymentInitial': 'Payment - Initial',\n 'financial.pending.paymentEnd': 'Payment - End',\n 'financial.title.hide.pending' : 'Hide Pending',\n 'financial.search.ids.error' : 'Id or Id Approval use comma separators. Ex: 1085,2354'\n });\n\n $translateProvider.translations('pt', {\n 'title.financial': 'Financeiro',\n 'title.financial.new': 'Novo Arquivo Financeiro',\n 'title.financial.edit': 'Editar Arquivo Financeiro',\n 'placeholder.search.financial': 'Buscar por id',\n 'placeholder.search.financial.id.approval': 'Buscar por id da aprovação',\n 'financial.label.created': 'Data de criação',\n 'financial.label.updated': 'Data de atualização',\n 'financial.label.peyment': 'Data de pagamento',\n 'financial.label.lastupdated': 'Última atualização',\n 'financial.label.id.approval': 'Id Aprovação',\n 'financial.label.start.created.date': 'Data Criação - Inicial',\n 'financial.label.final.created.date': 'Data Criação - Final',\n 'financial.label.start.updated.date': 'Data Atualização - Inicial',\n 'financial.label.final.updated.date': 'Data Atualização - Final',\n 'financial.label.createdby': 'Criado Por',\n 'financial.label.updatedby': 'Atualizado Por',\n 'financial.label.status': 'Situação',\n 'financial.label.note': 'Observação',\n 'financial.placeholder.all': 'Todos',\n 'financial.list.notfound': 'Nenhum arquivo financeiro encontrado',\n 'error.financial.search': 'Não foi possível carregar a lista de arquivos financeiros, tente novamente ou contate um administrador.',\n 'financial.remove.success': 'Arquivo Financeiro removido com sucesso',\n 'financial.remove.error': 'Ocorreu um erro ao tentar remover o arquivo financeiro',\n 'financial.label.status.archiving.pending': 'Pré-Arquivamento',\n 'financial.label.status.pending.document': 'Documento Pendente',\n 'financial.label.status.archived': 'Arquivado',\n 'label.newArchiving': 'Novo Arquivamento',\n 'financial.title.identification': 'Identificação do Arquivo de Pagemento',\n 'financial.title.approval.dateApproval': 'Aprovação',\n 'financial.title.approval': 'Aprovação Financeiro',\n 'financial.title.approval.subject': 'Assunto',\n 'financial.title.approval.type': 'Tipo',\n 'financial.title.approval.requestby': 'Criado Por',\n 'financial.title.approval.deadline': 'Data Limite',\n 'financial.title.approval.solicitation': 'Solicitação',\n 'financial.title.approval.amount': 'Total',\n 'financial.title.approval.attachments': 'Anexos da Aprovação',\n 'financial.title.additional.attachment': 'Anexos Adicionais',\n 'financial.title.category': 'Categoria',\n 'financial.title.attachment': 'Anexos',\n 'financial.category.transfer.border': 'Borderô de transferência',\n 'financial.category.border.ticket': 'Borderô boleto',\n 'financial.category.payment': 'Comprovante de Pagamento',\n 'financial.category.refund': 'Reembolso',\n 'financial.category.advance.travel': 'Adiantamento Viagem',\n 'financial.category.advance.payment': 'Adiantamento Fornecedor',\n 'financial.category.payment.sheet': 'Folha Pagamento',\n 'financial.category.bank.statement': 'Extrato Bancário',\n 'financial.category.bank.others': 'Outros',\n 'financial.placeholder.category.attachment': 'Selecione uma Categoria',\n 'financial.update.success': 'Arquivamento Financeiro atualizado com sucesso',\n 'financial.archiving.attachments.error': 'Arquivamento Financeiro deve ter ao menos um anexo da Categoria: Extrato Bancário.',\n 'financial.save.success': 'Arquivamento Financeiro salvo com sucesso.',\n 'placeholder.search.financial.vendor': 'Buscar por fornecedor',\n 'placeholder.search.financial.vendor.codesap': 'Buscar por Cod. SAP',\n 'documentFlow.label.yes': 'Sim',\n 'documentFlow.label.no': 'Não',\n 'financial.presentation.label':'Apresentação',\n 'financial.archiving': 'Arquivamento',\n 'financial.payments': 'de Pagamentos',\n 'financial.pending': 'Pendente',\n 'financial.pending.expirationInitial': 'Vencimento - Inicial',\n 'financial.pending.expirationEnd': 'Vencimento - Final',\n 'financial.pending.paymentInitial': 'Pagamento - Inicial',\n 'financial.pending.paymentEnd': 'Pagamento - Final',\n 'financial.title.hide.pending' : 'Ocultar Pendentes',\n 'financial.search.ids.error' : 'Id ou Id Aprovação incorreto utilize separadores com vírgula. Ex: 1085,2354'\n });\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('FinancialService', FinancialService);\n\n var BASE = '/financial/';\n\n /** @ngInject */\n function FinancialService($state, $window, $injector, $q, $log, ToastUtil, $translate, ConfigurationService, AuthService, DefaultService) {\n var Status = [], CategoryAttachment = [];\n\n Status = [\n {Id: 1, Title: 'financial.label.status.archiving.pending'},\n {Id: 2, Title: 'financial.label.status.pending.document'},\n {Id: 3, Title: 'financial.label.status.archived'}\n ];\n\n CategoryAttachment = [\n {Id: 1, Title: 'financial.category.transfer.border'}, \n {Id: 2, Title: 'financial.category.border.ticket'},\n {Id: 3, Title: 'financial.category.payment'},\n {Id: 4, Title: 'financial.category.refund'},\n {Id: 5, Title: 'financial.category.advance.travel'},\n {Id: 6, Title: 'financial.category.advance.payment'},\n {Id: 7, Title: 'financial.category.payment.sheet'},\n {Id: 8, Title: 'financial.category.bank.statement'},\n {Id: 9, Title: 'financial.category.bank.others'}\n ];\n \n function validateViewPermission(vm) {\n return (vm.profile.CanView);\n }\n\n function validateEditOrConsultPermission(vm) {\n return (vm.profile.CanEdit || vm.profile.CanConsult);\n }\n\n function validateDeletePermission(vm) {\n return (vm.profile.hasLoad && vm.profile.CanDelete);\n }\n\n function validateAddPermission(vm) {\n return (vm.profile.hasLoad && vm.profile.CanAdd);\n }\n \n function validateApprovePermission(vm) {\n return (vm.profile.hasLoad && vm.profile.CanApprove);\n }\n\n function createFinancial(vm) {\n if (validateAddPermission(vm)) {\n $state.go('financial-create');\n } else {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.access.unauthorized\"), ToastUtil.ToastType.WARN);\n }\n }\n\n return {\n hasApprovePermission: validateApprovePermission,\n getCategoryAttachment: function () {\n return CategoryAttachment;\n },\n\n getStatus: function () {\n return Status;\n },\n\n loadProfileModules: function (vm, $scope) {\n var profileModule = {};\n\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.moduleFinancial;\n\n return DefaultService.loadModules(profileModule)\n .then(function (response) {\n vm.profile = angular.copy(response);\n vm.profile.hasLoad = true;\n });\n },\n\n editFinancial: function (id, vm) {\n if (validateEditOrConsultPermission(vm)) {\n $state.go('financial-edit', {\n Id: id\n });\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n },\n\n viewPendingPayments: function (vm) {\n if (validateViewPermission(vm)) {\n $state.go('financial-pending');\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n }, \n\n save: function (financial) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + BASE, financial, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getById: function (Id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + 'byId/' + Id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n list: function (vm, searchParams) {\n if (!validateViewPermission(vm)) {\n return $q.reject('not authorized');\n }\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + \"list\", {\n params: searchParams\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n listDocumentsFlows: function (searchParams) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n $http.get(ConfigurationService.getServiceHost() + BASE + \"list/financial-approve\", {\n params: searchParams\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n createFinancial: function (vm, $scope) {\n if (vm.profile.hasLoad) {\n createFinancial(vm);\n } else {\n this.loadProfileModules(vm, $scope)\n .then(function () {\n createFinancial(vm);\n })\n .catch(function (error) {\n $log.log(error);\n })\n }\n },\n\n delete: function (vm, id) {\n if (!validateDeletePermission(vm)) {\n return $q.reject('not authorized');\n }\n\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + BASE + \"/\" + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n update: function (id, financial) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.patch(ConfigurationService.getServiceHost() + BASE + \"/\" + id, financial)\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n\n };\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(FinancialRouter);\n\n /** @ngInject */\n function FinancialRouter($stateProvider) {\n\n $stateProvider.state('financial-list', {\n url: '/financial',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/financial/financial-list.html',\n controller: 'FinancialListController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.financial',\n internal: false\n },\n authorize: true\n });\n\n $stateProvider.state('financial-create', {\n url: '/financial/create',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/financial/financial-edit.html',\n controller: 'FinancialEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.financial',\n internal: false\n },\n authorize: true\n });\n\n $stateProvider.state('financial-edit', {\n url: '/financial/edit/:Id',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/financial/financial-edit.html',\n controller: 'FinancialEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.financial',\n internal: false\n },\n authorize: true\n });\n\n\n $stateProvider.state('financial-doc', {\n url: '/financial/presentation/:Id',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/financial/fiscal-doc.html',\n controller: 'FinancialDocController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.financial'\n },\n authorize: true\n });\n\n $stateProvider.state('financial-pending', {\n url: '/financial/pending',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/financial/financial-pending-payments.html',\n controller: 'FinancialPendingPaymentsController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.financial'\n },\n authorize: true\n });\n\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('FinancialPendingPaymentsController', FinancialPendingPaymentsController);\n\n function FinancialPendingPaymentsController($scope, $state, $translate, $filter, $log, $document, FileService, DialogController,\n FinancialService, ToastUtil, moment, DocumentFlowService) {\n\n var vm = this;\n\n vm.checkall = false;\n vm.Approvals = [];\n vm.Attachments = [];\n\n vm.listDocumentsFlows = []\n vm.approvalAttachments = [];\n\n vm.templateList = DocumentFlowService.getTemplateList();\n\n vm.profile = {\n CanAdd: false,\n CanEdit: false,\n CanDelete: false,\n CanView: false,\n CanApprove: false\n };\n\n vm.searchParams = {\n DocumentFlowId: null,\n FinancialId: 0,\n SolicitationApproval: true,\n PaymentDateExpirationInitial: '',\n PaymentDateExpirationEnd: '',\n PaymentDateInitial: '',\n PaymentDateEnd: '',\n Solicitacion: '-1',\n Vendor: '',\n CodeSAP: '',\n Status: null\n };\n\n vm.statusList = FinancialService.getStatus();\n\n vm.clearFields = function () {\n vm.searchParams.DocumentFlowId = null;\n vm.searchParams.FinancialId = 0;\n vm.searchParams.SolicitationApproval = true;\n vm.searchParams.PaymentDateExpirationInitial = '';\n vm.searchParams.PaymentDateExpirationEnd = '';\n vm.searchParams.PaymentDateInitial = '';\n vm.searchParams.PaymentDateEnd = '';\n vm.searchParams.Solicitacion = '-1';\n vm.searchParams.Vendor = '';\n vm.searchParams.CodeSAP = '';\n };\n\n vm.openSolicitation = function (solicitacion) {\n DialogController.show('financial.title.approval.solicitation', '', solicitacion, !vm.State, null, 'lg');\n }\n\n vm.openSolicitationApproval = function (id) {\n DocumentFlowService.getHtmlSolicitation(id).then(function (response) {\n var html = angular.copy(response);\n vm.openSolicitation(html);\n });\n }\n\n vm.checkButton = function () {\n if (vm.financialId > 0) {\n return (vm.profile && !vm.profile.CanEdit);\n } else {\n return (vm.profile && !vm.profile.CanAdd);\n }\n }\n\n vm.checkUncheckAll = function () {\n angular.forEach(vm.listDocumentsFlows, function (item) {\n item.Selected = vm.checkall;\n vm.DocumentFlowClicked(item);\n });\n };\n\n vm.getTotal = function () {\n var total = 0;\n\n angular.forEach(vm.listDocumentsFlows, function (item) {\n if (item.Selected)\n total += item.SolicitationApproval.Value;\n });\n return total;\n };\n\n vm.searchFinancial = function () {\n search();\n };\n\n vm.search = function () {\n var searchParams = buildSearchParam();\n FinancialService.listDocumentsFlows(searchParams)\n .then(function (response) {\n vm.listDocumentsFlows = response;\n vm.listDocumentsFlows.forEach(function (value) {\n value.Selected = false;\n })\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === $scope.NotAcceptable) {\n ToastUtil.showToastMessage($translate.instant(\"financial.search.ids.error\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"service.load.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n };\n\n vm.goToList = function () {\n $state.go('financial-list');\n }\n\n vm.DocumentFlowClicked = function (item) {\n item = null;\n }\n\n vm.markDocumentFlow = function (id) {\n var contains = false;\n angular.forEach(vm.listDocumentsFlows, function (value) {\n if (id === value.DocumentFlow.Id) {\n contains = true;\n }\n });\n return contains;\n }\n\n function copy(value) {\n return !value ? null : angular.copy(value);\n }\n\n function buildSearchParam() {\n var searchParams = {\n DocumentFlowId: vm.searchParams.DocumentFlowId,\n FinancialId: vm.searchParams.FinancialId,\n SolicitationApproval: vm.searchParams.SolicitationApproval,\n PaymentDateExpirationInitial: null,\n PaymentDateExpirationEnd: null,\n PaymentDateInitial: null,\n PaymentDateEnd: null,\n Solicitacion: vm.searchParams.Solicitacion,\n Vendor: null,\n CodeSAP: null,\n Status: null\n };\n\n angular.forEach(searchParams, function (value, key) {\n searchParams[key] = copy(vm.searchParams[key]);\n });\n\n searchParams.PaymentDateExpirationInitial = searchParams.PaymentDateExpirationInitial ? moment(searchParams.PaymentDateExpirationInitial).format('DD/MM/YYYY') : searchParams.PaymentDateExpirationInitial;\n searchParams.PaymentDateExpirationEnd = searchParams.PaymentDateExpirationEnd ? moment(searchParams.PaymentDateExpirationEnd).format('DD/MM/YYYY') : searchParams.PaymentDateExpirationEnd;\n\n searchParams.PaymentDateInitial = searchParams.PaymentDateInitial ? moment(searchParams.PaymentDateInitial).format('DD/MM/YYYY') : searchParams.PaymentDateInitial;\n searchParams.PaymentDateEnd = searchParams.PaymentDateEnd ? moment(searchParams.PaymentDateEnd).format('DD/MM/YYYY') : searchParams.PaymentDateEnd;\n\n return searchParams;\n }\n\n function search() {\n vm.search();\n }\n\n $scope.filterAttachs = function (item) {\n return item.DocumentFlowAttachments.length > 0;\n };\n\n vm.downloadFile = function (file) {\n FileService.download(file).then(function (response) {\n var newFIle = new Blob([response], {});\n\n var fileURL = URL.createObjectURL(newFIle);\n\n var a = $document[0].createElement(\"a\");\n $document[0].body.appendChild(a);\n a.style = \"display: none\";\n a.href = fileURL;\n a.download = file.FileName;\n a.click();\n }).catch(function () {\n });\n };\n\n function init() {\n FinancialService.loadProfileModules(vm, $scope)\n .then(function () {\n vm.search();\n })\n .catch(function (error) {\n var msg = error.data && error.data.Message ? error.data.Message : $filter('translate')('error.financial.search');\n ToastUtil.showToastMessage($translate.instant(msg), ToastUtil.ToastType.ERROR);\n });\n }\n\n init();\n }\n})();\n\n/*eslint no-undef: 0*/\n/*eslint angular/controller-as-vm: 0*/\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('FinancialListController', FinancialListController);\n\n function FinancialListController($scope, $translate, $filter, $state, FinancialService, ToastUtil, moment) {\n\n var vm = this;\n var HTTP_STATUS_CONFLICT = 409;\n\n vm.financials = [];\n vm.itensPerPageList = [\n {name: '5', value: 5, before: 0, after: 6},\n {name: '10', value: 10, before: 5, after: 11},\n {name: '20', value: 20, before: 10, after: 21},\n {name: '30', value: 30, before: 20, after: 31},\n {name: '40', value: 40, before: 30, after: 41},\n {name: '50', value: 50, before: 40, after: 51}];\n vm.itemPerPage = vm.itensPerPageList[0];\n vm.totalLista = 0;\n vm.searchParams = {\n Id: '',\n CreatedStartDate: '',\n CreatedFinalDate: '',\n UpdatedStartDate: '',\n UpdatedFinalDate: '',\n CreatedBy: '',\n UpdatedBy: '',\n Status: '-1',\n Page: 1,\n MaxPerPage: vm.itemPerPage.value,\n Vendor: '',\n CodeSAP: '',\n IdApproval: ''\n };\n vm.statusList = FinancialService.getStatus();\n\n vm.clearFields = function () {\n vm.searchParams.Id = '';\n vm.searchParams.CreatedStartDate = '';\n vm.searchParams.CreatedFinalDate = '';\n vm.searchParams.UpdatedStartDate = '';\n vm.searchParams.UpdatedFinalDate = '';\n vm.searchParams.CreatedBy = '';\n vm.searchParams.UpdatedBy = '';\n vm.searchParams.Status = '-1';\n vm.searchParams.Vendor = '';\n vm.searchParams.CodeSAP = '';\n vm.searchParams.IdApproval = '';\n };\n\n vm.getStatusItem = function(financial) {\n var status = vm.statusList.find(function (s) {\n return s.Id == financial.Status;\n });\n\n return status.Title;\n }\n\n vm.shouldShow = function (item) {\n if (vm.totalLista > 0 && item != undefined) {\n return vm.totalLista >= item.value || (vm.totalLista < item.after && vm.totalLista > item.before);\n }\n return false;\n };\n\n vm.changeItemsPerPage = function () {\n if (vm.itemPerPage == null) {\n vm.itemPerPage = vm.itensPerPageList[0];\n }\n search(1, vm.itemPerPage.value);\n };\n\n vm.onPageChange = function () {\n search(vm.searchParams.Page, vm.searchParams.MaxPerPage);\n };\n\n vm.searchFinancial = function () {\n vm.itemPerPage = vm.itensPerPageList[0];\n search(1, vm.itemPerPage.value);\n };\n\n vm.search = function () {\n if (sessionStorage.getItem(\"searchParams\")) {\n vm.searchParams = JSON.parse(sessionStorage.getItem(\"searchParams\"));\n sessionStorage.removeItem(\"searchParams\");\n vm.itensPerPageList.forEach(function (element) {\n if (element.value == vm.searchParams.MaxPerPage) {\n vm.itemPerPage = element;\n return;\n }\n });\n }\n var searchParams = buildSearchParam();\n\n FinancialService.list(vm, searchParams)\n .then(function (response) {\n vm.financials = response.resultList;\n vm.totalLista = response.total;\n setViewModel();\n })\n .catch(function (error) {\n if (error && error.status) {\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.access.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if(error.status === $scope.NotAcceptable) {\n ToastUtil.showToastMessage($translate.instant(\"financial.search.ids.error\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"error.financial.search\"), ToastUtil.ToastType.ERROR);\n }\n } else if (error == \"not authorized\" ) {\n $state.go('not-authorized', {}, {});\n }\n });\n };\n\n vm.canDelete = function(financial){\n if(financial.Status == 3) {\n return !vm.profile.CanApprove;\n } else {\n return false;\n }\n }\n\n function setViewModel() {\n if (vm.financials) {\n for (var i = 0, len = vm.financials.length; i < len; i++) {\n var financial = vm.financials[i], status = null;\n\n status = vm.statusList.find(function (s) {\n return s.Id === financial.Status;\n });\n\n if (status) {\n financial.StatusDescription = $translate.instant(status.Title);\n }\n }\n }\n }\n\n vm.edit = function (financial) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n FinancialService.editFinancial(financial.Id, vm);\n };\n\n vm.viewPresentation = function (financial) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('financial-doc', {\n Id: financial.Id\n });\n }\n\n vm.viewPendingPayments = function () {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n FinancialService.viewPendingPayments(vm);\n }\n\n vm.create = function () {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n FinancialService.createFinancial(vm);\n };\n\n vm.delete = function (financial) {\n FinancialService.delete(vm, financial.Id)\n .then(function () {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go($state.current, {}, {\n reload: true\n });\n ToastUtil.showToastMessage($translate.instant(\"financial.remove.success\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(function (error) {\n if (error === 'not authorized') {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n } else {\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if (error.status === HTTP_STATUS_CONFLICT) {\n ToastUtil.showToastMessage($translate.instant(\"financial.remove.error.conflict\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"financial.remove.error\"), ToastUtil.ToastType.ERROR);\n }\n }\n\n });\n\n };\n\n function buildSearchParam() {\n var searchParams = {\n Id: vm.searchParams.Id,\n CreatedStartDate: null,\n CreatedFinalDate: null,\n UpdatedStartDate: null,\n UpdatedFinalDate: null,\n CreatedBy: null,\n UpdatedBy: null,\n Status: vm.searchParams.Status,\n Page: vm.searchParams.Page,\n MaxPerPage: vm.searchParams.MaxPerPage,\n Vendor: null,\n CodeSAP: null,\n IdApproval: vm.searchParams.IdApproval\n };\n\n angular.forEach(searchParams, function (value, key) {\n searchParams[key] = copy(vm.searchParams[key]);\n });\n\n searchParams.CreatedBy = searchParams.CreatedBy ? searchParams.CreatedBy.Id : null;\n searchParams.UpdatedBy = searchParams.UpdatedBy ? searchParams.UpdatedBy.Id : null;\n searchParams.CreatedStartDate = searchParams.CreatedStartDate ? moment(searchParams.CreatedStartDate).format('DD/MM/YYYY') : searchParams.CreatedStartDate;\n searchParams.CreatedFinalDate = searchParams.CreatedFinalDate ? moment(searchParams.CreatedFinalDate).format('DD/MM/YYYY') : searchParams.CreatedFinalDate;\n searchParams.UpdatedStartDate = searchParams.UpdatedStartDate ? moment(searchParams.UpdatedStartDate).format('DD/MM/YYYY') : searchParams.UpdatedStartDate;\n searchParams.UpdatedFinalDate = searchParams.UpdatedFinalDate ? moment(searchParams.UpdatedFinalDate).format('DD/MM/YYYY') : searchParams.UpdatedFinalDate;\n\n return searchParams;\n }\n\n function copy(value) {\n return !value ? null : angular.copy(value);\n }\n\n function search(page, max) {\n vm.searchParams.Page = page;\n vm.searchParams.MaxPerPage = max;\n vm.search();\n }\n\n function init() {\n FinancialService.loadProfileModules(vm, $scope)\n .then(function () {\n vm.search();\n })\n .catch(function (error) {\n var msg = error.data && error.data.Message ? error.data.Message : $filter('translate')('error.financial.search');\n ToastUtil.showToastMessage($translate.instant(msg), ToastUtil.ToastType.ERROR);\n });\n }\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('FinancialEditController', FinancialEditController);\n\n function FinancialEditController($rootScope, $scope, $state, $stateParams, $window, $sce, DialogControllerTemplate, DialogController, FileService, FinancialService, DefaultService, ToastUtil, $translate, moment, $log, $document, AuthService, JsonPatchUtil, DocumentFlowService) {\n $rootScope.$state = $state;\n $rootScope.$stateParams = $stateParams;\n\n var vm = this, states = {}, _patch = null, patch = [],USER = {Id: parseInt($window.localStorage.userID), Name: $window.localStorage.aliasAqms}, NOW = new Date();\n var DefaultState = {\n canConsult: true,\n canEdit: true\n };\n vm.typeExpenseList = [];\n vm.hidePending = false;\n\n vm.checkall = false;\n vm.Approvals = [];\n vm.Attachments = [];\n\n vm.listDocumentsFlows = []\n vm.approvalAttachments = [];\n vm.financialId = $state.params.Id;\n \n vm.State = DefaultState;\n vm.statusList = FinancialService.getStatus();\n vm.categoryAttachment = FinancialService.getCategoryAttachment();\n vm.Category = undefined;\n vm.profile = {\n CanAdd: false,\n CanEdit: false,\n CanDelete: false,\n CanView: false,\n CanApprove: false\n };\n\n vm.Financial = {\n Id: 0,\n CreatedBy: USER,\n CreatedDate: NOW,\n UpdatedBy: USER,\n UpdatedDate: NOW,\n PaymentDate: NOW,\n Status: 1,\n Note: null,\n Approvals: [],\n Attachments: []\n };\n\n vm.saveOrUpdate = function () {\n if (vm.financialId && vm.financialId > 0) {\n update();\n } else {\n save();\n }\n }\n\n vm.openSolicitation = function (solicitacion) {\n DialogController.show('financial.title.approval.solicitation', '', solicitacion, !vm.State, null, 'lg');\n }\n\n vm.openSolicitationApproval = function(id) {\n DocumentFlowService.getHtmlSolicitation(id).then(function (response) {\n var html = angular.copy(response);\n vm.openSolicitation(html); \n });\n }\n\n function save() {\n if (canSave()) {\n fillFinancialAttachments();\n\n FinancialService.save(vm.Financial)\n .then(function () {\n ToastUtil.showToastMessage($translate.instant(\"financial.save.success\"), ToastUtil.ToastType.SUCCESS);\n $state.go('financial-list');\n })\n .catch(onSaveFinancialError);\n }\n }\n\n function fillFinancialAttachments() {\n if ( vm.Financial.Attachments && vm.Financial.Attachments.length == 0 ) {\n vm.Financial.Attachments = undefined;\n }\n }\n\n function update() {\n if (canSave()) {\n vm.Financial.UpdatedBy = USER;\n patch = formatFinancialToSave();\n if (patchIsNotEmpty(patch)) {\n if ( vm.FinancialCopy.Status == 3 ) {\n DialogControllerTemplate.showWithCloseListener('alert.remark.title', 'alert.remark',\n '', vm.onConfirmUpdate);\n } else {\n vm.onConfirmUpdate(null);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(\"financial.update.success\"), ToastUtil.ToastType.SUCCESS);\n $state.go('financial-list');\n }\n }\n }\n\n vm.checkButton = function() {\n if ( vm.financialId > 0 ) {\n return ( vm.profile && !vm.profile.CanEdit );\n } else {\n return ( vm.profile && !vm.profile.CanAdd );\n }\n }\n\n \n vm.onConfirmUpdate = function (remark) {\n patch.push({\"op\": \"replace\", \"path\": \"/CreatedBy\", \"value\": vm.Financial.CreatedBy}); \n if ( remark != null ) {\n patch.push({ \"op\": \"replace\", \"path\": \"/Remark\", \"value\": remark });\n } \n FinancialService.update(vm.financialId, patch)\n .then(function () {\n patch = [];\n _patch = null;\n ToastUtil.showToastMessage($translate.instant(\"financial.update.success\"), ToastUtil.ToastType.SUCCESS);\n $state.go('financial-list');\n })\n .catch(onSaveFinancialError);\n }\n\n vm.checkUncheckAll = function () {\n angular.forEach(vm.listDocumentsFlows, function (item) {\n item.Selected = vm.checkall;\n vm.DocumentFlowClicked(item);\n }); \n };\n\n function onSaveFinancialError(error) {\n if (error.status === 404) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.generic\"), ToastUtil.ToastType.ERROR);\n return;\n }\n var serverMsg = error.data ? error.data.Message : 'Network error';\n var errorMsg;\n\n if (error.data && error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n return;\n }\n } else {\n errorMsg = $translate.instant(serverMsg)\n }\n\n ToastUtil.showToastMessage($translate.instant(errorMsg), ToastUtil.ToastType.ERROR);\n }\n\n \n function canSave() {\n var valid = true;\n\n if ( vm.Financial.Status == 3 ){\n var hasAtt = vm.Financial.Attachments.filter(function (att) {\n return att.Category == 8\n });\n\n valid = hasAtt.length > 0;\n if(!valid) {\n ToastUtil.showToastMessage($translate.instant(\"financial.archiving.attachments.error\"), ToastUtil.ToastType.WARN);\n return valid;\n }\n }\n\n return $scope.financialForm.$valid && valid;\n }\n\n function formatFinancialToSave() {\n var patch = generatePatch();\n\n if (patch && patch.length > 0) {\n patch.push({\"op\": \"replace\", \"path\": \"/UpdatedDate\", \"value\": vm.Financial.UpdatedDate});\n }\n\n return patch;\n }\n \n function patchIsNotEmpty(patch) {\n return patch && patch.length > 0;\n }\n\n function removePatchOperation(patch, path) {\n var filtered = patch.filter(function (item) {\n return item.path == path;\n });\n if (filtered && filtered.length > 0) {\n patch.splice(patch.indexOf(filtered[0]), 1);\n }\n }\n\n function generatePatch() {\n var patch = JsonPatchUtil.generate(vm.Financial, vm.FinancialCopy, vm.observer, _patch);\n if (patchIsNotEmpty(patch)) {\n removePatchOperation(patch, \"/CreatedDate\");\n removePatchOperation(patch, \"/UpdatedDate\");\n }\n _patch = angular.copy(patch);\n return patch;\n }\n\n function init() {\n loadProfileModules();\n }\n\n function loadDocumentFlows() {\n var searchParams = { FinancialId: vm.Financial.Id, Status: null};\n FinancialService.listDocumentsFlows(searchParams)\n .then(function (response) {\n vm.listDocumentsFlows = response;\n fillDocumentsFlows();\n })\n .catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"service.load.error\"), ToastUtil.ToastType.ERROR);\n });\n }\n \n function listTypeExpenses() {\n DocumentFlowService.getTypeExpenses().then(function (response) {\n vm.typeExpenseList = angular.copy(response);\n })\n }\n\n function fillDocumentsFlows() {\n listTypeExpenses();\n if ( vm.Financial.Approvals && vm.Financial.Approvals.length > 0 ) {\n angular.forEach(vm.listDocumentsFlows, function (value) {\n value.Selected = false;\n });\n angular.forEach(vm.listDocumentsFlows, function (value) {\n vm.Financial.Approvals.forEach(function(doc) {\n if ( doc.DocumentFlow.Id == value.Id ) {\n value.Selected = true;\n vm.hidePending = true;\n }\n });\n });\n } else {\n angular.forEach(vm.listDocumentsFlows, function (doc) {\n doc.Selected = false;\n });\n }\n getTotal();\n }\n\n function getTotal() {\n vm.Total = 0;\n\n angular.forEach(vm.listDocumentsFlows, function (item) {\n if(item.Selected && item.SolicitationApproval && item.SolicitationApproval.Value)\n vm.Total += item.SolicitationApproval.Value;\n });\n };\n\n vm.DocumentFlowClicked = function(item) {\n var element = {\n Id: 0,\n Financial: {Id: vm.Financial.Id},\n DocumentFlow: {Id: item.Id}\n }\n if ( item.Selected ) {\n var approval = vm.Approvals.filter(function(a) {\n return a.DocumentFlow.Id == item.Id;\n });\n\n if ( approval.length > 0 ) {\n element.Id = approval[0].Id;\n }\n\n vm.Financial.Approvals.push(element);\n } else {\n var docs = vm.Financial.Approvals.filter(function(doc) {\n return doc.DocumentFlow.Id == element.DocumentFlow.Id;\n });\n \n var index = vm.Financial.Approvals.map(function(p){ return p.DocumentFlow.Id }).indexOf(element.DocumentFlow.Id);\n\n vm.Financial.Approvals.splice(index, 1);\n }\n getTotal(); \n }\n\n $scope.filterAttachs = function(item) {\n return item.DocumentFlowAttachments.length > 0;\n };\n\n $scope.filterHidePending = function(item) {\n if (vm.hidePending) {\n return item.Selected == true;\n } else {\n return true;\n }\n }\n\n vm.markDocumentFlow = function(id) {\n var contains = false;\n angular.forEach(vm.listDocumentsFlows, function (value) {\n if( id === value.DocumentFlow.Id) {\n contains = true;\n }\n });\n return contains;\n }\n\n function getFinancialToEdit() {\n FinancialService.getById(vm.financialId).then(setViewModel).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"document.flow.msg.load.error\"), ToastUtil.ToastType.ERROR);\n });\n }\n\n function initStates() {\n states = {\n Default: DefaultState,\n Editing: initEditingState()\n }\n }\n\n function initEditingState() {\n var editingState = angular.copy(vm.State);\n editingState.editing = true;\n return editingState;\n }\n\n function setViewModel(Financial) {\n vm.Financial.Id = Financial.Id;\n vm.Financial.CreatedBy = {Id: Financial.CreatedBy.Id, Name: Financial.CreatedBy.Name};\n vm.Financial.UpdatedBy = {Id: Financial.UpdatedBy.Id, Name: Financial.UpdatedBy.Name};\n vm.Financial.PaymentDate = Financial.PaymentDate;\n vm.Financial.Note = Financial.Note;\n vm.Financial.Remark = Financial.Remark;\n vm.Financial.Status = Financial.Status;\n if ( vm.Financial.Status == 3 || vm.Financial.Status == '3') {\n DefaultState.canEdit = vm.profile.CanApprove;\n states.Editing = vm.profile.CanApprove;\n states.Consulting = vm.profile.CanApprove;\n if ( vm.profile.CanEdit ) {\n vm.State = !vm.profile.CanApprove;\n } else {\n vm.State = true;\n }\n } else {\n states.Editing = vm.profile.CanEdit;\n states.Consulting = vm.profile.CanConsult;\n vm.State = !states.Editing && states.Consulting;\n }\n\n if ( Financial.Approvals.length > 0) {\n vm.Approvals = [];\n vm.Financial.Approvals = [];\n vm.Approvals = angular.copy(Financial.Approvals);\n Financial.Approvals.forEach(function(element) {\n vm.Financial.Approvals.push({\n Id: element.Id, \n Financial: {Id: angular.copy(element.Financial.Id)}, \n DocumentFlow: {Id: angular.copy(element.DocumentFlow.Id)}\n })\n })\n }\n vm.Attachments = Financial.Attachments;\n vm.Financial.AttachmentsPresentacion = Financial.AttachmentsPresentacion;\n\n // A data está sempre vindo no formato PT-BR\n var createdDate = moment(Financial.CreatedDate, 'YYYY/MM/DD');\n var updatedDate = moment(Financial.UpdatedDate, 'YYYY/MM/DD');\n var paymentDate = moment(Financial.PaymentDate, 'YYYY/MM/DD');\n vm.Financial.CreatedDate = createdDate.toDate();\n vm.Financial.UpdatedDate = updatedDate.toDate();\n vm.Financial.PaymentDate = paymentDate.toDate();\n vm.Financial.Attachments = Financial.Attachments;\n \n loadDocumentFlows();\n\n vm.FinancialCopy = angular.copy(vm.Financial);\n vm.observer = jsonpatch.observe(vm.Financial);\n\n }\n\n vm.viewPresentation = function () {\n if(vm.Financial.Id && vm.Financial.Id > 0 && vm.Financial.AttachmentsPresentacion !== undefined && vm.Financial.AttachmentsPresentacion !== null && vm.Financial.AttachmentsPresentacion.length > 0) {\n $state.go('financial-doc', {\n Id: vm.Financial.Id\n });\n }\n }\n\n vm.downloadFile = function(file) {\n FileService.download(file).then(function (response) {\n var newFIle = new Blob([response], {\n });\n\n var fileURL = URL.createObjectURL(newFIle);\n\n var a = $document[0].createElement(\"a\");\n $document[0].body.appendChild(a);\n a.style = \"display: none\";\n a.href = fileURL;\n a.download = file.FileName;\n a.click();\n }).catch(function () {\n });\n }\n\n function loadProfileModules() {\n var profileModule = {};\n\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.moduleFinancial;\n\n DefaultService.loadModules(profileModule)\n .then(\n function (response) {\n vm.profile = angular.copy(response);\n DefaultState.canConsult = vm.profile.CanConsult;\n DefaultState.canEdit = vm.profile.CanEdit;\n if (vm.financialId) {\n validateEditPermission();\n } else {\n validateAddPermission();\n }\n })\n .catch(\n function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n });\n }\n\n function validateEditPermission() {\n vm.disableButton = !vm.profile.CanEdit;\n if (vm.profile.CanEdit || vm.profile.CanConsult) {\n getFinancialToEdit();\n } else {\n $state.go('not-authorized', {}, {});\n }\n }\n\n function validateAddPermission() {\n vm.disableButton = !vm.profile.CanAdd;\n if (!vm.profile.CanAdd) {\n $state.go('not-authorized', {}, {});\n } else {\n vm.State = false;\n loadDocumentFlows();\n }\n }\n\n initStates();\n init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('FinancialDocController', FinancialDocController);\n\n function FinancialDocController($stateParams, $state, $translate, $scope, $log, $document, $filter, ToastUtil, ConfigurationService, FinancialService) {\n\n var vm = this;\n\n vm.financialId = $stateParams.Id;\n\n vm.EDirection = {\n PREVIOUS: 0,\n NEXT: 1\n }\n\n vm.financial = {\n AttachmentsPresentacion: []\n }\n\n var selectedPosition = 0;\n\n var mozilaPdfApi = \"http://mozilla.github.io/pdf.js/web/viewer.html?file=\";\n\n vm.goToFinancial = function() {\n $state.go('financial-list', {});\n }\n\n vm.edit = function () {\n FinancialService.editFinancial(vm.financial.Id, vm);\n };\n\n function openDocument(attachment) {\n var paths = attachment.split(\"\\\\\");\n var url = ConfigurationService.getServiceHost() + \"/fileupload/\" + paths[(paths.length-1)];\n $document[0].getElementById(\"containerPdfObj\").data = url;\n $document[0].getElementById(\"containerPdf\").src = mozilaPdfApi + url;\n\n }\n\n vm.changeDocument = function(direction){\n if(direction == vm.EDirection.PREVIOUS){\n selectedPosition = (selectedPosition > 0) ? (selectedPosition-1) : selectedPosition;\n }else {\n selectedPosition = (selectedPosition +1);\n\n }\n openDocument(vm.financial.AttachmentsPresentacion[selectedPosition]);\n\n }\n\n vm.isPreviousDisabled = function(){\n var isDisabled = false;\n\n if(selectedPosition == 0 ){\n isDisabled = true;\n }\n\n return isDisabled;\n }\n\n vm.isNextDisabled = function(){\n var isDisabled = false;\n\n if(selectedPosition == (vm.financial.AttachmentsPresentacion.length-1) ){\n isDisabled = true;\n }\n\n return isDisabled;\n }\n\n\n vm.fullScreen = function (elem) {\n\n var element = $document[0].getElementById(elem);\n\n if (angular.isDefined(element.mozRequestFullScreen)) {\n element.mozRequestFullScreen();\n } else if (angular.isDefined(element.webkitRequestFullscreen)) {\n element.webkitRequestFullscreen();\n } else if (angular.isDefined(element.msRequestFullscreen)) {\n element.msRequestFullscreen();\n } else {\n ToastUtil.showToastMessage($translate.instant('fullscreen.error'), ToastUtil.ToastType.ERROR);\n }\n }\n\n vm.exitFullScreen = function () {\n\n if ($document[0].mozCancelFullScreen) {\n $document[0].mozCancelFullScreen();\n } else if ($document[0].webkitExitFullscreen) {\n $document[0].webkitExitFullscreen();\n } else if($document[0].msExitFullscreen){\n $document[0].msExitFullscreen();\n }\n }\n\n function getFinancial(Id) {\n FinancialService.getById(Id).then(function (response) {\n vm.financial = angular.copy(response);\n\n openDocument(vm.financial.AttachmentsPresentacion[selectedPosition]);\n\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"error.financial.search\"), ToastUtil.ToastType.ERROR);\n });\n }\n\n function init() {\n\n FinancialService.loadProfileModules(vm, $scope)\n .then(function () {\n getFinancial(vm.financialId);\n })\n .catch(function (error) {\n var msg = error.data && error.data.Message ? error.data.Message : $filter('translate')('error.financial.search');\n ToastUtil.showToastMessage($translate.instant(msg), ToastUtil.ToastType.ERROR);\n }); \n }\n\n init();\n }\n})();\n\n(function() {\n\t'use strict';\n\tangular\n\t.module('aqmsFrontend')\n\t.factory('FileService', FileService);\n\n\t/** @ngInject */\n\tfunction FileService($window, $injector, $q, ConfigurationService) {\n\t\treturn {\n download: function (file) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/file/download', {params: file, responseType: 'arraybuffer'})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n }\n , function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n };\n\t}\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(FacaTranslate);\n\n /** @ngInject */\n function FacaTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'faca.no.effect.found': 'None effect found.',\n 'title.faca': 'FA/CA - Failure Analysis and Corrective Action',\n 'title.newFaca': 'New FA/CA',\n 'title.editFaca': 'FA/CA Editing',\n 'title.faca.problem.new': 'New Problem',\n 'title.faca.problem.edit': 'Problem Editing',\n 'title.effect': 'Effect',\n 'title.containment': 'Containment Plan',\n 'title.containment.details': \"Containment Plan - Details\",\n 'title.newContainment': 'New Containment Plan',\n 'title.editContainment': 'Edit Containment Plan',\n 'title.newControlPlan': 'New Control Plan',\n 'title.editControlPlan': 'Edit Control Plan',\n 'title.rootcause': 'Root Cause Analysis',\n 'title.risk': 'Risk',\n 'title.action.plan': 'Action Plan',\n 'title.problem': 'Problem',\n 'title.action': 'Action',\n 'title.dri': 'DRI',\n 'title.dueDate': 'Due Date',\n 'title.status': 'Status',\n 'title.improvement': 'Improvement Plan',\n 'title.before': 'Before',\n 'title.after': 'After',\n 'title.whys': '5 Whys',\n 'title.ishikawa': 'Ishikawa',\n 'title.correctiveAction': 'Corrective Action',\n 'title.correctiveActionNumber': 'Corrective Action {{ number }}',\n 'title.controlPlan': 'Control Plan',\n 'title.lessonLearn': 'Lesson Learn',\n 'title.newLessonLearn': 'New Lesson Learn',\n 'title.editLessonLearn': 'Edit Lesson Learn',\n 'placeholder.lessonLearn': 'Write a lesson learn...',\n 'subtitle.causeConclusion': 'Cause Conclusion',\n 'subtitle.man': 'Man',\n 'subtitle.method': 'Method',\n 'subtitle.machine': 'Machine',\n 'subtitle.measure': 'Measure',\n 'subtitle.material': 'Material',\n 'subtitle.environment': 'Environment',\n 'subtitle.what': 'What',\n 'subtitle.where': 'Where',\n 'subtitle.why': 'Why',\n 'subtitle.how': 'How',\n 'subtitle.who_dri': 'Who (DRI)',\n 'subtitle.who': 'Who',\n 'subtitle.when': 'When',\n 'subtitle.problem': 'Problem',\n 'editFaca.header.faca': 'FA/CA: ',\n 'editFaca.header.problem': 'Problem / Issue: ',\n 'label.lotRejectedBlocked': 'Lot Rejected / Blocked',\n 'label.reworkReinspection': 'Rework / Reinspection',\n 'button.save': 'Save',\n 'button.export': 'Export',\n 'button.add': 'Add',\n 'label.addFaca': 'New FA/CA',\n 'button.addContainmentPlan': 'Add Containment Plan',\n 'button.addControlPlan': 'Add Control Plan',\n 'button.addLessonLearn': 'Add Lesson Learn',\n 'button.detailContainmentPlan': 'Detail',\n 'addFaca': 'Add FA/CA',\n 'notFoundFaca': 'FA/CA not found.',\n 'problem.identification': 'Problem Identification',\n 'label.id': 'Id',\n 'label.level': 'Level',\n 'label.date': 'Date',\n 'label.week': 'Week',\n 'placeholder.search.faca': 'Search FA/CA by title or id',\n 'label.add.problem_issue': \"Add Problem / Issue\",\n 'label.notfound.problem_issue': \"No Problem / Issue found.\",\n 'label.defects': \"Defects\",\n 'label.production': \"Production\",\n 'label.dppm': \"DPPM\",\n 'placeholder.problem.title': \"Problem title\",\n 'title.add.problem': \"Add Problem / Issue\",\n 'title.edit.problem': \"Edit Problem / Issue\",\n 'validation.facaStartDate.required': 'Start Date is required.',\n 'label.cause': \"Cause\",\n 'label.description': \"Description\",\n 'label.serevity': \"Severity\",\n 'label.probality': \"Probability of Occurance\",\n 'label.detectability': \"Detectability\",\n 'label.score': \"Score\",\n 'label.vitalfew': \"Vital Few\",\n 'error': \"An error occoured when trying to load a FA/CA.\",\n 'problem.validation.title.required': \"The title is required.\",\n 'problem.validation.defects.required': \"The Defect information is required.\",\n 'problem.validation.production.required': \"The Production information are required.\",\n 'error.effects': \"An error occoured when trying to load a Effects.\",\n 'faca.saved.success': \"FA/CA was successfully saved.\",\n 'faca.saved.fail': 'An error accour when trying to save a new FA/CA, please contact your administrator.',\n 'faca.deleted.success': \"FA/CA was successfully deleted.\",\n 'faca.deleted.fail': 'An error accour when trying to delete a FA/CA, please contact your administrator.',\n 'sucess.level': \"Level successfully changed.\",\n 'error.level': \"There was an error while trying to change the level.\",\n 'label.search': \"Search\",\n 'option.onGoing': \"On Going\",\n 'option.late': \"Late\",\n 'option.closed': \"Closed\",\n 'validation.what.required': \"Field 'What' is required.\",\n 'validation.when.required': \"Field 'When' is required.\",\n 'faca.placeholder.title': 'Write the faca title...',\n 'risk.not.found': \"No Risk Found.\",\n 'corrective.not.found': \"No Corrective Action Found.\",\n 'controlPlan.not.found': \"No Control Plan Found.\",\n 'controlPlan.required.msg.action': \"Action field is required.\",\n 'controlPlan.required.msg.dri': \"DRI field is required.\",\n 'controlPlan.required.msg.dueDate': \"Due Date field is required.\",\n 'controlPlan.required.msg.status': \"Status field is required.\",\n 'lesson.not.found': \"No Lesson Found.\",\n 'faca.problem.item.analyze': 'Analyze Problem',\n 'faca.issue.saved.success': \"FA/CA issue was successfully saved.\",\n 'faca.issue.saved.fail': 'An error accour when trying to save a issue, please contact your administrator.',\n 'faca.issue.deleted.success': \"FA/CA issue was successfully deleted.\",\n 'faca.issue.deleted.fail': 'An error accour when trying to delete a issue, please contact your administrator.',\n 'actionplan.not.found': \"No Action Plan Found.\",\n 'duplicated.item.warn': \"Item ($description) already inserted.\",\n 'remove.ishikawa.warn': \"When you delete the item ($description), the risks associated with it will also be removed. Do you want to remove it?\",\n 'validation.lesson': \"Field 'Lesson' is required.\",\n 'header.problem.issue': 'Problem / Issue',\n 'label.notfound.containment.plan': \"No Containment Plan found.\",\n 'hint.containment.plan.what': \"Objective or goal.\",\n 'hint.containment.plan.where': \"Location or department.\",\n 'hint.containment.plan.why': \"Reason or benefit.\",\n 'hint.containment.plan.how': \"Activities or process.\",\n 'hint.containment.plan.who': \"Responsible or team.\",\n 'hint.containment.plan.when': \"Planned completion date.\",\n 'save.faca.eror.msg': \"FA/CA could not be saved. Try again later.\",\n 'level.a': 'A - Best Practice',\n 'level.b': 'B - Complete Satisfactory',\n 'level.c': 'C - Complete Under Avaluation',\n 'level.d': 'D - On Going',\n 'containment.plan.label.view.card': 'View card',\n 'containment.plan.label.view.detail': 'View detail',\n 'faca.information.add.problem': 'Enabled only when FA/CA Problem Identification is saved.',\n 'faca.empty.export': 'FACA is empty, save to export.'\n });\n\n\n $translateProvider.translations('pt', {\n 'faca.no.effect.found': 'Nenhum efeito encontrado.',\n 'title.faca': 'FA/CA - Análise de Falhas e Ação Corretiva',\n 'title.newFaca': 'Nova FA/CA',\n 'title.editFaca': 'Edição de FA/CA',\n 'title.faca.problem.new': 'Novo Problema',\n 'title.faca.problem.edit': 'Edição de Problema',\n 'title.effect': 'Efeito',\n 'title.containment': 'Plano de Contenção',\n 'title.containment.details': \"Plano de Contenção - Detalhes\",\n 'title.newContainment': 'Novo Plano de Contenção',\n 'title.editContainment': 'Editar Plano de Contenção',\n 'title.newControlPlan': 'Novo Plano de Controle',\n 'title.editControlPlan': 'Editar Plano de Controle',\n 'title.rootcause': 'Análise da Causa Raiz',\n 'title.risk': 'Risco',\n 'title.action.plan': 'Plano de Ação',\n 'title.problem': 'Problema',\n 'title.action': 'Ação',\n 'title.dri': 'DRI',\n 'title.dueDate': 'Prazo',\n 'title.status': 'Status',\n 'title.improvement': 'Plano de Melhoria',\n 'title.before': 'Antes',\n 'title.after': 'Depois',\n 'title.whys': '5 Porquês',\n 'title.ishikawa': 'Ishikawa',\n 'title.correctiveAction': 'Ação de Correção',\n 'title.correctiveActionNumber': 'Ação de Correção {{ number }}',\n 'title.controlPlan': 'Plano de Controle',\n 'title.lessonLearn': 'Lição Aprendida',\n 'title.newLessonLearn': 'Nova Lição Aprendida',\n 'title.editLessonLearn': 'Editar Lição Aprendida',\n 'placeholder.lessonLearn': 'Escreva uma lição aprendida...',\n 'subtitle.causeConclusion': 'Conclusão da Causa',\n 'subtitle.man': 'Mão de Obra',\n 'subtitle.method': 'Método',\n 'subtitle.machine': 'Máquina',\n 'subtitle.measure': 'Medida',\n 'subtitle.material': 'Material',\n 'subtitle.environment': 'Meio Ambiente',\n 'subtitle.what': 'O que',\n 'subtitle.where': 'Onde',\n 'subtitle.why': 'Por que',\n 'subtitle.how': 'Como',\n 'subtitle.who_dri': 'Quem (DRI)',\n 'subtitle.who': 'Quem',\n 'subtitle.when': 'Quando',\n 'subtitle.problem': 'Problema',\n 'editFaca.header.faca': 'FA/CA: ',\n 'editFaca.header.problem': 'Problema / Falha: ',\n 'label.lotRejectedBlocked': 'Lote Rejeitado / Bloqueado',\n 'label.reworkReinspection': 'Retrabalho / Reinspeção',\n 'button.save': 'Salvar',\n 'button.export': 'Exportar',\n 'button.add': 'Adicionar',\n 'label.addFaca': 'Nova FA/CA',\n 'button.addContainmentPlan': 'Adicionar Plano de Contenção',\n 'button.addControlPlan': 'Adicionar Plano de Controle',\n 'button.addLessonLearn': 'Adicionar Lição Aprendida',\n 'button.detailContainmentPlan': 'Detalhar',\n 'addFaca': 'Nova FA/CA',\n 'notFoundFaca': 'Nenhum FA/CA encontrado.',\n 'problem.identification': 'Identificação do problema',\n 'label.id': 'Id',\n 'label.level': 'Nível',\n 'label.date': 'Data',\n 'label.week': 'Semana',\n 'placeholder.search.faca': 'Pesquisar FA/CA por nome ou id',\n 'label.add.problem_issue': \"Adicionar Problema / Falha\",\n 'label.notfound.problem_issue': \"Nenhum Problema / Falha encontrado.\",\n 'label.defects': \"Defeitos\",\n 'label.production': \"Produção\",\n 'label.dppm': \"DPPM\",\n 'placeholder.problem.title': \"Título do problema\",\n 'title.add.problem': \"Adicionar problemas / Falha\",\n 'title.edit.problem': \"Editar Problemas / Falha\",\n 'validation.facaStartDate.required': 'Data de Início é obrigatória.',\n 'label.cause': \"Causa\",\n 'label.description': \"Descrição\",\n 'label.serevity': \"Severidade\",\n 'label.probality': \"Probabilidade de Ocorrência\",\n 'label.detectability': \"Detectabilidade\",\n 'label.score': \"Pontuação\",\n 'label.vitalfew': \"Vital Few\",\n 'error': 'Não foi possível carregar a lista de FA/CA, tente novamente ou contate um administrador.',\n 'error.effects': \"Não foi possível carregar a lista de Efeitos, tente novamente ou contate um administrador.\",\n 'faca.saved.success': \"FA/CA salvo com sucesso.\",\n 'faca.saved.fail': \"Ocorreu um erro ao cadastrar novo FA/CA, entre em contato com o administrador.\",\n 'faca.deleted.success': \"FA/CA excluído com sucesso.\",\n 'faca.deleted.fail': \"Ocorreu um erro ao excluir FA/CA, entre em contato com o administrador.\",\n 'sucess.level': \"Nível alterado com sucesso.\",\n 'error.level': \"Ocorreu um erro ao tentar alterar o nível.\",\n 'label.search': \"Buscar\",\n 'option.onGoing': \"Em Andamento\",\n 'option.late': \"Atrasado\",\n 'option.closed': \"Fechado\",\n 'validation.what.required': \"Campo 'O que' é obrigatório.\",\n 'validation.when.required': \"Campo 'Quando' é obrigatório.\",\n 'problem.validation.title.required': \"Título é obrigatório.\",\n 'problem.validation.defects.required': \"As informações de defeito são obrigatórias.\",\n 'problem.validation.production.required': \"As informações de produção são obrigatórias.\",\n 'faca.placeholder.title': 'Digite o título do FA/CA...',\n 'risk.not.found': \"Nenhum Risco Encontrado.\",\n 'faca.problem.item.analyze': 'Analisar Problema',\n 'faca.issue.saved.success': \"Problema do FA/CA foi salvo com sucesso.\",\n 'faca.issue.saved.fail': 'Ocorreu um erro ao salvar o problema, por favor contate seu administrator.',\n 'faca.issue.deleted.success': \"Problema do FA/CA foi apagado com sucesso.\",\n 'faca.issue.deleted.fail': 'Ocorreu um erro ao salvar o problema, por favor contate seu administrator.',\n 'actionplan.not.found': \"Nenhum Plano de Ação Foi Encontrado.\",\n 'lesson.not.found': \"Nenhuma Lição Foi Encontrada.\",\n 'corrective.not.found': \"Nenhuma Ação de Correção Encontrada.\",\n 'controlPlan.not.found': \"Nenhum Plano de Controle Encontrado.\",\n 'controlPlan.required.msg.action': \"O campo Ação é obrigatório.\",\n 'controlPlan.required.msg.dri': \"O campo DRI é obrigatório.\",\n 'controlPlan.required.msg.dueDate': \"O campo Prazo é obrigatório.\",\n 'controlPlan.required.msg.status': \"O campo Status é obrigatório.\",\n 'duplicated.item.warn': \"Item ($description) já inserido.\",\n 'remove.ishikawa.warn': \"Ao apagar o item ($description), os riscos associados a ele também serão removidos. Você deseja apagar o item?\",\n 'validation.lesson': \"Campo 'Lição' é obrigatório.\",\n 'header.problem.issue': 'Problema / Falha',\n 'label.notfound.containment.plan': \"Nenhum Plano de Contenção encontrado.\",\n 'hint.containment.plan.what': \"Objetivo ou meta.\",\n 'hint.containment.plan.where': \"Local ou departamento.\",\n 'hint.containment.plan.why': \"Motivo ou benefício.\",\n 'hint.containment.plan.how': \"Atividades ou processo.\",\n 'hint.containment.plan.who': \"Responsável ou equipe.\",\n 'hint.containment.plan.when': \"Data planejada para conclusão.\",\n 'save.faca.eror.msg': \"Não foi possível salvar o FA/CA. Tente novamente mais tarde.\",\n 'level.a': 'A - Melhor Prática',\n 'level.b': 'B - Completo Satisfatório',\n 'level.c': 'C - Completar Sob a Avaliação',\n 'level.d': 'D - Em Andamento',\n 'containment.plan.label.view.card': 'Ver cartões',\n 'containment.plan.label.view.detail': 'Ver detalhes',\n 'faca.information.add.problem': 'Habilitado apenas quando o Problema Identification do FA/CA está salvo.',\n 'faca.empty.export': 'Faca está vazio, salve para exportar.'\n });\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('FacaService', FacaService);\n\n /** @ngInject */\n function FacaService($window, $injector, $q, ConfigurationService) {\n\n var domain = \"/faca\";\n var domainIshikawa = \"/ishikawa\"\n\n return {\n\n exportReportFACA: function (Id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + domain + '/export/' + Id, {\n responseType: 'arraybuffer'\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n save: function (faca) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + domain, faca, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n saveIssue: function (issue, facaId) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + domain + \"/saveIssue/\" + facaId, issue, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n deleteIssue: function (issue) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + domain + \"/issue/\" + issue.Id, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n });\n\n return deferred.promise;\n },\n listAll: function (filtro) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + domain + '/list/', {\n params: filtro\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n changeLevel: function (itemListDTO) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + domain + '/changeLevel', itemListDTO, { })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n delete: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + domain + '/' + id, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n getFacaById: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + domain + '/list/byId/' + id, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n\n listAllIshikawaType: function () {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + domainIshikawa + '/list/ishikawatype', {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getIssueById: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + domain + '/list/issue/byId/' + id, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n\n }\n\n };\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(FacaRouter);\n\n /** @ngInject */\n function FacaRouter($stateProvider) {\n\n\n $stateProvider.state('faca-list', {\n url: '/faca',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/faca/faca-list.html',\n controller: 'FacaListController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'label.faca'\n },\n\n authorize: true\n });\n\n $stateProvider.state('faca-edit-problem', {\n params: {\n issue: null,\n facaTitle: null,\n menuName: 'label.faca'\n },\n url: '/faca/edit/:facaId/problem/edit/:problemId',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/faca/problem/problem-edit.html',\n controller: 'EditProblemController',\n controllerAs: 'ctrl'\n }\n },\n authorize: true\n });\n\n $stateProvider.state('faca-edit', {\n url: '/faca/edit/:Id',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/faca/faca-edit.html',\n controller: 'FacaEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'label.faca'\n },\n authorize: true\n });\n\n $stateProvider.state('faca-create', {\n url: '/faca/create',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/faca/faca-edit.html',\n controller: 'FacaEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'label.faca'\n },\n authorize: true\n });\n\n }\n})();\n\n/**\n * Created by FPFTech on 09/11/2016.\n */\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('FacaListController', FacaListController);\n\n function FacaListController($log, $window, $location, $anchorScroll, FacaService,\n $translate, $state, ToastUtil, $uibModal, moment, AuthService, $scope, ModelService, DefaultService, $document) {\n\n var vm = this;\n\n vm.itensPerPageList = [\n {name: '5', value: 5, before: 0, after: 6}, \n {name: '10', value: 10, before: 5, after: 11}, \n {name: '20', value: 20, before: 10, after: 21}, \n {name: '30', value: 30, before: 20, after: 31}, \n {name: '40', value: 40, before: 30, after: 41}, \n {name: '50', value: 50, before: 40, after: 51}]\n\n vm.itemPerPage = vm.itensPerPageList[0];\n\n var profilePermission = {\n CanAdd: false,\n CanEdit: false,\n CanDelete: false,\n CanView: false,\n CanApprove: false,\n CanExport: false\n }\n\n vm.exporting = false;\n vm.levelList = [{\n id: 'A',\n name: 'level.a'\n }, {\n id: 'B',\n name: 'level.b'\n }, {\n id: 'C',\n name: 'level.c'\n }, {\n id: 'D',\n name: 'level.d'\n }];\n vm.facaList = [];\n vm.facaListFilter = [];\n vm.totalLista = 0;\n\n vm.searchParam = {\n IdOrTitle: null,\n Page: 1,\n MaxPerPage: vm.itemPerPage.value\n };\n\n vm.shouldShow = function (item) {\n if(vm.totalLista > 0 && item != undefined) {\n return vm.totalLista >= item.value || (vm.totalLista < item.after && vm.totalLista > item.before);\n }\n return false;\n }\n \n vm.changeItemsPerPage = function() {\n if ( vm.itemPerPage == null ) {\n vm.itemPerPage = vm.itensPerPageList[0];\n }\n vm.searchParam.Page = 1;\n vm.searchParam.MaxPerPage = vm.itemPerPage.value;\n vm.search();\n }\n\n function init() {\n loadProfileModules();\n }\n\n vm.isRemoveDisabled = function (item) {\n return ((item.Level == 'A' || item.Level == 'B') && !profilePermission.CanApprove);\n }\n\n vm.edit = function (id) {\n if (profilePermission.CanEdit) {\n $state.go('faca-edit', {\n Id: id\n });\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n };\n\n vm.export = function (id) {\n if (profilePermission.CanExport) {\n if (!vm.exporting) {\n vm.exporting = true;\n\n FacaService.exportReportFACA(id).then(function (response) {\n var newFile = new Blob([response], {\n type: 'application/application/vnd.openxmlformats-officedocument.wordprocessingml.document'\n });\n var fileURL = URL.createObjectURL(newFile);\n var date = moment().format(\"DD_MM_YYYY_HH_mm_ss\");\n var a = $document[0].createElement(\"a\");\n $document[0].body.appendChild(a);\n a.style = \"display: none\";\n a.href = fileURL;\n a.download = \"ReportFACA_\" + AuthService.getBusinessName() + \"_\" + date + \".docx\";\n\n a.click();\n vm.exporting = false;\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"service.load.error\"), ToastUtil.ToastType.ERROR);\n vm.exporting = false;\n });\n }\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n };\n\n vm.delete = function (id) {\n if (profilePermission.CanDelete) {\n FacaService.delete(id).then(\n function () {\n $state.go($state.current, {}, {\n reload: true\n });\n ToastUtil.showToastMessage($translate.instant(\"faca.deleted.success\"), ToastUtil.ToastType.SUCCESS);\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"faca.deleted.fail\"), ToastUtil.ToastType.ERROR);\n });\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n };\n\n vm.changeFacaLevel = function (item) {\n FacaService.changeLevel(item).then(\n function () {\n ToastUtil.showToastMessage($translate.instant(\"sucess.level\"), ToastUtil.ToastType.SUCCESS);\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n });\n };\n\n vm.filtrar = function (keyEvent) {\n if (keyEvent.which === 13)\n vm.search();\n }\n\n vm.isApprover = function () {\n return profilePermission.CanApprove;\n };\n\n vm.clearFields = function () {\n vm.searchParam.IdOrTitle = undefined;\n vm.searchParam.Project = undefined;\n vm.searchParam.Client = undefined;\n }\n\n vm.searchFaca = function () {\n vm.itemPerPage = vm.itensPerPageList[0];\n vm.searchParam.Page = 1;\n vm.searchParam.MaxPerPage = vm.itemPerPage.value;\n vm.search()\n }\n\n vm.search = function () {\n vm.searchParam.ClientId = undefined;\n vm.searchParam.ProjectId = undefined;\n if (vm.searchParam.MaxPerPage == undefined ) {\n vm.searchParam.MaxPerPage = 5;\n }\n if (vm.searchParam.Client) {\n vm.searchParam.ClientId = vm.searchParam.Client.Id;\n }\n if (vm.searchParam.Project) {\n vm.searchParam.ProjectId = vm.searchParam.Project.Id;\n }\n\n vm.searchParam.BusinessId = AuthService.getBusinessId();\n\n FacaService.listAll(vm.searchParam).then(\n function (response) {\n vm.facaListFilter = response.resultList;\n vm.totalLista = response.total;\n }).catch(function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"error\"), ToastUtil.ToastType.ERROR);\n }\n });\n };\n\n function loadProfileModules() {\n var profileModule = {};\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.moduleFaca;\n\n DefaultService.loadModules(profileModule).then(function (response) {\n profilePermission = angular.copy(response);\n\n if (profilePermission.CanView) {\n vm.search();\n } else {\n $state.go('not-authorized', {});\n }\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n });\n }\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('FacaEditController', FacaEditController);\n\n function FacaEditController($window, $location, $anchorScroll, FacaService, $log, $translate, $scope,\n $state, DialogController, ListUtil, $stateParams, moment, DefaultService, ToastUtil, AuthService, $document) {\n\n var vm = this;\n\n vm.faca = {};\n vm.faca.Level = 'D';\n vm.idToEdit = -1;\n vm.problems = [];\n vm.problem = {};\n vm.errorMsgArray = [];\n vm.issueBeforeSave;\n\n var profilePermission = {\n CanAdd: false,\n CanEdit: false,\n CanDelete: false,\n CanView: false,\n CanApprove: false,\n CanExport: false\n }\n\n vm.levelList = [{\n id: 'A',\n name: 'level.a'\n }, {\n id: 'B',\n name: 'level.b'\n }, {\n id: 'C',\n name: 'level.c'\n }, {\n id: 'D',\n name: 'level.d'\n }];\n\n function init() {\n loadProfileModules();\n }\n\n function loadProfileModules() {\n var profileModule = {};\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.moduleFaca;\n\n DefaultService.loadModules(profileModule).then(function (response) {\n profilePermission = angular.copy(response);\n\n vm.idToEdit = $stateParams[\"Id\"];\n vm.faca.Level = vm.levelList[3].id;\n vm.setWeek();\n\n if (vm.idToEdit != -1 && vm.idToEdit != undefined) {\n\n if (!profilePermission.CanEdit) {\n $state.go('not-authorized', {});\n }\n // faca edit.\n FacaService.getFacaById(vm.idToEdit).then(function (response) {\n vm.faca = angular.copy(response);\n var startDt = getDateFromString(vm.faca.StartDate, 'DD/MM/YYYY');\n vm.faca.Date = new Date(startDt.year(), startDt.month(), startDt.date());\n vm.problems = angular.copy(vm.faca.Issues);\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n });\n } else {\n if (!profilePermission.CanAdd) {\n $state.go('not-authorized', {});\n }\n vm.faca.CreatedBy = getCurrentUser();\n }\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n });\n }\n\n /**\n * returns logged user.\n * @returns {{Name: *, Id: *}}\n */\n function getCurrentUser() {\n var createdByDri = {\n Name: $window.localStorage.aliasAqms,\n Id: $window.localStorage.userID\n };\n\n return createdByDri;\n }\n\n vm.isAllFieldDisabled = function () {\n return ((vm.faca.Level == 'A' || vm.faca.Level == 'B') && !profilePermission.CanApprove);\n };\n\n vm.isApprover = function () {\n return profilePermission.CanApprove\n }\n\n /**\n * Create a Date Object from String.\n * @param dtString\n * @param formatter\n * @returns {*}\n */\n function getDateFromString(dtString, formatter) {\n return moment(dtString, formatter);\n }\n\n vm.editProblem = function (problem) {\n DialogController.show('title.edit.problem', '', vm, problem);\n };\n\n vm.editProblemIssue = function (problem) {\n vm.actionSave(false);\n vm.problem = problem;\n };\n\n vm.goBack = function () {\n $state.go('faca-list');\n };\n\n vm.save = function () {\n vm.actionSave(true);\n };\n\n vm.validateAddProblem = function () {\n return (vm.faca == null || vm.faca.Id == null);\n };\n\n vm.actionSave = function (toListPage) {\n vm.faca.StartDate = moment(vm.faca.Date).format('DD/MM/YYYY');\n vm.faca.Issues = angular.copy(vm.problems);\n vm.faca.Business = {};\n vm.faca.Business.Id = AuthService.getBusinessId();\n FacaService.save(vm.faca).then(function (response) {\n vm.faca.Id = response;\n\n if (toListPage) {\n ToastUtil.showToastMessage($translate.instant(\"faca.saved.success\"), ToastUtil.ToastType.SUCCESS);\n\n $state.go('faca-edit', {\n Id: vm.faca.Id\n });\n } else {\n // Put facaTitle on cache.\n $window.localStorage.facaTitle = vm.faca.Title;\n\n $state.go('faca-edit-problem', {\n issue: vm.problem,\n facaTitle: vm.faca.Title,\n facaId: response,\n problemId: vm.problem.Id\n });\n }\n\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"faca.saved.fail\"), ToastUtil.ToastType.ERROR);\n });\n }\n\n vm.setWeek = function () {\n vm.faca.Week = moment(vm.faca.Date).isoWeek();\n };\n\n vm.export = function (id) {\n if (profilePermission.CanExport) {\n if (angular.isUndefined(id)) {\n ToastUtil.showToastMessage($translate.instant(\"faca.empty.export\"), ToastUtil.ToastType.WARN);\n } else {\n if (!vm.exporting) {\n vm.exporting = true;\n\n FacaService.exportReportFACA(id).then(function (response) {\n var date = moment().format(\"DD_MM_YYYY_HH_mm_ss\");\n var newFile = new Blob([response], {\n type: 'application/application/vnd.openxmlformats-officedocument.wordprocessingml.document'\n });\n var fileURL = URL.createObjectURL(newFile);\n var a = $document[0].createElement(\"a\");\n $document[0].body.appendChild(a);\n a.style = \"display: none\";\n a.href = fileURL;\n a.download = \"ReportFACA_\" + AuthService.getBusinessName() + \"_\" + date + \".docx\";\n a.click();\n\n vm.exporting = false;\n\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"service.load.error\"), ToastUtil.ToastType.ERROR);\n vm.exporting = false;\n });\n }\n }\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n };\n\n vm.openAddProblem = function () {\n DialogController.show('title.add.problem', '', vm);\n };\n\n vm.addProblem = function (issue) {\n if (vm.faca.Id > 0) {\n //If faca is already persisted, update in Database.\n vm.saveIssue(issue, vm.faca.Id);\n } else {\n\n if (issue.Index == undefined || issue.Index == \"\") {\n issue.Index = new Date().getMilliseconds();\n }\n\n angular.forEach(vm.problems, function (value, key) {\n if (value.Index == issue.Index) {\n vm.problems.splice(key, 1)\n }\n });\n\n vm.problems.push(issue);\n }\n };\n\n vm.saveIssue = function (issue, facaId) {\n vm.issueBeforeSave = issue;\n FacaService.saveIssue(issue, facaId).then(function (response) {\n if (vm.issueBeforeSave.Id == response.Id) {\n\n angular.forEach(vm.problems, function (value, key) {\n if (value.Id == vm.issueBeforeSave.Id) {\n vm.problems.splice(key, 1)\n }\n });\n }\n vm.problems.push(angular.copy(response));\n\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"faca.issue.saved.fail\"), ToastUtil.ToastType.ERROR);\n });\n }\n\n vm.removeProblem = function (problem) {\n if (profilePermission.CanDelete) {\n if (vm.faca.Id > 0) {\n // If faca is already persisted, update in Database.\n FacaService.deleteIssue(problem).then(\n function () {\n ListUtil.removeItem(vm.problems, problem);\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"faca.issue.deleted.fail\"), ToastUtil.ToastType.ERROR);\n });\n } else {\n ListUtil.removeItem(vm.problems, problem);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n };\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('RequestTypeService', RequestTypeService);\n\n var REQUEST_TYPE_BASE = '/request-type/';\n /** @ngInject */\n function RequestTypeService($injector, $q, ConfigurationService) {\n return {\n listRequestTypes: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + REQUEST_TYPE_BASE + \"list\", {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getById: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + REQUEST_TYPE_BASE + 'byId/' + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n save: function (vendor) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + REQUEST_TYPE_BASE, vendor, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n delete: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + REQUEST_TYPE_BASE + \"/\" + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n };\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(DocumentFlowTranslate);\n\n /** @ngInject */\n function DocumentFlowTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'document.flow.title': 'Approval',\n 'label.poList.placeholder': 'Insert PO numbers',\n 'document.flow.label.document': 'Document',\n 'document.flow.label.target.individual': 'Individual inclusion',\n 'document.flow.label.target.route': 'Inclusion by route of approval',\n 'document.flow.label.deadline': 'Deadline',\n 'document.flow.label.deadline.purchase': 'Purchase Deadline',\n 'document.flow.label.deadline.start': 'Deadline Start Date',\n 'document.flow.label.deadline.due': 'Deadline Due Date',\n 'document.flow.label.new': 'New Approval',\n 'document.flow.status.search.placeholder': 'Search by status',\n 'document.flow.label.ongoing': 'On going',\n 'document.flow.label.pending.approval': 'Pending approval',\n 'document.flow.label.approved': 'Approved',\n 'document.flow.label.status.canceled': 'Canceled',\n 'document.flow.label.status.rejected': 'Rejected',\n 'document.flow.panel.identification': 'Approval identification',\n 'document.flow.label.subject': 'Subject',\n 'document.flow.label.IdOrSubject': 'Subject or Id',\n 'document.flow.label.solicitation': 'Solicitation',\n 'document.flow.label.documents': 'Documents',\n 'document.flow.label.target': 'Target',\n 'document.flow.label.edit': 'Approval Editing',\n 'document.flow.label.futureApprovals': 'Future Approvals',\n 'document.flow.msg.save.success': 'Approval successfully saved.',\n 'document.flow.msg.save.error': 'An error occurred when try to save document flow.',\n 'document.flow.msg.load.error': 'An error occurred while trying to load the document flow.',\n 'document.flow.label.approver': 'Approver',\n 'document.flow.label.consent': 'Consent',\n 'document.flow.label.notification': 'Notification',\n 'document.flow.label.request.type': 'Type',\n 'document.flow.label.created.date': 'Created Date',\n 'document.flow.label.request.by': 'Request By',\n 'document.flow.label.pending.by': 'Pending By',\n 'document.flow.placeholder.visibility': 'Select visibility',\n 'document.flow.label.visibility': 'Visibility',\n 'document.flow.label.confidential': 'Confidential',\n 'document.flow.label.public': 'Public',\n 'document.flow.label.done': 'Done',\n 'document.flow.msg.error.min.paymentdate': 'Payment Date can not be less than Deadline',\n 'document.flow.msg.error.min.deadline': 'Deadline can not be less than Creation date',\n 'document.flow.label.button.cancel': 'Cancel Approval',\n 'document.flow.label.button.reject': 'Reject',\n 'document.flow.label.button.return': 'Return',\n 'document.flow.label.button.approver': 'Approve',\n 'document.flow.cancel.title': 'Cancel Approval',\n 'document.flow.cancel.sub.title': 'Describe any comments about the cancellation of the request.',\n 'document.flow.reject.title': 'Rejection Remark',\n 'document.flow.return.title': 'Return Remark',\n 'document.flow.return.sub.title': 'Describe any comments about the request return.',\n 'document.flow.reject.sub.title': 'Describe any comments about the rejection of the request.',\n 'document.flow.approved.title': 'Approval Remark',\n 'document.flow.approved.sub.title': 'Describe any comments about the approval of the request.',\n 'document.flow.export.status.validation.msg': 'While the status of the document is on going. You can not export document.',\n 'document.flow.edit.status.validation.msg': 'Only the requesting, approving and/or consenting users can edit the document.',\n 'document.flow.export.validation.msg': 'Only the requesting, approving and/or consenting users can export the document.',\n 'document.flow.delete.error.msg': 'An error occoured when trying to delete Document, please contact your administrator.',\n 'document.flow.delete.success.msg': 'Document deleted with success.',\n 'placeholder.flow.search.IdOrTitle' : 'Search by subject or Id',\n 'placeholder.flow.search.requestby' : 'Search by request',\n 'placeholder.flow.search.pendingby' : 'Search by pending',\n 'document.flow.report.name': 'Approval_report_',\n 'document.flow.approval.reservation.message.confirm': 'The approver #approve is absent in the period #startdate to #enddate. Your reservation is #reservation.',\n 'document.flow.confirmation.title': 'Confirmation',\n 'document.flow.placeholder.search.category': 'Search by Category',\n 'placeholder.category': 'Select a Category',\n 'checklist.label.solicitation.template': 'Template',\n 'solicitation.label.template.cash': 'F-DP CON 0002-01 rev. C – Cash',\n 'solicitation.label.template.refund': 'F-DP CON 0002-02 rev. C - Refund Expenses',\n 'solicitation.label.template.mileage': 'F-DP CON 0002-03 rev. B - Expenses Mileage',\n 'solicitation.label.num.order': 'N. Order',\n 'solicitation.label.expiration': 'Expiration',\n 'solicitation.label.paymentdate': 'Payment',\n 'solicitation.label.ccost': 'C. Cost',\n 'solicitation.label.caccounting': 'C. Accounting',\n 'solicitation.label.advance': 'Advance',\n 'solicitation.label.head.office': 'Head Office',\n 'solicitation.label.filial': 'Filial',\n 'solicitation.label.moeda': 'Moeda',\n 'solicitation.label.value': 'Value',\n 'solicitation.label.model': 'Model',\n 'solicitation.label.finalValue': 'Final Value',\n 'solicitation.label.vendor': 'Vendor',\n 'solicitation.label.poList': 'PO list',\n 'solicitation.label.invoice': 'Invoice',\n 'solicitation.label.type.payment': 'Type of Payment',\n 'solicitation.label.bank.transfer': 'Bank Transfer',\n 'solicitation.label.ticket': 'Ticket/Pickup Guide',\n 'solicitation.label.money': 'Money',\n 'solicitation.label.outsider': 'Foreign Payment',\n 'solicitation.label.codesap': 'Code SAP',\n 'solicitation.label.bank.data': 'Bank Data',\n 'solicitation.label.name': 'Name',\n 'solicitation.label.bank.name': 'Name',\n 'solicitation.label.agency': 'N. Agency and Digit',\n 'solicitation.label.account': 'N. Current Account and Digit',\n 'solicitation.label.note': 'Note',\n 'solicitation.placeholder.select.template': 'Select a Template',\n 'solicitation.label.real': 'REAL',\n 'solicitation.label.usd': 'USD',\n 'solicitation.label.euro': 'EUR',\n 'solicitation.label.yene': 'YENE',\n 'solicitation.label.pound': 'POUND',\n 'solicitation.placeholder.select.moeda': 'Select a Moeda',\n 'solicitation.error.type.payment': 'Choose at least one Payment Type',\n 'document.flow.references': 'Reference to Approval',\n 'document.flow.references.placeholder': 'Search By Id',\n 'solicitation.label.bank.bradesco': 'Bradesco',\n 'document.flow.reference.notfound': 'Reference to Approval Not Found',\n 'solicitation.label.others': 'Others Banks',\n 'solicitation.label.ncapex': 'N. Capex',\n 'solicitation.label.asset': 'N. Asset',\n 'solicitation.label.quotation.request': 'Quotation Request',\n 'solicitation.label.po': 'PO',\n 'solicitation.label.contracts': 'Contracts',\n 'solicitation.label.nature': 'Nature',\n 'solicitation.label.capex': 'Capex',\n 'solicitation.label.lm': 'LM',\n 'solicitation.label.safety.equipament': 'Safety Equipament',\n 'solicitation.label.cleaning.material': 'Cleaning Material',\n 'solicitation.label.maintenance.material': 'Maintenance Material',\n 'solicitation.label.temporary.works': 'Temporary Works and Serv.',\n 'solicitation.label.freight.storage': 'Freight & Storage',\n 'solicitation.label.documentation': 'Documentation',\n 'solicitation.label.memorial.spec': 'Memorial or Spec',\n 'solicitation.label.no.documentation': 'No Documentation',\n 'solicitation.placeholder.select.nature': 'Select a Nature',\n 'document.flow.reference.add': 'Added Reference',\n 'solicitation.placeholder.select.documentation': 'Select a Documentation',\n 'solicitation.label.registration': 'Registration',\n 'solicitation.label.types.expenses': 'Type of Expense',\n 'solicitation.label.quantity': 'Quantity',\n 'solicitation.label.sub.total': 'Sub Total',\n 'solicitation.label.advance.expenses': 'Advance of Expense',\n 'solicitation.label.total.receivable': 'Total Receivable / Return',\n 'expense.validation.quantity.msg': 'Field quantity is required',\n 'expense.validation.value.msg': 'Field Value is required',\n 'solicitation.placeholder.type.expense': 'Select a Type of Expense',\n 'solicitation.error.type.expense': 'Add at least one Expense',\n 'solicitation.label.date.time': \"Date/Time\",\n 'solicitation.label.date.start': \"Date\",\n 'solicitation.label.time': \"Time\",\n 'solicitation.label.from': \"From\",\n 'solicitation.label.to': 'To',\n 'solicitation.label.start.mileage': 'Start KM',\n 'solicitation.label.end.mileage': 'End KM',\n 'solicitation.checkbox.billet': 'Has Payment Slip',\n 'solicitation.label.reason': 'Reason',\n 'document.flow.solicitationPo.error': 'PO number accepts only integers',\n 'solicitation.label.total': 'Total',\n 'solicitation.label.total.km': 'Total KM',\n 'solicitation.label.brl.km': 'BRL KM',\n 'solicitation.label.total.brl': 'Total BRL',\n 'solicitation.error.hour.required': 'Hour of Solicitation not informed or invalid',\n 'solicitation.error.date.required': 'Date of Solicitation not informed or invalid',\n 'solicitation.error.from.required': 'From of Solicitation not informed or invalid',\n 'solicitation.error.to.required': 'To of Solicitation not informed or invalid',\n 'solicitation.error.start.km.required': 'Start KM of Solicitation not informed or invalid',\n 'solicitation.error.end.km.required': 'End KM of Solicitation not informed or invalid',\n 'solicitation.error.start.end.km.required': 'End KM must be greather than Start Km',\n 'solicitation.error.reason.required': 'Reason of Solicitation not informed or invalid',\n 'solicitation.error.po.required': 'PO not informed or invalid',\n 'solicitation.error.description.required': 'Description not informed or invalid',\n 'solicitation.error.item.required': 'Item of PO not informed or invalid',\n 'solicitation.error.nrprocess.required': 'Number of process not informed',\n 'solicitation.error.value.required': 'Value not informed or invalid',\n 'solicitation.alert.payment.day': 'Payment will be made 5 business days after approval of this document. Except for the exceptions to be analyzed.',\n 'solicitation.label.expenses': 'Expenses',\n 'document.flow.label.request.by.user.area': 'Area',\n 'document.flow.placeholder.request.by.user.area': 'Select an Area',\n 'solicitation.label.qutotation': 'Quotation',\n 'solicitation.label.material': 'Material Description',\n 'solicitation.label.material.quantity': 'Quantity',\n 'solicitation.label.material.measure.unit': 'Unit of Measurement',\n 'comment.title': 'Comments',\n 'comment.label': 'Write your comment',\n 'comment.button': 'Post comment',\n 'comment.previous': 'Previous comments',\n 'solicitation.label.nro': 'No.',\n 'document.flow.predecessor': 'Predecessor',\n 'document.flow.predecessor.placeholder': 'Select a Predecessor',\n 'document.flow.comments.mentioned': 'mentioned you on approval',\n 'acquisition.label.status.inprogress': 'In Progress',\n 'acquisition.label.status.done': 'Done',\n 'acquisition.label.protocolId': 'Protocol',\n 'acquisition.label.protocol.status': 'Status',\n 'solicitation.label.template.service': 'Service',\n 'solicitation.label.template.customsExpenses': 'Customs Expenses',\n 'solicitation.label.template.fiscal.nf': 'Nf',\n 'solicitation.label.template.fiscal.emission.date': 'Emission Date',\n 'solicitation.label.template.fiscal.due.date': 'Due Date',\n 'solicitation.label.template.fiscal.service.code': 'Service Code',\n 'solicitation.label.template.fiscal.po': 'PO',\n 'solicitation.label.template.fiscal.po.identification': 'PO Identification',\n 'solicitation.label.template.fiscal.service.description': 'Service Description',\n 'solicitation.label.template.fiscal.customsExpenses.description': 'Service Description',\n 'solicitation.label.template.fiscal.customsExpenses.nrPro': 'Process Number',\n 'solicitation.label.template.fiscal.item.po': 'Item of PO',\n 'solicitation.label.template.fiscal.value.po': 'Value',\n 'solicitation.label.template.customsExpenses.value.po': 'Value',\n 'solicitation.error.fiscal.service': 'Add at least one PO',\n 'solicitation.error.fiscal.service.attachments.notfound': 'It is necessary to add a file with the Invoice.',\n 'solicitation.error.po.item.exist': 'There is already a service with the same PO and Item of PO registered.',\n 'document.flow.contract.reference.add': 'Added Contract Reference',\n 'document.flow.contract.references': 'Contract Reference',\n 'document.flow.contract.reference.notfound': 'Contract Reference not found',\n 'document.flow.contract.reference.load.error': 'Error on load Contract Reference'\n\n });\n\n $translateProvider.translations('pt', {\n 'document.flow.title': 'Aprovação',\n 'document.flow.label.document': 'Documento',\n 'document.flow.label.deadline': 'Data limite',\n 'document.flow.label.target.individual': 'Inclusão individual',\n 'document.flow.label.target.route': 'Inclusão pela rota de aprovação',\n 'document.flow.label.deadline.purchase': 'Data limite para aquisição',\n 'document.flow.label.deadline.start': 'Data de início do prazo',\n 'document.flow.label.deadline.due': 'Prazo de Data de Vencimento',\n 'document.flow.label.new': 'Nova Aprovação',\n 'document.flow.status.search.placeholder': 'Buscar pela situação',\n 'document.flow.label.ongoing': 'Em andamento',\n 'document.flow.label.pending.approval': 'Enviado para Aprovação',\n 'document.flow.label.approved': 'Aprovado',\n 'label.poList.placeholder': 'Insira os números de pedidos de compra',\n 'document.flow.label.status.canceled': 'Cancelado',\n 'document.flow.label.status.rejected': 'Rejeitado',\n 'document.flow.panel.identification': 'Identificação da Aprovação',\n 'document.flow.label.IdOrSubject': 'Assunto ou Id',\n 'document.flow.label.subject': 'Assunto',\n 'document.flow.label.solicitation': 'Solicitação',\n 'document.flow.label.documents': 'Documentos',\n 'document.flow.label.target': 'Requisitados',\n 'document.flow.label.edit': 'Edição de Aprovação',\n 'document.flow.label.futureApprovals': 'Aprovações Futuras',\n 'document.flow.msg.save.success': 'Aprovação salva com sucesso.',\n 'document.flow.msg.save.error': 'Ocorreu um erro ao tentar salvar o fluxo de documentos.',\n 'document.flow.solicitationPo.error': 'Número de PO aceita apenas valores numéricos inteiros',\n 'document.flow.msg.load.error': 'Ocorreu um erro ao tentar carregar o fluxo de documentos.',\n 'document.flow.label.approver': 'Aprovador',\n 'document.flow.label.consent': 'Consentimento',\n 'document.flow.label.notification': 'Notificação',\n 'document.flow.label.request.type': 'Tipo',\n 'document.flow.label.created.date': 'Data de criação',\n 'document.flow.label.request.by': 'Solicitante',\n 'document.flow.label.pending.by': 'Pendente Por',\n 'document.flow.placeholder.visibility': 'Selecione a visibilidade',\n 'document.flow.label.visibility': 'Visibilidade',\n 'document.flow.label.confidential': 'Confidencial',\n 'document.flow.label.public': 'Público',\n 'document.flow.label.done': 'Feito',\n 'document.flow.msg.error.min.paymentdate': 'Data de pagamento não pode ser menor que a Data limite',\n 'document.flow.msg.error.min.deadline': 'Data limite não pode ser menor que a Data de criação',\n 'document.flow.label.button.cancel': 'Cancelar Aprovação',\n 'document.flow.label.button.reject': 'Rejeitar',\n 'document.flow.label.button.return': 'Devolver',\n 'document.flow.label.button.approver': 'Aprovar',\n 'document.flow.cancel.title': 'Cancelar Aprovação',\n 'document.flow.cancel.sub.title': 'Descreva alguma observação sobre o cancelamento da requisição.',\n 'document.flow.reject.title': 'Observação da Rejeição',\n 'document.flow.return.title': 'Observação da Devolução',\n 'document.flow.return.sub.title': 'Descreva alguma observação sobre a devolução da requisição.',\n 'document.flow.reject.sub.title': 'Descreva alguma observação sobre a rejeição da requisição.',\n 'document.flow.approved.title': 'Observação da Aprovação',\n 'document.flow.approved.sub.title': 'Descreva alguma observação sobre a aprovação da requisição.',\n 'document.flow.export.status.validation.msg': 'Enquanto o status do documento estiver em andamento. Você não pode exportar documento.',\n 'document.flow.edit.status.validation.msg': 'Somente os usuários solicitantes, aprovadores e/ou consentidores podem editar o documento.',\n 'document.flow.export.validation.msg': 'Somente os usuários solicitantes, aprovadores e/ou consentidores podem exportar o documento.',\n 'document.flow.delete.error.msg': 'Ocorreu um erro ao tentar excluir o documento. Por favor, contate o Administrador.',\n 'document.flow.delete.success.msg': 'Documento excluído com sucesso',\n 'placeholder.flow.search.IdOrTitle' : 'Buscar por assunto ou Id',\n 'placeholder.flow.search.requestby' : 'Buscar por solicitante',\n 'placeholder.flow.search.pendingby' : 'Buscar por pendente',\n 'document.flow.report.name': 'Relatorio_aprovacao_',\n 'document.flow.approval.reservation.message.confirm': 'O aprovador #approve está ausente no período de #startdate a #enddate. Seu reserva é #reservation.',\n 'document.flow.confirmation.title': 'Confirmação',\n 'document.flow.placeholder.search.category': 'Buscar por Categoria',\n 'placeholder.category': 'Selecione uma Categoria',\n 'checklist.label.solicitation.template': 'Template',\n 'solicitation.label.template.cash': 'F-DP CON 0002-01 rev. C – Numerário',\n 'solicitation.label.template.refund': 'F-DP CON 0002-02 rev. C - Reembolso de Despesas',\n 'solicitation.label.template.mileage': 'F-DP CON 0002-03 rev. B - Despesas Quilometragem',\n 'solicitation.label.num.order': 'N. Pedido',\n 'solicitation.label.expiration': 'Vencimento',\n 'solicitation.label.paymentdate': 'Pagamento',\n 'solicitation.label.ccost': 'C. Custo',\n 'solicitation.label.caccounting': 'C. Contábil',\n 'solicitation.label.head.office': 'Matriz',\n 'solicitation.label.filial': 'Filial',\n 'solicitation.label.advance': 'Adiantamento',\n 'solicitation.label.moeda': 'Moeda',\n 'solicitation.label.value': 'Valor',\n 'solicitation.label.model': 'Modelo',\n 'solicitation.label.finalValue': 'Valor Final',\n 'solicitation.label.vendor': 'Fornecedor',\n 'solicitation.label.poList': 'Lista de POs',\n 'solicitation.label.invoice': 'Nota Fiscal',\n 'solicitation.label.type.payment': 'Tipo de Pagamento',\n 'solicitation.label.bank.transfer': 'Transferência Bancária',\n 'solicitation.label.ticket': 'Boleto/Guia recolhimento',\n 'solicitation.label.money': 'Dinheiro',\n 'solicitation.label.outsider': 'Pagamento Exterior',\n 'solicitation.label.bank.data': 'Dados Bancários',\n 'solicitation.label.name': 'Nome',\n 'solicitation.label.bank.name': 'Nome Banco',\n 'solicitation.label.agency': 'N. da Agência com dígito',\n 'solicitation.label.account': 'N. da Conta Corrente com dígito',\n 'solicitation.label.note': 'Finalidade',\n 'solicitation.label.codesap': 'Código SAP',\n 'solicitation.label.real': 'REAL',\n 'solicitation.label.usd': 'USD',\n 'solicitation.label.euro': 'EUR',\n 'solicitation.label.yene': 'YENE',\n 'solicitation.label.pound': 'LIBRA',\n 'solicitation.placeholder.select.template': 'Selecione um template',\n 'solicitation.placeholder.select.moeda': 'Selecione uma Moeda',\n 'solicitation.error.type.payment': 'Escolha ao menos um Tipo de Pagamento',\n 'document.flow.references': 'Referência de Aprovação',\n 'document.flow.references.placeholder': 'Busque Por Id',\n 'solicitation.label.bank.bradesco': 'Bradesco',\n 'document.flow.reference.notfound': 'Referência de Aprovação não Encontrada',\n 'solicitation.label.others': 'Outros Bancos',\n 'solicitation.label.ncapex': 'N. Capex',\n 'solicitation.label.asset': 'N. Ativos',\n 'solicitation.label.quotation.request': 'Pedido de Cotação',\n 'solicitation.label.po': 'Compra',\n 'solicitation.label.contracts': 'Contratos',\n 'solicitation.label.nature': 'Natureza',\n 'solicitation.label.capex': 'Capex',\n 'solicitation.label.lm': 'LM',\n 'solicitation.label.safety.equipament': 'Material de Segurança',\n 'solicitation.label.cleaning.material': 'Material de Limpeza',\n 'solicitation.label.maintenance.material': 'Material de Manutenção',\n 'solicitation.label.temporary.works': 'Obras e Serv. Temporários',\n 'solicitation.label.freight.storage': 'Frete e Armazenagem',\n 'solicitation.label.documentation': 'Documentação',\n 'solicitation.label.memorial.spec': 'Memorial ou Especificação',\n 'solicitation.label.no.documentation': 'Não Possui',\n 'solicitation.placeholder.select.nature': 'Selecione uma Natureza',\n 'document.flow.reference.add': 'Referência Adicionada',\n 'solicitation.placeholder.select.documentation': 'Selecione uma Documentação',\n 'solicitation.label.registration': 'Matrícula',\n 'solicitation.label.types.expenses': 'Tipos de Despesas',\n 'solicitation.label.quantity': 'Quantidade',\n 'solicitation.label.sub.total': 'Sub Total',\n 'solicitation.label.advance.expenses': 'Adiantamento de Pagamento',\n 'solicitation.label.total.receivable': 'Total a Receber / Devolver',\n 'expense.validation.quantity.msg': 'Campo quantidade é obrigatório',\n 'expense.validation.value.msg': 'Campo Valor é obrigatório',\n 'solicitation.placeholder.type.expense': 'Selecione um Tipo de Despesa',\n 'solicitation.error.type.expense': 'Adicione ao menos uma Despesa',\n 'solicitation.label.date.time': \"Data/Hora\",\n 'solicitation.label.date.start': \"Data\",\n 'solicitation.label.time': \"Hora\",\n 'solicitation.label.from': \"Origem\",\n 'solicitation.label.to': 'Destino',\n 'solicitation.label.start.mileage': 'KM Inicial',\n 'solicitation.label.end.mileage': 'KM Final',\n 'solicitation.label.reason': 'Motivo',\n 'solicitation.label.total': 'Total',\n 'solicitation.label.total.km': 'Total KM',\n 'solicitation.label.brl.km': 'BRL KM',\n 'solicitation.label.total.brl': 'Total BRL',\n 'solicitation.error.hour.required': 'Hora da Solicitação não informada ou inválida',\n 'solicitation.error.date.required': 'Data da Solicitação não informada ou inválida',\n 'solicitation.error.from.required': 'Origem da Solicitação não informado ou inválido',\n 'solicitation.error.to.required': 'Destino da Solicitação não informado ou inválido',\n 'solicitation.error.start.km.required': 'KM Inicial da Solicitação não informado ou inválido',\n 'solicitation.error.end.km.required': 'KM final da Solicitação não informado ou inválido',\n 'solicitation.error.start.end.km.required': 'KM Final deve ser maior que a Km Inicial',\n 'solicitation.error.reason.required': 'Motivo da Solicitação não informado ou inválido',\n 'solicitation.error.po.required': 'PO não informado ou inválido',\n 'solicitation.error.description.required': 'Descrição não informado ou inválido',\n 'solicitation.error.item.required': 'Ítem do PO não informado ou inválido',\n 'solicitation.error.nrprocess.required': 'Número do processo não informado',\n 'solicitation.error.value.required': 'Valor não informado ou inválido',\n 'solicitation.alert.payment.day': 'O pagameno será efetuado 5 dias úteis após a aprovação deste documento. Salvo as exceções a serem analisadas.',\n 'solicitation.label.expenses': 'Despesas',\n 'document.flow.label.request.by.user.area': 'Área',\n 'document.flow.placeholder.request.by.user.area': 'Selecione uma área',\n 'solicitation.label.qutotation': 'Cotação',\n 'solicitation.label.material': 'Descrição do Material',\n 'solicitation.label.material.quantity': 'Quantidade',\n 'solicitation.label.material.measure.unit': 'Unidade de Medida',\n 'solicitation.label.nro': 'No.',\n 'comment.title': 'Comentários',\n 'comment.label': 'Escreva seu comentário',\n 'comment.button': 'Enviar comentário',\n 'comment.previous': 'Comentários anteriores',\n 'document.flow.predecessor': 'Antecessor',\n 'document.flow.predecessor.placeholder': 'Selecione um Antecessor',\n 'document.flow.comments.mentioned': 'mencionou você na aprovação',\n 'acquisition.label.status.inprogress': 'Em Progresso',\n 'acquisition.label.status.done': 'Concluído',\n 'acquisition.label.protocolId': 'Protocolo',\n 'acquisition.label.protocol.status': 'Situação',\n 'solicitation.label.template.service': 'Serviço',\n 'solicitation.label.template.customsExpenses': 'Despesas Aduaneiras',\n 'solicitation.label.template.fiscal.nf': 'Nf',\n 'solicitation.label.template.fiscal.emission.date': 'Data Emissão',\n 'solicitation.label.template.fiscal.due.date': 'Data Vencimento',\n 'solicitation.label.template.fiscal.service.code': 'Código do Serviço',\n 'solicitation.label.template.fiscal.po': 'PO',\n 'solicitation.label.template.fiscal.po.identification': 'Identificação do PO',\n 'solicitation.label.template.fiscal.service.description': 'Descrição do Serviço',\n 'solicitation.label.template.fiscal.customsExpenses.description': 'Descrição do Serviço',\n 'solicitation.label.template.fiscal.customsExpenses.nrPro': 'Número do Processo',\n 'solicitation.label.template.fiscal.item.po': 'Item do PO',\n 'solicitation.label.template.fiscal.value.po': 'Valor',\n 'solicitation.label.template.customsExpenses.value.po': 'Valor',\n 'solicitation.error.fiscal.service': 'Adicione ao menos um PO',\n 'solicitation.checkbox.billet': 'Possui Boleto',\n 'solicitation.error.fiscal.service.attachments.notfound': 'É necessário adicionar um arquivo com a Nota Fiscal.',\n 'solicitation.error.po.item.exist': 'Já existe um serviço com o mesmo PO e Item do PO cadastrado.',\n 'document.flow.contract.reference.add': 'Referência de Contrato Adicionada',\n 'document.flow.contract.references': 'Referência de Contratos',\n 'document.flow.contract.reference.notfound': 'Referência de Contrato não encontrado',\n 'document.flow.contract.reference.load.error': 'Erro ao tentar carregar Contrato de Referência'\n });\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('DocumentFlowService', DocumentFlowService);\n\n var BASE = '/document-flow/';\n\n /** @ngInject */\n function DocumentFlowService($window, $injector, $q, ConfigurationService) {\n var TemplateList = [], TemplateFiscalList = [], MoedaList = [], AcquisitionList = [], NatureList = [], DocumentationList = [],\n UnitMeasureList = [];\n\n TemplateList = [\n {Id: 1, Title: 'solicitation.label.template.cash'},\n {Id: 2, Title: 'solicitation.label.template.refund'},\n {Id: 3, Title: 'solicitation.label.template.mileage'}\n ];\n\n AcquisitionList = [\n {Id: 4, Title: 'solicitation.label.quotation.request'},\n {Id: 5, Title: 'solicitation.label.po'}\n ];\n\n TemplateFiscalList = [\n {Id: 6, Title: 'solicitation.label.template.service'},\n {Id: 7, Title: 'solicitation.label.template.customsExpenses'}\n ];\n\n UnitMeasureList = [\n {Id: 0, Name: \"Painel\", Integer: true},\n {Id: 1, Name: \"Placas\", Integer: true},\n {Id: 2, Name: \"Peças\", Integer: true},\n {Id: 3, Name: \"Unidade\", Integer: true},\n {Id: 4, Name: \"Cantoneira\", Integer: true},\n {Id: 5, Name: \"Galões\", Integer: true},\n {Id: 6, Name: \"Jogo\", Integer: true},\n {Id: 7, Name: \"Litros\", Integer: false},\n {Id: 14, Name: \"m²\", Integer: false},\n {Id: 8, Name: \"m³\", Integer: false},\n {Id: 9, Name: \"Metro\", Integer: false},\n {Id: 10, Name: \"Centimetros\", Integer: false},\n {Id: 11, Name: \"Kg\", Integer: false},\n {Id: 12, Name: \"g\", Integer: false},\n {Id: 13, Name: \"mg\", Integer: false}\n ];\n\n MoedaList = [\n {Id: 1, Title: 'solicitation.label.real'},\n {Id: 2, Title: 'solicitation.label.usd'},\n {Id: 3, Title: 'solicitation.label.euro'},\n {Id: 4, Title: 'solicitation.label.yene'},\n {Id: 5, Title: 'solicitation.label.pound'}\n ];\n\n NatureList = [\n {Id: 1, Title: 'solicitation.label.contracts'},\n {Id: 2, Title: 'solicitation.label.capex'},\n {Id: 3, Title: 'solicitation.label.lm'},\n {Id: 4, Title: 'solicitation.label.safety.equipament'},\n {Id: 5, Title: 'solicitation.label.cleaning.material'},\n {Id: 6, Title: 'solicitation.label.maintenance.material'},\n {Id: 7, Title: 'solicitation.label.temporary.works'},\n {Id: 8, Title: 'solicitation.label.freight.storage'}\n ]\n\n DocumentationList = [\n {Id: 1, Title: 'solicitation.label.memorial.spec'},\n {Id: 2, Title: 'solicitation.label.no.documentation'}\n ]\n\n return {\n\n getTemplateList: function () {\n return TemplateList;\n },\n\n getTemplateFiscalList: function() {\n return TemplateFiscalList;\n },\n\n getAcquisitionList: function () {\n return AcquisitionList;\n },\n\n getUnitMeasureList: function () {\n return UnitMeasureList;\n },\n\n getMoedaList: function () {\n return MoedaList;\n },\n\n getNatureList: function () {\n return NatureList;\n },\n\n getDocumentationList: function () {\n return DocumentationList;\n },\n\n autoCompleteDocumentFlow: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + \"list/autocomplete\", {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getRefence: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + \"reference\", {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getContractReference: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + \"contract-reference\", {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getTypeExpenses: function () {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + \"type-expenses\", {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getHtmlSolicitation: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + \"byId/\" + id + \"/html-solicitation\", {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n list: function (filterParams) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n $http.get(ConfigurationService.getServiceHost() + BASE + 'list', {\n params: filterParams\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n export: function (id, language) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + '/export/' + id + \"/\" + language, {\n responseType: 'arraybuffer'\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n exportPDF: function (id, language) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + 'export-pdf/' + id + '/' + language,\n {\n responseType: 'arraybuffer'\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n }\n , function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n save: function (document) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + BASE, document, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getById: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + 'byId/' + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n delete: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + BASE + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n downloadAll: function (filtro, language) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + 'export-all/' + language,\n {\n params: filtro,\n responseType: 'arraybuffer'\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n }\n , function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n approvalBrlKm: function () {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n $http.get(ConfigurationService.getServiceHost() + BASE + 'brl-km')\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n approvalParallel: function () {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n $http.get(ConfigurationService.getServiceHost() + BASE + 'approvalParallel')\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n findSolicitationApproval: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + 'solicitation-approval/' + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n saveComment: function (comment) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + BASE + 'comment', comment, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getComments: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + 'comments/' + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n };\n\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(DocumentFlowRouter);\n\n /** @ngInject */\n function DocumentFlowRouter($stateProvider) {\n\n\n $stateProvider.state('document-flow-list', {\n url: '/document-flow',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/document_flow/document-flow-list.html',\n controller: 'DocumentFlowListController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'document.flow.title'\n },\n authorize: true\n });\n\n $stateProvider.state('document-flow-create', {\n url: '/document-flow/create',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/document_flow/document-flow-edit.html',\n controller: 'DocumentFlowEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'document.flow.title'\n },\n authorize: true\n });\n\n $stateProvider.state('document-flow-edit', {\n url: '/document-flow/edit/:Id',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/document_flow/document-flow-edit.html',\n controller: 'DocumentFlowEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'document.flow.title'\n },\n authorize: true\n });\n\n\n\n }\n})();\n\n/*eslint angular/json-functions: 0*/\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('DocumentFlowListController', DocumentFlowListController);\n\n function DocumentFlowListController(DocumentFlowService, ToastUtil, $state, $translate,\n AuthService, $log, $window, $scope, DefaultService, $document, moment, BasicEventConstant) {\n\n var vm = this;\n vm.Users = [];\n var exporting = false;\n vm.disableExport = true;\n vm.categoryOptions = BasicEventConstant.categoryOptions;\n\n var USER = {\n Name: $window.localStorage.aliasAqms,\n Id: parseInt($window.localStorage.userID)\n };\n\n vm.itensPerPageList = [\n {name: '5', value: 5, before: 0, after: 6},\n {name: '10', value: 10, before: 5, after: 11},\n {name: '20', value: 20, before: 10, after: 21},\n {name: '30', value: 30, before: 20, after: 31},\n {name: '40', value: 40, before: 30, after: 41},\n {name: '50', value: 50, before: 40, after: 51}]\n\n vm.itemPerPage = vm.itensPerPageList[0];\n\n var profilePermission = {\n CanAdd: false,\n CanEdit: false,\n CanDelete: false,\n CanView: false,\n CanApprove: false,\n CanExport: false,\n CanConsult: false\n };\n\n vm.areaList = [];\n vm.searchParams = {\n Subject: '',\n DeadLineStart: '',\n DeadLineDue: '',\n RequestType: '',\n RequestBy: '',\n AreaId: '-1',\n Status: '-1',\n Category: '-1',\n Visibility: '-1',\n PendingBy: '',\n PendingByObject: '',\n FutureApprovals: false,\n BusinessId: AuthService.getBusinessId(),\n UserLoggedId: AuthService.getUserID(),\n Page: 1,\n MaxPerPage: vm.itemPerPage.value\n };\n\n vm.updateModel = function (value) {\n vm.searchParams.PendingBy = value.Id;\n };\n\n vm.clearSearchFields = function() {\n vm.searchParams.Subject = '';\n vm.searchParams.DeadLineStart = '';\n vm.searchParams.DeadLineDue = '';\n vm.searchParams.RequestType = '';\n vm.searchParams.RequestBy = '';\n vm.searchParams.AreaId = '-1',\n vm.searchParams.Status = '-1';\n vm.searchParams.Category = '-1';\n vm.searchParams.Visibility = '-1';\n vm.searchParams.PendingBy = '';\n vm.searchParams.UserLoggedId = AuthService.getUserID();\n vm.searchParams.PendingByObject = '';\n vm.searchParams.FutureApprovals = false;\n };\n\n vm.documentVisibility = {\n CONFIDENTIAL: 0,\n PUBLIC: 1\n };\n\n vm.visibilityList = [{\n Value: vm.documentVisibility.CONFIDENTIAL,\n Title: \"document.flow.label.confidential\"\n },\n {\n Value: vm.documentVisibility.PUBLIC,\n Title: \"document.flow.label.public\"\n }\n ];\n\n vm.documentFlowList = [];\n vm.totalList = 0;\n\n var documentStatus = {\n ONGOING: 0,\n PENDINGAPPROVAL: 1,\n APPROVED: 2,\n REJECT: 3,\n CANCELED: 4\n };\n\n\n vm.shouldShow = function (item) {\n if(vm.totalList > 0 && item != undefined) {\n return vm.totalList >= item.value || (vm.totalList < item.after && vm.totalList > item.before);\n }\n return false;\n }\n\n vm.changeItemsPerPage = function() {\n if ( vm.itemPerPage == null ) {\n vm.itemPerPage = vm.itensPerPageList[0];\n }\n vm.searchParams.Page = 1;\n vm.searchParams.MaxPerPage = vm.itemPerPage.value;\n vm.search()\n }\n\n vm.statusList = [{\n Value: documentStatus.ONGOING,\n Title: \"document.flow.label.ongoing\"\n },\n {\n Value: documentStatus.PENDINGAPPROVAL,\n Title: \"document.flow.label.pending.approval\"\n },\n {\n Value: documentStatus.APPROVED,\n Title: \"document.flow.label.approved\"\n },\n {\n Value: documentStatus.CANCELED,\n Title: \"document.flow.label.status.canceled\"\n },\n {\n Value: documentStatus.REJECT,\n Title: \"document.flow.label.status.rejected\"\n }\n ];\n\n vm.resolveStatusCss = function (status) {\n var result = \"\";\n\n switch (status) {\n case documentStatus.PENDINGAPPROVAL:\n result = 'ng-binding label label-pending';\n break;\n case documentStatus.ONGOING:\n result = 'ng-binding label label-ongoing';\n break;\n case documentStatus.APPROVED:\n result = 'ng-binding label label-approved';\n break;\n case documentStatus.REJECT:\n result = 'ng-binding label label-rejected';\n break;\n case documentStatus.CANCELED:\n result = 'ng-binding label aqms-label-canceled';\n break;\n }\n\n return result;\n };\n\n\n vm.resolveVisibilityCss = function (visibility) {\n var result = \"\";\n\n switch (visibility) {\n case vm.documentVisibility.CONFIDENTIAL:\n result = 'icon-sprite icon-sprite_confidential';\n break;\n case vm.documentVisibility.PUBLIC:\n result = 'icon-sprite icon-sprite_public';\n break;\n }\n\n return result;\n };\n\n vm.resolveCategory = function (category) {\n var cat = vm.categoryOptions.filter(function( elm ) { return elm.id == category });\n return $translate.instant(cat[0].Name);\n }\n\n vm.resolveStatus = function (status) {\n switch (status) {\n case documentStatus.ONGOING:\n return $translate.instant('document.flow.label.ongoing');\n case documentStatus.PENDINGAPPROVAL:\n return $translate.instant('document.flow.label.pending.approval');\n case documentStatus.APPROVED:\n return $translate.instant('document.flow.label.approved');\n case documentStatus.CANCELED:\n return $translate.instant('document.flow.label.status.canceled');\n case documentStatus.REJECT:\n return $translate.instant('document.flow.label.status.rejected');\n }\n };\n\n vm.searchDocumentFlows = function () {\n sessionStorage.removeItem(\"documentFlowInicial\");\n vm.itemPerPage = vm.itensPerPageList[0];\n vm.searchParams.Page = 1;\n vm.searchParams.MaxPerPage = vm.itemPerPage.value;\n vm.search();\n };\n\n function loadUsers() {\n DefaultService.loadUserInputDirective()\n .then(function (response) {\n var index = response.findIndex(function (item) {\n if(vm.document && vm.document.RequestBy && vm.document.RequestBy.Id) {\n return item.Id == vm.document.RequestBy.Id;\n } else {\n return null;\n }\n });\n response.splice(index, 1);\n vm.Users = angular.copy(response);\n })\n .catch(function (error) {\n $log.log(error);\n });\n }\n\n vm.search = function() {\n if (sessionStorage.getItem(\"searchParams\")) {\n vm.searchParams = JSON.parse(sessionStorage.getItem(\"searchParams\"));\n sessionStorage.removeItem(\"searchParams\");\n vm.itensPerPageList.forEach(function(element) {\n if (element.value == vm.searchParams.MaxPerPage) {\n vm.itemPerPage = element;\n return;\n }\n });\n }\n\n var searchParamsCopy = buildSearchParam();\n\n DocumentFlowService.list(searchParamsCopy)\n .then(function (response) {\n vm.documentFlowList = angular.copy(response.resultList);\n vm.totalList = response.total;\n vm.disableExport = (response.total <= 0);\n })\n .catch(function (error) {\n $log.log(error);\n\n if (error.status != $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n }\n });\n\n };\n\n vm.edit = function (documentFlow) {\n if (profilePermission.CanEdit) {\n if (canEdit(documentFlow)) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('document-flow-edit', {\n Id: documentFlow.Id\n });\n } else {\n ToastUtil.showToastMessage($translate.instant('document.flow.edit.status.validation.msg'), ToastUtil.ToastType.WARN);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n };\n\n function canEdit(documentFlow) {\n\n var userLoggedId = AuthService.getUserID();\n\n if (documentFlow.RequestById == userLoggedId || documentFlow.Visibility == 1) {\n return true;\n }\n\n var index = documentFlow.Targets.findIndex(function (item) {\n //return item.UserId == userLoggedId && item.TargetNotification;\n return item.UserId == userLoggedId;\n });\n\n if (index >= 0) {\n return true;\n }\n\n if (documentFlow.Status == documentStatus.APPROVED) {\n index = documentFlow.NotificationUsers.findIndex(function (item) {\n return item.Id == userLoggedId;\n });\n }\n\n if (index >= 0) {\n return true;\n } else {\n return false;\n }\n\n }\n\n function canExport(documentFlow) {\n\n var userLoggedId = AuthService.getUserID();\n\n if (documentFlow.RequestById == userLoggedId || documentFlow.Visibility == 1) {\n return true;\n }\n\n var index = documentFlow.Targets.findIndex(function (item) {\n return item.UserId == userLoggedId && item.TargetNotification;\n });\n\n if (index >= 0) {\n return true;\n }\n\n if (documentFlow.Status == documentStatus.APPROVED) {\n index = documentFlow.NotificationUsers.findIndex(function (item) {\n return item.Id == userLoggedId;\n });\n }\n\n if (index >= 0) {\n return true;\n } else {\n return false;\n }\n\n }\n\n vm.delete = function (id) {\n if (profilePermission.CanDelete) {\n DocumentFlowService.delete(id).then(function () {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go($state.current, {}, {\n reload: true\n });\n ToastUtil.showToastMessage($translate.instant('document.flow.delete.success.msg'), ToastUtil.ToastType.SUCCESS);\n }).catch(function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n } else if (error.status == $scope.HttpStatusCodeConflict) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant('document.flow.delete.error.msg'), ToastUtil.ToastType.ERROR);\n }\n });\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n };\n\n vm.disableDelete = function (documentFlow) {\n if (documentFlow.Status == documentStatus.APPROVED || documentFlow.Status == documentStatus.CANCELED || documentFlow.Status == documentStatus.REJECT) {\n return true;\n } else {\n return false;\n }\n };\n\n vm.create = function () {\n if (profilePermission.CanAdd) {\n $state.go('document-flow-create', {});\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n };\n\n function init() {\n loadProfileModules();\n loadUsers();\n loadAreas();\n if(!sessionStorage.getItem(\"documentFlowInicial\")) {\n vm.search();\n }\n }\n\n function loadProfileModules() {\n var profileModule = {};\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.moduleDocumentFlow;\n DefaultService.loadModules(profileModule).then(function (response) {\n profilePermission = angular.copy(response);\n vm.disableExport = !profilePermission.CanExport;\n validateViewPermission();\n }).catch(function (error) {\n $log.log(error);\n if (error.data != null && error.data != undefined)\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n });\n }\n\n function validateViewPermission() {\n if (!profilePermission.CanView) {\n $state.go('not-authorized', {}, {});\n }\n }\n\n vm.export = function (documentFlow) {\n if (profilePermission.CanExport) {\n if (canExport(documentFlow)) {\n if (documentFlow.Status == documentStatus.ONGOING) {\n ToastUtil.showToastMessage($translate.instant('document.flow.export.status.validation.msg'), ToastUtil.ToastType.WARN);\n return;\n }\n if (!exporting) {\n exporting = true;\n exportNew(documentFlow, exporting);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant('document.flow.export.validation.msg'), ToastUtil.ToastType.WARN);\n }\n exporting = false;\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n\n };\n\n function exportAntigo(documentFlow, exporting) {\n DocumentFlowService.export(documentFlow.Id, $translate.use()).then(function (response) {\n var newFile = new Blob([response], {\n type: 'application/pdf'\n });\n var fileURL = URL.createObjectURL(newFile);\n var date = moment().format(\"DD_MM_YYYY_HH_mm_ss\");\n var a = $document[0].createElement(\"a\");\n $document[0].body.appendChild(a);\n a.style = \"display: none\";\n a.href = fileURL;\n a.download = \"Approval_\" + AuthService.getBusinessName() + \"_\" + date + \".pdf\";\n\n a.click();\n exporting = false;\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"service.load.error\"), ToastUtil.ToastType.ERROR);\n exporting = false;\n });\n }\n\n function exportNew(documentFlow, exporting) {\n DocumentFlowService.exportPDF(documentFlow.Id, $translate.use()).then(function (response) {\n var date = moment().format(\"DD_MM_YYYY_HH_mm_ss\");\n\n var newFIle = new Blob([response], {\n type: 'application/octet-stream'\n });\n var fileURL = URL.createObjectURL(newFIle);\n var a = $document[0].createElement(\"a\");\n $document[0].body.appendChild(a);\n a.style = \"display: none\";\n a.href = fileURL;\n a.download = \"Approval_\" + AuthService.getBusinessName() + \"_\" + date + \".pdf\";\n a.click();\n exporting = false;\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"service.load.error\"), ToastUtil.ToastType.ERROR);\n exporting = false;\n });\n }\n\n function validateExportPermission() {\n if (!profilePermission.CanExport) {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n return false;\n }\n\n return true;\n }\n\n function buildSearchParam() {\n var searchParamsCopy = angular.copy(vm.searchParams);\n\n if (vm.searchParams.PendingByObject != undefined && vm.searchParams.PendingByObject != '') {\n searchParamsCopy.PendingBy = vm.searchParams.PendingByObject.Id;\n } else {\n searchParamsCopy.DeadLineStart = undefined;\n }\n\n if (vm.searchParams.DeadLineStart != undefined && vm.searchParams.DeadLineStart != '') {\n searchParamsCopy.DeadLineStart = moment(angular.copy(vm.searchParams.DeadLineStart)).format('DD/MM/YYYY');\n } else {\n searchParamsCopy.DeadLineStart = '';\n }\n\n if (vm.searchParams.DeadLineDue != undefined && vm.searchParams.DeadLineDue != '') {\n searchParamsCopy.DeadLineDue = moment(angular.copy(vm.searchParams.DeadLineDue)).format('DD/MM/YYYY');\n } else {\n searchParamsCopy.DeadLineDue = '';\n }\n\n searchParamsCopy.RequestTypeId = undefined;\n\n if (vm.searchParams.RequestType) {\n searchParamsCopy.RequestTypeId = vm.searchParams.RequestType.Id;\n }\n\n if (angular.isUndefined(vm.searchParams.Status) || vm.searchParams.Status == null) {\n searchParamsCopy.Status = -1;\n }\n\n if (angular.isUndefined(vm.searchParams.Visibility) || vm.searchParams.Visibility == null) {\n searchParamsCopy.Visibility = -1;\n }\n\n searchParamsCopy.UserLoggedId = AuthService.getUserID();\n\n return searchParamsCopy;\n }\n\n function loadAreas() {\n var searchParams = {\n };\n\n DefaultService.loadAreas(searchParams).then(function (response) {\n vm.areaList = angular.copy(response);\n }).catch(function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.listAreas\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n vm.exportToExcel = function () {\n if (!vm.disableExport) {\n\n if (!validateExportPermission()) {\n return;\n }\n\n var searchParams = buildSearchParam();\n if (angular.isUndefined(vm.searchParams.Visibility) || vm.searchParams.Visibility == null) {\n searchParams.Visibility = 1;\n }\n\n vm.disableExport = true;\n\n DocumentFlowService.downloadAll(searchParams, $translate.use())\n .then(function (response) {\n\n var date = moment().format(\"DD_MM_YYYY_HH_mm_ss\");\n\n var newFIle = new Blob([response], {\n type: 'application/vnd.ms-excel'\n });\n var fileURL = URL.createObjectURL(newFIle);\n var a = $document[0].createElement(\"a\");\n $document[0].body.appendChild(a);\n a.style = \"display: none\";\n a.href = fileURL;\n a.download = $translate.instant('document.flow.report.name') + AuthService.getBusinessName() + \"_\" + date + \".xls\";\n a.click();\n vm.disableExport = false;\n\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"service.load.error\"), ToastUtil.ToastType.ERROR);\n vm.disableExport = false;\n });\n }\n };\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('DocumentFlowEditController', DocumentFlowEditController);\n\n function DocumentFlowEditController(BotService, DocumentFlowService, ToastUtil, $stateParams, $state,\n $translate, $scope, $log, moment, AuthService, DefaultService,\n DialogControllerTemplate, $sce, BasicEventConstant, $window, UserService,\n AcquisitionService, ApprovalRouteService, CalendarService) {\n\n var vm = this;\n vm.listaPO = [];\n vm.AdvanceExpense = 0;\n vm.SubTotalQtd = 0;\n vm.routesList = [];\n vm.Route = null;\n vm.SubTotal = 0;\n vm.Billet = false;\n vm.RouteOptions = [{\n Title: \"document.flow.label.target.individual\",\n Value: 0\n }, {Title: \"document.flow.label.target.route\", Value: 1}];\n vm.RadioRoute = 0;\n vm.TotalExpense = 0;\n vm.SolicitationExpense = {\n TypeExpense: undefined,\n Quantity: undefined,\n Value: undefined\n };\n vm.SolicitationService = {\n PO: undefined,\n Description: undefined,\n Item: undefined,\n Value: undefined\n };\n\n vm.SolicitationCustomsExpense = {\n Description: undefined,\n NrProcess: undefined,\n Value: undefined\n };\n\n vm.User = {\n Name: '',\n Login: '',\n Password: '',\n Email: '',\n ChatId: '',\n TelegramUsername: '',\n isTeamLeader: false,\n CsAdmin: false,\n CsActive: true,\n Areas: []\n };\n vm.SolicitationQuotation = {\n Material: undefined,\n Quantity: undefined,\n UnitMeasure: undefined\n };\n vm.usersCommentsList = [];\n vm.userComment = {\n Name: undefined,\n Id: undefined\n };\n vm.typeExpenseList = [];\n vm.Reference = undefined;\n vm.ReferenceId = null;\n vm.Users = [];\n vm.UsersToMention = [];\n vm.categoryOptions = BasicEventConstant.categoryOptions;\n vm.templateList = DocumentFlowService.getTemplateList();\n vm.templateFiscalList = DocumentFlowService.getTemplateFiscalList();\n vm.acquisitionList = DocumentFlowService.getAcquisitionList();\n vm.unitMeasureList = DocumentFlowService.getUnitMeasureList();\n vm.moedaList = DocumentFlowService.getMoedaList();\n vm.natureList = DocumentFlowService.getNatureList();\n vm.documentationList = DocumentFlowService.getDocumentationList();\n vm.UserAreaList = [];\n vm.profilePermission = {\n CanAdd: false,\n CanEdit: false,\n CanDelete: false,\n CanView: false,\n CanApprove: false,\n CanExport: false,\n CanConsult: false\n };\n\n vm.RequestByUserArea = null;\n\n vm.documentStatus = {\n ONGOING: 0,\n PENDINGAPPROVAL: 1,\n APPROVED: 2,\n REJECT: 3,\n CANCELED: 4\n };\n\n vm.statusTarget = {\n PENDINGAPPROVAL: 0,\n APPROVED: 1,\n REJECT: 2\n };\n\n vm.statusList = [{\n Value: vm.documentStatus.ONGOING,\n Title: \"document.flow.label.ongoing\"\n },\n {\n Value: vm.documentStatus.PENDINGAPPROVAL,\n Title: \"document.flow.label.pending.approval\"\n },\n {\n Value: vm.documentStatus.APPROVED,\n Title: \"document.flow.label.approved\"\n },\n {\n Value: vm.documentStatus.CANCELED,\n Title: \"document.flow.label.status.canceled\"\n },\n {\n Value: vm.documentStatus.REJECT,\n Title: \"document.flow.label.status.rejected\"\n }\n ];\n\n vm.documentVisibility = {\n CONFIDENTIAL: 0,\n PUBLIC: 1\n }\n\n vm.visibilityList = [{\n Value: vm.documentVisibility.CONFIDENTIAL,\n Title: \"document.flow.label.confidential\"\n },\n {\n Value: vm.documentVisibility.PUBLIC,\n Title: \"document.flow.label.public\"\n }\n ];\n\n /**\n * Configuration to Rich text editor toolbar.\n * @type {{sanitize: boolean, toolbar: [*]}}\n */\n vm.editorConfig = {\n sanitize: false,\n toolbar: [{\n name: 'basicStyling',\n items: ['bold', 'italic', 'underline', 'strikethrough', 'subscript', 'superscript', '-', 'leftAlign', 'centerAlign', 'rightAlign', 'blockJustify', '-']\n },\n {\n name: 'paragraph',\n items: ['orderedList', 'unorderedList', 'outdent', 'indent', '-']\n },\n {\n name: 'doers',\n items: ['removeFormatting', 'undo', 'redo', '-']\n },\n {\n name: 'colors',\n items: ['fontColor', 'backgroundColor', '-']\n },\n {\n name: 'styling',\n items: ['font', 'size']\n }\n ]\n };\n\n vm.document = {\n Business: {\n Id: AuthService.getBusinessId()\n },\n Status: vm.documentStatus.ONGOING,\n RequestType: '',\n Subject: '',\n Solicitation: '',\n CreatedDateTemp: moment()._d,\n CreatedDate: moment().format('DD/MM/YYYY'),\n DeadLineTemp: moment().add(1, 'days')._d,\n DeadLine: moment().add(1, 'days').format('DD/MM/YYYY'),\n DeadLinePurchaseTemp: '',\n DeadLinePurchase: '',\n RequestBy: getCurrentUser(),\n Visibility: null,\n Remark: '',\n DocumentFlowAttachments: [],\n DocumentFlowTargets: [],\n DocumentFlowNotifications: [],\n SolicitationApproval: undefined,\n SolicitationFiscal: undefined,\n RequestByUserArea: null\n };\n\n vm.idToEdit = undefined;\n\n vm.approvalParallelEnabled = false;\n\n vm.showDeadlinePurchase = false;\n\n vm.Comments = null;\n\n vm.comment = {\n Id: 0,\n CreatedDate: null,\n CreatedBy: {\n Name: AuthService.getAliasName(),\n Id: AuthService.getUserID()\n },\n Comment: '',\n Summary: [],\n DocumentFlowUsersComment: [],\n DocumentFlowId: null\n };\n\n vm.botMessage = {\n Id: 0,\n Message: null\n };\n\n vm.statusProtocolList = AcquisitionService.getStatus();\n\n vm.contractReferenceId = null;\n vm.ContractReference = null;\n\n vm.onRequestTypeSelected = function() {\n if (!vm.Category && vm.document.RequestType && vm.document.RequestType !== \"\" ) {\n vm.Category = vm.document.RequestType.Category;\n vm.onCategoryOptionChanged();\n }\n vm.showDeadlinePurchase = vm.isDeadlinePurchase();\n };\n\n vm.searchParams = {\n Id: 1,\n CsActive: 1\n };\n\n\n vm.getValuePO = function(item) {\n if ( item.Value ) {\n return parseFloat(item.Value).toFixed(2);\n }\n return parseFloat(\"0\").toFixed(2);\n };\n\n\n vm.onCategoryOptionChanged = function () {\n if (vm.Category == 1) {\n listTypeExpenses();\n vm.document.Solicitation = undefined;\n if (angular.isUndefined(vm.document.SolicitationApproval)) {\n vm.document.SolicitationApproval = {\n Bank: 0,\n BankName: 'Bradesco'\n }\n } else {\n vm.document.SolicitationApproval.Bank = 0;\n vm.document.SolicitationApproval.BankName = 'Bradesco';\n }\n } else if (vm.Category == 7) {\n vm.document.SolicitationFiscal = {\n Template: vm.templateFiscalList.length == 1 ? vm.templateFiscalList[0].Id : null,\n Vendor: null,\n NF: null,\n EmissionDate: null,\n DueDate: null,\n Code: null,\n Billet: null,\n SolicitationService: []\n };\n } else if (vm.Category != 3) {\n vm.document.SolicitationApproval = undefined;\n } else if (vm.Category == 3) {\n vm.showDeadlinePurchase = vm.isDeadlinePurchase();\n }\n };\n\n vm.isDeadlinePurchase = function () {\n return (vm.document.RequestType && vm.document.RequestType.Id == 1 && vm.document.RequestType.Category == 3);\n };\n\n vm.onTemplateChange = function () {\n var copyDocument = angular.copy(vm.document);\n fillSolicitationApproval(copyDocument);\n };\n\n vm.onTemplateOptionChanged = function () {\n if (angular.isDefined(vm.document.SolicitationApproval)) {\n vm.document.Solicitation = undefined;\n if (angular.isUndefined(vm.document.SolicitationApproval)) {\n vm.document.SolicitationApproval = {\n Bank: 0,\n BankName: 'Bradesco'\n }\n } else {\n vm.document.SolicitationApproval.Bank = 0;\n vm.document.SolicitationApproval.BankName = 'Bradesco';\n }\n } else if (vm.Category != 3) {\n vm.document.SolicitationApproval = undefined;\n }\n };\n\n vm.onBankNameChange = function () {\n if (vm.document.SolicitationApproval.Bank === 0) {\n vm.document.SolicitationApproval.BankName = 'Bradesco';\n } else {\n vm.document.SolicitationApproval.BankName = '';\n }\n };\n\n function getCurrentUser() {\n var createdBy = {\n Name: AuthService.getAliasName(),\n Id: AuthService.getUserID()\n };\n\n UserService.loadUserArea(AuthService.getUserID())\n .then(function (response) {\n vm.UserAreaList = response.Areas;\n });\n\n return createdBy;\n }\n\n vm.sendDocumentFlowToApproval = function () {\n if (validateSave()) {\n if (vm.Category == 7 && vm.document.SolicitationFiscal != undefined && (vm.document.SolicitationFiscal.Template == 6 || vm.document.SolicitationFiscal.Template == 7) ) {\n if (vm.document.DocumentFlowAttachments === undefined || vm.document.DocumentFlowAttachments.length == 0) {\n ToastUtil.showToastMessage($translate.instant(\"solicitation.error.fiscal.service.attachments.notfound\"), ToastUtil.ToastType.WARN);\n return false;\n }\n }\n vm.document.Status = vm.documentStatus.PENDINGAPPROVAL;\n\n vm.save();\n }\n };\n\n vm.requesterCanSendApprovel = function () {\n var canSendApprovel = false;\n if (vm.document.Status == vm.documentStatus.ONGOING && vm.document.RequestBy.Id == AuthService.getUserID()) {\n canSendApprovel = true;\n }\n return canSendApprovel;\n };\n\n vm.requesterCanCancel = function () {\n var canCancel = false;\n if (vm.document.Status == vm.documentStatus.PENDINGAPPROVAL && vm.document.RequestBy.Id == AuthService.getUserID()) {\n canCancel = true;\n }\n return canCancel;\n }\n\n vm.canSaveButton = function () {\n var disabled = false;\n if ((vm.document.Status == vm.documentStatus.PENDINGAPPROVAL || vm.document.Status == vm.documentStatus.ONGOING)\n && vm.document.RequestBy.Id == AuthService.getUserID() || !vm.document.RequestByUserArea) {\n disabled = true;\n }\n return disabled;\n }\n\n vm.requesterEdit = function () {\n var disabled = false;\n if (!vm.document.TargetApproved && vm.document.RequestBy.Id == AuthService.getUserID() && (vm.document.Status == 0 || vm.document.Status == 1)) {\n disabled = true;\n }\n return disabled;\n };\n\n vm.requesterCanSave = function () {\n var disabled = false;\n if (!vm.document.TargetApproved && vm.document.RequestBy.Id == AuthService.getUserID()) {\n disabled = true;\n }\n return disabled;\n };\n\n vm.requesterCanSavePOList = function () {\n var disabled = false;\n var userLoggedId = AuthService.getUserID();\n if (vm.document.TargetApproved && vm.document.RequestBy.Id == userLoggedId\n && vm.document.SolicitationApproval && vm.document.SolicitationApproval.SolicitationApprovalPOs\n && vm.document.SolicitationApproval.SolicitationApprovalPOs.length == 0) {\n disabled = true;\n }\n return disabled;\n };\n\n vm.requesterCanSavePONote = function () {\n var disabled = false;\n var userLoggedId = AuthService.getUserID();\n if (vm.document.Status == vm.documentStatus.APPROVED && vm.document.RequestBy.Id == userLoggedId\n && vm.document.RequestType && vm.document.RequestType.Category == 3) {\n disabled = true;\n }\n return disabled;\n };\n\n vm.requesterFileUploadCanSave = function () {\n var disabled = true;\n if (vm.document.Status == vm.documentStatus.PENDINGAPPROVAL) {\n disabled = vm.document.TargetApproved;\n }\n return disabled;\n };\n\n vm.addFiles = function () {\n var disabled = true;\n if (vm.document.Status == vm.documentStatus.PENDINGAPPROVAL) {\n disabled = false;\n }\n return disabled;\n };\n\n vm.requesterCanChange = function () {\n var disabled = (vm.document.Status == 0 || vm.document.Status == 1);\n if (!vm.document.TargetApproved && vm.document.RequestBy.Id == AuthService.getUserID() && (vm.document.Status == 0 || vm.document.Status == 1)) {\n disabled = true;\n }\n return disabled;\n }\n\n vm.targetCanApproveReject = function () {\n var canApproveReject = false;\n if (vm.document.CanApprove && vm.document.Status == vm.documentStatus.PENDINGAPPROVAL) {\n canApproveReject = true;\n }\n return canApproveReject;\n }\n\n vm.getHTML = function (text) {\n return $sce.trustAsHtml(text);\n };\n\n vm.save = function () {\n if (validateSave()) {\n if (vm.document.SolicitationApproval != null) {\n if (vm.document.SolicitationApproval.Template == 5) {\n fillSolicitationApprovalPOList()\n }\n }\n\n if (vm.document.DeadLinePurchaseTemp) {\n vm.document.DeadLinePurchase = moment(angular.copy(vm.document.DeadLinePurchaseTemp)).format('DD/MM/YYYY');\n } else {\n vm.document.DeadLinePurchase = undefined;\n }\n vm.document.DeadLine = moment(angular.copy(vm.document.DeadLineTemp)).format('DD/MM/YYYY');\n vm.document.CreatedDate = moment(angular.copy(vm.document.CreatedDateTemp)).format('DD/MM/YYYY');\n vm.document.RequestByUserArea = vm.RequestByUserArea;\n if (angular.isUndefined(vm.Reference)) {\n vm.document.Reference = undefined;\n }\n\n if (vm.document.SolicitationFiscal) {\n vm.document.SolicitationFiscal.EmissionDate = moment(angular.copy(vm.document.SolicitationFiscal.EmissionDateTemp)).format('DD/MM/YYYY');\n vm.document.SolicitationFiscal.DueDate = moment(angular.copy(vm.document.SolicitationFiscal.DueDateTemp)).format('DD/MM/YYYY');\n if (!vm.Billet) {\n vm.document.SolicitationFiscal.Billet = 0;\n } else {\n vm.document.SolicitationFiscal.Billet = 1;\n }\n if ( vm.document.SolicitationFiscal.Vendor != undefined && vm.document.SolicitationFiscal.Vendor.Id >0 ){\n vm.document.SolicitationFiscal.Vendor = {\n Id: vm.document.SolicitationFiscal.Vendor.Id,\n Title: vm.document.SolicitationFiscal.Vendor.Title,\n CodeSAP: vm.document.SolicitationFiscal.Vendor.CodeSAP,\n FantasyName: vm.document.SolicitationFiscal.Vendor.FantasyName,\n CsActive: vm.document.SolicitationFiscal.Vendor.CsActive\n };\n } else {\n vm.document.SolicitationFiscal.Vendor = null;\n }\n }\n DocumentFlowService.save(vm.document).then(function () {\n ToastUtil.showToastMessage($translate.instant(\"document.flow.msg.save.success\"), ToastUtil.ToastType.SUCCESS);\n $state.go('document-flow-list', {});\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"document.flow.msg.save.error\"), ToastUtil.ToastType.WARN);\n });\n }\n }\n\n vm.sendDocumentFlowCancel = function () {\n DialogControllerTemplate.showWithCloseListener('document.flow.cancel.title', 'document.flow.cancel.sub.title', '', vm.confirmCancel, null);\n }\n\n vm.confirmCancel = function (remark) {\n vm.document.Remark = remark.value;\n vm.document.Status = vm.documentStatus.CANCELED;\n vm.save();\n }\n\n vm.saveApproveReject = function (statusTarget) {\n\n if (statusTarget == vm.statusTarget.REJECT) {\n DialogControllerTemplate.showWithCloseListener('document.flow.reject.title', 'document.flow.reject.sub.title', '', vm.confirmRemark, null);\n } else {\n DialogControllerTemplate.showWithCloseListener('document.flow.approved.title', 'document.flow.approved.sub.title', '', vm.confirmRemarkApprover, null);\n }\n }\n\n vm.returnApproval = function () {\n DialogControllerTemplate.showWithCloseListener('document.flow.return.title', null, '', vm.confirmReturnRemark, vm, null, null);\n }\n\n vm.listTargetsApprovedRejected = function () {\n var listTargets = [];\n for (var i = 0; i < vm.document.DocumentFlowTargets.length; i++) {\n if (vm.document.DocumentFlowTargets[i].Status !== vm.statusTarget.PENDINGAPPROVAL) {\n listTargets.push({\n Id: vm.document.DocumentFlowTargets[i].OrderTarget,\n Name: vm.document.DocumentFlowTargets[i].User.Name\n })\n }\n }\n return listTargets;\n }\n\n vm.confirmRemarkApprover = function (remark) {\n for (var i = 0; i < vm.document.DocumentFlowTargets.length; i++) {\n if (vm.document.DocumentFlowTargets[i].User.Id == AuthService.getUserID()) {\n vm.document.DocumentFlowTargets[i].Status = vm.statusTarget.APPROVED;\n vm.document.DocumentFlowTargets[i].Remark = remark.value;\n }\n }\n vm.save();\n }\n\n vm.confirmRemark = function (remark) {\n vm.document.Remark = remark.value;\n for (var i = 0; i < vm.document.DocumentFlowTargets.length; i++) {\n if (vm.document.DocumentFlowTargets[i].User.Id == AuthService.getUserID()) {\n vm.document.DocumentFlowTargets[i].Status = vm.statusTarget.REJECT;\n vm.document.DocumentFlowTargets[i].Remark = remark.value;\n }\n }\n vm.document.Status = vm.documentStatus.REJECT;\n vm.save();\n }\n\n vm.confirmReturnRemark = function (remark) {\n vm.document.Remark = remark.value;\n var order = remark.orderTarget;\n var userLoggedId = AuthService.getUserID();\n var itemUserLogged = vm.document.DocumentFlowTargets.findIndex(function (item) {\n return item.User.Id == userLoggedId;\n });\n\n vm.document.DocumentFlowTargets[itemUserLogged].Status = vm.statusTarget.PENDINGAPPROVAL;\n vm.document.DocumentFlowTargets[itemUserLogged].ProcessingDate = null;\n vm.document.DocumentFlowTargets[itemUserLogged].ReceiveDate = null;\n vm.document.DocumentFlowTargets[itemUserLogged].ParallelApproval = false;\n vm.document.DocumentFlowTargets[itemUserLogged].TargetNotification = false;\n vm.document.DocumentFlowTargets[itemUserLogged].Remark = remark.value;\n\n for (var i = 0; i < vm.document.DocumentFlowTargets.length; i++) {\n if (vm.document.DocumentFlowTargets[i].OrderTarget >= order) {\n vm.document.DocumentFlowTargets[i].Status = vm.statusTarget.PENDINGAPPROVAL;\n vm.document.DocumentFlowTargets[i].ProcessingDate = null;\n vm.document.DocumentFlowTargets[i].ReceiveDate = null;\n vm.document.DocumentFlowTargets[i].ParallelApproval = false;\n vm.document.DocumentFlowTargets[i].TargetNotification = false;\n }\n\n }\n if (remark.returnTo === \"1\") {\n vm.document.Status = vm.documentStatus.ONGOING;\n }\n vm.save();\n };\n\n vm.isApprovalParallelEnabled = function () {\n return vm.approvalParallelEnabled;\n };\n\n vm.goToDocumentFlow = function (id) {\n $window.open(\"#/document-flow/edit/\" + id, '_blank', 'heigth=600,width=600');\n\n }\n\n vm.addReference = function (referenceId) {\n vm.Reference = null;\n vm.document.Reference = null;\n var filterDocumentFlow = {\n RequestTypeId: referenceId\n };\n\n DocumentFlowService.getRefence(filterDocumentFlow)\n .then(function (response) {\n if (response.length > 0) {\n vm.Reference = response[0];\n vm.document.Reference = {\n Id: vm.Reference.Id\n }\n vm.document.DeadLineTemp = moment(vm.Reference.DeadLine, 'YYYY-MM-DD')._d;\n } else {\n ToastUtil.showToastMessage($translate.instant(\"document.flow.reference.notfound\"), ToastUtil.ToastType.WARN);\n }\n }).catch(function () {\n ToastUtil.showToastMessage($translate.instant(\"document.flow.msg.load.error\"), ToastUtil.ToastType.ERROR);\n });\n };\n\n function validateSave() {\n return vm.validateDeadline() && validadeSolicitation() && vm.document.DocumentFlowTargets.length > 0;\n }\n\n function validadeSolicitation() {\n var validSolicitation = true;\n if (vm.Category == 1) {\n if (vm.document.SolicitationApproval.Template == 1) {\n validSolicitation = vm.document.SolicitationApproval.Transfer || vm.document.SolicitationApproval.Ticket || vm.document.SolicitationApproval.Money || vm.document.SolicitationApproval.Outsider;\n if (!validSolicitation) {\n ToastUtil.showToastMessage($translate.instant(\"solicitation.error.type.payment\"), ToastUtil.ToastType.WARN);\n }\n\n if (!vm.validatePaymentDate())\n validSolicitation = false;\n\n } else if (vm.document.SolicitationApproval.Template == 2) {\n if (vm.document.SolicitationApproval.SolicitationExpenses === undefined || vm.document.SolicitationApproval.SolicitationExpenses === null || vm.document.SolicitationApproval.SolicitationExpenses.length === 0)\n validSolicitation = false;\n\n if (!validSolicitation) {\n ToastUtil.showToastMessage($translate.instant(\"solicitation.error.type.expense\"), ToastUtil.ToastType.WARN);\n }\n } else if (vm.document.SolicitationApproval.Template == 3) {\n if (vm.document.SolicitationApproval.SolicitationMileages === undefined || vm.document.SolicitationApproval.SolicitationMileages === null || vm.document.SolicitationApproval.SolicitationMileages.length === 0)\n validSolicitation = false;\n\n if (!validSolicitation) {\n ToastUtil.showToastMessage($translate.instant(\"solicitation.error.type.expense\"), ToastUtil.ToastType.WARN);\n }\n }\n\n\n return validSolicitation;\n } else if (vm.Category == 3) {\n return $scope.documentFlowForm.$valid;\n } else if (vm.Category == 7) {\n if (vm.document.SolicitationFiscal.Template == 6) {\n if (vm.document.SolicitationFiscal.SolicitationServices === undefined || vm.document.SolicitationFiscal.SolicitationServices === null || vm.document.SolicitationFiscal.SolicitationServices.length === 0) {\n ToastUtil.showToastMessage($translate.instant(\"solicitation.error.fiscal.service\"), ToastUtil.ToastType.WARN);\n return false;\n }\n if ((vm.document.Status == vm.documentStatus.APPROVED || vm.document.Status == vm.documentStatus.PENDINGAPPROVAL)\n && (vm.document.DocumentFlowAttachments === undefined || vm.document.DocumentFlowAttachments.length == 0)) {\n ToastUtil.showToastMessage($translate.instant(\"solicitation.error.fiscal.service.attachments.notfound\"), ToastUtil.ToastType.WARN);\n return false;\n }\n }\n if (vm.document.SolicitationFiscal.Template == 7) {\n if (vm.document.SolicitationFiscal.SolicitationCustomsExpenses === undefined || vm.document.SolicitationFiscal.SolicitationCustomsExpenses === null || vm.document.SolicitationFiscal.SolicitationCustomsExpenses.length === 0) {\n ToastUtil.showToastMessage($translate.instant(\"solicitation.error.fiscal.service\"), ToastUtil.ToastType.WARN);\n return false;\n }\n if ((vm.document.Status == vm.documentStatus.APPROVED || vm.document.Status == vm.documentStatus.PENDINGAPPROVAL)\n && (vm.document.DocumentFlowAttachments === undefined || vm.document.DocumentFlowAttachments.length == 0)) {\n ToastUtil.showToastMessage($translate.instant(\"solicitation.error.fiscal.service.attachments.notfound\"), ToastUtil.ToastType.WARN);\n return false;\n }\n }\n return true;\n } else {\n return vm.document.Solicitation !== null && vm.document.Solicitation !== \"\";\n }\n }\n\n function setValidity(valid) {\n $scope.documentFlowForm['deadline'].$setValidity('timeConflict', valid, $scope.documentFlowForm['deadline']);\n }\n\n vm.validateDeadline = function () {\n var valid = true;\n if (vm.document.DeadLineTemp && moment(vm.document.DeadLineTemp).isBefore(moment(vm.document.CreatedDateTemp))) {\n ToastUtil.showToastMessage($translate.instant(\"document.flow.msg.error.min.deadline\"), ToastUtil.ToastType.WARN);\n valid = false;\n }\n setValidity(valid);\n return valid;\n }\n\n vm.validatePaymentDate = function () {\n var valid = true;\n var momentDate = moment(vm.document.DeadLineTemp);\n var deadlineDate = new Date(momentDate.year(), momentDate.month(), momentDate.date());\n if (vm.document.SolicitationApproval.PaymentDate && moment(vm.document.SolicitationApproval.PaymentDate).isBefore(deadlineDate)) {\n ToastUtil.showToastMessage($translate.instant(\"document.flow.msg.error.min.paymentdate\"), ToastUtil.ToastType.WARN);\n vm.document.SolicitationApproval.PaymentDate = null;\n valid = false;\n }\n return valid;\n }\n\n vm.deleteReference = function () {\n vm.Reference = null;\n vm.document.Reference = null;\n };\n\n vm.deleteContractReference = function () {\n vm.ContractReference = null;\n vm.document.ContractReference = null;\n };\n\n vm.changeAdvance = function () {\n if (!vm.document.SolicitationApproval.Advance) {\n vm.document.SolicitationApproval.NumOrder = null;\n }\n };\n\n vm.changeTransfer = function () {\n if (!vm.document.SolicitationApproval.Transfer) {\n vm.document.SolicitationApproval.Bank = null;\n vm.document.SolicitationApproval.BankName = null;\n vm.document.SolicitationApproval.Agency = null;\n vm.document.SolicitationApproval.Account = null;\n } else {\n vm.document.SolicitationApproval.Bank = 0;\n vm.onBankNameChange();\n }\n };\n\n function init() {\n loadProfileModules();\n loadComments();\n }\n\n function checkValues(item) {\n const letters = item.split('')\n var cont = 0\n for (var i = 0; i < letters.length; i++) {\n if (letters[i] == '@') {\n cont++;\n }\n if (cont > 1) {\n return false;\n }\n }\n return true;\n }\n\n function removeChars(item) {\n item = item.substr(1)\n return item\n }\n\n function parseCommentText(list) {\n var name = \"\";\n for (var i = 0; i < list.length; i++) {\n list[i].Summary = []\n if (list[i].Comment.contains(' ')) {\n var values = list[i].Comment.split(' ');\n for (var j = 0; j < values.length; j++) {\n values[j] = values[j].trim()\n if (values[j].startsWith('@') && checkValues(values[j]) && values[j].length > 1) {\n values[j + 1] = values[j + 1].trim()\n if (!values[j + 1].startsWith('@')) {\n name = values[j] + \" \" + values[j + 1]\n j++\n list[i].Summary.push(name)\n continue;\n } else {\n name = values[j].substr(1)\n list[i].Summary.push(name)\n }\n } else {\n if (values[j].startsWith('@')) {\n while (values[j].startsWith('@')) {\n values[j] = removeChars(values[j])\n }\n }\n name = values[j].concat(\" \")\n list[i].Summary.push(name)\n }\n }\n } else {\n list[i].Summary.push(list[i].Comment)\n }\n }\n }\n\n function loadComments() {\n if ($stateParams.Id) {\n DocumentFlowService.getComments($stateParams.Id).then(function (response) {\n vm.Comments = angular.copy(response);\n parseCommentText(vm.Comments)\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"document.flow.msg.load.error\"), ToastUtil.ToastType.ERROR);\n });\n $scope.comments = [\n {\n author: 'Lucas Brelaz',\n msg: 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolores recusandae soluta at corporis magnam beatae adipisci eaque, maiores iste architecto iusto enim assumenda suscipit laborum numquam, rerum doloremque dignissimos tempore?rem Ipsum e tal',\n dateTime: Date.now()\n },\n {\n author: 'Joao Silva',\n msg: 'Donec ut urna dignissim, placerat sapien facilisis, ultrices augue. Aliquam id nisi facilisis, egestas ante vitae, egestas elit.',\n dateTime: Date.now()\n }\n ]\n }\n }\n\n function checkSpecialChars(item) {\n var format = /[!@#$%^&*()_+\\-=\\[\\]{};':\"\\\\|,.<>\\/?]+/;\n if (format.test(item)) {\n return true;\n } else {\n return false;\n }\n }\n\n function sendTelegramMessages(array, doc) {\n for (var i = 0; i < array.length; i++) {\n vm.botMessage.Id = 0\n vm.botMessage.Message = ''\n var message = AuthService.getAliasName() + \" \" + $translate.instant(\"document.flow.comments.mentioned\") + \" \" + doc.Id + \"-\" + doc.Subject;\n vm.botMessage.Id = array[i].Id\n vm.botMessage.Message = message\n BotService.sendMessage(vm.botMessage).then(function () {\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"document.flow.msg.load.error\"), ToastUtil.ToastType.ERROR);\n });\n }\n }\n\n vm.saveComment = function () {\n var userNames = [];\n vm.comment.Comment = vm.comment.Comment.replace(/[\\r\\n]+/gm, \" \");\n vm.comment.Comment = vm.comment.Comment.replace(/ +/g, ' ');\n var values = vm.comment.Comment.split(' ');\n var firstName = '';\n var secondName = '';\n var commentsArray = [];\n var name = '';\n for (var i = 0; i < values.length; i++) {\n if (values[i].startsWith('@')) {\n firstName = values[i];\n secondName = values[i + 1];\n if (secondName != undefined) {\n while (true) {\n if (checkSpecialChars(secondName.slice(-1))) {\n secondName = secondName.substring(0, secondName.length - 1);\n } else {\n break;\n }\n }\n name = firstName.replace('@', '').concat(' ' + secondName).replace('@', '');\n userNames.push(name);\n } else {\n userNames.push(firstName);\n }\n }\n }\n for (var i = 0; i < vm.usersCommentsList.length; i++) {\n for (var j = 0; j < userNames.length; j++) {\n if (vm.usersCommentsList[i].Name.trim() == userNames[j].trim()) {\n if (addInstance(vm.usersCommentsList[i].Id)) {\n vm.comment.DocumentFlowUsersComment.push(angular.copy(vm.usersCommentsList[i]));\n }\n }\n }\n }\n\n commentsArray = vm.comment.Comment.split(' ')\n var replaceString = ''\n var index = 0\n for (var i = 0; i < commentsArray.length; i++) {\n index = 0;\n if (commentsArray[i].startsWith('@') && commentsArray[i].length > 1) {\n for (var j = 0; j < vm.comment.DocumentFlowUsersComment.length; j++) {\n if (commentsArray[i].substr(1).trim() == vm.comment.DocumentFlowUsersComment[j].Name.trim().split(' ')[0]) {\n index = 1\n }\n }\n if (index == 0) {\n //replaceString = commentsArray[i].replace('@','')\n replaceString = commentsArray[i]\n if (replaceString.startsWith('@')) {\n while (replaceString.startsWith('@')) {\n replaceString = removeChars(replaceString)\n }\n }\n vm.comment.Comment = vm.comment.Comment.replace(commentsArray[i], replaceString)\n }\n }\n }\n\n vm.comment.DocumentFlowId = $stateParams.Id;\n DocumentFlowService.saveComment(vm.comment).then(function () {\n sendTelegramMessages(vm.comment.DocumentFlowUsersComment, vm.document);\n vm.comment.Comment = '';\n vm.comment.DocumentFlowUsersComment = [];\n vm.usersCommentsList = [];\n loadComments();\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"document.flow.msg.load.error\"), ToastUtil.ToastType.ERROR);\n });\n };\n\n function loadUsers() {\n DefaultService.loadUserInputDirective()\n .then(function (response) {\n var index = response.findIndex(function (item) {\n return item.Id == vm.document.RequestBy.Id;\n });\n\n UserService.loadUserArea(vm.document.RequestBy.Id)\n .then(function (response) {\n vm.UserAreaList = response.Areas;\n\n if (vm.document.Status == vm.documentStatus.ONGOING) {\n vm.UserAreaList = angular.copy(response.Areas).filter(function (area) {\n return area.CsActive == true;\n });\n if (vm.document.RequestByUserArea && !vm.document.RequestByUserArea.CsActive) {\n vm.RequestByUserArea = undefined;\n vm.document.RequestByUserArea = undefined;\n }\n }\n if (vm.document.RequestByUserArea) {\n vm.RequestByUserArea = vm.UserAreaList.find(function (area) {\n return area.Id == vm.document.RequestByUserArea.Id;\n });\n }\n });\n\n vm.UsersToMention = angular.copy(response)\n $scope.persons = angular.copy(response);\n response.splice(index, 1);\n vm.Users = angular.copy(response);\n })\n .catch(function (error) {\n $log.log(error);\n });\n }\n\n function canEdit(documentFlow) {\n\n var userLoggedId = AuthService.getUserID();\n\n if (documentFlow.RequestBy.Id == userLoggedId || documentFlow.Visibility == 1) {\n return true;\n }\n\n var index = documentFlow.DocumentFlowTargets.findIndex(function (item) {\n //return item.User.Id == userLoggedId && item.TargetNotification;\n return item.User.Id == userLoggedId;\n });\n\n if (index >= 0) {\n return true;\n } else {\n return false;\n }\n\n }\n\n function fillPOList() {\n vm.listaPO = []\n if (vm.document.SolicitationApproval.SolicitationApprovalPOs != null\n && vm.document.SolicitationApproval.SolicitationApprovalPOs.length > 0) {\n var poValues = vm.document.SolicitationApproval.SolicitationApprovalPOs\n if (poValues != null && poValues.length > 0) {\n for (var i = 0; i < poValues.length; i++) {\n vm.listaPO.push(poValues[i])\n }\n }\n }\n }\n\n function loadDocumentFlowToEdit() {\n DocumentFlowService.getById(vm.idToEdit).then(function (response) {\n vm.document = angular.copy(response);\n if (canEdit(vm.document)) {\n if (vm.document.Reference) {\n vm.Reference = {\n Id: vm.document.Reference.Id,\n Title: vm.document.Reference.Id + \" - \" + vm.document.Reference.Subject,\n Subject: vm.document.Reference.Subject\n };\n }\n vm.document.CreatedDate = moment(vm.document.CreatedDate, 'DD/MM/YYYY')._d;\n vm.document.DeadLine = moment(vm.document.DeadLine, 'DD/MM/YYYY')._d;\n vm.RequestByUserArea = vm.document.RequestByUserArea;\n vm.document.CreatedDateTemp = angular.copy(vm.document.CreatedDate);\n vm.document.DeadLineTemp = angular.copy(vm.document.DeadLine);\n if (vm.document.DeadLinePurchase) {\n vm.document.DeadLinePurchase = moment(vm.document.DeadLinePurchase, 'DD/MM/YYYY')._d;\n vm.document.DeadLinePurchaseTemp = angular.copy(vm.document.DeadLinePurchase);\n }\n\n if (vm.document.TargetApproved) {\n for (var i = 0; i < vm.document.DocumentFlowTargets.length; i++) {\n vm.document.DocumentFlowTargets[i].DisabledParallel = true;\n vm.document.DocumentFlowTargets[i].LeadTime = '-';\n if (vm.document.DocumentFlowTargets[i].ProcessingDate && vm.document.DocumentFlowTargets[i].ReceiveDate) {\n getDaysOff(i);\n }\n }\n }\n\n if (vm.document.ContractReference) {\n vm.ContractReference = {\n Id: vm.document.ContractReference.Id,\n Vendor: vm.document.ContractReference.Vendor\n };\n }\n\n vm.onRequestTypeSelected();\n\n var copyDocument = angular.copy(response);\n\n fillSolicitationApproval(copyDocument);\n fillSolicitationFiscal(copyDocument);\n\n loadUsers();\n } else {\n ToastUtil.showToastMessage($translate.instant('document.flow.edit.status.validation.msg'), ToastUtil.ToastType.WARN);\n $state.go('document-flow-list', {});\n }\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"document.flow.msg.load.error\"), ToastUtil.ToastType.ERROR);\n });\n }\n\n function getDaysOff(index) {\n var processingDay = moment(vm.document.DocumentFlowTargets[index].ProcessingDate).format('DD/MM/YYYY');\n var receiveDay = moment(vm.document.DocumentFlowTargets[index].ReceiveDate).format('DD/MM/YYYY');\n\n var processingMoment = moment(moment(vm.document.DocumentFlowTargets[index].ProcessingDate).format('YYYY-MM-DD HH:mm'));\n var receiveMoment = moment(moment(vm.document.DocumentFlowTargets[index].ReceiveDate).format('YYYY-MM-DD HH:mm'));\n\n var daysOff = 0;\n CalendarService.getLeadTimeByPeriod(processingDay, receiveDay).then(function (response) {\n if (response != null && response != \"\") {\n daysOff = parseInt(response);\n }\n\n var weekNumProcessing = processingMoment.week();\n var weekNumReceove = receiveMoment.week();\n\n var DaysWeekends = (weekNumProcessing - weekNumReceove) * 2;\n daysOff = daysOff + DaysWeekends;\n\n processingMoment = moment(angular.copy(processingMoment).subtract(parseInt(daysOff), \"days\").format(\"YYYY-MM-DD HH:mm\"));\n\n var diference = processingMoment.diff(receiveMoment);\n var leadTime = moment.duration(diference).asHours().toFixed(1);\n if ( leadTime < 0 ) {\n leadTime = 0;\n }\n vm.document.DocumentFlowTargets[index].LeadTime = leadTime;\n });\n }\n\n function fillSolicitationApproval(documentTemp) {\n if (documentTemp && documentTemp.SolicitationApproval) {\n //cash\n if (documentTemp.SolicitationApproval.Template == 1) {\n var SolicitationApprovalTemplate1 = {\n Account: angular.copy(documentTemp.SolicitationApproval.Account),\n Advance: angular.copy(documentTemp.SolicitationApproval.Advance),\n Agency: angular.copy(documentTemp.SolicitationApproval.Agency),\n Bank: angular.copy(documentTemp.SolicitationApproval.Bank),\n BankName: angular.copy(documentTemp.SolicitationApproval.BankName),\n CAccounting: angular.copy(documentTemp.SolicitationApproval.CAccounting),\n CCost: angular.copy(documentTemp.SolicitationApproval.CCost),\n CodeSAP: angular.copy(documentTemp.SolicitationApproval.CodeSAP),\n Expiration: angular.copy(documentTemp.SolicitationApproval.Expiration),\n PaymentDate: angular.copy(documentTemp.SolicitationApproval.PaymentDate),\n Filial: angular.copy(documentTemp.SolicitationApproval.Filial),\n HeadOffice: angular.copy(documentTemp.SolicitationApproval.HeadOffice),\n Id: angular.copy(documentTemp.SolicitationApproval.Id),\n Invoice: angular.copy(documentTemp.SolicitationApproval.Invoice),\n Moeda: angular.copy(documentTemp.SolicitationApproval.Moeda),\n Money: angular.copy(documentTemp.SolicitationApproval.Money),\n Note: angular.copy(documentTemp.SolicitationApproval.Note),\n NumOrder: angular.copy(documentTemp.SolicitationApproval.NumOrder),\n Template: angular.copy(documentTemp.SolicitationApproval.Template),\n Ticket: angular.copy(documentTemp.SolicitationApproval.Ticket),\n Outsider: angular.copy(documentTemp.SolicitationApproval.Outsider),\n Transfer: angular.copy(documentTemp.SolicitationApproval.Transfer),\n Value: angular.copy(documentTemp.SolicitationApproval.Value),\n Vendor: angular.copy(documentTemp.SolicitationApproval.Vendor),\n SolicitationExpenses: angular.copy(documentTemp.SolicitationApproval.SolicitationExpenses)\n }\n SolicitationApprovalTemplate1.Expiration = setDateViewModel(SolicitationApprovalTemplate1.Expiration);\n SolicitationApprovalTemplate1.PaymentDate = setDateViewModel(SolicitationApprovalTemplate1.PaymentDate);\n vm.document.SolicitationApproval = SolicitationApprovalTemplate1;\n vm.SolicitationExpense = undefined;\n } else if (documentTemp.SolicitationApproval.Template == 2) { //refund\n listTypeExpenses();\n vm.SolicitationExpense = {\n TypeExpense: undefined,\n Quantity: undefined,\n Value: undefined\n };\n var SolicitationApprovalTemplate2 = {\n Id: angular.copy(documentTemp.SolicitationApproval.Id),\n Name: angular.copy(documentTemp.SolicitationApproval.Name),\n Phone: angular.copy(documentTemp.SolicitationApproval.Phone),\n CCost: angular.copy(documentTemp.SolicitationApproval.CCost),\n Registration: angular.copy(documentTemp.SolicitationApproval.Registration),\n SolicitationExpenses: angular.copy(documentTemp.SolicitationApproval.SolicitationExpenses),\n Account: angular.copy(documentTemp.SolicitationApproval.Account),\n Agency: angular.copy(documentTemp.SolicitationApproval.Agency),\n Bank: angular.copy(documentTemp.SolicitationApproval.Bank),\n BankName: angular.copy(documentTemp.SolicitationApproval.BankName),\n Note: angular.copy(documentTemp.SolicitationApproval.Note),\n Template: angular.copy(documentTemp.SolicitationApproval.Template),\n Value: angular.copy(documentTemp.SolicitationApproval.Value),\n AdvanceExpense: angular.copy(documentTemp.SolicitationApproval.AdvanceExpense)\n }\n vm.document.SolicitationApproval = SolicitationApprovalTemplate2;\n vm.calculateTotal();\n } else if (documentTemp.SolicitationApproval.Template == 3) { //mileage\n vm.SolicitationMileage = {\n SolicitationDate: undefined,\n SolicitationHour: undefined,\n Origin: undefined,\n Destiny: undefined,\n StartKm: undefined,\n EndKm: undefined,\n Reason: undefined,\n Total: 0\n };\n var SolicitationApprovalTemplate3 = {\n Id: angular.copy(documentTemp.SolicitationApproval.Id),\n Name: angular.copy(documentTemp.SolicitationApproval.Name),\n Phone: angular.copy(documentTemp.SolicitationApproval.Phone),\n CCost: angular.copy(documentTemp.SolicitationApproval.CCost),\n Registration: angular.copy(documentTemp.SolicitationApproval.Registration),\n SolicitationMileages: angular.copy(documentTemp.SolicitationApproval.SolicitationMileages),\n Account: angular.copy(documentTemp.SolicitationApproval.Account),\n Agency: angular.copy(documentTemp.SolicitationApproval.Agency),\n Bank: angular.copy(documentTemp.SolicitationApproval.Bank),\n BankName: angular.copy(documentTemp.SolicitationApproval.BankName),\n Note: angular.copy(documentTemp.SolicitationApproval.Note),\n Template: angular.copy(documentTemp.SolicitationApproval.Template),\n Value: angular.copy(documentTemp.SolicitationApproval.Value),\n AdvanceExpense: angular.copy(documentTemp.SolicitationApproval.AdvanceExpense)\n }\n vm.document.SolicitationApproval = SolicitationApprovalTemplate3;\n vm.calculateTotalMileage();\n } else if (documentTemp.SolicitationApproval.Template == 4) {\n vm.SolicitationQuotation = {\n Material: undefined,\n Quantity: undefined,\n UnitMeasure: undefined\n };\n var TemplateQuotation = {\n Id: angular.copy(documentTemp.SolicitationApproval.Id),\n Template: angular.copy(documentTemp.SolicitationApproval.Template),\n Nature: angular.copy(documentTemp.SolicitationApproval.Nature),\n Documentation: angular.copy(documentTemp.SolicitationApproval.Documentation),\n Note: angular.copy(documentTemp.SolicitationApproval.Note),\n SolicitationQuotations: angular.copy(documentTemp.SolicitationApproval.SolicitationQuotations)\n };\n vm.document.SolicitationApproval = TemplateQuotation;\n vm.SolicitationExpense = undefined;\n } else if (documentTemp.SolicitationApproval.Template == 5) {\n var TemplatePO = {\n Id: angular.copy(documentTemp.SolicitationApproval.Id),\n Template: angular.copy(documentTemp.SolicitationApproval.Template),\n Asset: angular.copy(documentTemp.SolicitationApproval.Asset),\n CAccounting: angular.copy(documentTemp.SolicitationApproval.CAccounting),\n CCost: angular.copy(documentTemp.SolicitationApproval.CCost),\n Capex: angular.copy(documentTemp.SolicitationApproval.Capex),\n CodeSAP: angular.copy(documentTemp.SolicitationApproval.CodeSAP),\n Value: angular.copy(documentTemp.SolicitationApproval.Value),\n Vendor: angular.copy(documentTemp.SolicitationApproval.Vendor),\n FinalValue: angular.copy(documentTemp.SolicitationApproval.FinalValue),\n Model: angular.copy(documentTemp.SolicitationApproval.Model),\n SolicitationApprovalPOs: angular.copy(documentTemp.SolicitationApproval.SolicitationApprovalPOs),\n Note: angular.copy(documentTemp.SolicitationApproval.Note)\n };\n vm.document.SolicitationApproval = TemplatePO;\n vm.SolicitationExpense = undefined;\n fillPOList()\n }\n }\n }\n\n function fillSolicitationApprovalPOList() {\n vm.document.SolicitationApproval.SolicitationApprovalPOs = []\n vm.document.SolicitationApproval.SolicitationApprovalPOs = vm.listaPO;\n //console.log('vm.listaPO :>> ', vm.listaPO);\n return true\n }\n\n function fillSolicitationFiscal(documentTemp) {\n if ( documentTemp && documentTemp.SolicitationFiscal ) {\n var TemplateFiscal\n if ( documentTemp.SolicitationFiscal.Billet == 0 ) {\n vm.Billet = false;\n } else {\n vm.Billet = true;\n }\n if (documentTemp.SolicitationFiscal.Template == 6) { //service\n vm.SolicitationService = {\n PO: undefined,\n Description: undefined,\n Item: undefined,\n Value: undefined\n };\n TemplateFiscal = {\n Id: angular.copy(documentTemp.SolicitationFiscal.Id),\n Template: angular.copy(documentTemp.SolicitationFiscal.Template),\n CodeSAP: angular.copy(documentTemp.SolicitationFiscal.CodeSAP),\n Vendor: angular.copy(documentTemp.SolicitationFiscal.Vendor),\n NF: angular.copy(documentTemp.SolicitationFiscal.NF),\n EmissionDate: angular.copy(documentTemp.SolicitationFiscal.EmissionDate),\n DueDate: angular.copy(documentTemp.SolicitationFiscal.DueDate),\n Code: angular.copy(documentTemp.SolicitationFiscal.Code),\n Billet: angular.copy(documentTemp.SolicitationFiscal.Billet),\n SolicitationServices: angular.copy(documentTemp.SolicitationFiscal.SolicitationServices)\n };\n\n TemplateFiscal.EmissionDateTemp = moment(documentTemp.SolicitationFiscal.EmissionDate, 'DD/MM/YYYY')._d;\n TemplateFiscal.DueDateTemp = moment(documentTemp.SolicitationFiscal.DueDate, 'DD/MM/YYYY')._d;\n\n vm.document.SolicitationFiscal = TemplateFiscal;\n vm.document.SolicitationFiscal.ValueTotal = 0;\n vm.document.SolicitationApproval = undefined;\n vm.SolicitationExpense = undefined;\n\n vm.document.SolicitationFiscal.SolicitationServices.forEach(function (item) {\n vm.document.SolicitationFiscal.ValueTotal = (parseFloat(vm.document.SolicitationFiscal.ValueTotal) + parseFloat(item.Value)).toFixed(2);\n })\n }\n\n if (documentTemp.SolicitationFiscal.Template == 7) { //service\n vm.SolicitationCustomsExpense = {\n Description: undefined,\n NrProcess: undefined,\n Value: undefined\n };\n TemplateFiscal = {\n Id: angular.copy(documentTemp.SolicitationFiscal.Id),\n Template: angular.copy(documentTemp.SolicitationFiscal.Template),\n CodeSAP: angular.copy(documentTemp.SolicitationFiscal.CodeSAP),\n Vendor: angular.copy(documentTemp.SolicitationFiscal.Vendor),\n NF: angular.copy(documentTemp.SolicitationFiscal.NF),\n EmissionDate: angular.copy(documentTemp.SolicitationFiscal.EmissionDate),\n DueDate: angular.copy(documentTemp.SolicitationFiscal.DueDate),\n Code: angular.copy(documentTemp.SolicitationFiscal.Code),\n Billet: angular.copy(documentTemp.SolicitationFiscal.Billet),\n SolicitationCustomsExpenses: angular.copy(documentTemp.SolicitationFiscal.SolicitationCustomsExpenses)\n };\n\n TemplateFiscal.EmissionDateTemp = moment(documentTemp.SolicitationFiscal.EmissionDate, 'DD/MM/YYYY')._d;\n TemplateFiscal.DueDateTemp = moment(documentTemp.SolicitationFiscal.DueDate, 'DD/MM/YYYY')._d;\n\n vm.document.SolicitationFiscal = TemplateFiscal;\n vm.document.SolicitationFiscal.ValueTotal = 0;\n vm.document.SolicitationApproval = undefined;\n vm.SolicitationExpense = undefined\n\n vm.document.SolicitationFiscal.SolicitationCustomsExpenses.forEach(function (item) {\n vm.document.SolicitationFiscal.ValueTotal = (parseFloat(vm.document.SolicitationFiscal.ValueTotal) + parseFloat(item.Value)).toFixed(2);\n })\n }\n }\n }\n\n vm.cleanForm = function () {\n vm.SolicitationExpense = undefined;\n vm.SolicitationMileage = undefined;\n vm.SolicitationQuotation = undefined;\n vm.SolicitationService = undefined;\n vm.SolicitationCustomsExpense = undefined;\n vm.SubTotal = 0;\n vm.SubTotalQtd = 0;\n vm.Total = 0;\n vm.TotalExpense = 0;\n vm.AdvanceExpense = 0;\n vm.document.SolicitationApproval.AdvanceExpense = vm.AdvanceExpense;\n if (vm.document.SolicitationApproval.Template == 3) {\n loadBrlKm();\n }\n if (vm.document.SolicitationApproval && vm.document.SolicitationApproval.SolicitationExpenses) {\n vm.document.SolicitationApproval.SolicitationExpenses = undefined;\n }\n if (vm.document.SolicitationApproval && vm.document.SolicitationApproval.SolicitationMileages) {\n vm.document.SolicitationApproval.SolicitationMileages = undefined;\n }\n if (vm.document.SolicitationFiscal && vm.document.SolicitationFiscal.SolicitationServices) {\n vm.document.SolicitationFiscal.SolicitationServices = undefined;\n }\n if (vm.document.SolicitationFiscal && vm.document.SolicitationFiscal.SolicitationCustomsExpenses) {\n vm.document.SolicitationFiscal.SolicitationCustomsExpenses = undefined;\n }\n };\n\n vm.calculateTotalMileage = function () {\n vm.SubTotal = 0;\n vm.TotalExpense = 0;\n if (vm.document.SolicitationApproval && vm.document.SolicitationApproval.SolicitationMileages) {\n vm.document.SolicitationApproval.SolicitationMileages.forEach(function (element) {\n vm.SubTotal = parseFloat((vm.SubTotal + element.Total).toFixed(2));\n });\n\n if (!vm.document.SolicitationApproval.AdvanceExpense || vm.document.SolicitationApproval.AdvanceExpense == null) {\n vm.document.SolicitationApproval.AdvanceExpense = parseFloat(\"0\");\n }\n vm.AdvanceExpense = vm.document.SolicitationApproval.AdvanceExpense;\n vm.TotalExpense = parseFloat((vm.SubTotal * vm.AdvanceExpense).toFixed(2));\n vm.document.SolicitationApproval.Value = angular.copy(vm.TotalExpense);\n }\n };\n\n vm.calculateTotal = function () {\n vm.SubTotal = 0;\n vm.SubTotalQtd = 0;\n vm.TotalExpense = 0;\n if (vm.document.SolicitationApproval && vm.document.SolicitationApproval.SolicitationExpenses) {\n vm.document.SolicitationApproval.SolicitationExpenses.forEach(function (element) {\n vm.SubTotal = parseFloat((vm.SubTotal + element.Value).toFixed(2));\n vm.SubTotalQtd = parseInt(vm.SubTotalQtd) + parseInt(element.Quantity);\n });\n if (!vm.document.SolicitationApproval.AdvanceExpense || vm.document.SolicitationApproval.AdvanceExpense == null) {\n vm.document.SolicitationApproval.AdvanceExpense = parseFloat(\"0\");\n }\n vm.AdvanceExpense = vm.document.SolicitationApproval.AdvanceExpense;\n vm.TotalExpense = parseFloat((vm.SubTotal - vm.AdvanceExpense).toFixed(2));\n vm.document.SolicitationApproval.Value = angular.copy(vm.TotalExpense);\n }\n };\n\n vm.getTypeExpense = function (item) {\n var result = vm.typeExpenseList.filter(function (t) {\n return t.Id == item.TypeExpense.Id;\n })[0];\n if (result.CCost) {\n return result.Title + \" - \" + result.CCost;\n }\n return result.Title;\n };\n\n function validAddMileage() {\n if (!vm.SolicitationMileage.SolicitationDate) {\n ToastUtil.showToastMessage($translate.instant(\"solicitation.error.date.required\"), ToastUtil.ToastType.WARN);\n return false;\n }\n\n if (!vm.SolicitationMileage.SolicitationHour) {\n ToastUtil.showToastMessage($translate.instant(\"solicitation.error.hour.required\"), ToastUtil.ToastType.WARN);\n return false;\n }\n\n if (!vm.SolicitationMileage.Destiny) {\n ToastUtil.showToastMessage($translate.instant(\"solicitation.error.to.required\"), ToastUtil.ToastType.WARN);\n return false;\n }\n\n if (!vm.SolicitationMileage.Origin) {\n ToastUtil.showToastMessage($translate.instant(\"solicitation.error.from.required\"), ToastUtil.ToastType.WARN);\n return false;\n }\n\n if (!vm.SolicitationMileage.StartKm) {\n ToastUtil.showToastMessage($translate.instant(\"solicitation.error.start.km.required\"), ToastUtil.ToastType.WARN);\n return false;\n }\n\n if (!vm.SolicitationMileage.EndKm) {\n ToastUtil.showToastMessage($translate.instant(\"solicitation.error.end.km.required\"), ToastUtil.ToastType.WARN);\n return false;\n }\n\n if (vm.SolicitationMileage.EndKm < vm.SolicitationMileage.StartKm) {\n ToastUtil.showToastMessage($translate.instant(\"solicitation.error.start.end.km.required\"), ToastUtil.ToastType.WARN);\n return false;\n }\n\n if (!vm.SolicitationMileage.Reason) {\n ToastUtil.showToastMessage($translate.instant(\"solicitation.error.reason.required\"), ToastUtil.ToastType.WARN);\n return false;\n }\n\n return true;\n\n }\n\n function validAddServiceCustomsExpenses() {\n\n if (!vm.SolicitationCustomsExpense.Description) {\n ToastUtil.showToastMessage($translate.instant(\"solicitation.error.description.required\"), ToastUtil.ToastType.WARN);\n return false;\n }\n\n if (!vm.SolicitationCustomsExpense.NrProcess) {\n ToastUtil.showToastMessage($translate.instant(\"solicitation.error.nrprocess.required\"), ToastUtil.ToastType.WARN);\n return false;\n }\n\n if (!vm.SolicitationCustomsExpense.Value) {\n ToastUtil.showToastMessage($translate.instant(\"solicitation.error.value.required\"), ToastUtil.ToastType.WARN);\n return false;\n }\n\n return true;\n\n }\n\n function validAddServicePo() {\n if (!vm.SolicitationService.PO) {\n ToastUtil.showToastMessage($translate.instant(\"solicitation.error.po.required\"), ToastUtil.ToastType.WARN);\n return false;\n }\n\n if (!vm.SolicitationService.Description) {\n ToastUtil.showToastMessage($translate.instant(\"solicitation.error.description.required\"), ToastUtil.ToastType.WARN);\n return false;\n }\n\n if (!vm.SolicitationService.Item) {\n ToastUtil.showToastMessage($translate.instant(\"solicitation.error.item.required\"), ToastUtil.ToastType.WARN);\n return false;\n }\n\n if (!vm.SolicitationService.Value) {\n ToastUtil.showToastMessage($translate.instant(\"solicitation.error.value.required\"), ToastUtil.ToastType.WARN);\n return false;\n }\n\n if (existPOItem()) {\n ToastUtil.showToastMessage($translate.instant(\"solicitation.error.po.item.exist\"), ToastUtil.ToastType.WARN);\n return false;\n }\n\n return true;\n\n }\n\n function existPOItem() {\n if ( vm.document.SolicitationFiscal && vm.document.SolicitationFiscal.SolicitationServices\n && vm.document.SolicitationFiscal.SolicitationServices.length > 0) {\n var existItens = vm.document.SolicitationFiscal.SolicitationServices.filter(function (item) {\n return item.PO == vm.SolicitationService.PO && item.Item == vm.SolicitationService.Item;\n });\n return existItens.length > 0;\n }\n }\n\n function calculeDiference(a, b) {\n return a - b;\n }\n\n vm.addMileage = function () {\n if (validAddMileage()) {\n if (angular.isUndefined(vm.document.SolicitationApproval.SolicitationMileages)) {\n vm.document.SolicitationApproval.SolicitationMileages = [];\n }\n if (vm.SolicitationMileage.Id && vm.SolicitationMileage.Id > 0) {\n var toRemove = vm.document.SolicitationApproval.SolicitationMileages.filter(function (expense) {\n return expense.Id == vm.SolicitationMileage.Id;\n });\n if (toRemove.length > 0) {\n vm.document.SolicitationApproval.SolicitationMileages.splice(toRemove);\n }\n }\n var solMileage = {\n SolicitationDate: angular.copy(vm.SolicitationMileage.SolicitationDate),\n SolicitationHour: angular.copy(vm.SolicitationMileage.SolicitationHour),\n Origin: angular.copy(vm.SolicitationMileage.Origin),\n Destiny: angular.copy(vm.SolicitationMileage.Destiny),\n StartKm: angular.copy(vm.SolicitationMileage.StartKm),\n EndKm: angular.copy(vm.SolicitationMileage.EndKm),\n Reason: angular.copy(vm.SolicitationMileage.Reason),\n Total: calculeDiference(angular.copy(vm.SolicitationMileage.EndKm), angular.copy(vm.SolicitationMileage.StartKm))\n }\n vm.document.SolicitationApproval.SolicitationMileages.push(angular.copy(solMileage));\n vm.calculateTotalMileage();\n vm.SolicitationMileage = {\n SolicitationDate: undefined,\n SolicitationHour: undefined,\n Origin: undefined,\n Destiny: undefined,\n StartKm: undefined,\n EndKm: undefined,\n Reason: undefined,\n Total: 0\n };\n }\n };\n\n vm.addPoService = function () {\n if (validAddServicePo()) {\n if (angular.isUndefined(vm.document.SolicitationFiscal.SolicitationServices)) {\n vm.document.SolicitationFiscal.SolicitationServices = [];\n vm.document.SolicitationFiscal.ValueTotal = 0;\n }\n if (vm.SolicitationService.Id && vm.SolicitationService.Id > 0) {\n var toRemove = vm.document.SolicitationFiscal.SolicitationServices.filter(function (servicePo) {\n return servicePo.Id == vm.SolicitationService.Id;\n });\n if (toRemove.length > 0) {\n vm.document.SolicitationFiscal.SolicitationServices.splice(toRemove);\n }\n }\n var solServicePO = {\n PO: angular.copy(vm.SolicitationService.PO),\n Description: angular.copy(vm.SolicitationService.Description),\n Item: angular.copy(vm.SolicitationService.Item),\n Value: angular.copy(vm.SolicitationService.Value)\n };\n vm.document.SolicitationFiscal.SolicitationServices.push(angular.copy(solServicePO));\n vm.document.SolicitationFiscal.ValueTotal = (parseFloat(vm.document.SolicitationFiscal.ValueTotal) + parseFloat(vm.SolicitationService.Value)).toFixed(2);\n vm.SolicitationService = {\n PO: undefined,\n Description: undefined,\n Item: undefined,\n Value: undefined\n };\n }\n };\n\n vm.addPoCustomsExpenses = function () {\n if (validAddServiceCustomsExpenses()) {\n if (angular.isUndefined(vm.document.SolicitationFiscal.SolicitationCustomsExpenses)) {\n vm.document.SolicitationFiscal.SolicitationCustomsExpenses = [];\n vm.document.SolicitationFiscal.ValueTotal = 0;\n }\n if (vm.SolicitationCustomsExpense.Id && vm.SolicitationCustomsExpense.Id > 0) {\n var toRemove = vm.document.SolicitationFiscal.SolicitationCustomsExpenses.filter(function (customsExpensesPo) {\n return customsExpensesPo.Id == vm.SolicitationCustomsExpense.Id;\n });\n if (toRemove.length > 0) {\n vm.document.SolicitationFiscal.SolicitationCustomsExpenses.splice(toRemove);\n }\n }\n var solcustomsExpensesPO = {\n Description: angular.copy(vm.SolicitationCustomsExpense.Description),\n NrProcess: angular.copy(vm.SolicitationCustomsExpense.NrProcess),\n Value: angular.copy(vm.SolicitationCustomsExpense.Value)\n };\n vm.document.SolicitationFiscal.SolicitationCustomsExpenses.push(angular.copy(solcustomsExpensesPO));\n vm.document.SolicitationFiscal.ValueTotal = (parseFloat(vm.document.SolicitationFiscal.ValueTotal) + parseFloat(vm.SolicitationCustomsExpense.Value)).toFixed(2);\n vm.SolicitationCustomsExpense = {\n PO: undefined,\n Description: undefined,\n Item: undefined,\n Value: undefined\n };\n }\n };\n\n vm.addQuotation = function () {\n if (vm.SolicitationQuotation && vm.SolicitationQuotation.Material != undefined\n && vm.SolicitationQuotation.Quantity != undefined && vm.SolicitationQuotation.Quantity > 0\n && vm.SolicitationQuotation.UnitMeasure != undefined) {\n if (angular.isUndefined(vm.document.SolicitationApproval.SolicitationQuotations)) {\n vm.document.SolicitationApproval.SolicitationQuotations = [];\n }\n\n var solicitationQuotation = angular.copy(vm.SolicitationQuotation);\n solicitationQuotation.UnitMeasure = angular.copy(vm.SolicitationQuotation.UnitMeasure.Id);\n\n vm.document.SolicitationApproval.SolicitationQuotations.push(angular.copy(solicitationQuotation));\n vm.SolicitationQuotation = {\n Material: undefined,\n Quantity: undefined,\n UnitMeasure: undefined\n };\n }\n };\n\n vm.getUnitMeasure = function (item) {\n var result = vm.unitMeasureList.filter(function (t) {\n return t.Id == item.UnitMeasure;\n })[0];\n return result.Name;\n };\n\n vm.getProtocol = function(item) {\n if ( item.QuotationProtocolItems && item.QuotationProtocolItems.length > 0) {\n return item.QuotationProtocolItems[0].QuotationProtocol.Id;\n }\n return 'N/A';\n };\n\n vm.getStatusProtocol = function(item) {\n var statusProtocol = 'N/A';\n if ( item.QuotationProtocolItems && item.QuotationProtocolItems.length > 0) {\n return item.QuotationProtocolItems[0].QuotationProtocol.Status;\n }\n return statusProtocol;\n };\n\n vm.addExpense = function() {\n if ( vm.SolicitationExpense && vm.SolicitationExpense.Quantity && vm.SolicitationExpense.Value ) {\n if (angular.isUndefined(vm.document.SolicitationApproval.SolicitationExpenses)) {\n vm.document.SolicitationApproval.SolicitationExpenses = [];\n }\n if (vm.SolicitationExpense.Id && vm.SolicitationExpense.Id > 0) {\n var toRemove = vm.document.SolicitationApproval.SolicitationExpenses.filter(function (expense) {\n return expense.Id == vm.SolicitationExpense.Id;\n });\n if (toRemove.length > 0) {\n vm.document.SolicitationApproval.SolicitationExpenses.splice(toRemove);\n }\n }\n var solExpense = {\n TypeExpense: undefined,\n Quantity: angular.copy(vm.SolicitationExpense.Quantity),\n Value: angular.copy(vm.SolicitationExpense.Value)\n }\n if (vm.SolicitationExpense.TypeExpense) {\n solExpense.TypeExpense = {\n Id: angular.copy(vm.SolicitationExpense.TypeExpense)\n }\n }\n vm.document.SolicitationApproval.SolicitationExpenses.push(angular.copy(solExpense));\n vm.calculateTotal();\n vm.SolicitationExpense = {\n TypeExpense: undefined,\n Quantity: undefined,\n Value: undefined\n };\n } else {\n if (!vm.SolicitationExpense.Quantity) {\n ToastUtil.showToastMessage($translate.instant('expense.validation.quantity.msg'), ToastUtil.ToastType.WARN);\n } else if (!vm.SolicitationExpense.Value) {\n ToastUtil.showToastMessage($translate.instant('expense.validation.value.msg'), ToastUtil.ToastType.WARN);\n }\n }\n }\n\n vm.getTypeExpenseCmb = function (item) {\n if (item.CCost) {\n return item.Title + \" - \" + item.CCost;\n }\n return item.Title;\n }\n\n function listTypeExpenses() {\n DocumentFlowService.getTypeExpenses().then(function (response) {\n vm.typeExpenseList = angular.copy(response);\n })\n }\n\n vm.deleteExpense = function (index) {\n vm.SolicitationExpense = {\n TypeExpense: undefined,\n Quantity: undefined,\n Value: undefined\n };\n vm.document.SolicitationApproval.SolicitationExpenses.splice(index, 1);\n vm.calculateTotal();\n };\n\n vm.deleteQuotation = function (index) {\n vm.SolicitationQuotation = {\n Material: undefined,\n Quantity: undefined,\n UnitMeasure: undefined\n };\n vm.document.SolicitationApproval.SolicitationQuotations.splice(index, 1);\n };\n\n vm.deleteMileage = function (index) {\n vm.SolicitationMileage = {\n SolicitationDate: undefined,\n SolicitationHour: undefined,\n Origin: undefined,\n Destiny: undefined,\n StartKm: undefined,\n EndKm: undefined,\n Reason: undefined,\n Total: 0\n };\n vm.document.SolicitationApproval.SolicitationMileages.splice(index, 1);\n vm.calculateTotalMileage();\n }\n\n vm.deletePO = function (index) {\n vm.SolicitationService = {\n PO: undefined,\n Description: undefined,\n Item: undefined,\n Value: undefined\n };\n vm.document.SolicitationFiscal.SolicitationServices.splice(index, 1);\n vm.document.SolicitationFiscal.ValueTotal = 0;\n vm.document.SolicitationFiscal.SolicitationServices.forEach(function (item) {\n vm.document.SolicitationFiscal.ValueTotal = (parseFloat(vm.document.SolicitationFiscal.ValueTotal) + parseFloat(item.Value)).toFixed(2);\n })\n };\n\n vm.deleteCustomsExpenses = function (index) {\n vm.SolicitationCustomsExpense = {\n Description: undefined,\n NrProcess: undefined,\n Value: undefined\n };\n vm.document.SolicitationFiscal.SolicitationCustomsExpenses.splice(index, 1);\n vm.document.SolicitationFiscal.ValueTotal = 0;\n vm.document.SolicitationFiscal.SolicitationCustomsExpenses.forEach(function (item) {\n vm.document.SolicitationFiscal.ValueTotal = (parseFloat(vm.document.SolicitationFiscal.ValueTotal) + parseFloat(item.Value)).toFixed(2);\n })\n };\n\n vm.editExpense = function (index) {\n vm.SolicitationExpense = angular.copy(vm.document.SolicitationApproval.SolicitationExpenses[index]);\n };\n\n vm.editService = function (index) {\n vm.SolicitationService = angular.copy(vm.document.SolicitationFiscal.SolicitationServices[index]);\n };\n\n function setDateViewModel(date) {\n\n var momentDate = moment(date, 'YYYY/MM/DD');\n return new Date(momentDate.year(), momentDate.month(), momentDate.date());\n }\n\n function loadProfileModules() {\n var profileModule = {};\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.moduleDocumentFlow;\n DefaultService.loadModules(profileModule).then(function (response) {\n vm.profilePermission = angular.copy(response);\n\n DocumentFlowService.approvalParallel().then(function (response) {\n vm.approvalParallelEnabled = angular.copy(response);\n\n vm.idToEdit = $stateParams.Id;\n if (vm.idToEdit) {\n if (!vm.profilePermission.CanEdit) {\n $state.go('not-authorized', {});\n } else {\n loadDocumentFlowToEdit();\n }\n } else {\n if (!vm.profilePermission.CanAdd) {\n $state.go('not-authorized', {});\n } else {\n loadUsers();\n }\n }\n });\n\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n });\n }\n\n function loadBrlKm() {\n DocumentFlowService.approvalBrlKm().then(function (response) {\n vm.AdvanceExpense = parseFloat(angular.copy(response));\n vm.document.SolicitationApproval.AdvanceExpense = vm.AdvanceExpense;\n });\n }\n\n\n $scope.searchPerson = function (term) {\n if (term.length < 2)\n return []\n var userList = [];\n for (var i = 0; i < vm.UsersToMention.length; i++) {\n if (vm.UsersToMention[i].Name.toUpperCase().indexOf(term.toUpperCase()) >= 0) {\n userList.push(vm.UsersToMention[i]);\n }\n }\n $scope.persons = userList;\n return userList;\n };\n\n $scope.getPersonTextRaw = function (item) {\n var firstName = '';\n var secondName = '';\n var names = item.Name.split(' ');\n var resultsArray = [];\n var replaceString = '';\n if (names.length <= 2) {\n firstName = names[0] + ' ';\n secondName = names[1];\n } else if (names[1].length > 3) {\n firstName = names[0] + ' ';\n secondName = names[1];\n } else {\n firstName = names[0] + ' ';\n secondName = names[2];\n }\n\n var name = firstName.concat(secondName);\n vm.userComment.Name = name;\n vm.userComment.Id = item.Id;\n vm.usersCommentsList.push(angular.copy(vm.userComment));\n resultsArray = vm.comment.Comment.split(' ');\n if (resultsArray[resultsArray.length - 1].startsWith('@')) {\n replaceString = resultsArray[resultsArray.length - 1]\n vm.comment.Comment = vm.comment.Comment.replace(replaceString, '')\n }\n\n vm.comment.Comment = vm.comment.Comment.concat('@', name)\n\n return '@' + name;\n };\n\n function addInstance(id) {\n for (var i = 0; i < vm.comment.DocumentFlowUsersComment.length; i++) {\n if (id == vm.comment.DocumentFlowUsersComment[i].Id) {\n return false;\n }\n }\n return true;\n }\n\n vm.loadRoutes = function () {\n if (vm.RadioRoute == 0) {\n } else if (vm.routesList.length == 0) {\n ApprovalRouteService.listApprovalRoutes(angular.copy(vm.searchParams))\n .then(\n function (response) {\n vm.routesList = angular.copy(response.resultList);\n })\n .catch(function (error) {\n\n $log.log(error);\n\n if (error.status !== $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"error.approval_route.search\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n }\n\n vm.addContractReference = function (referenceId) {\n vm.ContractReference = null;\n vm.document.ContractReference = null;\n var filterContract = {\n Id: referenceId\n };\n\n DocumentFlowService.getContractReference(filterContract)\n .then(function (response) {\n if (response.length > 0) {\n vm.ContractReference = response[0];\n vm.document.ContractReference = {\n Id: vm.ContractReference.Id\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(\"document.flow.contract.reference.notfound\"), ToastUtil.ToastType.WARN);\n }\n }).catch(function () {\n ToastUtil.showToastMessage($translate.instant(\"document.flow.msg.load.error\"), ToastUtil.ToastType.ERROR);\n });\n };\n\n init();\n }\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *\n */\n function DialogReturnDocumentFlowController($scope) {\n\n var vm = this;\n vm.value = \"\";\n vm.returnTo = '1';\n vm.targets = $scope.modelDialog.listTargetsApprovedRejected();\n vm.targetId = '0';\n\n vm.getSize = function(){\n return $scope.parentDialogSize;\n };\n\n vm.isConfirmDisabled = function(){\n if ( vm.returnTo === \"0\") {\n return !vm.targetId || !vm.value || vm.value.length < 3;\n }\n return !vm.value || vm.value.length < 3;\n };\n\n vm.close = function () {\n $scope.$close('cancel');\n $scope.$dismiss();\n };\n\n vm.confirm = function () {\n $scope.parentDialog({value: vm.value, returnTo: vm.returnTo, orderTarget: vm.targetId});\n $scope.$close('ok');\n };\n\n }\n\n function DialogReturnDocumentFlowDirective() {\n return {\n restrict: 'E',\n replace: true,\n templateUrl: \"app/document_flow/dialog-return-document-flow.html\",\n controllerAs: 'ctrl',\n controller: 'DialogReturnDocumentFlowController'\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('DialogReturnDocumentFlowController', DialogReturnDocumentFlowController)\n .directive('dialogReturnDocumentFlow', DialogReturnDocumentFlowDirective);\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(FileUploadTranslate);\n\n /** @ngInject */\n function FileUploadTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'file.upload.attach': 'Attachments',\n 'file.saved.sucess': 'File saved with success.',\n 'file.size.twenty.megabytes.overflow': 'Size\\'s file exceeded 20MB.',\n 'file.size.twenty.list.ten.megabytes.overflow' : 'The sum of file sizes exceeds 20MB.',\n 'file.size.ten.megabytes.overflow': 'Size\\'s file exceeded 10MB.',\n 'file.size.fifty.megabytes.overflow': 'Size\\'s file exceeded 50MB.',\n 'file.size.ten.list.ten.megabytes.overflow' : 'The sum of file sizes exceeds 10MB.',\n 'file.size.list.fifty.megabytes.overflow' : 'The sum of file sizes exceeds 50MB.',\n 'file.erro.save': 'An error occurred while trying to save the file.',\n 'file.same.name': 'Already exist a file with the same name.',\n 'file.type.image': \"Only pictures are allowed.\",\n 'file.type.pdf': \"Only pdf are allowed.\",\n 'file.change.image': 'Change',\n 'file.type.not.accepted' : 'File type is not accepted.'\n\n });\n $translateProvider.translations('pt', {\n 'file.upload.attach': 'Anexos',\n 'file.saved.sucess': 'Arquivo salvo com sucesso.',\n 'file.size.twenty.megabytes.overflow': 'Tamanho do arquivo excede 20MB.',\n 'file.size.twenty.list.ten.megabytes.overflow' : 'A soma dos tamanhos dos arquivos excede 20MB.',\n 'file.size.ten.megabytes.overflow': 'Tamanho do arquivo excede 10MB.',\n 'file.size.fifty.megabytes.overflow': 'Tamanho do arquivo excede 50MB.',\n 'file.size.ten.list.ten.megabytes.overflow' : 'A soma dos tamanhos dos arquivos excede 10MB.',\n 'file.size.list.fifty.megabytes.overflow' : 'A soma dos tamanhos dos arquivos excede 50MB.',\n 'file.erro.save': 'Um erro ocorreu ao tentar salvar o arquivo.',\n 'file.same.name': 'Já existe um aquivo com o mesmo nome.',\n 'file.type.image': \"Apenas imagens são permitidas.\",\n 'file.type.pdf': \"Apenas pdf's são permitidos.\",\n 'file.change.image': 'Alterar',\n 'file.type.not.accepted' : 'O tipo de arquivo não é aceito.'\n });\n }\n})();\n\n/*eslint no-unused-vars: [0, { \"args\": \"after-used\" }]*/\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .directive('fileUpload', FileUpload);\n\n /** @ngInject */\n function FileUpload() {\n var uploadDirective = {};\n uploadDirective.restrict = 'EA';\n uploadDirective.scope = {\n disable: \"=\",\n buttonIcon: '@',\n buttonLabel: '@'\n };\n uploadDirective.scope.multipleFile = \"@?\";\n uploadDirective.scope.onlyImages = \"=\";\n uploadDirective.scope.onlyPdf = \"=\";\n uploadDirective.scope.uploadSize = \"=\";\n uploadDirective.scope.attachments = \"=\";\n uploadDirective.scope.showOnlyListItem = \"@?\";\n uploadDirective.scope.showUrlFile = \"@?\";\n uploadDirective.scope.statusValue = \"@?\";\n uploadDirective.scope.showCameraOption = \"@?\";\n uploadDirective.scope.statusAtt = \"@?\";\n uploadDirective.scope.fileManagerComponentId = \"@?\";\n uploadDirective.scope.disabledSalvedFile = \"=?\";\n uploadDirective.templateUrl = 'app/directives/file-upload.html';\n\n uploadDirective.controller = function ($filter, $scope, ConfigurationService, FileUploader, ToastUtil, $log,\n $translate, $uibModal, FileService, deviceDetector, DialogController, FileUploadService, WebcamService, $document) {\n var vm = this;\n var maximunSize = 52428800;\n $scope.deviceDetector = deviceDetector;\n\n if ($scope.multipleFile == undefined) {\n $scope.multipleFile = 'true';\n }\n\n if ($scope.attachments == undefined) {\n $scope.attachments = [];\n }\n\n if ($scope.showOnlyListItem == undefined) {\n $scope.showOnlyListItem = 'false';\n }\n\n if ($scope.showUrlFile == undefined) {\n $scope.showUrlFile = 'false';\n }\n\n if (!$scope.buttonLabel) {\n $scope.buttonLabel = 'file.upload.attach';\n }\n\n if (!$scope.buttonIcon) {\n $scope.buttonIcon = 'ic-attach';\n }\n\n if (!$scope.fileManagerComponentId) {\n $scope.fileManagerComponentId = 'fileManagerInput';\n }\n\n if ($scope.disabledSalvedFile == undefined) {\n $scope.disabledSalved = false;\n }\n\n /* Camera Features */\n /**\n * Show Dialog to choose camera or file manager.\n */\n $scope.showCameraOptions = function () {\n if ($scope.disable)\n return;\n DialogController.showWithCloseListener('uploadoptions.dialog.title', '', vm, vm.closeDialogListener);\n };\n\n /**\n * Listener to TurnOff cam when dialog closes.\n */\n vm.closeDialogListener = function () {\n var webcam = WebcamService.webcam;\n if (webcam && webcam.isTurnOn === true) {\n webcam.turnOff();\n }\n };\n\n $scope.isShowCameraOptions = function () {\n return ($scope.showCameraOption == true || $scope.showCameraOption == \"true\") ? true : false;\n };\n\n /**\n * Check if client is mobile.\n * @returns {boolean}\n */\n $scope.isMobile = function () {\n return deviceDetector.os == \"android\" || deviceDetector.os == \"ios\";\n };\n\n /**\n * Upload captured image to server\n * @param photo\n * @param photoContentType\n */\n vm.capturedPhotoListener = function (photo, photoContentType) {\n var imageBase64 = {\n PhotoBase64: angular.copy(photo),\n ContentType: angular.copy(photoContentType),\n FileName: \"\",\n Id: 0,\n Path: \"\"\n };\n\n FileUploadService.uploadBase64Image(imageBase64)\n .then(function (response) {\n vm.AttachTo(response);\n })\n .catch(function () {\n $log.log();\n ToastUtil.showToastMessage($translate.instant(\"uploadoptions.save.image.fail\"), ToastUtil.ToastType.ERROR);\n });\n };\n\n /**\n * Call default file upload.\n */\n vm.fileManagerListener = function () {\n var element = $document[0].getElementById($scope.fileManagerComponentId);\n if (element != undefined) {\n element.click();\n }\n };\n\n /* End Camera Features */\n\n vm.uploader = $scope.uploader = new FileUploader({\n url: ConfigurationService.getServiceHost() + '/file/upload'\n });\n\n vm.uploader.filters.push({\n name: 'sizeFilter',\n\n fn: function (item) {\n\n var itemSize;\n\n if(item.Size){\n itemSize = item.Size;\n }\n else if(item.size){\n itemSize = item.size;\n }\n\n return itemSize <= maximunSize && validateSizeFilesOnList(item);\n }\n });\n\n vm.uploader.filters.push({\n name: 'typeFilter',\n\n fn: function (item) {\n return validateFileTypesAccepted(item); //not accepted .exe\n }\n });\n\n function validateSizeFilesOnList(newItem) {\n var sumSize = 0;\n var list = $scope.getAttachmentsList();\n\n if ($scope.multipleFile == 'true') {\n if (list == undefined) {\n list = [];\n }\n if (list.length === 0) {\n\n var itemSize = 0;\n\n if(newItem.size){\n itemSize = newItem.size;\n }\n else if(newItem.Size){\n itemSize = newItem.Size;\n }\n\n sumSize = sumSize + parseInt(itemSize);\n }\n else {\n\n angular.forEach(list, function (value) {\n\n var itemSize = 0;\n\n if(value.size){ itemSize = value.size; }\n else if(value.Size){ itemSize = value.Size; }\n\n sumSize = sumSize + parseInt(itemSize);\n\n });\n\n var sizeNewItem = 0;\n\n if(newItem.size){ sizeNewItem = newItem.size; }\n else if(newItem.Size){ sizeNewItem = newItem.Size; }\n\n sumSize = sumSize + sizeNewItem;\n }\n\n var msg;\n if (sumSize > maximunSize) {\n msg = 'file.size.list.fifty.megabytes.overflow';\n }\n\n if (msg) {\n ToastUtil.showToastMessage($translate.instant(msg), ToastUtil.ToastType.WARN);\n return false;\n }\n else{\n return true;\n }\n }\n else {\n return validateFileSize(newItem);\n }\n\n }\n\n function validateFileTypesAccepted(item) {\n var type = '|' + item.type.slice(item.type.lastIndexOf('/') + 1) + '|';\n\n if ('|x-msdownload|'.indexOf(type) == -1) { //if not find\n return true;\n } else {\n ToastUtil.showToastMessage($translate.instant(\"file.type.not.accepted\"), ToastUtil.ToastType.WARN);\n return false;\n }\n }\n\n if ($scope.onlyImages && $scope.onlyImages == true) {\n vm.uploader.filters.push({\n name: 'imageFilter',\n fn: function (item /*{File|FileLikeObject}*/ ) {\n var type = '|' + item.type.slice(item.type.lastIndexOf('/') + 1) + '|';\n if ('|jpg|png|jpeg|bmp|gif|'.indexOf(type) == -1) {\n ToastUtil.showToastMessage($translate.instant(\"file.type.image\"), ToastUtil.ToastType.WARN);\n return false;\n }\n return true;\n }\n });\n }\n\n if ($scope.onlyPdf && $scope.onlyPdf == true) {\n vm.uploader.filters.push({\n name: 'pdfFilter',\n fn: function (item /*{File|FileLikeObject}*/ ) {\n var type = '|' + item.type.slice(item.type.lastIndexOf('/') + 1) + '|';\n if ('|pdf|'.indexOf(type) == -1) {\n ToastUtil.showToastMessage($translate.instant(\"file.type.pdf\"), ToastUtil.ToastType.WARN);\n return false;\n }\n return true;\n }\n });\n }\n\n $scope.openDisabledSalvedFile = function (file) {\n if (file.Id > 0)\n return;\n var modalInstance = $uibModal.open({\n animation: true,\n ariaLabelledBy: 'modal-title',\n ariaDescribedBy: 'modal-body',\n templateUrl: 'app/modal/info-modal.html',\n controller: 'ModalInfoController',\n controllerAs: 'ctrl'\n });\n\n modalInstance.result.then(function () {\n vm.removeFile(file);\n }, function () {\n //TODO: do something when user cancel\n });\n };\n\n $scope.open = function (file) {\n if ($scope.disable)\n return;\n var modalInstance = $uibModal.open({\n animation: true,\n ariaLabelledBy: 'modal-title',\n ariaDescribedBy: 'modal-body',\n templateUrl: 'app/modal/info-modal.html',\n controller: 'ModalInfoController',\n controllerAs: 'ctrl'\n });\n\n modalInstance.result.then(function () {\n vm.removeFile(file);\n }, function () {\n //TODO: do something when user cancel\n });\n };\n\n $scope.getAttachmentsList = function () {\n var list = [];\n if (!$scope.statusAtt) {\n list = $scope.attachments;\n } else {\n var keyStatus = $scope.statusAtt;\n var status = $scope.statusValue;\n angular.forEach($scope.attachments, function (value) {\n if (value[keyStatus] == status) {\n list.push(value);\n }\n });\n }\n return list;\n };\n\n $scope.getAttachmentNameOrUrl = function (attachment) {\n var value = \"\";\n if($scope.showUrlFile === true || $scope.showUrlFile == 'true'){\n var path = attachment.Path\n var itemsPath = path.split(\"\\\\\");\n var fileName = itemsPath[itemsPath.length -1];\n value = ConfigurationService.getServiceHost() + \"/\" + fileName;\n\n } else {\n value = attachment.FileName;\n }\n return value;\n }\n\n $scope.downloadFile = function (file) {\n FileService.download(file).then(function (response) {\n var newFIle = new Blob([response], {\n\n });\n\n var fileURL = URL.createObjectURL(newFIle);\n\n // TODO : remove hardcoded\n var a = $document[0].createElement(\"a\");\n $document[0].body.appendChild(a);\n a.style = \"display: none\";\n a.href = fileURL;\n a.download = file.FileName;\n a.click();\n }).catch(function (error) {\n $log.log(error);\n // TODO erro on delete file\n });\n };\n\n vm.removeFile = function (file) {\n $scope.attachments = $scope.attachments.filter(function (item) {\n if (file.Id && item.Id) {\n return item.Id != file.Id;\n } else {\n return item.Path != file.Path;\n }\n });\n var index = vm.uploader.queue.findIndex(function (current) {\n return current.file.name === file.FileName;\n });\n if (index != -1) {\n vm.uploader.removeFromQueue(index);\n }\n };\n\n vm.uploader.onWhenAddingFileFailed = function (item, filter) {\n if (filter.name === 'sizeFilter') {\n validateFileSize(item);\n }\n };\n\n vm.uploader.onSuccessItem = function (fileItem, response) {\n vm.AttachTo(response);\n };\n\n function validateFileSize (data) {\n var sizeTotal = 0;\n var msg;\n if(data.size){\n sizeTotal = parseInt(data.size);\n }\n else if(data.Size){\n sizeTotal = parseInt(data.Size);\n }\n\n angular.forEach($scope.attachments, function (value) {\n if(value.size){\n sizeTotal = sizeTotal + parseInt(value.size);\n }\n else if(value.Size){\n sizeTotal = sizeTotal + parseInt(value.Size);\n }\n });\n\n if ( sizeTotal > 0 && sizeTotal > maximunSize) {\n msg = 'file.size.fifty.megabytes.overflow';\n ToastUtil.showToastMessage($translate.instant(msg), ToastUtil.ToastType.WARN);\n return false;\n }\n return true;\n }\n\n vm.AttachTo = function (data) {\n var add = true;\n angular.forEach($scope.getAttachmentsList(), function (value) {\n if (value.FileName == data.FileName) {\n add = false;\n ToastUtil.showToastMessage($translate.instant(\"file.same.name\"), ToastUtil.ToastType.WARN);\n }\n });\n\n if (add) {\n if (!$scope.attachments)\n $scope.attachments = [];\n\n if ( validateFileSize(data) ) {\n if ($scope.statusAtt) {\n var key = $scope.statusAtt;\n var value = $scope.statusValue;\n\n data[key] = value;\n }\n if (!data.Id) {\n data['Id'] = 0;\n }\n if ($scope.multipleFile == 'false') {\n\n FileService.download(data).then(function (response) {\n var newFIle = new Blob([response], {});\n data.FileBlob = URL.createObjectURL(newFIle);\n $scope.attachments = [data];\n }).catch(function (error) {\n $log.log(error);\n });\n\n } else {\n $scope.attachments.push(data);\n }\n }\n }\n };\n\n vm.uploader.onErrorItem = function (fileItem, response) {\n ToastUtil.showToastMessage($translate.instant(\"file.erro.save\"), ToastUtil.ToastType.ERROR);\n };\n\n vm.uploader.onAfterAddingFile = function () {\n vm.uploader.uploadAll();\n };\n\n };\n return uploadDirective;\n }\n\n})();\n\n/*eslint no-unused-vars: [1, { \"args\": \"after-used\" }]*/\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .directive('fileUploadUserPhoto', fileUploadUserPhoto);\n\n /** @ngInject */\n function fileUploadUserPhoto() {\n var uploadDirective = {};\n uploadDirective.restrict = 'EA';\n uploadDirective.scope = {\n disable: \"=\",\n userUpload: \"=\",\n buttonIcon: '@',\n buttonLabel: '@'\n };\n uploadDirective.scope.onlyImages = \"=\";\n uploadDirective.scope.attachments = \"=\";\n uploadDirective.scope.url = \"=\";\n uploadDirective.scope.urlDir = '@';\n uploadDirective.scope.showOnlyListItem = \"@?\";\n uploadDirective.scope.statusValue = \"@?\";\n uploadDirective.scope.showCameraOption = \"@?\";\n uploadDirective.scope.statusAtt = \"@?\";\n uploadDirective.scope.fileManagerComponentId = \"@?\";\n uploadDirective.templateUrl = 'app/directives/file-upload-userphoto.html';\n\n uploadDirective.controller = function ($window, $filter, $scope, ConfigurationService, FileUploader, toastr, $translate, $uibModal, FileService, deviceDetector, DialogController, FileUploadService, WebcamService, $rootScope, $document) {\n var vm = this;\n var maximunSize = 52428800;\n\n $scope.deviceDetector = deviceDetector;\n $scope.urlDir = $window.localStorage.photoAqms;\n $scope.photoLoggedUser = $window.localStorage.photoAqms;\n $scope.userInitiais = $window.localStorage.userInitiais;\n $scope.isPhotoValid = false;\n\n if ($scope.showOnlyListItem == undefined) {\n $scope.showOnlyListItem = 'false';\n }\n\n if (!$scope.buttonLabel) {\n $scope.buttonLabel = 'file.upload.attach';\n }\n\n if (!$scope.buttonIcon) {\n $scope.buttonIcon = 'ic-attach';\n }\n\n if (!$scope.fileManagerComponentId) {\n $scope.fileManagerComponentId = 'fileManagerInput';\n }\n\n /* Camera Features */\n /**\n * Show Dialog to choose camera or file manager.\n */\n $scope.showCameraOptions = function () {\n if ($scope.disable)\n return;\n DialogController.showWithCloseListener('uploadoptions.dialog.title', '', vm, vm.closeDialogListener);\n };\n\n /**\n * Listener to TurnOff cam when dialog closes.\n */\n vm.closeDialogListener = function () {\n var webcam = WebcamService.webcam;\n if (webcam && webcam.isTurnOn === true) {\n webcam.turnOff();\n }\n };\n\n $scope.isShowCameraOptions = function() {\n return ($scope.showCameraOption == true || $scope.showCameraOption == \"true\") ? true : false;\n };\n\n\n /**\n * Check if client is mobile.\n * @returns {boolean}\n */\n $scope.isMobile = function () {\n return deviceDetector.os == \"android\" || deviceDetector.os == \"ios\";\n };\n\n\n /**\n * Upload captured image to server\n * @param photo\n * @param photoContentType\n */\n vm.capturedPhotoListener = function (photo, photoContentType) {\n var imageBase64 = {\n PhotoBase64: angular.copy(photo),\n ContentType: angular.copy(photoContentType),\n FileName: \"\",\n Id: 0,\n Path: \"\",\n UserLogged: $window.localStorage.userID\n }\n FileUploadService.uploadBase64Image(imageBase64)\n .then(function (response) {\n vm.AttachTo(response);\n })\n .catch(function () {\n toastr.clear();\n toastr.error($translate.instant('uploadoptions.save.image.fail'), {\n closeButton: true\n });\n });\n\n };\n\n /**\n * Call default file upload.\n */\n vm.fileManagerListener = function () {\n var element = $document[0].getElementById($scope.fileManagerComponentId);\n if (element != undefined) {\n element.click();\n }\n };\n\n /* End Camera Features */\n\n vm.uploader = $scope.uploader = new FileUploader({\n url: ConfigurationService.getServiceHost() + '/file/upload/user/' + $window.localStorage.userID\n });\n\n vm.uploader.filters.push({\n name: 'sizeFilter',\n fn: function (item) {\n return item.size <= maximunSize; // 50 MB\n }\n });\n\n if ($scope.onlyImages && $scope.onlyImages == true) {\n vm.uploader.filters.push({\n name: 'imageFilter',\n fn: function (item /*{File|FileLikeObject}*/ ) {\n var type = '|' + item.type.slice(item.type.lastIndexOf('/') + 1) + '|';\n if ('|jpg|png|jpeg|bmp|gif|'.indexOf(type) == -1) {\n toastr['error']($translate.instant('file.type.image') + \"\", {\n closeButton: true,\n preventDuplicates: false\n });\n return false;\n }\n return true;\n }\n });\n }\n\n $scope.open = function (file) {\n if ($scope.disable)\n return;\n var modalInstance = $uibModal.open({\n animation: true,\n ariaLabelledBy: 'modal-title',\n ariaDescribedBy: 'modal-body',\n templateUrl: 'app/modal/info-modal.html',\n controller: 'ModalInfoController',\n controllerAs: 'ctrl'\n });\n\n modalInstance.result.then(function () {\n vm.removeFile(file);\n }, function () {\n //TODO: do something when user cancel\n });\n };\n\n $scope.getAttachmentsList = function () {\n var list = [];\n if (!$scope.statusAtt) {\n list = $scope.attachments;\n } else {\n var keyStatus = $scope.statusAtt;\n var status = $scope.statusValue;\n angular.forEach($scope.attachments, function (value) {\n if (value[keyStatus] == status) {\n list.push(value);\n }\n });\n }\n return list;\n };\n\n $scope.downloadFile = function (file) {\n FileService.download(file).then(function (response) {\n var newFIle = new Blob([response], {\n\n });\n var fileURL = URL.createObjectURL(newFIle);\n\n //TODO : remove hardcoded\n var a = $document[0].createElement(\"a\");\n $document[0].body.appendChild(a);\n a.style = \"display: none\";\n a.href = fileURL;\n a.download = file.FileName;\n a.click();\n }).catch(function () {\n // TODO erro on delete file\n });\n }\n\n vm.removeFile = function (file) {\n $scope.attachments = $scope.attachments.filter(function (item) {\n if (file.Id && item.Id) {\n return item.Id != file.Id;\n } else {\n return item.Path != file.Path;\n }\n });\n var index = vm.uploader.queue.findIndex(function (current) {\n return current.file.name === file.FileName;\n });\n if (index != -1) {\n vm.uploader.removeFromQueue(index);\n }\n };\n\n\n vm.uploader.onWhenAddingFileFailed = function (item, filter) {\n if (filter.name === 'sizeFilter') {\n toastr.clear();\n toastr['error']($translate.instant('file.size.twenty.megabytes.overflow') + \"\", {\n closeButton: true,\n preventDuplicates: false\n });\n }\n };\n\n vm.uploader.onSuccessItem = function (fileItem, response) {\n toastr.clear();\n vm.AttachTo(response);\n };\n\n $scope.isPhotoValid = function () {\n if ($scope.photoLoggedUser != undefined && $scope.photoLoggedUser != '' && $scope.photoLoggedUser != 'null') {\n return true;\n } else {\n return false;\n }\n };\n\n vm.AttachTo = function (data) {\n var add = true;\n\n //if user photo changed\n if (data.URL != undefined && data.URL.length > 0) {\n $scope.url = data.URL;\n $scope.urlDir = data.URL;\n $scope.photoLoggedUser = data.URL;\n $window.localStorage.photoAqms = data.URL;\n $rootScope.$broadcast('UPDATE-USER-PHOTO', data.URL);\n } else {\n angular.forEach($scope.getAttachmentsList(), function (value) {\n if (value.FileName == data.FileName) {\n toastr.clear();\n add = false;\n toastr['error']($translate.instant('file.same.name') + \"\", {\n closeButton: true,\n preventDuplicates: false\n });\n }\n });\n\n if (add) {\n if (!$scope.attachments)\n $scope.attachments = [];\n\n if ($scope.statusAtt) {\n var key = $scope.statusAtt;\n var value = $scope.statusValue;\n\n data[key] = value;\n }\n data['Id'] = 0;\n $scope.attachments.push(data);\n }\n }\n };\n\n vm.uploader.onErrorItem = function () {\n toastr['error']($translate.instant('file.erro.save') + \"\", {\n closeButton: true,\n preventDuplicates: false\n });\n };\n\n vm.uploader.onAfterAddingFile = function () {\n toastr.clear();\n vm.uploader.uploadAll();\n };\n\n\n };\n return uploadDirective;\n }\n\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *\n */\n function DialogCloseDefectsController($scope, $window, $translate, $log, moment, ToastUtil, AuthService, DefectsService, DefaultService) {\n\n var vm = this, USER = {Id: parseInt($window.localStorage.userID), Name: $window.localStorage.aliasAqms};\n\n vm.defect = { UpdatedBy: USER, Id: []};\n vm.turns = [];\n vm.checkall = false;\n vm.defectListFilter = [];\n vm.totalLista = 0;\n vm.searchParam = {\n BusinessId: AuthService.getBusinessId(),\n Turn: null,\n StartDate: new Date(),\n Section: null,\n Status: 0,\n Page: 0,\n MaxPerPage: 0\n };\n\n function loadTurns() {\n var filterTurn = {\n BusinessId: AuthService.getBusinessId(),\n CsActive: \"\"\n }\n\n DefaultService.loadTurn(filterTurn).then(function (response) {\n vm.turns = angular.copy(response);\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"auto.complete.turn.directive.load.error\"), ToastUtil.ToastType.WARN);\n });\n }\n\n vm.clearFields = function() {\n vm.searchParam.BusinessId = AuthService.getBusinessId();\n vm.searchParam.Turn = null;\n vm.searchParam.StartDate = new Date();\n vm.searchParam.Section = null;\n }\n\n vm.search = function () {\n vm.defectListFilter = [];\n\n var searchParam = angular.copy(vm.searchParam);\n searchParam.Section = !vm.searchParam.Section ? '' : angular.copy(vm.searchParam.Section.Id)\n searchParam.StartDate = searchParam.StartDate == null ? null : moment(searchParam.StartDate).format('DD/MM/YYYY');\n searchParam.FinalDate = searchParam.StartDate;\n\n DefectsService.listAllDefectAnalysis(searchParam)\n .then(\n function (response) {\n vm.defectListFilter = response.resultList;\n vm.defectListFilter.forEach(function(item) {\n item.checked = false;\n });\n vm.totalLista = response.total;\n })\n .catch(\n function (error) {\n if (error.status !== $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"error.defects.search\"), ToastUtil.ToastType.ERROR);\n }\n });\n };\n\n vm.checkUncheckAll = function () {\n angular.forEach(vm.defectListFilter, function (item) {\n item.checked = vm.checkall;\n });\n };\n\n vm.initView = function () {\n loadTurns();\n vm.search();\n };\n\n vm.close = function () {\n $scope.$dismiss('cancel');\n };\n\n vm.save = function () {\n vm.defect.Id = [];\n\n vm.defectListFilter.forEach(function(item) {\n if(item.checked === true)\n vm.defect.Id.push(item.Id);\n });\n\n DefectsService.saveCloseAll(vm.defect)\n .then(\n function () {\n ToastUtil.showToastMessage($translate.instant(\"defect.save.success\"), ToastUtil.ToastType.SUCCESS);\n $scope.$close('ok');\n })\n .catch(function (error) {\n $log.log(error);\n var serverMsg = error.data.Message;\n var errorMsg;\n\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n return;\n }\n } else if (serverMsg.indexOf(\"#errorMessage\") !== -1) {\n serverMsg = serverMsg.replace(\"#errorMessage\", \"\");\n var message = $translate.instant('defect.save.error.duplicated.serial');\n message = message.replace(\"$description\", serverMsg);\n errorMsg = message;\n } else {\n errorMsg = $translate.instant(serverMsg)\n }\n\n ToastUtil.showToastMessage($translate.instant(errorMsg), ToastUtil.ToastType.ERROR);\n });\n };\n\n vm.initView();\n }\n\n function DialogCloseDefectsDirective() {\n return {\n restrict: 'E',\n replace: true,\n templateUrl: \"app/defects/dialog-close-defects.html\",\n controllerAs: 'ctrl',\n controller: 'DialogCloseDefectsController'\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('DialogCloseDefectsController', DialogCloseDefectsController)\n .directive('dialogCloseDefects', DialogCloseDefectsDirective);\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(DefectsTranslate);\n\n /** @ngInject */\n function DefectsTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'title.defects': 'Defects',\n 'title.defect.new': 'New Defect',\n 'title.defect.edit': 'Defect Editing',\n 'title.defect.copy': 'Defect Copy',\n 'title.defectIdentification': 'Defect Identification',\n 'title.rootCauseAction': 'Root Cause & Action',\n 'title.picture': 'Picture',\n 'label.defect': 'Defect',\n 'label.project' : 'Project',\n 'label.newDefect': 'New Defect',\n 'label.date': 'Date',\n 'label.section': 'Section/Line',\n 'label.station': 'Station',\n 'label.step': 'Step',\n 'label.type': 'Type',\n 'label.defect.type': 'Defect Type',\n 'label.type.daily': 'Daily',\n 'label.type.buffer': 'Buffer',\n 'label.type.rework': 'Rework',\n 'label.type.analysis': 'Analysis',\n 'label.type.real': 'Real',\n 'label.type.ndf': 'NDF',\n 'label.quantity': 'Quantity',\n 'label.serial': 'Serial',\n 'label.rootCause': 'Root Cause',\n 'label.action': 'Action',\n 'label.defect.origin': 'Origin of defect',\n 'label.defect.position': 'Position',\n 'label.client' : 'Client',\n 'label.notify' : 'Notify',\n 'label.titleId' : 'Title or Id',\n 'label.start.date' : 'Start date',\n 'label.duo.date' : 'Duo date',\n 'label.year' : 'Year',\n 'defect.label.remark': 'Remark',\n 'placeholder.search.defect': 'Search by title or id',\n 'placeholder.search.serial': 'Search by serial',\n 'placeholder.search.section': 'Search by section',\n 'placeholder.search.model' : 'Search by model',\n 'placeholder.search.area' : 'Search by area',\n 'placeholder.search.type': 'Search by type',\n 'placeholder.search.status': 'Search by status',\n 'placeholder.search.station': 'Search by station',\n 'placeholder.search.week': 'Search by week',\n 'placeholder.search.year': 'Search by year',\n 'placeholder.search.defect.button': 'Search',\n 'placeholder.clean.defect.button': 'Clear',\n 'placeholder.remark': 'Write a remark...',\n 'placeholder.search.project' : 'Search by project',\n 'select.default.project' : 'Select a project...',\n 'select.default.client' : 'Select a client...',\n 'checkbox.safety': 'Safety',\n 'select.default.defect': 'Select a defect...',\n 'select.default.model': 'Select a model...',\n 'select.default.rootCause': 'Select a root cause...',\n 'warning.type1.required': 'Select a defect occurence type.',\n 'warning.type2.required': 'Select a defect type.',\n 'warning.date.required': 'Inform a valid date.',\n 'warning.serial.required': 'Inform defect serial.',\n 'service.load.error': 'There was an error loading the data, try again or contact an administrator.',\n 'defect.title.field.placeholder': 'Write the defect title...',\n 'defect.save.error': 'There was an error saving the defect.',\n 'defect.save.error.duplicated.serial': 'Serial ($description) already inserted in another defect.',\n 'defect.save.success': 'Defect saved with success.',\n 'defect.deleted.success': 'Defect deleted with success.',\n 'defect.deleted.error': 'There was an error deleting the defect.',\n 'error.defects.search': \"An error occurred when trying to load a list of Defects.\",\n 'notFoundDefect': 'Defect not found.',\n 'validation.defect.station.required': 'You need to select a station.',\n 'validation.defect.section.required': 'You need to select a section.',\n 'validation.defect.quantity.required': 'You need to insert a quantity.',\n 'validation.defect.serial.required': 'You need to insert at least 01 serial.',\n 'validation.defect.required': 'You need to select a defect.',\n 'validation.defect.remark.required': 'You need to insert a remark.',\n 'validation.defect.date.greater.today' : 'Date must be less than or equal to current date.',\n 'validation.project.required' : 'You need to select a Project.',\n 'validation.client.required' : 'You need to select a Client.',\n 'report.name': 'Defect_report_',\n 'defect.serial.hint': 'Only required when Real Defect is checked.',\n 'defect.type.hint': 'If the Defect Type is Real, it is mandatory to inform the Serials to Save.',\n 'defect.webcam.notfound': 'Could not communicate with the WebCam, make sure it is connected, or contact an administrator.',\n 'defect.serial.duplicate': 'Serial ($id) already added to the list.',\n 'defect.hint.safety': 'Safety: If it is marked when saving the defect record, an email will be sent to all system users with the Defect information.',\n 'defect.status.ongoing': 'On Going',\n 'defect.status.close': 'Closed',\n 'defect.button.close.all': 'Close Selected Defects',\n 'defect.button.close': 'Close Defects',\n 'select.placeholder.step' : 'Select a step'\n });\n\n $translateProvider.translations('pt', {\n 'title.defects': 'Defeitos',\n 'title.defect.new': 'Novo Defeito',\n 'title.defect.edit': 'Edição de Defeito',\n 'title.defect.copy': 'Cópia de Defeito',\n 'title.defectIdentification': 'Identificação do Defeito',\n 'title.rootCauseAction': 'Causa Raiz e Ação',\n 'title.picture': 'Foto',\n 'label.project' : 'Projeto',\n 'label.defect': 'Defeito',\n 'label.defect.origin': 'Origem do defeito',\n 'label.newDefect': 'Novo Defeito',\n 'label.date': 'Data',\n 'label.section': 'Seção/Linha',\n 'label.station': 'Estação',\n 'label.step': 'Fase',\n 'label.type': 'Tipo',\n 'label.defect.type': 'Tipo de Defeito',\n 'label.type.daily': 'Diário',\n 'label.type.buffer': 'Buffer',\n 'label.type.rework': 'Retrabalho',\n 'label.type.analysis': 'Análise',\n 'label.type.real': 'Real',\n 'label.type.ndf': 'NDF',\n 'label.quantity': 'Quantidade',\n 'label.serial': 'Serial',\n 'label.rootCause': 'Causa Raiz',\n 'label.action': 'Ação',\n 'label.defect.position': 'Posição',\n 'label.client' : 'Cliente',\n 'label.notify' : 'Notificar',\n 'label.titleId' : 'Título ou Id',\n 'label.start.date' : 'Data inicial',\n 'label.duo.date' : 'Data final',\n 'label.year' : 'Ano',\n 'defect.label.remark': 'Observação',\n 'placeholder.search.defect': 'Buscar por nome ou id',\n 'placeholder.search.serial': 'Buscar por serial',\n 'placeholder.search.section': 'Buscar por seção',\n 'placeholder.search.model' : 'Buscar por modelo',\n 'placeholder.search.area' : 'Buscar por área',\n 'placeholder.search.type': 'Buscar por tipo',\n 'placeholder.search.status': 'Buscar por status',\n 'placeholder.search.station': 'Buscar por estação',\n 'placeholder.search.defect.button': 'Pesquisar',\n 'placeholder.clean.defect.button': 'Limpar',\n 'placeholder.search.week': 'Buscar por semana',\n 'placeholder.search.year': 'Buscar por ano',\n 'placeholder.remark': 'Escreva uma observação...',\n 'placeholder.search.project' : 'Buscar por projeto',\n 'select.default.client' : 'Selecione um cliente...',\n 'select.default.project' : 'Selecione um projeto...',\n 'checkbox.safety': 'Segurança',\n 'select.default.model': 'Selecione um modelo...',\n 'select.default.defect': 'Selecione um defeito...',\n 'select.default.rootCause': 'Selecione uma causa raiz...',\n 'warning.type1.required': 'Selecione um tipo de ocorrência do defeito.',\n 'warning.type2.required': 'Selecione um tipo de defeito.',\n 'warning.date.required': 'Informe uma data válida.',\n 'warning.serial.required': 'Informe o serial do defeito.',\n 'service.load.error': 'Ocorreu um erro ao carregar os dados, tente novamente ou contate um administrador.',\n 'defect.title.field.placeholder': 'Digite o título do defeito...',\n 'defect.save.error': 'Ocorreu um erro ao salvar o defeito.',\n 'defect.save.error.duplicated.serial': 'Serial ($description) já inserido em outro defeito.',\n 'defect.save.success': 'Defeito salvo com sucesso.',\n 'error.defects.search': 'Não foi possível carregar a lista de Defeitos, tente novamente ou contate um administrador.',\n 'defect.deleted.success': 'O defeito foi excluído com sucesso.',\n 'defect.deleted.error': 'Ocorreu um erro ao deletar o defeito.',\n 'notFoundDefect': 'Nenhum defeito encontrado.',\n 'validation.defect.station.required': 'Você precisa selecionar uma estação.',\n 'validation.defect.section.required' : 'Você precisa selecionar uma seção.',\n 'validation.defect.quantity.required': 'Você precisa inserir a quantidade.',\n 'validation.defect.serial.required': 'Você precisa inserir ao menos 01 serial.',\n 'validation.defect.required': 'Você precisa selecionar um defeito.',\n 'validation.defect.remark.required': 'Você precisa inserir uma observação.',\n 'validation.defect.date.greater.today' : 'A data deve ser menor ou igual à data atual.',\n 'validation.project.required' : 'Você precisa selecionar um Projeto.',\n 'validation.client.required' : 'Você precisa selecionar um Cliente.',\n 'report.name': 'Relatorio_defeito_',\n 'defect.serial.hint': 'Somente obrigatório quando Defeito Real estiver marcado.',\n 'defect.type.hint': 'Caso o Tipo do Defeito seja Real é obrigatório informar os Seriais para Salvar.',\n 'defect.webcam.notfound': 'Não foi possível se comunicar com a WebCam, verifique se a mesma está conectada, ou contate um administrador.',\n 'defect.serial.duplicate': 'Serial ($id) já adicionado na lista.',\n 'defect.hint.safety': 'Segurança: Caso esteja marcado ao salvar o registro de defeito será enviado um email para todos usuários do sistema com as informações do Defeito.',\n 'defect.status.ongoing': 'Em andamento',\n 'defect.status.close': 'Fechado',\n 'defect.button.close.all': 'Fechar defeitos selecionados',\n 'defect.button.close': 'Fechar Defeitos',\n 'select.placeholder.step' : 'Selecione um step'\n });\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('DefectsService', DefectsService);\n\n /** @ngInject */\n function DefectsService($window, $injector, $q, ConfigurationService, AuthService) {\n return {\n\n\n getDefectAnalysisById: function (Id) {\n var deffectAnalysisDomain = \"/defectAnalysis\";\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n $http.get(ConfigurationService.getServiceHost() + deffectAnalysisDomain + '/byId/' + Id, {headers: {'Authorization': $window.localStorage.aqmsToken}})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n saveDefectAnalysis: function (deffectAnalysis) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n var defect_analysis_domain = \"/defectAnalysis\";\n\n $http.post(ConfigurationService.getServiceHost() + defect_analysis_domain, deffectAnalysis, {headers: {'Authorization': $window.localStorage.aqmsToken}})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n }\n , function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n saveCloseAll: function (deffectAnalysis) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n var defect_analysis_domain = \"/defectAnalysis\";\n\n $http.post(ConfigurationService.getServiceHost() + defect_analysis_domain + '/closeAll', deffectAnalysis, {headers: {'Authorization': $window.localStorage.aqmsToken}})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n }\n , function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n listAllDefectAnalysis: function (filtro) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n var domain = \"/defectAnalysis\";\n\n filtro.BusinessId = AuthService.getBusinessId();\n\n $http.get(ConfigurationService.getServiceHost() + domain + '/',\n {\n params : filtro,\n headers : {'Authorization': $window.localStorage.aqmsToken}\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n delete: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n var domain = \"/defectAnalysis\";\n\n $http.delete(ConfigurationService.getServiceHost() + domain + '/' + id, {headers: {'Authorization': $window.localStorage.aqmsToken}})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n download: function (defect, language) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n var domain = \"/defectAnalysis\";\n\n $http.post(ConfigurationService.getServiceHost() + domain + '/export/' + language, defect,\n {\n responseType: 'arraybuffer'\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n }\n , function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n downloadAll: function (filtro, language) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n var domain = \"/defectAnalysis\";\n\n $http.get(ConfigurationService.getServiceHost() + domain + '/export/' + language,\n {\n params : filtro,\n responseType: 'arraybuffer'\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n }\n , function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n //Basic insertions\n\n\n //## ---- Defects methods---- */\n saveDefect: function (defect) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n var defect_domain = \"/defect\";\n\n $http.post(ConfigurationService.getServiceHost() + defect_domain, defect, {headers: {'Authorization': $window.localStorage.aqmsToken}})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n }\n , function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n listDefects: function (filter) {\n var deffectDomain = \"/defect/list\";\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n $http.get(ConfigurationService.getServiceHost() + deffectDomain, {\n params: filter,\n headers: {'Authorization': $window.localStorage.aqmsToken}\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getDefectById: function (Id) {\n var deffectAnalysisDomain = \"/defect\";\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n $http.get(ConfigurationService.getServiceHost() + deffectAnalysisDomain + '/byId/' + Id, {headers: {'Authorization': $window.localStorage.aqmsToken}})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n deleteDefect: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n var domain = \"/defect\";\n\n $http.delete(ConfigurationService.getServiceHost() + domain + '/' + id, {headers: {'Authorization': $window.localStorage.aqmsToken}})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n //## ---- END Defect methods---- */\n\n //## ---- Defects ACTION methods---- */\n saveDefectAction: function (defect) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n var defect_domain = \"/defect_action\";\n\n $http.post(ConfigurationService.getServiceHost() + defect_domain, defect, {headers: {'Authorization': $window.localStorage.aqmsToken}})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n }\n , function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n listDefectsActions: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n var domain = \"/defect_action/list\";\n\n $http.get(ConfigurationService.getServiceHost() + domain + '/',\n {\n params: filter,\n headers : {'Authorization': $window.localStorage.aqmsToken}\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getDefectActionById: function (Id) {\n var deffectAnalysisDomain = \"/defect_action\";\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n $http.get(ConfigurationService.getServiceHost() + deffectAnalysisDomain + '/byId/' + Id, {headers: {'Authorization': $window.localStorage.aqmsToken}})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n deleteDefectAction: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n var domain = \"/defect_action\";\n\n $http.delete(ConfigurationService.getServiceHost() + domain + '/' + id, {headers: {'Authorization': $window.localStorage.aqmsToken}})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n //## ---- END Defect Action methods---- */\n\n\n\n //## ---- Defects TYPE methods---- */\n saveDefectType: function (defect) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n var defect_domain = \"/defect_type\";\n\n $http.post(ConfigurationService.getServiceHost() + defect_domain, defect, {headers: {'Authorization': $window.localStorage.aqmsToken}})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n }\n , function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n listDefectsTypes: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n var domain = \"/defect_type/list\";\n\n $http.get(ConfigurationService.getServiceHost() + domain + '/',\n {\n params: filter,\n headers : {'Authorization': $window.localStorage.aqmsToken}\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getDefectTypeById: function (Id) {\n var deffectAnalysisDomain = \"/defect_type\";\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n $http.get(ConfigurationService.getServiceHost() + deffectAnalysisDomain + '/byId/' + Id, {headers: {'Authorization': $window.localStorage.aqmsToken}})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n deleteDefectType: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n var domain = \"/defect_type\";\n\n $http.delete(ConfigurationService.getServiceHost() + domain + '/' + id, {headers: {'Authorization': $window.localStorage.aqmsToken}})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n //## ---- END Defect Action methods---- */\n\n\n //## ---- Defect Root Cause ---- */\n listDefectRootCauses: function (filter) {\n var defectRootCause = \"/defect_root_cause/list\";\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n $http.get(ConfigurationService.getServiceHost() + defectRootCause, {\n params: filter,\n headers: {'Authorization': $window.localStorage.aqmsToken}\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n saveDefectRootCause: function (defect) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n var defect_domain = \"/defect_root_cause\";\n\n $http.post(ConfigurationService.getServiceHost() + defect_domain, defect, {headers: {'Authorization': $window.localStorage.aqmsToken}})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n }\n , function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getDefectRootCauseById: function (Id) {\n var deffectAnalysisDomain = \"/defect_root_cause\";\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n $http.get(ConfigurationService.getServiceHost() + deffectAnalysisDomain + '/byId/' + Id, {headers: {'Authorization': $window.localStorage.aqmsToken}})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n deleteDefectRootCause: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n var domain = \"/defect_root_cause\";\n\n $http.delete(ConfigurationService.getServiceHost() + domain + '/' + id, {headers: {'Authorization': $window.localStorage.aqmsToken}})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n //## ---- END Defect Root Cause methods---- */\n\n //## ---- Defect Occurrence Methods --- */\n\n listDefectOccurrences: function (filter) {\n var deffectOccurenceDomain = \"/defect_occurrence/list\";\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n $http.get(ConfigurationService.getServiceHost() + deffectOccurenceDomain, {\n params: filter,\n headers: {'Authorization': $window.localStorage.aqmsToken}\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n saveDefectOccurrence: function (defect) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n var defect_domain = \"/defect_occurrence\";\n\n $http.post(ConfigurationService.getServiceHost() + defect_domain, defect, {headers: {'Authorization': $window.localStorage.aqmsToken}})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n }\n , function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getDefectOccurrenceById: function (Id) {\n var deffectAnalysisDomain = \"/defect_occurrence\";\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n $http.get(ConfigurationService.getServiceHost() + deffectAnalysisDomain + '/byId/' + Id, {headers: {'Authorization': $window.localStorage.aqmsToken}})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n deleteDefectOccurrence: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n var domain = \"/defect_occurrence\";\n\n $http.delete(ConfigurationService.getServiceHost() + domain + '/' + id, {headers: {'Authorization': $window.localStorage.aqmsToken}})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n defectQuantitySave: function (Id, Quantity) {\n var deffectAnalysisDomain = \"/defectAnalysis\";\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n $http.get(ConfigurationService.getServiceHost() + deffectAnalysisDomain + '/quantityDefectSave/' + Id +'/'+Quantity, {ignoreLoadingBar: true, headers: {'Authorization': $window.localStorage.aqmsToken}})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n\n };\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(DefectsRouter);\n\n /** @ngInject */\n function DefectsRouter($stateProvider) {\n\n\n $stateProvider.state('defects-list', {\n url: '/defect',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/defects/defects-list.html',\n controller: 'DefectsListController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'label.defects'\n },\n authorize: true\n });\n\n $stateProvider.state('defect-create', {\n url: '/defect/create',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/defects/defects-edit.html',\n controller: 'DefectsEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'label.defects',\n copy: false\n },\n authorize: true\n });\n\n $stateProvider.state('defect-edit', {\n url: '/defect/edit/:id',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/defects/defects-edit.html',\n controller: 'DefectsEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'label.defects',\n copy: false\n },\n authorize: true\n });\n\n $stateProvider.state('defect-copy', {\n url: '/defect/copy/:id',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/defects/defects-edit.html',\n controller: 'DefectsEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'label.defects',\n copy: true\n },\n authorize: true\n });\n\n }\n})();\n\n/*eslint angular/json-functions: 0*/\n/*eslint no-unused-vars: 0*/\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('DefectsListController', DefectsListController);\n\n\n function DefectsListController(DefectsService, DefaultService, $translate, $state,\n ToastUtil, moment, $log, $scope, AuthService, $document, DialogController) {\n\n var vm = this;\n\n vm.itensPerPageList = [\n {name: '5', value: 5, before: 0, after: 6}, \n {name: '10', value: 10, before: 5, after: 11}, \n {name: '20', value: 20, before: 10, after: 21}, \n {name: '30', value: 30, before: 20, after: 31}, \n {name: '40', value: 40, before: 30, after: 41}, \n {name: '50', value: 50, before: 40, after: 51}]\n\n vm.itemPerPage = vm.itensPerPageList[0];\n\n vm.profile = {\n canAdd: false,\n canEdit: false,\n canDelete: false,\n canView: false,\n canApprove: false\n };\n\n vm.defectListFilter = [];\n vm.defectTypeList = [];\n vm.sessionList = [];\n vm.areaList = [];\n vm.modelList = [];\n vm.disableExport = true;\n vm.stationList = [];\n vm.totalLista = 0;\n vm.startDate = '';\n\n vm.searchParam = {\n BusinessId: AuthService.getBusinessId(),\n Area: '',\n Section: '',\n Station: '',\n Model: '',\n Variant: '',\n Project: '',\n Title: null,\n StartDate: new Date(),\n FinalDate: new Date(),\n Type: null,\n Serial: null,\n Week: null,\n Year: null,\n Status: '',\n Page: 1,\n MaxPerPage: vm.itemPerPage.value\n };\n\n vm.shouldShow = function (item) {\n if(vm.totalLista > 0 && item != undefined) {\n return vm.totalLista >= item.value || (vm.totalLista < item.after && vm.totalLista > item.before);\n }\n return false;\n }\n \n vm.changeItemsPerPage = function() {\n if ( vm.itemPerPage == null ) {\n vm.itemPerPage = vm.itensPerPageList[0];\n }\n vm.searchParam.Page = 1;\n vm.searchParam.MaxPerPage = vm.itemPerPage.value;\n vm.search()\n }\n\n vm.export = function () {\n if (!vm.disableExport) {\n\n if (!validateExportPermission()) {\n return;\n }\n\n var searchParams = buildSearchParam();\n\n vm.disableExport = true;\n\n DefectsService.downloadAll(searchParams, $translate.use())\n .then(function (response) {\n\n var date = moment().format(\"DD_MM_YYYY_HH_mm_ss\");\n\n var newFIle = new Blob([response], {\n type: 'application/vnd.ms-excel'\n });\n var fileURL = URL.createObjectURL(newFIle);\n var a = $document[0].createElement(\"a\");\n $document[0].body.appendChild(a);\n a.style = \"display: none\";\n a.href = fileURL;\n a.download = $translate.instant('report.name') + AuthService.getBusinessName() + \"_\" + date + \".xls\";\n a.click();\n vm.disableExport = false;\n\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"service.load.error\"), ToastUtil.ToastType.ERROR);\n vm.disableExport = false;\n });\n }\n };\n\n vm.init = function () {\n loadProfileModules();\n vm.search();\n loadDefectType();\n };\n\n vm.clearFields = function () {\n vm.searchParam.Title = null;\n vm.searchParam.Section = '';\n vm.searchParam.Station = '';\n vm.searchParam.Model = '';\n vm.searchParam.Variant = '';\n vm.searchParam.Turn = '';\n vm.searchParam.Client = '';\n vm.searchParam.Area = '';\n vm.searchParam.Project = ''\n vm.searchParam.Type = null;\n vm.searchParam.StartDate = new Date();\n vm.searchParam.FinalDate = new Date();\n vm.searchParam.Serial = null;\n vm.searchParam.Week = null;\n vm.searchParam.Year = null;\n };\n\n function buildSearchParam(items) {\n if (!vm.searchParam) {\n vm.searchParam = {\n Page: 1,\n MaxPerPage: vm.itemPerPage.value\n }\n vm.clearFields();\n }\n var searchParams = {\n BusinessId: AuthService.getBusinessId(),\n Title: null,\n StartDate: null,\n FinalDate: null,\n Week: 0,\n Year: 0,\n Section: '',\n Type: null,\n Station: '',\n Serial: null,\n Page: vm.searchParam.Page,\n MaxPerPage: vm.searchParam.MaxPerPage,\n Project: '',\n Turn: '',\n Client: '',\n Status: null\n };\n\n searchParams.Title = !vm.searchParam.Title ? null : angular.copy(vm.searchParam.Title);\n searchParams.Section = !vm.searchParam.Section ? '' : angular.copy(vm.searchParam.Section.Id);\n searchParams.Station = !vm.searchParam.Station ? '' : angular.copy(vm.searchParam.Station.Id);\n searchParams.Area = !vm.searchParam.Area ? '' : angular.copy(vm.searchParam.Area.Id);\n searchParams.Model = !vm.searchParam.Model ? '' : angular.copy(vm.searchParam.Model.Id);\n searchParams.Variant = !vm.searchParam.Variant ? '' : angular.copy(vm.searchParam.Variant.Id);\n searchParams.Turn = !vm.searchParam.Turn ? '' : angular.copy(vm.searchParam.Turn.Id);\n searchParams.Client = !vm.searchParam.Client ? '' : angular.copy(vm.searchParam.Client.Id);\n searchParams.Project = !vm.searchParam.Project ? '' : angular.copy(vm.searchParam.Project.Id);\n searchParams.Type = vm.searchParam.Type == null ? null : angular.copy(vm.searchParam.Type.Id);\n searchParams.StartDate = vm.searchParam.StartDate == null ? null : moment(vm.searchParam.StartDate).format('DD/MM/YYYY');\n searchParams.FinalDate = vm.searchParam.FinalDate == null ? null : moment(vm.searchParam.FinalDate).format('DD/MM/YYYY');\n searchParams.Serial = vm.searchParam.Serial == null ? null : angular.copy(vm.searchParam.Serial);\n searchParams.Week = vm.searchParam.Week == null ? 0 : angular.copy(vm.searchParam.Week);\n searchParams.Year = vm.searchParam.Year == null ? 0 : angular.copy(vm.searchParam.Year);\n searchParams.Status = vm.searchParam.Status == null ? null : angular.copy(vm.searchParam.Status);\n\n return searchParams;\n }\n\n vm.searchDefects = function() {\n vm.itemPerPage = vm.itensPerPageList[0];\n vm.searchParam.Page = 1;\n vm.searchParam.MaxPerPage = vm.itemPerPage.value;\n vm.search();\n }\n\n vm.search = function () {\n\n if (sessionStorage.getItem(\"searchParams\")) {\n vm.searchParam = JSON.parse(sessionStorage.getItem(\"searchParams\"));\n sessionStorage.removeItem(\"searchParams\");\n vm.searchParam.FinalDate = vm.searchParam.FinalDate === null ? null : moment(vm.searchParam.FinalDate, 'YYYY/MM/DD').toDate();\n vm.searchParam.StartDate = vm.searchParam.StartDate === null ? null : moment(vm.searchParam.StartDate, 'YYYY/MM/DD').toDate();\n\n vm.itensPerPageList.forEach(function(element) {\n if (element.value == vm.searchParam.MaxPerPage) {\n vm.itemPerPage = element;\n return;\n }\n });\n }\n\n var searchParams = buildSearchParam(vm.itemsPerPage);\n\n DefectsService.listAllDefectAnalysis(searchParams)\n .then(\n function (response) {\n vm.defectListFilter = response.resultList;\n vm.totalLista = response.total;\n vm.disableExport = (response.total <= 0);\n })\n .catch(\n function (error) {\n if (error.status !== $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"error.defects.search\"), ToastUtil.ToastType.ERROR);\n }\n });\n };\n\n function loadDefectType() {\n var searchParams = {\n Title: '',\n CsActive: 1\n };\n DefaultService.listAllDefectsType(searchParams).then(\n function (response) {\n vm.defectTypeList = response;\n })\n .catch(\n function () {\n ToastUtil.showToastMessage($translate.instant(\"error.defects.search\"), ToastUtil.ToastType.ERROR);\n });\n }\n \n vm.filter = function (keyEvent) {\n if (keyEvent.which === 13)\n vm.search();\n };\n\n vm.edit = function (defect) {\n\n if (validateEditPermission()) {\n var searchParams = JSON.stringify(vm.searchParam);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('defect-edit', {\n id: defect.Id\n });\n }\n };\n\n vm.copyDefects = function (defect) {\n\n if (validateEditPermission()) {\n var searchParams = JSON.stringify(vm.searchParam);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('defect-copy', {\n id: defect.Id\n });\n }\n };\n\n vm.create = function () {\n\n if (validateAddPermission()) {\n var searchParams = JSON.stringify(vm.searchParam);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('defect-create');\n }\n };\n\n vm.delete = function (id) {\n\n if (validateDeletePermission()) {\n DefectsService.delete(id)\n .then(\n function () {\n var searchParams = JSON.stringify(vm.searchParam);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go($state.current, {}, {\n reload: true\n });\n ToastUtil.showToastMessage($translate.instant(\"defect.deleted.success\"), ToastUtil.ToastType.SUCCESS);\n }).catch(\n function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"error\"), ToastUtil.ToastType.ERROR);\n });\n }\n\n };\n\n vm.onDefectQuantityValueChanged = function (item) {\n if ($scope.defectQuantity.$invalid) {\n return;\n } else {\n DefectsService.defectQuantitySave(item.Id, item.Quantity)\n .then(\n function () {\n ToastUtil.showToastMessage($translate.instant(\"defect.save.success\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(\n function (error) {\n $log.log(error);\n var serverMsg = error.data.Message;\n var errorMsg;\n\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n return;\n }\n } else if (serverMsg.indexOf(\"#errorMessage\") !== -1) {\n\n serverMsg = serverMsg.replace(\"#errorMessage\", \"\");\n var message = $translate.instant('defect.save.error.duplicated.serial');\n message = message.replace(\"$description\", serverMsg);\n errorMsg = message;\n } else {\n errorMsg = $translate.instant(serverMsg)\n }\n\n ToastUtil.showToastMessage($translate.instant(errorMsg), ToastUtil.ToastType.ERROR);\n });\n }\n };\n \n vm.dialogCloseDefects = function() {\n DialogController.show('defect.button.close', '', vm, null, vm.search, 'lg');\n };\n\n function loadProfileModules() {\n var profileModule = {};\n\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.moduleDefects;\n\n DefaultService.loadModules(profileModule)\n .then(\n function (response) {\n vm.profile = angular.copy(response);\n\n validateViewPermission();\n })\n .catch(\n function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n });\n }\n\n function validateViewPermission() {\n if (!vm.profile.CanView) {\n $state.go('not-authorized', {}, {});\n }\n }\n\n function validateExportPermission() {\n if (!vm.profile.CanExport) {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n return false;\n }\n\n return true;\n }\n\n function validateDeletePermission() {\n if (!vm.profile.CanDelete) {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n return false;\n }\n\n return true;\n }\n\n function validateEditPermission() {\n if (!vm.profile.CanEdit) {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n return false;\n }\n\n return true;\n }\n\n function validateAddPermission() {\n if (!vm.profile.CanAdd) {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n return false;\n }\n\n return true;\n }\n\n vm.init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('DefectsEditController', DefectsEditController);\n\n function DefectsEditController($rootScope, $scope, $state, $stateParams, $window, DefectsService, DefaultService, ToastUtil, $translate, moment, $log, $document, AuthService) {\n $rootScope.$state = $state;\n $rootScope.$stateParams = $stateParams;\n\n var vm = this, USER = {Id: parseInt($window.localStorage.userID), Name: $window.localStorage.aliasAqms}, NOW = new Date();\n vm.idToEdit;\n\n vm.Sections = [];\n vm.Stations = [];\n vm.areas = [];\n vm.models = [];\n\n vm.deffectOccurrences = [];\n vm.deffectTypes = [];\n vm.defects = [];\n\n vm.rootCauseList = [];\n vm.actionsList = [];\n\n vm.disableWhenEditing = false;\n vm.exporting = false;\n\n vm.profile = {\n CanAdd: false,\n CanEdit: false,\n CanDelete: false,\n CanView: false,\n CanApprove: false\n };\n\n vm.defect = {\n Id: 0,\n CreatedBy: USER,\n CreatedDate: NOW,\n UpdatedBy: USER,\n UpdatedDate: NOW,\n Position: '',\n DefectOccurrence: null,\n EmailsToNotify: [],\n DefectActions: [],\n Project: '',\n DefectType: null,\n Client: '',\n Turn: '',\n Step: null,\n Status: 0\n };\n\n vm.isPictureAccordionOpen = false;\n vm.isRootCauseAccordionOpen = false;\n vm.isSaveDisabled = true;\n\n vm.export = function () {\n if (!vm.exporting) {\n vm.exporting = true;\n vm.defect.StartDate = moment(vm.defect.StartDateTemp).format('DD/MM/YYYY HH:mm:ss');\n\n DefectsService.download(vm.defect, $translate.use()).then(function (response) {\n var date = moment().format(\"DD_MM_YYYY_HH_mm_ss\");\n var newFIle = new Blob([response], {\n type: 'application/vnd.ms-excel'\n });\n var fileURL = URL.createObjectURL(newFIle);\n var a = $document[0].createElement(\"a\");\n $document[0].body.appendChild(a);\n a.style = \"display: none\";\n a.href = fileURL;\n a.download = $translate.instant('report.name') + AuthService.getBusinessName() + \"_\" + date + \".xls\";\n a.click();\n vm.exporting = false;\n\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"service.load.error\"), ToastUtil.ToastType.ERROR);\n vm.exporting = false;\n });\n }\n };\n\n // Model selected by user in combobox.\n vm.setModelId = function (model) {\n if (model) {\n vm.defect.Model = model;\n } else {\n vm.defect.Model = null;\n }\n };\n\n vm.handleAccordions = function () {\n if (vm.defect.DefectAttachments != null && vm.defect.DefectAttachments != undefined && vm.defect.DefectAttachments.length > 0) {\n vm.isPictureAccordionOpen = true;\n }\n if (vm.defect.DefectRootCause != null && vm.defect.DefectRootCause != undefined && vm.defect.DefectRootCause.Id != null) {\n vm.isRootCauseAccordionOpen = true;\n }\n };\n\n vm.markDeffectOccurrence = function () {\n var isItemInative = true;\n angular.forEach(vm.deffectOccurrences, function (value) {\n if (value.Id == vm.defect.DefectOccurrence.Id) {\n vm.defect.DefectOccurrence = value;\n isItemInative = false;\n }\n });\n if (isItemInative) {\n vm.deffectOccurrences.push(vm.defect.DefectOccurrence);\n }\n };\n\n vm.fillDefect = function () {\n var isItemInative = true;\n angular.forEach(vm.defects, function (value) {\n if (value.Id == vm.defect.Defect.Id) {\n vm.defect.Defect = value;\n isItemInative = false;\n }\n });\n if (isItemInative) {\n vm.defects.push(vm.defect.Defect);\n }\n\n };\n\n vm.fillRootCause = function () {\n if (vm.defect.DefectRootCause != null && vm.defect.DefectRootCause != undefined) {\n var isItemInative = true;\n angular.forEach(vm.rootCauseList, function (value) {\n if (value.Id == vm.defect.DefectRootCause.Id) {\n vm.defect.DefectRootCause = value;\n isItemInative = false;\n }\n });\n if (isItemInative) {\n vm.rootCauseList.push(vm.defect.DefectRootCause);\n }\n }\n };\n\n vm.markDefectAction = function () {\n\n if (vm.defect.DefectActions != undefined) {\n\n angular.forEach(vm.defect.DefectActions, function (persistedAction) {\n\n angular.forEach(vm.actionsList, function (value) {\n\n if (value.Id == persistedAction.Id) {\n value.Selected = true;\n }\n });\n\n });\n\n }\n };\n\n vm.copyDefects = function () {\n $stateParams.copy = true;\n vm.disableWhenEditing = false;\n vm.exporting = false;\n\n vm.defect.Id = 0;\n vm.defect.CreatedBy = USER;\n vm.defect.CreatedDate = NOW;\n vm.defect.UpdatedBy = USER;\n vm.defect.UpdatedDate = NOW;\n vm.defect.Status = 0;\n vm.defect.Station = null;\n vm.defect.Defect = null;\n vm.defect.Quantity = null;\n vm.defect.Position = null;\n vm.defect.Step = null;\n vm.defect.StartDateTemp = new Date();\n vm.dateChange();\n vm.defect.DefectAttachments = [];\n vm.defect.DefectSerials = [];\n vm.defect.Remark = null;\n vm.defect.UpdatedRegister = null;\n };\n\n vm.copyActionButton = function() {\n $state.go('defect-copy', {\n id: vm.defect.Id\n });\n };\n\n vm.isDisabled = function(){\n if(vm.defect.Id > 0 && vm.defect.Status === 1 && vm.profile.CanApprove === false) {\n return true;\n }\n return false;\n };\n\n vm.dateChange = function () {\n var today = new Date();\n\n if (vm.defect.StartDateTemp > today) {\n vm.defect.StartDateTemp = today;\n ToastUtil.showToastMessage($translate.instant(\"validation.defect.date.greater.today\"), ToastUtil.ToastType.WARN);\n }\n\n setWeek();\n };\n\n vm.save = function () {\n if (vm.canSave()) {\n vm.defect.StartDate = moment(vm.defect.StartDateTemp).format('DD/MM/YYYY HH:mm:ss');\n vm.defect.UserLogged = $window.localStorage.userID;\n vm.defect.languageEmail = $translate.use();\n\n setDefectActions();\n\n vm.defect.Company = {\n Name: AuthService.getCompanyName()\n };\n\n if (!vm.defect.Business.Name) {\n vm.defect.Business.Name = AuthService.getBusinessName();\n }\n\n if (vm.defect.Id > 0 ) {\n vm.defect.UpdatedBy = USER;\n }\n\n DefectsService.saveDefectAnalysis(vm.defect)\n .then(\n function () {\n ToastUtil.showToastMessage($translate.instant(\"defect.save.success\"), ToastUtil.ToastType.SUCCESS);\n $state.go('defects-list');\n })\n .catch(function (error) {\n $log.log(error);\n var serverMsg = error.data.Message;\n var errorMsg;\n\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n return;\n }\n } else if (serverMsg.indexOf(\"#errorMessage\") !== -1) {\n\n serverMsg = serverMsg.replace(\"#errorMessage\", \"\");\n var message = $translate.instant('defect.save.error.duplicated.serial');\n message = message.replace(\"$description\", serverMsg);\n errorMsg = message;\n } else {\n errorMsg = $translate.instant(serverMsg)\n }\n\n ToastUtil.showToastMessage($translate.instant(errorMsg), ToastUtil.ToastType.ERROR);\n });\n }\n };\n\n vm.canSave = function () {\n var canSave = false;\n\n if (validateDefect() && validateDefectType() && validateQuantity() && !vm.isRemarkInvalid() && vm.defect.DefectOccurrence != undefined &&\n validateSection() && validateArea() && validateModel() && validateVariant() && validateStation() &&\n !vm.serialListChanged() && validateProject() && validateClient() && validateTurn()) {\n canSave = true;\n }\n return canSave && !vm.exporting;\n };\n\n vm.isRemarkInvalid = function () {\n var isInvalid = false;\n if (vm.NotifyChecked && (vm.defect.Remark == undefined || vm.defect.Remark == \"\")) {\n isInvalid = true;\n }\n\n return isInvalid;\n };\n\n vm.serialListChanged = function () {\n var showRequiredMsg = false;\n if (vm.defect.DefectType != undefined && vm.defect.DefectType.Title == \"Real\" && vm.defect.DefectSerials.length == 0) {\n showRequiredMsg = true;\n }\n return showRequiredMsg;\n };\n\n vm.actionChange = function () {\n\n var element = $document[0].querySelector(\"#notify\");\n\n if (element) {\n vm.NotifyChecked = element.checked;\n } else {\n vm.NotifyChecked = false;\n }\n };\n\n vm.disabledStatus = function() {\n if(vm.profile.CanApprove) {\n return false;\n }\n\n if(!vm.profile.CanApprove && vm.defect.Id > 0 && vm.defect.Status === 1) {\n return true;\n }\n };\n\n function getDefectToEdit() {\n DefectsService.getDefectAnalysisById(vm.idToEdit)\n .then(function (response) {\n\n vm.defect = angular.copy(response);\n vm.defect.EmailsToNotify = [];\n\n vm.handleAccordions();\n\n // Date cannot be edited after defect is saved\n vm.disableWhenEditing = true;\n var startDate = moment(vm.defect.StartDate, 'DD/MM/YYYY');\n vm.defect.StartDateTemp = new Date(startDate.year(), startDate.month(), startDate.date());\n\n vm.defect.CreatedDate = moment(vm.defect.CreatedDate, 'YYYY/MM/DD').toDate();\n vm.defect.UpdatedDate = moment(vm.defect.UpdatedDate, 'YYYY/MM/DD').toDate();\n\n setWeek();\n\n vm.markDeffectOccurrence();\n\n markDeffectType();\n\n vm.fillDefect();\n\n vm.fillRootCause();\n\n vm.markDefectAction();\n\n if($stateParams.copy)\n vm.copyDefects();\n })\n .catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"service.load.error\"), ToastUtil.ToastType.ERROR);\n });\n }\n \n function markDeffectType() {\n var isItemInative = true;\n angular.forEach(vm.deffectTypes, function (value) {\n if (value.Id == vm.defect.DefectType.Id) {\n vm.defect.DefectType = value;\n isItemInative = false;\n }\n });\n if (isItemInative) {\n vm.deffectTypes.push(vm.defect.DefectType);\n }\n } \n // load DefectOccurrence (1)\n function loadDefectOccurrence() {\n var searchParams = {\n Title: \"\",\n CsActive: 1\n };\n DefaultService.listAllDefectOccurrence(searchParams).then(\n function (response) {\n vm.deffectOccurrences = angular.copy(response);\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"defect.serial.duplicate\"), ToastUtil.ToastType.ERROR);\n });\n }\n\n // load defect types.\n function loadAllDefectType() {\n var searchParams = {\n Title: \"\",\n CsActive: 1\n };\n\n DefaultService.listAllDefectsType(searchParams)\n .then(function (response) {\n vm.deffectTypes = angular.copy(response);\n })\n .catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"service.load.error\"), ToastUtil.ToastType.ERROR);\n });\n }\n\n // load defects\n function loadDefects() {\n var searchParams = {\n Title: \"\",\n CsActive: 1\n };\n\n DefaultService.listAllDefect(searchParams).then(\n function (response) {\n vm.defects = angular.copy(response);\n\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"service.load.error\"), ToastUtil.ToastType.ERROR);\n });\n }\n\n // load root cause list\n function loadRootCauseList() {\n var searchParams = {\n Title: \"\",\n CsActive: 1\n };\n DefaultService.listAllDefectRootCause(searchParams).then(\n function (response) {\n vm.rootCauseList = angular.copy(response);\n\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"service.load.error\"), ToastUtil.ToastType.ERROR);\n });\n }\n\n function loadActionsList() {\n var searchParams = {\n Title: \"\",\n CsActive: 1\n };\n\n DefaultService.listAllDefectsAction(searchParams)\n .then(function (response) {\n vm.actionsList = angular.copy(response);\n })\n .catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"service.load.error\"), ToastUtil.ToastType.ERROR);\n });\n }\n\n function setWeek() {\n vm.defect.Week = moment(vm.defect.StartDateTemp).isoWeek();\n }\n\n function setDefectActions() {\n angular.forEach(vm.actionsList, function (item) {\n\n if (item.Selected) {\n\n var alreadyExist = vm.defect.DefectActions.filter(function (obj) {\n return obj.Id == item.Id\n });\n\n if (!alreadyExist[0]) {\n vm.defect.DefectActions.push(item);\n }\n } else {\n\n var indexToRemove = -1;\n\n var itemToRemove = vm.defect.DefectActions.filter(function (obj) {\n return obj.Id == item.Id\n });\n\n if (itemToRemove[0]) {\n angular.forEach(vm.defect.DefectActions, function (item, key) {\n if (item.Id == itemToRemove[0].Id) {\n indexToRemove = key;\n }\n });\n }\n\n if (indexToRemove != -1) {\n vm.defect.DefectActions.splice(indexToRemove, 1);\n }\n }\n });\n }\n\n function validateDefect() {\n return vm.defect.Defect != undefined && vm.defect.Defect.Id > 0;\n }\n\n function validateDefectType() {\n return vm.defect.DefectType != undefined && vm.defect.DefectType.Id > 0;\n }\n\n function validateTurn() {\n return vm.defect.Turn != undefined && vm.defect.Turn.Id > 0;\n }\n\n function validateProject() {\n return vm.defect.Project != undefined && vm.defect.Project.Id > 0;\n }\n\n function validateClient() {\n return vm.defect.Client != undefined && vm.defect.Client.Id > 0;\n }\n\n function validateArea() {\n return vm.defect.Area\n }\n\n function validateModel() {\n return vm.defect.Model\n }\n\n function validateVariant() {\n return vm.defect.Variant != undefined && vm.defect.Variant.Id > 0;\n }\n\n function validateSection() {\n return vm.defect.Section != undefined && vm.defect.Section != null;\n }\n\n function validateStation() {\n return vm.defect.Station != undefined && vm.defect.Station != null\n }\n\n function validateQuantity() {\n return vm.defect.Quantity != undefined && vm.defect.Quantity != null;\n }\n\n function loadProfileModules() {\n var profileModule = {};\n\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.moduleDefects;\n\n DefaultService.loadModules(profileModule)\n .then(\n function (response) {\n vm.profile = angular.copy(response);\n\n if (vm.idToEdit) {\n validateEditPermission();\n getDefectToEdit();\n } else {\n validateAddPermission();\n }\n })\n .catch(\n function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n });\n }\n\n function validateEditPermission() {\n if (!vm.profile.CanEdit) {\n $state.go('not-authorized', {}, {});\n }\n }\n\n function validateAddPermission() {\n if (!vm.profile.CanAdd) {\n $state.go('not-authorized', {}, {});\n }\n }\n\n function init() {\n\n vm.idToEdit = $state.params.id;\n\n loadProfileModules();\n loadDefectOccurrence();\n loadAllDefectType();\n loadDefects();\n loadRootCauseList();\n loadActionsList();\n\n if (!vm.idToEdit) {\n vm.defect.StartDateTemp = new Date();\n vm.defect.DefectSerials = [];\n setWeek();\n vm.defect.Business = {\n Id: AuthService.getBusinessId()\n };\n }\n }\n \n init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('ProductionController', ProductionController);\n\n /** @ngInject */\n function ProductionController($log, $interval, DashboardService, $window, $rootScope, Idle,\n ChartMultiBarHorizontalUtil, $translate, ToastUtil, moment, ChartGaugeUtil, $scope, IndexConstant, $q, AuthService, ChartBarUtil) {\n var vm = this;\n\n vm.productionPlan = [];\n\n vm.dataRefreshIntervalList = [{\n name: '05 min',\n value: (5 * 60 * 1000)\n }, {\n name: '10 min',\n value: (10 * 60 * 1000)\n }, {\n name: '30 min',\n value: (30 * 60 * 1000)\n }];\n\n vm.dataRefreshIntervalModel = vm.dataRefreshIntervalList[0];\n\n vm.searchParams = {\n ProjectId: '',\n BusinessId: AuthService.getBusinessId(),\n ClientId: '',\n ModelId: '',\n VariantId: '',\n TurnId: '',\n SectionId: '',\n StartDateTemp: '',\n StartDate: ''\n\n };\n\n vm.projectObj = '';\n vm.clientObj = '';\n vm.modelObj = '';\n vm.variantObj = '';\n vm.turnObj = '';\n vm.sectionObj = '';\n\n\n // data to graphic.\n vm.topOccurrences = [];\n\n vm.ChartType = {\n LINE_PRODUCTION_PLAN: 0,\n MULTI_BAR_DEFECT: 1,\n BAR_OCCURRENCE: 2,\n GAUGE_PASS_YELD: 3,\n DAILY_OCCURRENCE: 4\n };\n\n /**\n * PROCCESS Status from Product Plan Occurrence.\n * @type {{PROCESSUNAVAILABLE: number, PROCESSWITHRESTRICTIONS: number, PROCESSNORMALLY: number}}\n */\n vm.statusProcessId = {\n PROCESSUNAVAILABLE: 0,\n PROCESSWITHRESTRICTIONS: 1,\n PROCESSNORMALLY: 2\n };\n\n /**\n * Status from Product Plan Occurrence\n * @type {{ONGOING: number, CLOSED: number}}\n */\n vm.StatusId = {\n ONGOING: 0,\n CLOSED: 1\n };\n\n /** Filled only when all promisses finishes */\n vm.carouselList = [];\n\n /** Filled Async */\n vm.carouselListTemp = [];\n\n /**\n * Current slide to carousel.\n * @type {number}\n */\n\n vm.currentSlide = 0;\n\n\n vm.currentLocale = $window.localStorage.defaultLanguage;\n\n var dataRefreshInterval = null;\n\n function init() {\n //Listener to Locale\n var localeChange = $rootScope.$on(IndexConstant.localeChangeEvent, localeChangeEvent);\n // Register listener to fullscreen event.\n $scope.$on(IndexConstant.fullScreenEvent, fullScreenEventListener);\n\n Idle.unwatch();\n\n // loadDataToChart();\n\n setDataRequestInterval();\n\n $rootScope.$on('$destroy', localeChange);\n }\n\n vm.chartBarStyle = 'height: 65vh; width: 65vw;';\n vm.chartProductionLine = 'height: 60vh; width: 100vw;';\n vm.chartMultiBarStyle = 'height: 80vh; width: 80vw;';\n vm.chartGaugeStyle = '50%';\n vm.chartScrapGaugeStyle = '50%';\n\n function fullScreenEventListener(event, isFullScreen) {\n if (isFullScreen) {\n vm.chartBarStyle = 'height: 75vh; width: 80vw;';\n vm.chartProductionLine = 'height: 71vh; width: 100vw;';\n vm.chartMultiBarStyle = 'height: 80vh; width: 85vw;';\n vm.chartGaugeStyle = '70%';\n vm.chartScrapGaugeStyle = '60%';\n } else {\n vm.chartBarStyle = 'height: 65vh; width: 65vw;';\n vm.chartProductionLine = 'height: 60vh; width: 100vw;';\n vm.chartMultiBarStyle = 'height: 80vh; width: 80vw;';\n vm.chartGaugeStyle = '50%';\n vm.chartScrapGaugeStyle = '50%';\n }\n }\n\n /**\n * Schedule interval to request chart data every X minute(s).\n */\n function setDataRequestInterval() {\n dataRefreshInterval = $interval(loadDataToChart, vm.dataRefreshIntervalModel.value);\n }\n\n $scope.$on('$destroy', function () {\n Idle.watch();\n\n if (dataRefreshInterval) {\n $interval.cancel(dataRefreshInterval);\n }\n });\n\n /**\n * reset Data Refreh interval.\n */\n function resetDataRequestInterval() {\n if (dataRefreshInterval != null) {\n $interval.cancel(dataRefreshInterval);\n setDataRequestInterval();\n }\n }\n\n vm.dataRefreshIntervalChanged = function () {\n $interval(resetDataRequestInterval, 200, 1);\n };\n\n // when change language must change language graphic because translate came from backend.\n var unregister = $rootScope.$on('CHANGE-LANGUAGE', function () {\n fillTopOccurrenceList();\n });\n\n $scope.$on('$destroy', unregister);\n\n vm.getTopDefectTitle = function () {\n var chartName = $translate.instant('dashboard.production.defect.chart.title');\n var currentDate;\n\n if (vm.searchParams.StartDateTemp == '' || vm.searchParams.StartDateTemp == null || angular.isUndefined(vm.searchParams.StartDateTemp)) {\n currentDate = new Date();\n } else {\n currentDate = vm.searchParams.StartDateTemp;\n }\n\n if ($translate.use() == 'pt') {\n currentDate = moment(currentDate).format('DD/MM/YYYY');\n } else {\n currentDate = moment(currentDate).format('MM/DD/YYYY');\n }\n\n var sectionName = vm.section != undefined && vm.section.Title != undefined ? vm.section.Title + ' - ' : '';\n return sectionName + chartName + ' (' + currentDate + ')'\n };\n\n\n function setProjectId() {\n if (angular.isDefined(vm.projectObj) && vm.projectObj != null) {\n vm.searchParams.ProjectId = vm.projectObj.Id;\n\n } else {\n vm.searchParams.ProjectId = '';\n }\n }\n\n function setClientId() {\n if (angular.isDefined(vm.clientObj) && vm.clientObj != null) {\n vm.searchParams.ClientId = vm.clientObj.Id;\n } else {\n vm.searchParams.ClientId = '';\n }\n }\n\n function setModelId() {\n if (angular.isDefined(vm.modelObj) && vm.modelObj != null) {\n vm.searchParams.ModelId = vm.modelObj.Id;\n } else {\n vm.searchParams.ModelId = '';\n }\n }\n\n function setVariantId() {\n if (angular.isDefined(vm.variantObj) && vm.variantObj != null) {\n vm.searchParams.VariantId = vm.variantObj.Id;\n } else {\n vm.searchParams.VariantId = '';\n }\n }\n\n function setTurnId() {\n if (angular.isDefined(vm.turnObj) && vm.turnObj != null) {\n vm.searchParams.TurnId = vm.turnObj.Id;\n } else {\n vm.searchParams.TurnId = '';\n }\n }\n\n function setSectionId() {\n if (angular.isDefined(vm.sectionObj) && vm.sectionObj != null) {\n vm.searchParams.SectionId = vm.sectionObj.Id;\n } else {\n vm.searchParams.SectionId = '';\n }\n }\n\n vm.searchEvent = function () {\n if (!vm.projectObj || !vm.clientObj) {\n ToastUtil.showToastMessage($translate.instant('dashboard.project.client.required.error'), ToastUtil.ToastType.WARN);\n } else {\n $interval(loadDataToChart, 210, 1);\n }\n };\n\n function loadDataToChart() {\n handleStartDateBeforeRequest();\n var promisseProductionPlan = searchProductionPlans();\n var promisseDailyOccurrence = getDailyOccurrenceToCarousel();\n var promisseDefect = searchDefects();\n var promissePassYield = getFirstAndFinalPassToChart();\n var promisseTopOccurrence = searchTopOccurrences();\n\n $q.all([promisseProductionPlan, promisseDailyOccurrence, promisseTopOccurrence, promissePassYield, promisseDefect])\n .then(function () {\n vm.carouselListTemp.sort(function (a, b) {\n return a.type - b.type;\n });\n vm.carouselList = angular.copy(vm.carouselListTemp);\n });\n }\n\n vm.clearSearchFields = function () {\n vm.searchParams = {\n BusinessId: AuthService.getBusinessId(),\n ModelId: '',\n VariantId: '',\n TurnId: '',\n SectionId: '',\n StartDateTemp: '',\n StartDate: ''\n\n };\n vm.modelObj = '';\n vm.variantObj = '';\n vm.turnObj = '';\n vm.sectionObj = '';\n vm.projectObj = '';\n vm.clientObj = '';\n };\n\n /**\n * Return an object to add in carousel list.\n * @param type\n * @param dataObj\n * @returns {{type: *, dataObj: *}}\n */\n function getCarouselItem(type, dataObj) {\n return {\n type: type,\n dataObj: dataObj\n };\n }\n\n function handleStartDateBeforeRequest() {\n setProjectId();\n setClientId();\n setModelId();\n setVariantId();\n setTurnId();\n setSectionId();\n\n\n if (vm.searchParams.StartDateTemp == '' || vm.searchParams.StartDateTemp == null || angular.isUndefined(vm.searchParams.StartDateTemp)) {\n vm.searchParams.StartDate = moment(new Date()).format('DD/MM/YYYY');\n vm.searchParams.StartDateTemp = new Date();\n } else {\n vm.searchParams.StartDate = moment(vm.searchParams.StartDateTemp).format('DD/MM/YYYY');\n }\n }\n\n function searchDefects() {\n return DashboardService.listDefectAnalysisToChart(vm.searchParams)\n .then(\n function (response) {\n\n removeItemsFromCarousel(vm.ChartType.MULTI_BAR_DEFECT);\n\n if (angular.isDefined(response) && response.length > 0) {\n var copyResponse = angular.copy(response);\n if (copyResponse != null && copyResponse.length > 0) {\n var chartData = [];\n var scrapValues = [];\n var defectValues = [];\n angular.forEach(copyResponse, function (defect) {\n var text = defect.DefectDescription;\n if (defect.DefectDescription.length > 25) {\n text = defect.DefectDescription.substring(0, 25) + '...';\n }\n if (defect.DefectType == 'Real') {\n // if type == real must add scrap and defect.\n scrapValues.push(ChartMultiBarHorizontalUtil.getSerieValueObj(text, defect.TotalSum));\n } else {\n defectValues.push(ChartMultiBarHorizontalUtil.getSerieValueObj(text, defect.TotalSum));\n }\n });\n\n var scrapSerie = ChartMultiBarHorizontalUtil.getSerieObj($translate.instant('dashboard.production.defect.chart.scrap.title'), '#d62728', scrapValues, 'dashboard.production.defect.chart.scrap.title');\n var defectSerie = ChartMultiBarHorizontalUtil.getSerieObj($translate.instant('dashboard.production.defect.chart.defect.title'), '#1f77b4', defectValues, 'dashboard.production.defect.chart.defect.title');\n\n chartData.push(defectSerie);\n chartData.push(scrapSerie);\n\n vm.carouselListTemp.push(getCarouselItem(vm.ChartType.MULTI_BAR_DEFECT, chartData));\n }\n }\n })\n .catch(\n function () {\n ToastUtil.showToastMessage($translate.instant('dashboard.production.defect.chart.load.error'), ToastUtil.ToastType.ERROR);\n });\n }\n\n function searchProductionPlans() {\n return DashboardService.listAllProductionPlanToChart(vm.searchParams)\n .then(\n function (response) {\n removeItemsFromCarousel(vm.ChartType.LINE_PRODUCTION_PLAN);\n\n if (angular.isDefined(response) && response.length > 0) {\n angular.forEach(response, function (prod) {\n vm.carouselListTemp.push(getCarouselItem(vm.ChartType.LINE_PRODUCTION_PLAN, angular.copy(prod)));\n });\n }\n })\n .catch(\n function () {\n ToastUtil.showToastMessage($translate.instant('error.production.plan.search'), ToastUtil.ToastType.ERROR);\n });\n }\n\n /**\n * Range param to first pass yeld chart.\n */\n vm.firstPassYeldRange = ChartGaugeUtil.getFirstPassYeldRange();\n vm.firstPassYeldLowerLimit = 50;\n vm.firstPassYeldUpperLimit = 100;\n /**\n * Range param to final pass yeld chart.\n */\n vm.finalPassYeldRange = ChartGaugeUtil.getFinalPassYeldRange();\n vm.finalPassYeldLowerLimit = 95;\n vm.finalPassYeldUpperLimit = 100;\n\n vm.scrapRatedRange = ChartGaugeUtil.getScrapRateRange();\n vm.scrapRateLowerLimit = 0;\n vm.scrapRateUpperLimit = 0.6;\n\n vm.getPassYeldSlideTitle = function (item) {\n var text = $translate.instant('dashboard.production.passyeld.slide.title');\n var date = getDateLocalized(vm.searchParams.StartDate);\n\n text = text.replace('#Section', item.Section.Title);\n text = text.replace('#Turn', item.Turn.Title);\n text = text.replace('#Model', item.Model.Title);\n text = text.replace('#Variant', item.Variant.Code);\n text = text.replace('#Date', date);\n\n return text;\n };\n\n /**\n * Returns localized date.\n * @param dateParam\n * @returns {string}\n */\n function getDateLocalized(dateParam) {\n var date = '';\n if ($window.localStorage.defaultLanguage && $window.localStorage.defaultLanguage === 'en') {\n var date1 = moment(dateParam, 'DD.MM.YYYY');\n date = date1.format('MM/DD/YYYY');\n } else {\n date = dateParam;\n }\n return date;\n }\n\n /**\n * Load First and Final pass yeld Rates.\n */\n function getFirstAndFinalPassToChart() {\n return DashboardService.getFirstAndFinalPassToChart(vm.searchParams)\n .then(\n function (response) {\n removeItemsFromCarousel(vm.ChartType.GAUGE_PASS_YELD);\n\n if (angular.isDefined(response) && response.length > 0) {\n angular.forEach(response, function (item) {\n vm.carouselListTemp.push(getCarouselItem(vm.ChartType.GAUGE_PASS_YELD, angular.copy(item)));\n });\n }\n })\n .catch(\n function () {\n ToastUtil.showToastMessage($translate.instant('dashboard.production.passyeld.get.error'), ToastUtil.ToastType.ERROR);\n });\n }\n\n /**\n * Get Status title to Daily occurrence.\n * @param item\n * @returns {string}\n */\n vm.getDailyOccurrenceStatus = function (item) {\n var status = '';\n\n if (item.Process == vm.statusProcessId.PROCESSNORMALLY && item.Status == vm.StatusId.CLOSED) {\n status = 'dashboard.production.daily.occurrence.header.status.closed';\n } else {\n status = 'dashboard.production.daily.occurrence.header.status.open';\n }\n\n return status;\n };\n\n vm.getDailyOccurrenceTitle = function () {\n var title = $translate.instant('dashboard.production.daily.occurrence.title');\n title = title.replace('#Date', getDateLocalized(vm.searchParams.StartDate));\n return title\n };\n\n /**\n * Gets daily occurrence data to carousel.\n */\n function getDailyOccurrenceToCarousel() {\n return DashboardService.getDailyOccurrenceToCarousel(vm.searchParams)\n .then(\n function (response) {\n removeItemsFromCarousel(vm.ChartType.DAILY_OCCURRENCE);\n if (angular.isDefined(response) && response.length > 0) {\n vm.carouselListTemp.push(getCarouselItem(vm.ChartType.DAILY_OCCURRENCE, angular.copy(response)));\n }\n })\n .catch(\n function () {\n ToastUtil.showToastMessage($translate.instant('dashboard.production.passyeld.get.error'), ToastUtil.ToastType.ERROR);\n });\n }\n\n function localeChangeEvent(event, locale) {\n vm.currentLocale = locale;\n }\n\n /**\n * Remove items from carousel, according type.\n * @param typeToRemove\n */\n function removeItemsFromCarousel(typeToRemove) {\n var index = vm.carouselListTemp.length;\n while (index--) {\n if (vm.carouselListTemp[index].type == typeToRemove) {\n vm.carouselListTemp.splice(index, 1);\n }\n }\n }\n\n function searchTopOccurrences() {\n return DashboardService.listTopOccurrence(vm.searchParams)\n .then(function (response) {\n vm.topOccurrences = response;\n fillTopOccurrenceList();\n })\n .catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant('error.occurrence.plan.search'), ToastUtil.ToastType.ERROR);\n });\n }\n\n function fillTopOccurrenceList() {\n\n removeItemsFromCarousel(vm.ChartType.BAR_OCCURRENCE);\n\n vm.occurrenceBarChartList = [];\n vm.chartList = [];\n\n if (vm.topOccurrences.length > 0) {\n BuildGraphic();\n\n for (var i = 0; i <= vm.chartList.length; i++) {\n var chartData = [];\n if (vm.chartList[i] != undefined && vm.chartList[i] != null) {\n chartData.push(vm.chartList[i]);\n vm.carouselListTemp.push(getCarouselItem(vm.ChartType.BAR_OCCURRENCE, angular.copy(chartData)));\n }\n }\n }\n }\n\n function BuildGraphic() {\n for (var i = 0; i < vm.topOccurrences.length; i++) {\n var color = '';\n var qtd = '';\n\n if (vm.topOccurrences[i].Qtd >= 40) {\n color = '#e30022';\n } else if (vm.topOccurrences[i].Qtd >= 30 && vm.topOccurrences[i].Qtd < 40) {\n color = '#fff600';\n } else if (vm.topOccurrences[i].Qtd < 30) {\n color = '#007aa5';\n }\n\n qtd = vm.topOccurrences[i].Qtd;\n\n if (vm.occurrenceBarChartList[0] == undefined || vm.occurrenceBarChartList[0].values == undefined) {\n var title = '';\n if ($window.localStorage.defaultLanguage && $window.localStorage.defaultLanguage == 'pt') {\n title = 'Top Ocorrências (' + vm.topOccurrences[i].DatePt + ')';\n } else {\n title = 'Top Occurrences (' + vm.topOccurrences[i].DateEn + ')';\n }\n vm.occurrenceBarChartList.push({\n key: title,\n values: []\n });\n }\n\n vm.occurrenceBarChartList[0].values.push(ChartBarUtil.getBarChartObj(vm.topOccurrences[i].DescriptionPt, vm.topOccurrences[i].DescriptionEn, qtd, color));\n }\n\n vm.chartList.push([angular.copy(vm.occurrenceBarChartList[0])]);\n vm.occurrenceBarChartList = [];\n }\n\n vm.getTopOccurrencesTitle = function () {\n\n var title = '';\n\n if (angular.isDefined(vm.topOccurrences[0])) {\n if ($window.localStorage.defaultLanguage && $window.localStorage.defaultLanguage == 'pt') {\n title = 'Top Ocorrências (' + vm.topOccurrences[0].DatePt + ')';\n } else {\n title = 'Top Occurrences (' + vm.topOccurrences[0].DateEn + ')';\n }\n }\n\n return title;\n };\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(TaskControlTranslate);\n\n /** @ngInject */\n function TaskControlTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'title.header.dashboard': 'Dashboard',\n 'dashboard.panel.task.title': 'Task Control',\n 'dashboard.panel.task.delay.title': 'Task Control - Delay',\n 'dashboard.panel.pending': 'Pending approval',\n 'dashboard.panel.ongoing': 'Ongoing',\n 'dashboard.panel.closed': 'Closed',\n 'dashboard.panel.checklist.title': 'Checklist',\n 'dashboard.panel.faca.title': 'FA/CA',\n 'dashboard.panel.faca.levelc': 'Level C',\n 'dashboard.panel.faca.leveld': 'Level D',\n 'dashboard.task.pending.label': 'Pending',\n 'dashboard.task.ongoing.label': 'Ongoing',\n 'dashboard.task.closed.label': 'Closed',\n 'dashboart.task.chart.title': 'Task Control Chart',\n 'dashboart.task.chart.sub.title': 'Displays the amount of tasks according to the current status.',\n 'dashboart.task.bar.chart.title': 'Late Tasks Chart',\n 'dashboart.task.bar.chart.y.title': 'Total',\n 'dashboart.task.bar.chart.late.title': 'Late',\n 'dashboart.checklist.chart.title': 'Checklist Chart',\n 'dashboart.checklist.chart.sub.title': 'Displays the amount of checklists created by user, according to the current status.',\n 'dashboart.faca.chart.title': 'FA/CA Chart',\n 'dashboart.faca.chart.sub.title': 'Displays the amount of FA/CA according to the current level.',\n 'dashboart.label.panel.user': 'My Dashboard',\n 'dashboart.label.panel.production': 'Production',\n 'dashboard.production.swipe.title': 'Production Charts',\n 'dashboard.production.hour.chart.title': 'Hourly Production',\n 'dashboard.production.uph.chart.title': 'Unit Per Hour - UPH',\n 'dashboard.production.hour.chart.planned.legend.title': 'Planned',\n 'dashboard.production.hour.chart.accomplished.legend.title': 'Accomplished',\n 'dashboard.production.hour.chart.delay.legend.title': 'Delay',\n 'dashboard.production.hour.chart.occurrence.legend.title': 'Occurrence',\n 'dashboard.production.hour.chart.data.not.found.msg': 'No production data found for the current date.',\n 'dashboard.production.top.occurrence.chart.title': 'Top Occurrence',\n 'dashboard.production.defect.chart.scrap.title': 'Scrap',\n 'dashboard.production.defect.chart.defect.title': 'Defect',\n 'dashboard.production.defect.chart.load.error': 'Error on load defects.',\n 'dashboard.production.defect.chart.title': 'Top 10 Defect and Scrap',\n 'error.occurrence.plan.search': 'An error occurred when trying to load top occurrence graphic.',\n 'dashboard.production.top.occurrence.label.x': 'Synthesis of occurrence',\n 'carousel.directive.lock.slide.label': 'Lock Slide',\n 'carousel.directive.lock.slide.info.msg': 'Check it to prevent it from changing automatically.',\n 'dashboard.button.fullscreen': 'Full Screen',\n 'dashboard.production.autointerval.slide.label': 'Interval to slide switching',\n 'dashboard.production.autointerval.data.refresh.label': 'Interval to update data',\n 'dashboard.production.firstpassyeld.chart.label': 'First Pass Yield',\n 'dashboard.production.finalpassyeld.chart.label': 'Final Pass Yield',\n 'dashboard.production.scraprate.chart.label': 'Scrap Rate',\n 'dashboard.production.passyeld.slide.title': '#Section - #Turn - #Model - #Variant - Quality Indicators - Date (#Date)',\n 'dashboard.production.passyeld.get.error': 'An error occurred when trying to load quality indicators.',\n 'dashboard.production.daily.occurrence.title': 'Daily Occurrences (#Date)',\n 'dashboard.production.daily.occurrence.header.hour': 'Hour',\n 'dashboard.production.daily.occurrence.header.turn': 'Shift',\n 'dashboard.production.daily.occurrence.header.session': 'Section',\n 'dashboard.production.daily.occurrence.header.model': 'Model',\n 'dashboard.production.daily.occurrence.header.variant': 'Variant',\n 'dashboard.production.daily.occurrence.header.occurrence': 'Occurrence',\n 'dashboard.production.daily.occurrence.header.status': 'Status',\n 'dashboard.production.daily.occurrence.header.status.open': 'Open',\n 'dashboard.production.daily.occurrence.header.status.closed': 'Closed',\n 'dashboard.document.pending.approval.not.found.msg': 'No Document Pending Approval.',\n 'dashboard.panel.document.pending.title': 'Pending Approval Documents',\n 'dashboard.panel.future.approvals': 'Future Approvals',\n 'dashboard.project.client.required.error': 'Select the \"Project\" and \"Client\" to perform the search.',\n 'dashboard.panel.pdca.pending.title': 'PDCA - Pending Activities',\n 'dashboard.pdca.pending.not.found.msg': 'No PDCA pending activities.',\n 'label.pdca.status.evaluationcycle': 'Evaluation Cycle',\n 'dashboard.panel.technicalvisit.pending.deadline': 'Deadline',\n 'dashboard.panel.technicalvisit.pending.title': 'Sourcing - Pending Technical Visit',\n 'dashboard.milestone.pending.not.found.msg': 'No milestone pending',\n 'dashboard.technicalvisit.pending.not.found.msg': 'No technical visit pending',\n 'dashboard.panel.milestone.pending.title': 'Sourcing - Pending Milestones',\n 'dashboard.panel.milestone.pending.deadline': 'Deadline',\n 'dashboard.notfound': 'The dashboard needs to be activated in the Preferences screen.',\n 'dashboard.panel.alerts': 'Alerts',\n 'dashboard.panel.alert.next': 'Next Alerts',\n 'dashboard.alert.next.not.found.msg': 'No Next Alert',\n 'dashboard.component.development.pending.review.not.found.msg': 'No component development pending review',\n 'dashboard.panel.component.development.pending.review.title': 'Sourcing - Component Development Pending Review',\n 'preferences.dashboard.error.msg': 'Error on recovery the dashboard preferences'\n });\n\n $translateProvider.translations('pt', {\n 'title.header.dashboard': 'Painel',\n 'dashboard.panel.task.title': 'Controle de Tarefas',\n 'dashboard.panel.task.delay.title': 'Controle de Tarefas - Atrasadas',\n 'dashboard.panel.pending': 'Pendente aprovação',\n 'dashboard.panel.ongoing': 'Em andamento',\n 'dashboard.panel.closed': 'Fechada',\n 'dashboard.panel.checklist.title': 'Checklist',\n 'dashboard.panel.faca.title': 'FA/CA',\n 'dashboard.panel.faca.levelc': 'Nível C',\n 'dashboard.panel.faca.leveld': 'Nível D',\n 'dashboard.task.pending.label': 'Pendente',\n 'dashboard.task.ongoing.label': 'Em andamento',\n 'dashboard.task.closed.label': 'Fechada',\n 'dashboart.task.chart.title': 'Gráfico de Controle de Tarefas',\n 'dashboart.task.chart.sub.title': 'Exibe a quantidade de de tarefas de acordo com o status atual.',\n 'dashboart.task.bar.chart.title': 'Gráfico de Tarefas Atrasadas',\n 'dashboart.task.bar.chart.y.title': 'Total',\n 'dashboart.task.bar.chart.late.title': 'Atrasado',\n 'dashboart.checklist.chart.title': 'Gráfico de Checklist',\n 'dashboart.checklist.chart.sub.title': 'Exibe a quantidade de checklists criadas pelo usuário, de acordo com o status atual.',\n 'dashboart.faca.chart.title': 'Gráfico de FA/CA',\n 'dashboart.faca.chart.sub.title': 'Exibe a quantidade de FA/CA, de acordo com o nível atual.',\n 'dashboart.label.panel.user': 'Meu Painel',\n 'dashboart.label.panel.production': 'Produção',\n 'dashboard.production.swipe.title': 'Gráficos de Produção',\n 'dashboard.production.hour.chart.title': 'Produção Hora a Hora',\n 'dashboard.production.uph.chart.title': 'Unidade Por Hora - UPH',\n 'dashboard.production.hour.chart.planned.legend.title': 'Planejado',\n 'dashboard.production.hour.chart.accomplished.legend.title': 'Realizado',\n 'dashboard.production.hour.chart.delay.legend.title': 'Atrasado',\n 'dashboard.production.hour.chart.occurrence.legend.title': 'Ocorrência',\n 'dashboard.production.hour.chart.data.not.found.msg': 'Nenhum dado de produção encontrado para a data corrente.',\n 'dashboard.production.top.occurrence.chart.title': 'Top Occurrence',\n 'dashboard.production.defect.chart.scrap.title': 'Descarte',\n 'dashboard.production.defect.chart.defect.title': 'Defeito',\n 'dashboard.production.defect.chart.load.error': 'Ocorreu um erro ao tentar carregar os defeitos.',\n 'dashboard.production.defect.chart.title': 'Top 10 Defeito e Descarte',\n 'error.occurrence.plan.search': 'Ocorreu um erro ao tentar carregar o gráfico de top ocorrências.',\n 'dashboard.production.top.occurrence.label.x': 'Síntese da ocorrência',\n 'carousel.directive.lock.slide.label': 'Bloquear Slide',\n 'carousel.directive.lock.slide.info.msg': 'Marque o check para evitar que o slide troque automaticamente.',\n 'dashboard.button.fullscreen': 'Tela Cheia',\n 'dashboard.production.autointerval.slide.label': 'Intervalo para a troca de slide',\n 'dashboard.production.autointerval.data.refresh.label': 'Intervalo para a atualização dos dados',\n 'dashboard.production.firstpassyeld.chart.label': 'First Pass Yield',\n 'dashboard.production.finalpassyeld.chart.label': 'Final Pass Yield',\n 'dashboard.production.scraprate.chart.label': 'Indice de Descarte',\n 'dashboard.production.passyeld.slide.title': '#Section - #Turn - #Model - #Variant - Indicadores de Qualidade - Data (#Date)',\n 'dashboard.production.passyeld.get.error': 'Ocorreu um erro ao tentar carregar os indicadores de qualidade.',\n 'dashboard.production.daily.occurrence.title': 'Ocorrências do dia (#Date)',\n 'dashboard.production.daily.occurrence.header.hour': 'Hora',\n 'dashboard.production.daily.occurrence.header.turn': 'Turno',\n 'dashboard.production.daily.occurrence.header.session': 'Seção',\n 'dashboard.production.daily.occurrence.header.model': 'Modelo',\n 'dashboard.production.daily.occurrence.header.variant': 'Variante',\n 'dashboard.production.daily.occurrence.header.occurrence': 'Ocorrência',\n 'dashboard.production.daily.occurrence.header.status': 'Situação',\n 'dashboard.production.daily.occurrence.header.status.open': 'Aberto',\n 'dashboard.production.daily.occurrence.header.status.closed': 'Fechado',\n 'dashboard.document.pending.approval.not.found.msg': 'Nenhum Documento Pendente de Aprovação.',\n 'dashboard.panel.document.pending.title': 'Documentos Pendentes de Aprovação',\n 'dashboard.panel.future.approvals': 'Aprovações Futuras',\n 'dashboard.project.client.required.error': 'Selecione o \"Projeto\" e \"Cliente\" para realizar a pesquisa.',\n 'dashboard.panel.pdca.pending.title': 'PDCA - Atividades com Pendências',\n 'dashboard.pdca.pending.not.found.msg': 'Nenhum PDCA com atividade pendente.',\n 'label.pdca.status.evaluationcycle': 'Ciclo de avaliação',\n 'dashboard.panel.technicalvisit.pending.deadline': 'Data Limite',\n 'dashboard.panel.technicalvisit.pending.title': 'Desenvolvimento de Fornecedor - Visita Técnica Pendente',\n 'dashboard.milestone.pending.not.found.msg': 'Nenhuma Milestone pendente',\n 'dashboard.technicalvisit.pending.not.found.msg': 'Nenhuma Visita Técnica Pendente',\n 'dashboard.panel.milestone.pending.title': 'Desenvolvimento de Fornecedor - Milestones Pendentes',\n 'dashboard.panel.milestone.pending.deadline': 'Data Limite',\n 'dashboard.notfound': 'O dashboard precisa ser ativado na tela de Preferências.',\n 'dashboard.panel.alerts': 'Alertas',\n 'dashboard.panel.alert.next': 'Próximos Alertas',\n 'dashboard.alert.next.not.found.msg': 'Nenhum Alerta próximo',\n 'dashboard.component.development.pending.review.not.found.msg': 'Nenhum componente de desenvolvimento pendente de revisão',\n 'dashboard.panel.component.development.pending.review.title': 'Sourcing - Componentes de Desenvolvimento Pendentes de Revisão',\n 'preferences.dashboard.error.msg': 'Erro ao recuperar preferências do painel'\n });\n }\n})();\n\n/**\n * Created by anderson.lins on 08/06/2017.\n */\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('DashboardService', DashboardService);\n\n /** @ngInject */\n function DashboardService($injector, $q, ConfigurationService) {\n\n var BASE = '/dashboard';\n\n return {\n getTasksCount: function (searchParams) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/dashboard/listTasksCountByStatus', {\n params: searchParams\n })\n .then(function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n }, function (error) {\n deferred.reject(error);\n return deferred.promise;\n });\n return deferred.promise;\n },\n\n getChecklistCount: function (searchParams) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/dashboard/countChecklistByStatus/', {\n params: searchParams\n })\n .then(function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n }, function (error) {\n deferred.reject(error);\n return deferred.promise;\n });\n return deferred.promise;\n },\n\n getFacaCount: function (searchParams) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/dashboard/countFacaByStatus/', {\n params: searchParams\n })\n .then(function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n }, function (error) {\n deferred.reject(error);\n return deferred.promise;\n });\n return deferred.promise;\n },\n\n listAllProductionPlanToChart: function (filter) {\n var searchParams = angular.copy(filter);\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/dashboard/listAllProductionPlanToChart/', {\n params: searchParams\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getDailyOccurrenceToCarousel: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/dashboard/GetDailyOccurrenceToCarousel/', {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getFirstAndFinalPassToChart: function (filter) {\n var searchParams = angular.copy(filter);\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + '/GetFirstAndFinalPassToChart/', {\n params: searchParams\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n listDefectAnalysisToChart: function (filter) {\n var searchParams = angular.copy(filter);\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + '/listTopToChart/', {\n params: searchParams\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n listTopOccurrence: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + '/listTopOccurrences/', {\n params: filter\n })\n .then(function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n listComponentPendingReview: function(filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/dashboard/sourcing/componentDevelopment/pendingReview', {\n params: filter\n })\n .then(function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n listDocumentPending: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + '/documentPending/', {\n params: filter\n })\n .then(function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n listDocumentFutureApprovals: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + '/documentFutureApprovals/', {\n params: filter\n })\n .then(function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n listPDCAPending: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + '/pdcaPending/', {\n params: filter\n })\n .then(function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n listTechnicalVisitPending: function (searchParams) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/dashboard/sourcing/technicalvisit/pending', {\n params: searchParams\n })\n .then(function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n }, function (error) {\n deferred.reject(error);\n return deferred.promise;\n });\n return deferred.promise;\n },\n\n listMilestonePending: function (searchParams) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/dashboard/sourcing/milestone/pending', {\n params: searchParams\n })\n .then(function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n }, function (error) {\n deferred.reject(error);\n return deferred.promise;\n });\n return deferred.promise;\n },\n\n listNextAlert: function (searchParams) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/dashboard/alert/list', {\n params: searchParams\n })\n .then(function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n }, function (error) {\n deferred.reject(error);\n return deferred.promise;\n });\n return deferred.promise;\n },\n\n listDashboard: function (userId) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/dashboard/' + userId + \"/list\", null)\n .then(function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n }, function (error) {\n deferred.reject(error);\n return deferred.promise;\n });\n return deferred.promise;\n }\n\n };\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(dashRouterConfig);\n\n /** @ngInject */\n function dashRouterConfig($stateProvider) {\n\n $stateProvider.state('dashBoard', {\n url: '/dashboard',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/dashboard/dashboard.html',\n controller: 'DashboardController',\n controllerAs: 'ctrl'\n }\n },\n authorize: true\n });\n\n $stateProvider.state('productionDashboard', {\n url: '/dashboard/production',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/dashboard/dashboard.production.html',\n controller: 'ProductionController',\n controllerAs: 'ctrl'\n }\n },\n authorize: true\n });\n\n $stateProvider.state('acquisitionRiskDashboard', {\n url: '/dashboard/acquisition-risk',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/dashboard/dashboard.acquisition-risk.html',\n controller: 'AcquisitionRiskListController',\n controllerAs: 'ctrl'\n }\n },\n authorize: true\n });\n \n }\n\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('DashboardController', DashboardController);\n\n /** @ngInject */\n function DashboardController(DocumentFlowService, ChecklistService, AuthService, FacaService, $state, $log, $scope, Idle,\n ChartBarUtil, ChartPieUtil, DashboardService, ToastUtil, moment, $translate, $window, $filter, DashboardItemService,\n DefaultService) {\n\n var vm = this;\n\n vm.myChartObject = {};\n vm.RequestType = \"\";\n vm.RequestTypeFutureApprovals = \"\";\n\n vm.tasksCount = {\n PendingTasksCount: 0,\n OngoingTasksCount: 0,\n ClosedTasksCount: 0\n };\n\n vm.taskPieChartList = [];\n\n vm.taskBarChartList = [{\n key: \"Late Tasks\",\n values: []\n }];\n\n vm.checklistCount = {\n PendingCount: 0,\n OngoingCount: 0\n };\n\n vm.checklistPieChartList = [];\n\n vm.facaCount = {\n FacaLDCount: 0,\n FacaLCCount: 0\n };\n\n var searchParams = {\n BusinessId: AuthService.getBusinessId(),\n UserLoggedId: AuthService.getUserID()\n };\n\n vm.facaPieChartList = [];\n\n vm.listDocumentPending = [];\n\n vm.listDocumentFutureApprovals = [];\n\n vm.PDCAStatusId = {\n ONGOING: 1,\n CLOSED: 2,\n EvaluationCycle: 3\n };\n\n vm.PDCAstatusList = [\n { id: vm.PDCAStatusId.ONGOING, Name: 'label.pdca.status.ongoing' },\n { id: vm.PDCAStatusId.CLOSED, Name: 'label.pdca.status.closed' },\n { id: vm.PDCAStatusId.EvaluationCycle, Name: 'label.pdca.status.evaluationcycle' }\n ];\n\n vm.init = function () {\n Idle.unwatch();\n vm.dashboard = {};\n setUpDashboardItemCallback();\n loadDashboard();\n listTypeExpenses();\n };\n\n vm.onRequestTypeSelected = function() {\n getDocumentToApprovalByType();\n };\n\n vm.onRequestFutureApprovalsTypeSelected = function() {\n getDocumentFutureApprovalsByType();\n };\n\n var profilePermission = {\n CanAdd: false,\n CanEdit: false,\n CanDelete: false,\n CanView: false,\n CanApprove: false,\n CanExport: false,\n CanConsult: false\n };\n\n vm.newApproval = function () {\n loadProfileModules();\n };\n\n function loadProfileModules() {\n var profileModule = {};\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.moduleDocumentFlow;\n DefaultService.loadModules(profileModule).then(function (response) {\n profilePermission = angular.copy(response);\n if (profilePermission.CanAdd) {\n $state.go('document-flow-create', {});\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n });\n }\n\n function listTypeExpenses() {\n DocumentFlowService.getTypeExpenses().then(function (response) {\n vm.typeExpenseList = angular.copy(response);\n });\n }\n\n function getDocumentToApprovalByType() {\n var RequestTypeId = undefined;\n var BasicTypeParamDTO = {};\n\n if (vm.RequestType) {\n RequestTypeId = vm.RequestType.Id;\n BasicTypeParamDTO = {\n GenericFilterId: RequestTypeId\n }\n }\n\n DashboardService.listDocumentPending(BasicTypeParamDTO)\n .then(function (response) {\n vm.listDocumentPending = angular.copy(response);\n\n for (var i = 0; i < vm.listDocumentPending.length; i++) {\n var atual = moment(moment().format('YYYY-MM-DD'));\n if (moment(vm.listDocumentPending[i].DeadLine).diff(atual, 'days') < 1) {\n vm.listDocumentPending[i].DocumentsToExpire = true;\n }\n }\n });\n }\n\n function getDocumentFutureApprovalsByType() {\n var RequestTypeId = undefined;\n var BasicTypeParamDTO = {};\n\n if (vm.RequestTypeFutureApprovals) {\n RequestTypeId = vm.RequestTypeFutureApprovals.Id;\n BasicTypeParamDTO = {\n GenericFilterId: RequestTypeId\n }\n }\n\n DashboardService.listDocumentFutureApprovals(BasicTypeParamDTO)\n .then(function (response) {\n vm.listDocumentFutureApprovals = angular.copy(response);\n\n for (var i = 0; i < vm.listDocumentFutureApprovals.length; i++) {\n var atual = moment(moment().format('YYYY-MM-DD'));\n if (moment(vm.listDocumentFutureApprovals[i].DeadLine).diff(atual, 'days') < 1) {\n vm.listDocumentFutureApprovals[i].DocumentsToExpire = true;\n }\n }\n });\n }\n\n function loadDashboard() {\n DashboardService.listDashboard($window.localStorage.userID)\n .then(function (response) {\n var listDsb = response.Dashboards;\n var dashboard = $filter('filter')(listDsb, function (dashboard) {\n return dashboard.CsActive === true;\n });\n\n vm.existsUserDashboard = dashboard && dashboard.length > 0;\n\n if (vm.existsUserDashboard) {\n for (var i = 0, len = dashboard.length; i < len; i++) {\n var dashboardItem = DashboardItemService.valueOf(dashboard[i].DashboardId);\n\n if (dashboardItem) {\n vm.dashboard[dashboardItem.alias] = true;\n vm.dashboardItems.push({ path: dashboardItem.path });\n\n if (!dashboardItem.autoload) {\n dashboardItem.load(searchParams);\n }\n\n if (dashboardItem === DashboardItemService.TaskControlDelay) {\n if (!vm.taskBarChartList || vm.taskBarChartList.length === 0 || vm.taskBarChartList[0].values === '') {\n dashboardItem.load(searchParams);\n }\n }\n }\n\n }\n }\n })\n .catch(function (error) {\n $log.log(error);\n vm.existsUserDashboard = false;\n });\n }\n\n vm.dashboardItems = [];\n\n function setUpDashboardItemCallback() {\n DashboardItemService.TaskControl.callback = loadTasksCount;\n DashboardItemService.TaskControlDelay.callback = loadTasksCount;\n DashboardItemService.Checklist.callback = loadChecklistCount;\n DashboardItemService.FACA.callback = loadFacaCount;\n DashboardItemService.PendingApprovalDocuments.callback = loadDocumentPending;\n DashboardItemService.FutureApprovalsDocuments.callback = loadDocumentFutureApprovals;\n DashboardItemService.PDCAPendingActivities.callback = loadPDCAPending;\n }\n\n function loadTasksCount(response) {\n vm.tasksCount = angular.copy(response);\n fillTaskPieChart();\n }\n\n function loadChecklistCount(response) {\n vm.checklistCount = angular.copy(response);\n fillChecklistPieChart();\n }\n\n function loadDocumentPending(response) {\n vm.listDocumentPending = angular.copy(response);\n\n for (var i = 0; i < vm.listDocumentPending.length; i++) {\n var atual = moment(moment().format('YYYY-MM-DD'));\n if (moment(vm.listDocumentPending[i].DeadLine).diff(atual, 'days') < 1) {\n vm.listDocumentPending[i].DocumentsToExpire = true;\n }\n }\n }\n\n function loadDocumentFutureApprovals(response) {\n vm.listDocumentFutureApprovals = angular.copy(response);\n\n for (var i = 0; i < vm.listDocumentFutureApprovals.length; i++) {\n var atual = moment(moment().format('YYYY-MM-DD'));\n if (moment(vm.listDocumentFutureApprovals[i].DeadLine).diff(atual, 'days') < 1) {\n vm.listDocumentFutureApprovals[i].DocumentsToExpire = true;\n }\n }\n }\n\n /* == PDCA == */\n\n function loadPDCAPending(response) {\n vm.listPdcaPending = angular.copy(response);\n }\n\n vm.getStatusName = function (statusId) {\n var statusTitle = \"\";\n angular.forEach(vm.PDCAstatusList, function (value) {\n if (value.id == statusId) {\n statusTitle = value.Name;\n }\n });\n return $translate.instant(statusTitle);\n };\n\n /* == FACA == */\n\n function loadFacaCount() {\n DashboardService.getFacaCount(searchParams).then(function (response) {\n vm.facaCount = angular.copy(response);\n fillFacaPieChart();\n }).catch(function (error) {\n $log.log(error);\n // No need extra Implementation.\n });\n }\n\n /**\n * Fill list to task chart.\n */\n function fillTaskPieChart() {\n if (vm.tasksCount.PendingTasksCount > 0) {\n vm.taskPieChartList.push(ChartPieUtil.getPieChartObj(\"dashboard.task.pending.label\", vm.tasksCount.PendingTasksCount, \"#9ea1be\"));\n }\n\n if (vm.tasksCount.OngoingTasksCount > 0) {\n vm.taskPieChartList.push(ChartPieUtil.getPieChartObj(\"dashboard.task.ongoing.label\", vm.tasksCount.OngoingTasksCount, \"#ffcc00\"));\n }\n\n if (vm.tasksCount.ClosedTasksCount > 0) {\n vm.taskPieChartList.push(ChartPieUtil.getPieChartObj(\"dashboard.task.closed.label\", vm.tasksCount.ClosedTasksCount, \"#2ecc71\"));\n }\n\n if (vm.tasksCount.TotalDelayed > 0) {\n\n vm.taskBarChartList[0].values.push(ChartBarUtil.getBarChartObj(\"dashboart.task.bar.chart.y.title\", undefined, (vm.tasksCount.PendingTasksCount + vm.tasksCount.OngoingTasksCount + vm.tasksCount.ClosedTasksCount), \"#5a99dd\"));\n vm.taskBarChartList[0].values.push(ChartBarUtil.getBarChartObj(\"dashboart.task.bar.chart.late.title\", undefined, vm.tasksCount.TotalDelayed, \"#ff5353\"));\n }\n }\n\n /**\n * Fill list to Checklist chart.\n */\n function fillChecklistPieChart() {\n if (vm.checklistCount.PendingCount > 0) {\n vm.checklistPieChartList.push(ChartPieUtil.getPieChartObj(\"dashboard.panel.pending\", vm.checklistCount.PendingCount, \"#9ea1be\"));\n }\n\n if (vm.checklistCount.OngoingCount > 0) {\n vm.checklistPieChartList.push(ChartPieUtil.getPieChartObj(\"dashboard.panel.ongoing\", vm.checklistCount.OngoingCount, \"#ffcc00\"));\n }\n }\n\n /**\n * Fill list to FA/CA chart.\n */\n function fillFacaPieChart() {\n if (vm.facaCount.FacaLDCount > 0) {\n vm.facaPieChartList.push(ChartPieUtil.getPieChartObj(\"dashboard.panel.faca.leveld\", vm.facaCount.FacaLDCount, \"#2c3e50\"));\n }\n\n if (vm.facaCount.FacaLCCount > 0) {\n vm.facaPieChartList.push(ChartPieUtil.getPieChartObj(\"dashboard.panel.faca.levelc\", vm.facaCount.FacaLCCount, \"#8296ad\"));\n }\n }\n\n vm.isApprover = function () {\n return AuthService.isApproverRole();\n };\n\n vm.goToTaskControl = function () {\n $state.go('taskControl', {});\n vm.menuClicked();\n };\n\n vm.goToDocumentFlow = function (doc) {\n $state.go('document-flow-edit', {\n Id: doc.Id\n });\n };\n\n vm.goToPDCA = function (pdca) {\n $state.go('pdca-edit', {\n Id: pdca.Id\n });\n };\n\n vm.goToFaca = function () {\n $state.go('faca-list', {});\n vm.menuClicked();\n };\n\n vm.goToChecklist = function () {\n $state.go('checklists', {});\n vm.menuClicked();\n };\n\n $scope.$on('$destroy', function () {\n Idle.watch();\n });\n\n vm.init();\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('DashboardItemService', DashboardItemService);\n\n /** @ngInject */\n function DashboardItemService(DashboardService) {\n\n return {\n\n TaskControl: {\n Id: 1,\n alias: 'taskControl',\n path: \"app/dashboard/dashboard-taskcontrol.html\",\n load: function (searchParams) {\n return DashboardService.getTasksCount(searchParams).then(this.callback);\n }\n },\n\n TaskControlDelay: {\n Id: 2,\n alias: 'taskControlDelay',\n path: \"app/dashboard/dashboard-taskcontrol-delay.html\",\n load: function (searchParams) {\n return DashboardService.getTasksCount(searchParams).then(this.callback);\n },\n autoload: true\n },\n\n Checklist: {\n Id: 3,\n alias: 'checklist',\n path: \"app/dashboard/dashboard-checklist.html\",\n load: function (searchParams) {\n return DashboardService.getChecklistCount(searchParams).then(this.callback);\n }\n },\n\n FACA: {\n Id: 4,\n alias: 'faca',\n path: \"app/dashboard/dashboard-faca.html\",\n load: function (searchParams) {\n return DashboardService.getFacaCount(searchParams).then(this.callback);\n }\n },\n\n PendingApprovalDocuments: {\n Id: 5,\n alias: 'pendingApprovalDocuments',\n path: \"app/dashboard/dashboard-pending-approval-documents.html\",\n load: function (searchParams) {\n return DashboardService.listDocumentPending(searchParams).then(this.callback);\n }\n },\n\n PDCAPendingActivities: {\n Id: 6,\n alias: 'PDCAPendingActivities',\n path: \"app/dashboard/dashboard-pda-pending-activities.html\",\n load: function (searchParams) {\n return DashboardService.listPDCAPending(searchParams).then(this.callback);\n }\n },\n\n SourcingPendingTechnicalVisit: {\n Id: 7,\n alias: 'sourcingPendingTechnicalVisit',\n autoload: true,\n path: \"app/dashboard/dashboard-technical-visit.html\",\n load: function (searchParams) {\n return DashboardService.listTechnicalVisitPending(searchParams).then(this.callback);\n }\n },\n\n SourcingPendingMilestone: {\n Id: 8,\n alias: 'sourcingPendingMilestone',\n path: \"app/dashboard/dashboard-milestone.html\",\n autoload: true,\n load: function (searchParams) {\n return DashboardService.listMilestonePending(searchParams).then(this.callback);\n }\n },\n\n NextAlert: {\n Id: 9,\n alias: 'nextAlert',\n path: \"app/dashboard/dashboard-next-alert.html\",\n autoload: true,\n load: function (searchParams) {\n return DashboardService.listNextAlert(searchParams).then(this.callback);\n }\n },\n\n SourcingPendingReviewComponent: {\n Id: 10,\n alias: 'sourcingPendingReviewComponent',\n autoload: true,\n path: \"app/dashboard/dashboard-pending-review-component.html\",\n load: function (searchParams) {\n return DashboardService.listComponentPendingReview(searchParams).then(this.callback);\n }\n },\n\n FutureApprovalsDocuments: {\n Id: 11,\n alias: 'futureApprovalsDocuments',\n path: \"app/dashboard/dashboard-future-approvals-documents.html\",\n load: function (searchParams) {\n return DashboardService.listDocumentFutureApprovals(searchParams).then(this.callback);\n }\n },\n\n valueOf: function (id) {\n for (var property in this) {\n var item = this[property];\n if (item && item.Id && item.Id === id) {\n return item;\n }\n }\n return null;\n }\n\n };\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('DefaultService', DefaultService);\n\n /** @ngInject */\n function DefaultService($window, $injector, $q, ConfigurationService) {\n return {\n setFavoriteBusinessUser: function (favoriteBusiness) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n $http.post(ConfigurationService.getServiceHost() + '/default/setFavoriteBusiness/', favoriteBusiness)\n .then(\n function (response) {\n $window.localStorage.profileName = response.data.ProfileName;\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n loadDate: function (type) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/default/datetime/' + type)\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n loadUserInputDirective: function (idBusiness) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n var users = {};\n users.BusinessId = idBusiness;\n $http.get(ConfigurationService.getServiceHost() + '/default/input-list/', {\n params: users\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n loadBussiness: function () {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/default/business')\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n loadProfile: function () {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/default/profiles')\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n loadSections: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/default/section/list', {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n loadProjects: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/default/project/list', {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n loadClientByProject: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/default/client/byProjectId', {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n deleteInspectionSubType: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n $http.delete(ConfigurationService.getServiceHost() + '/default/inspectionSubType/' + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n loadVariantByModel: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n $http.get(ConfigurationService.getServiceHost() + '/default/variant/byModelId/' + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n loadUserCompanyById: function () {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/default/loadUserCompanyById', {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n loadModelByClient: function (id, csActive) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/default/model/byClientId/' + id + '/' + csActive, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n loadAreas: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/default/area/', {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n loadAreasByCompany: function () {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n $http.get(ConfigurationService.getServiceHost() + '/default/areas/', {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n loadClients: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/default/client/list', {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n loadVariants: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/default/variant/list', {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n loadSynthesis: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n $http.get(ConfigurationService.getServiceHost() + '/default/synthesis/', {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n loadPartType: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n $http.get(ConfigurationService.getServiceHost() + '/default/part-type/', {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n loadTestType: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n $http.get(ConfigurationService.getServiceHost() + '/default/test-type/', {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n loadPartRule: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n $http.get(ConfigurationService.getServiceHost() + '/default/part-rule/', {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n\n loadPartInspectionType: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n $http.get(ConfigurationService.getServiceHost() + '/default/part-inspection-type/', {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n loadTestInspectionType: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n $http.get(ConfigurationService.getServiceHost() + '/default/test-inspection-type/', {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n\n loadPart: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n $http.get(ConfigurationService.getServiceHost() + '/default/part/', {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n loadPartInspectionSubType: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n $http.get(ConfigurationService.getServiceHost() + '/default/part-inspection-sub-type/', {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n loadTestInspectionSubType: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n $http.get(ConfigurationService.getServiceHost() + '/default/test-inspection-sub-type/', {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n loadTestRule: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n $http.get(ConfigurationService.getServiceHost() + '/default/test-rule/', {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n /** List Defects*/\n listAllDefect: function (filter) {\n var deffectDomain = \"/default/defect/list\";\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n $http.get(ConfigurationService.getServiceHost() + deffectDomain, {\n params: filter,\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n // List all Defect Actions.\n listAllDefectsAction: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n var domain = \"/default/defect_action/list\";\n\n $http.get(ConfigurationService.getServiceHost() + domain + '/', {\n params: filter,\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n listAllDefectOccurrence: function (filter) {\n var deffectOccurenceDomain = \"/default/defect_occurrence/list\";\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n $http.get(ConfigurationService.getServiceHost() + deffectOccurenceDomain, {\n params: filter,\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n //List RootCause.\n listAllDefectRootCause: function (filter) {\n var defectRootCause = \"/default/defect_root_cause/list\";\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n $http.get(ConfigurationService.getServiceHost() + defectRootCause, {\n params: filter,\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n listAllDefectsType: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n var domain = \"/default/defect_type/list\";\n\n $http.get(ConfigurationService.getServiceHost() + domain + '/', {\n params: filter,\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n loadEffects: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + \"/default/effect/list\", {\n params: filter,\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n loadStations: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + \"/default/station/list\", {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n loadTypes: function (filter) {\n\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/default/tasktype/list', {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n loadModels: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/default/model/list', {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n loadModelByVariant: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/default/model/byVariant', {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n loadTurn: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/default/turn/list', {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n loadModules: function (profile) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/default/modules', {\n params: profile\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n listViewPermissionsByUserProfileBusinessId: function (userProfileBusinessId) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/default/userProfileBusiness/' + userProfileBusinessId + \"/viewPermissions\")\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n loadDRIs: function (searchParams) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/default/input-users-groups-names', {\n params: searchParams\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n loadVendors: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/default/vendor/', {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n vendorHasTechnicalVisit: function (vendorId) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/default/vendor/' + vendorId + '/hasTechnicalVisit')\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n listAllChecklistsTemplate: function (filtro) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/default/checklist/template/', {\n params: filtro\n })\n .then(function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n deleteTestInspectionSubType: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n $http.delete(ConfigurationService.getServiceHost() + '/default/testInspectionSubType/' + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n loadVariantsOrt: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/default/variantOrt/list', {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n loadRequestTypes: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/default/request-type/', {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n listAllContracts: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/default/contract/list/', {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n listAllLicenses: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/default/license/list/', {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n listAllLicenseTypes: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/default/license-type/list/', {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n autoCompleteVendor: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/default/vendor/autocomplete/', {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n loadInputUsers: function (searchParams) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + '/default/input-users-names', {\n params: searchParams\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n };\n }\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *\n */\n function UploadOptionsController($scope, WebcamService, $document) {\n var vm = this;\n\n vm.isShowCamPanel = false;\n vm.webcam = WebcamService.webcam;\n vm.showWebCam = false;\n vm.showMessageErro = false;\n\n vm.takePicture = function () {\n vm.webcam.makeSnapshot();\n };\n\n vm.showCamPanel = function (isShow) {\n if (!isShow) {\n vm.turnOffWebCam();\n }\n vm.isShowCamPanel = isShow;\n vm.showWebCam = isShow;\n }\n\n vm.fileSystemClick = function () {\n $scope.parentDialog.fileManagerListener();\n $scope.$close('ok');\n }\n\n vm.turnOffWebCam = function () {\n if (vm.webcam && vm.webcam.isTurnOn === true)\n vm.webcam.turnOff();\n };\n\n vm.webcam.success = function (image, type) {\n vm.photo = image;\n vm.photoContentType = type;\n vm.showWebCam = false;\n };\n\n vm.webcam.onError = function () {\n vm.showMessageErro = true;\n $document[0].getElementById(\"btnTakePicture\").click()\n }\n\n vm.confirmAndUploadImage = function () {\n $scope.parentDialog.capturedPhotoListener(vm.photo, vm.photoContentType);\n $scope.$close('ok');\n };\n\n\n\n }\n\n function UploadOptionsDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'UploadOptionsController',\n transclude: true,\n templateUrl: \"app/components/template/upload-options.html\",\n bindToController: true\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('UploadOptionsController', UploadOptionsController)\n .directive('uploadOptions', UploadOptionsDirective);\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n * \n */\n function SubHeaderController() {\n //var vm = this;\n }\n\n SubHeaderController.$inject = ['$scope', '$state'];\n\n function SubHeaderDirective() {\n return {\n restrict: 'E',\n scope: {\n useBackAction: '=',\n backAction: '&'\n },\n bindToController: true,\n transclude: true,\n replace: true,\n templateUrl: \"app/components/template/sub-header.html\",\n controllerAs: 'ctrl',\n controller: 'SubHeaderController'\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('SubHeaderController', SubHeaderController)\n .directive('subHeader', SubHeaderDirective);\n})();\n\n(function () {\n\n 'use strict';\n\n function NumbersOnly() {\n return {\n restrict: 'A',\n require: 'ngModel',\n\n link: function (scope, element, attr, ngModelCtrl) {\n function fromUser(text) {\n if (text) {\n var transformedInput = text.replace(/[^0-9]/g, '');\n\n if (transformedInput !== text) {\n ngModelCtrl.$setViewValue(transformedInput);\n ngModelCtrl.$render();\n }\n return transformedInput;\n }\n return null;\n } \n ngModelCtrl.$parsers.push(fromUser);\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .directive('numbersOnly', NumbersOnly);\n})();\n\n(function () {\n\n 'use strict';\n\n function NgNumeric() {\n return {\n restrict: 'A',\n require: 'ngModel',\n\n link: function (scope, element, $attr) {\n if (angular.isUndefined($attr.acceptDot)) {\n $attr.acceptDot = false;\n }\n\n var shiftKey = 16;\n var leftArrowKey = 37;\n var rightArrowKey = 39;\n\n element.bind('keyup', function (event) {\n var code = event.keyCode;\n if (code != shiftKey && code != leftArrowKey && code != rightArrowKey) {\n if ($attr.acceptDot === true || $attr.acceptDot == \"true\") {\n element[0].value = element[0].value.replace(/[^0-9.]/g, '');\n } else {\n element[0].value = element[0].value.replace(/\\D/g, '');\n }\n }\n });\n\n element.bind('blur', function () {\n if ($attr.acceptDot === true || $attr.acceptDot == \"true\") {\n element[0].value = element[0].value.replace(/[^0-9.]/g, '');\n } else {\n element[0].value = element[0].value.replace(/\\D/g, '');\n }\n });\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .directive('ngNumeric', NgNumeric);\n})();\n\n(function () {\n\n 'use strict';\n\n function NgMaxlength() {\n return {\n restrict: 'A',\n require: 'ngModel',\n scope: {\n ngMaxlength: \"=\"\n },\n\n link: function (scope, element) {\n element.bind('keydown', function (event) {\n var ngMax = scope.ngMaxlength;\n var code = event.keyCode;\n var elem = event.currentTarget;\n var length = String(elem.value).length;\n var actionbt =\n code == 8 || code == 9 || code == 16 || code == 17 || code == 18 || code == 27 ||\n code == 33 || code == 36 || code == 37 || code == 38 || code == 39 || code == 40 || code == 46;\n\n if (ngMax <= length && !actionbt) {\n event.preventDefault();\n }\n });\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .directive('ngMaxlength', NgMaxlength);\n})();\n\n(function () {\n\n 'use strict';\n\n function keyDown($document) {\n return {\n restrict: 'A',\n link: function (scope, element) {\n element.bind('keydown', function (event) {\n var code = event.keyCode;\n if (code === 13 || code === 32) {\n $document[0].activeElement.click();\n }\n });\n }\n };\n }\n angular.module('aqmsFrontend')\n .directive('keyDown', keyDown);\n})();\n\n(function () {\n\n 'use strict';\n\n function NgEnterDirective() {\n return {\n restrict: 'A',\n\n link: function (scope, elem, attrs) {\n elem.bind('keydown', function (event) {\n var code = event.keyCode;\n if (code === 13) {\n scope.$apply(attrs.ngEnter);\n event.preventDefault();\n scope.$apply(attrs.enterSubmit);\n }\n });\n }\n };\n }\n angular.module('aqmsFrontend')\n .directive('ngEnter', NgEnterDirective);\n})();\n\n/**\n * Created by mateus.said (mateus.said@fpf.br)on 25/04/2017.\n */\n(function () {\n\n 'use strict';\n\n function ListModel() {\n var vm = this;\n\n /**\n * Enum to Action Menu types.\n * @type {{EDIT: number, DELETE: number, EXPORT: number}}\n */\n vm.ActionMenuEnum = {\n EDIT: 0,\n DELETE: 1,\n EXPORT: 2,\n PLAY: 3,\n EXPORTXLS: 4\n };\n\n /**\n * Enum to action menu visualization.\n * @type {{INLINE: number, CONTEXT_MENU: number}}\n */\n vm.ActionMenuTypeEnum = {\n INLINE: 0,\n CONTEXT_MENU: 1\n };\n\n /**\n * Returns List View Model.\n * @param properties - Array containing: {header, rowAttr, isId and valueFn}\n * @see vm.getProperties - to more details about properties param.\n * @param items - Items of list.\n * @param actionMenu - Items to action menu.\n * @returns {{Model to ListView: *, properties: *, items: *, actionMenu: * }}\n */\n vm.getListModel = function (properties, items, actionMenu) {\n var model = {\n properties: properties,\n items: items,\n actionMenu: actionMenu\n };\n\n return model;\n };\n\n /**\n * Properties to list view\n * @param header - Header description\n * @param rowAttr - Object name to access\n * @param isHighlight - attr to check if object is highlight and set correct class. If 'cssClassFn' is filled, 'isHighlight' param will be ignored.\n * @param valueFn - Function to call passing object value\n * @param style - string style to apply in item.\n * @param cssClass - Simple css class. If 'cssClassFn' is filled, 'cssClass' param will be ignored.\n * @param cssClassFn - Function to call passing object value (must return a css class to apply in rowattr).\n * @param ngInclude - Which template to include. Optional\n * @returns {{header: *, rowAttr: *, isHighlight: *, valueFn: *, style: *, cssClass: *, cssClassFn: *, ngInclude: *}}\n */\n vm.getProperties = function (header, rowAttr, isHighlight, valueFn, style, cssClass, cssClassFn, ngInclude) {\n var prop = {\n header: header,\n rowAttr: rowAttr,\n isHighlight: isHighlight,\n valueFn: valueFn,\n style: style,\n cssClass: cssClass,\n cssClassFn: cssClassFn,\n ngInclude: ngInclude\n };\n return prop;\n };\n\n /**\n * Return an action menu item.\n * @param menuType - EDIT, DELETE or EXPORT.\n * @param identificationKey - Identification attribute like 'Id'. (It's used to pass correct param to actionFn function (edit, delete and export))\n * @param descriptionKey - Item description attribute like 'Title'. (It's used to confirmation dialog from btn-delete directive)\n * @param actionFn - Function to execute when item menu is clicked. (This function must receive as parameter)\n * @returns {{menuType: *, identificationKey: *, descriptionKey: *, actionFn: *}}\n */\n vm.getActionMenuItem = function (menuType, identificationKey, descriptionKey, actionFn) {\n var menu = {\n menuType: menuType,\n identificationKey: identificationKey,\n descriptionKey: descriptionKey,\n actionFn: actionFn\n };\n\n return menu;\n };\n\n /**\n * Return an action menu item, with condition to show.\n * @param menuType - EDIT, DELETE or EXPORT.\n * @param identificationKey - Identification attribute like 'Id'. (It's used to pass correct param to actionFn function (edit, delete and export))\n * @param descriptionKey - Item description attribute like 'Title'. (It's used to confirmation dialog from btn-delete directive)\n * @param actionFn - Function to execute when item menu is clicked. (This function must receive as parameter)\n * @returns {{menuType: *, identificationKey: *, descriptionKey: *, actionFn: *}}\n */\n vm.getActionMenuItem = function (menuType, identificationKey, descriptionKey, actionFn, canShow) {\n var menu = {\n menuType: menuType,\n identificationKey: identificationKey,\n descriptionKey: descriptionKey,\n actionFn: actionFn,\n canShow: canShow\n };\n\n return menu;\n };\n\n /**\n * Returns parent object to action menu.\n * @param menuItems - Array of menu items\n * @param type - INLINE or CONTEXT_MENU\n * @returns {{menuItems: *, type: *}}\n */\n vm.getActionMenu = function (menuItems, type) {\n var ActionMenu = {\n menuItems: menuItems,\n type: type\n };\n\n return ActionMenu;\n };\n }\n\n /**\n *Controller to ListView.\n */\n function ListViewController($scope, $translate, $interval) {\n var vm = this;\n vm.itensPerPageList = [\n {name: '5', value: 5, before: 0, after: 6},\n {name: '10', value: 10, before: 5, after: 11},\n {name: '20', value: 20, before: 10, after: 21},\n {name: '30', value: 30, before: 20, after: 31},\n {name: '40', value: 40, before: 30, after: 41},\n {name: '50', value: 50, before: 40, after: 51}]\n\n vm.itemPerPage = vm.itensPerPageList[0];\n\n if (angular.isUndefined(vm.pageSize)) {\n vm.pageSize = vm.itemPerPage.value;\n } else {\n vm.itensPerPageList.forEach(function(element) {\n if (element.value == vm.pageSize) {\n vm.itemPerPage = element;\n return;\n }\n });\n vm.pageSize = parseInt(vm.itemPerPage.value)\n }\n\n if (angular.isUndefined(vm.totalItemsPagination)) {\n vm.totalItemsPagination = null;\n }\n\n if (angular.isUndefined(vm.currentPage)) {\n vm.currentPage = 1;\n }\n\n vm.shouldShow = function (item) {\n if(vm.totalItemsPagination > 0 && item != undefined) {\n return vm.totalItemsPagination >= item.value || (vm.totalItemsPagination < item.after && vm.totalItemsPagination > item.before);\n }\n return false;\n }\n\n /**\n * Get value to each row attr.\n * @param item\n */\n vm.getRowAttrValue = function (item, rowAttr, valueFn) {\n var value = \"\";\n if (valueIsObject(rowAttr)) {\n value = handleValueObject(item, rowAttr);\n }\n value = item[rowAttr];\n\n if (valueFn != null) {\n value = valueFn(value);\n }\n return value;\n\n };\n\n vm.watchList = function () {\n $scope.$watch(\"ctrl.listModel\", function () {\n $interval(updateList, 250, 1);\n });\n };\n\n vm.getItemClass = function (prop) {\n var itemClass = \"\";\n\n if (prop.isHighlight == true || prop.isHighlight == \"true\") {\n itemClass = \"faca-title\";\n }\n\n if (angular.isDefined(prop.cssClass)) {\n itemClass += \" \" + prop.cssClass;\n }\n\n return itemClass;\n };\n\n\n vm.goToEdit = function (item, prop) {\n if (prop.isHighlight == true || prop.isHighlight == \"true\") {\n angular.forEach(vm.listModel.actionMenu.menuItems, function (menuItem) {\n\n if (menuItem.menuType == 0) {\n menuItem.actionFn(item[menuItem.identificationKey]);\n }\n\n });\n }\n };\n\n vm.changeItemsPerPage = function() {\n if ( vm.itemPerPage == null ) {\n vm.itemPerPage = vm.itensPerPageList[0];\n }\n vm.currentPage = 1;\n vm.pageSize = vm.itemPerPage.value;\n }\n\n function init() {\n if (vm.listModel) {\n vm.watchList();\n }\n }\n\n /**\n * Check if item is an object.\n * @param rowAttr\n * @returns {boolean}\n */\n function valueIsObject(rowAttr) {\n return rowAttr.split(\"\\.\").length > 1;\n }\n\n /**\n * Get value from object.\n * @param item\n * @param rowAttr\n * @returns {*}\n */\n function handleValueObject(item, rowAttr) {\n var attrs = rowAttr.split(\"\\.\");\n var complex = item[attrs[0]];\n if (complex) {\n return complex[attrs[1]];\n }\n return \"\";\n }\n\n vm.isVisible = false;\n\n function updateList() {\n if (vm.totalItemsPagination == null || angular.isUndefined(vm.totalItemsPagination) && vm.listModel.items != null) {\n vm.totalItemsPagination = vm.listModel.items.length;\n }\n angular.forEach(vm.itensPerPageList, function (item) {\n if (item.value == vm.pageSize) {\n vm.itemPerPage = item;\n }\n });\n\n vm.isVisible = false;\n vm.isVisible = true;\n }\n\n init();\n }\n\n\n function ListViewDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'ListViewController',\n transclude: true,\n templateUrl: \"app/components/template/list-view.html\",\n bindToController: true,\n scope: {\n listModel: '=?',\n pageSize: '=?',\n totalItemsPagination: '=?',\n currentPage: '=?',\n pageChangeFn: '&?'\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('ListViewController', ListViewController)\n .service('ListModel', ListModel)\n .directive('listView', ListViewDirective);\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *\n */\n function LiDeleteController($scope, DialogController, $translate) {\n var vm = this;\n\n vm.delete = function () {\n\n var message = '';\n\n if ($scope.customDescription) {\n message = $scope.customDescription;\n } else {\n message = $translate.instant('msg.confirm.remove');\n message = message.replace(\"$description\", $scope.description);\n }\n\n var desc = message;\n var action = $scope.action;\n\n vm.showConfirm(desc, action);\n };\n\n\n vm.showConfirm = function (text, action) {\n DialogController.show('title.remove', '', action, text);\n };\n }\n\n LiDeleteController.$inject = ['$scope', 'DialogController', '$translate'];\n\n function LiDeleteDirective() {\n return {\n restrict: 'E',\n scope: {\n customDescription: '=',\n description: '=',\n action: '&'\n },\n replace: true,\n templateUrl: \"app/components/template/li-delete.html\",\n controllerAs: 'ctrl',\n controller: 'LiDeleteController'\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('LiDeleteController', LiDeleteController)\n .directive('liDelete', LiDeleteDirective);\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n * \n */\n function LiButtonController() {\n }\n\n LiButtonController.$inject = ['$scope'];\n\n function LiButtonDirective() {\n return {\n restrict: 'E',\n scope: {\n label: '@',\n buttonClass: '@',\n action: '&'\n },\n replace: true,\n templateUrl: \"app/components/template/li-button.html\",\n controllerAs: 'ctrl',\n controller: 'LiButtonController'\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('LiButtonController', LiButtonController)\n .directive('liButton', LiButtonDirective);\n})();\n\n/**\n * Created by mateus.said (mateus.said@fpf.br)on 09/05/2017.\n */\n/*eslint angular/typecheck-string: 0*/\n\n (function () {\n\n 'use strict';\n\n /**\n *Controller to Input model directive.\n */\n function InputUserController($translate, $log, $scope, $interval, ToastUtil, DefaultService, ListModel) {\n var vm = this;\n\n vm.users = [];\n vm.user = \"\";\n vm.Page = 1;\n vm.userForm = {};\n vm.listUserValues = {\n items: []\n };\n\n if (angular.isUndefined(vm.isDisabled)) {\n vm.isDisabled = false;\n }\n\n if (angular.isUndefined(vm.listUser)) {\n vm.listUser = [];\n }\n\n vm.addUser = function () {\n if (vm.user && vm.isDisabled === false && vm.user !== \"\") {\n if (!isValidUser()) {\n ToastUtil.showToastMessage($translate.instant(\"input.user.directive.invalid.error\"), ToastUtil.ToastType.WARN);\n } else if (selectedUsersContainsUser()) {\n ToastUtil.showToastMessage($translate.instant(\"input.user.directive.alread.inlist.warn\"), ToastUtil.ToastType.WARN);\n } else {\n vm.userForm['inputListUser'].$setValidity('validQtdMin', true, vm.userForm['inputListUser']);\n const newItem = angular.copy(vm.user)\n vm.listUserValues.items.push(newItem);\n vm.listUser = vm.listUserValues.items;\n vm.user = \"\";\n }\n }\n }\n\n function init() {\n watchList();\n loadUser();\n initListViewUser();\n }\n\n function watchList() {\n $scope.$watch(\"ctrl.listUser\", function () {\n $interval(updateList, 250, 1);\n });\n }\n\n function updateList() {\n vm.listUserValues.items = vm.listUser;\n if (vm.listUserValues.items.length === 0) {\n vm.userForm['inputListUser'].$setValidity('validQtdMin', false, vm.userForm['inputListUser']);\n } else {\n vm.userForm['inputListUser'].$setValidity('validQtdMin', true, vm.userForm['inputListUser']);\n }\n }\n\n function initListViewUser() {\n var nameStyle = \"width: 60%;\";\n var idStyle = \"width: 5%;\";\n\n var properties = [\n ListModel.getProperties(\"ID\", \"Id\", true, null, idStyle, null, null),\n ListModel.getProperties(\"settings.approval_route.table.approver.name.label\", \"Name\", false, null, nameStyle, null, null)\n ];\n //Build menu\n var actionMenuItems = [\n ListModel.getActionMenuItem(ListModel.ActionMenuEnum.DELETE, \"Id\", \"NAme\", deleteModelFromList)\n ];\n var actionMenu = ListModel.getActionMenu(actionMenuItems, ListModel.ActionMenuTypeEnum.INLINE);\n vm.listUserValues = ListModel.getListModel(properties, vm.listUser, actionMenu);\n vm.listUserValues.items = addIndexToUsers(vm.listUserValues.items)\n }\n\n function deleteModelFromList(id) {\n\n angular.forEach(vm.listUserValues.items, function (item, key) {\n if (item.Id == id) {\n vm.listUserValues.items.splice(key, 1);\n }\n });\n\n if (vm.listUserValues.items.length == 0) {\n vm.userForm['inputListUser'].$setValidity('validQtdMin', false, vm.userForm['inputListUser']);\n }\n }\n\n function getValueToVariants(variants) {\n var variantsValue = \"\";\n if (angular.isDefined(variants)) {\n angular.forEach(variants, function (variant) {\n variantsValue += (variantsValue == \"\") ? \" \" + variant.Code : \"; \" + variant.Code;\n });\n }\n return variantsValue;\n }\n\n function isValidUser() {\n var isValid = false;\n if (typeof vm.user === 'string') {\n angular.forEach(vm.users, function (item) {\n if (item.Name === vm.user.Name) {\n isValid = true;\n }\n });\n } else {\n isValid = true;\n }\n return isValid;\n }\n\n function selectedUsersContainsUser() {\n var contains = false;\n angular.forEach(vm.listUserValues.items, function (item) {\n if (item.Id === vm.user.Id) {\n contains = true;\n }\n });\n return contains;\n }\n\n function addIndexToUsers(data) {\n return data.map(function (item, index) {\n item.Order = index + 1;\n return item\n })\n }\n\n function loadUser() {\n DefaultService.loadInputUsers({\n CsActive: 1\n }).then(function (response) {\n vm.users = angular.copy(response);\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"input.model.directive.model.load.error\"), ToastUtil.ToastType.ERROR);\n });\n }\n\n init();\n }\n\n function InputUserDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'InputUserController',\n transclude: true,\n templateUrl: \"app/components/template/input-user.html\",\n bindToController: true,\n scope: {\n listUser: '=',\n isDisabled: '=?',\n isRequired: '=?'\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('InputUserController', InputUserController)\n .directive('inputUser', InputUserDirective);\n})();\n\n/**\n * Created by mateus.said (mateus.said@fpf.br)on 09/05/2017.\n */\n/*eslint angular/typecheck-string: 0*/\n\n (function () {\n\n 'use strict';\n\n /**\n *Controller to Input model directive.\n */\n function InputUserTelegramController($translate, $log, $scope, $interval, ToastUtil, DefaultService, ListModel) {\n var vm = this;\n\n vm.users = [];\n vm.user = \"\";\n vm.Page = 1;\n vm.userForm = {};\n vm.listUserValues = {\n items: []\n };\n\n if (angular.isUndefined(vm.isDisabled)) {\n vm.isDisabled = false;\n }\n\n if (angular.isUndefined(vm.listUser)) {\n vm.listUser = [];\n }\n\n vm.addUser = function () {\n if (vm.user && vm.isDisabled === false && vm.user !== \"\") {\n if (!isValidUser()) {\n ToastUtil.showToastMessage($translate.instant(\"input.user.directive.invalid.error\"), ToastUtil.ToastType.WARN);\n } else if (selectedUsersContainsUser()) {\n ToastUtil.showToastMessage($translate.instant(\"input.user.directive.alread.inlist.warn\"), ToastUtil.ToastType.WARN);\n } else {\n vm.userForm['inputListUser'].$setValidity('validQtdMin', true, vm.userForm['inputListUser']);\n const newItem = angular.copy(vm.user)\n vm.listUserValues.items.push(newItem);\n vm.listUser = vm.listUserValues.items;\n vm.user = \"\";\n }\n }\n }\n\n function init() {\n watchList();\n loadUser();\n initListViewUser();\n }\n\n function watchList() {\n $scope.$watch(\"ctrl.listUser\", function () {\n $interval(updateList, 250, 1);\n });\n }\n\n function updateList() {\n vm.listUserValues.items = vm.listUser;\n if (vm.listUserValues.items.length === 0) {\n vm.userForm['inputListUser'].$setValidity('validQtdMin', false, vm.userForm['inputListUser']);\n } else {\n vm.userForm['inputListUser'].$setValidity('validQtdMin', true, vm.userForm['inputListUser']);\n }\n }\n\n function initListViewUser() {\n var nameStyle = \"width: 40%;\";\n var telegramStyle = \"width: 20%;\";\n var idStyle = \"width: 5%;\";\n\n var properties = [\n ListModel.getProperties(\"ID\", \"Id\", true, null, idStyle, null, null),\n ListModel.getProperties(\"settings.approval_route.table.approver.name.label\", \"Name\", false, null, nameStyle, null, null),\n ListModel.getProperties(\"acquisition.risk.label.telegram\", \"TelegramUsername\", false, null, telegramStyle, null, null)\n ];\n //Build menu\n var actionMenuItems = [\n ListModel.getActionMenuItem(ListModel.ActionMenuEnum.DELETE, \"Id\", \"Name\", deleteModelFromList)\n ];\n var actionMenu = ListModel.getActionMenu(actionMenuItems, ListModel.ActionMenuTypeEnum.INLINE);\n vm.listUserValues = ListModel.getListModel(properties, vm.listUser, actionMenu);\n vm.listUserValues.items = addIndexToUsers(vm.listUserValues.items)\n }\n\n function deleteModelFromList(id) {\n\n angular.forEach(vm.listUserValues.items, function (item, key) {\n if (item.Id == id) {\n vm.listUserValues.items.splice(key, 1);\n }\n });\n\n if (vm.listUserValues.items.length == 0) {\n vm.userForm['inputListUser'].$setValidity('validQtdMin', false, vm.userForm['inputListUser']);\n }\n }\n\n function isValidUser() {\n var isValid = false;\n if (typeof vm.user === 'string') {\n angular.forEach(vm.users, function (item) {\n if (item.Name === vm.user.Name) {\n isValid = true;\n }\n });\n } else {\n isValid = true;\n }\n return isValid;\n }\n\n function selectedUsersContainsUser() {\n var contains = false;\n angular.forEach(vm.listUserValues.items, function (item) {\n if (item.Id === vm.user.Id) {\n contains = true;\n }\n });\n return contains;\n }\n\n function addIndexToUsers(data) {\n return data.map(function (item, index) {\n item.Order = index + 1;\n return item\n })\n }\n\n function loadUser() {\n DefaultService.loadInputUsers({\n CsActive: 1\n }).then(function (response) {\n vm.users = angular.copy(response);\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"input.model.directive.model.load.error\"), ToastUtil.ToastType.ERROR);\n });\n }\n\n init();\n }\n\n function InputUserTelegramDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'InputUserTelegramController',\n transclude: true,\n templateUrl: \"app/components/template/input-user-telegram.html\",\n bindToController: true,\n scope: {\n listUser: '=',\n isDisabled: '=?',\n isRequired: '=?'\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('InputUserTelegramController', InputUserTelegramController)\n .directive('inputUserTelegram', InputUserTelegramDirective);\n})();\n\n/**\n * Created by mateus.said (mateus.said@fpf.br)on 09/05/2017.\n */\n(function () {\n\n 'use strict';\n\n\n /**\n *Controller to Input station directive.\n */\n function InputStationController($translate, $log, $scope, $interval, ToastUtil,\n DefaultService, ListModel, AuthService, StationService) {\n var vm = this;\n\n vm.stations = [];\n vm.station = \"\";\n vm.Page = 1;\n vm.stationForm = {};\n vm.listStationValues = {};\n\n if (angular.isUndefined(vm.isDisabled)) {\n vm.isDisabled = false;\n }\n\n if (angular.isUndefined(vm.listStation)) {\n vm.listStation = [];\n }\n\n vm.addStation = function () {\n if (vm.isDisabled === false && vm.station && vm.station.Id) {\n if (selectedModelsContainsModel()) {\n ToastUtil.showToastMessage($translate.instant(\"input.station.directive.station.alread.inlist.warn\"), ToastUtil.ToastType.WARN);\n } else {\n vm.stationForm['inputListStation'].$setValidity('validQtdMin', true, vm.stationForm['inputListStation']);\n vm.listStationValues.items.push(angular.copy(vm.station));\n vm.listStation = vm.listStationValues.items;\n vm.station = \"\";\n }\n }\n }\n\n function init() {\n watchList();\n loadListStations();\n initListViewStation();\n }\n\n function watchList() {\n $scope.$watch(\"ctrl.listStation\", function () {\n $interval(updateList, 250, 1);\n });\n }\n\n function updateList() {\n vm.listStationValues.items = vm.listStation;\n if (vm.listStationValues.items.length == 0) {\n vm.stationForm['inputListStation'].$setValidity('validQtdMin', false, vm.stationForm['inputListStation']);\n } else {\n vm.stationForm['inputListStation'].$setValidity('validQtdMin', true, vm.stationForm['inputListStation']);\n }\n }\n\n function initListViewStation() {\n var nameStyle = \"width: 90%;\";\n var properties = [\n ListModel.getProperties(\"input.station.label\", \"Title\", true, null, nameStyle, null, null)\n ];\n //Build menu\n var actionMenuItems = [\n ListModel.getActionMenuItem(ListModel.ActionMenuEnum.DELETE, \"Id\", \"Title\", deleteModelFromList)\n ];\n var actionMenu = ListModel.getActionMenu(actionMenuItems, ListModel.ActionMenuTypeEnum.INLINE);\n vm.listStationValues = ListModel.getListModel(properties, vm.listStation, actionMenu);\n\n }\n\n function deleteModelFromList(id) {\n var canRemove = true;\n\n if(angular.isDefined(vm.deleteValidationAction) && vm.deleteValidationAction != null){\n canRemove = deleteValidation(id);\n }\n\n if(canRemove){\n angular.forEach(vm.listStationValues.items, function (item, key) {\n if (item.Id == id) {\n vm.listStationValues.items.splice(key, 1);\n }\n });\n\n if (vm.listStationValues.items.length == 0) {\n vm.stationForm['inputListStation'].$setValidity('validQtdMin', false, vm.stationForm['inputListStation']);\n }\n }else{\n ToastUtil.showToastMessage($translate.instant('production.line.station.deleted.failed'), ToastUtil.ToastType.WARN);\n }\n }\n\n function selectedModelsContainsModel() {\n var contains = false;\n angular.forEach(vm.listStationValues.items, function (item) {\n if (item.Id == vm.station.Id) {\n contains = true;\n }\n });\n return contains;\n }\n\n function deleteValidation(id){\n return vm.deleteValidationAction({id: id});\n }\n\n function loadListStations() {\n var searchParams = {\n CsActive: 1\n };\n\n StationService.list(searchParams).then(function (response) {\n vm.stations = angular.copy(response.resultList);\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n });\n }\n\n init();\n }\n\n\n function InputStationDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'InputStationController',\n transclude: true,\n templateUrl: \"app/components/template/input-station.html\",\n bindToController: true,\n scope: {\n listStation: '=',\n isDisabled: '=?',\n isRequired: '=?',\n deleteValidationAction: '&?'\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('InputStationController', InputStationController)\n .directive('inputStation', InputStationDirective);\n})();\n\n(function () {\n\n 'use strict';\n /**\n *\n */\n function InputOqcObaReinspectController($scope, OqcObaService, $log, AuthService, ToastUtil, $translate) {\n var vm = this;\n vm.oqcObaList = [];\n\n if (vm.model == undefined || vm.model == null) {\n vm.model = \"\";\n }\n\n if (vm.isDisabled == undefined) {\n vm.isDisabled = false;\n\n }\n\n if (vm.isRequired == undefined) {\n vm.isRequired = false;\n\n }\n\n if (vm.showValidation == undefined) {\n vm.showValidation = false;\n }\n\n vm.showMsgValidation = function () {\n if (vm.form) {\n return (vm.form.$submitted && vm.showValidation && vm.isRequired && (vm.model == undefined || vm.model == \"\"));\n } else {\n return (vm.showValidation && vm.isRequired && (vm.model == undefined || vm.model == \"\"));\n }\n\n };\n\n vm.itemClicked = function () {\n vm.changeFn({\n reinspect: vm.model\n });\n };\n\n\n /**\n * Load all rejected reinspect OQC/OBA.\n */\n OqcObaService.listAllRejectedReinspect(AuthService.getBusinessId()).then(function (response) {\n vm.oqcObaList = response;\n })\n .catch(function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n }\n }\n });\n\n }\n\n function InputOqcObaReinspectDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'InputOqcObaReinspectController',\n transclude: true,\n templateUrl: \"app/components/template/input-oqc-oba-reinspect.html\",\n bindToController: true,\n scope: {\n model: '=',\n isDisabled: '=?',\n isRequired: '=?',\n showValidation: '=?',\n changeFn: '&?',\n form: '=?'\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('InputOqcObaReinspectController', InputOqcObaReinspectController)\n .directive('inputOqcObaReinspect', InputOqcObaReinspectDirective);\n})();\n\n/**\n * Created by mateus.said (mateus.said@fpf.br)on 09/05/2017.\n */\n/*eslint angular/typecheck-string: 0*/\n\n (function () {\n\n 'use strict';\n\n /**\n *Controller to Input model directive.\n */\n function InputModelController($translate, $log, $scope, $interval, ToastUtil, ModelService, ListModel) {\n var vm = this;\n\n vm.models = [];\n vm.model = \"\";\n vm.Page = 1;\n vm.modelForm = {};\n vm.listModelValues = {};\n\n if (angular.isUndefined(vm.isDisabled)) {\n vm.isDisabled = false;\n }\n\n if (angular.isUndefined(vm.listModel)) {\n vm.listModel = [];\n }\n\n vm.addModel = function () {\n if (vm.model && vm.isDisabled === false && vm.model != \"\") {\n if (!isValidModel()) {\n ToastUtil.showToastMessage($translate.instant(\"input.model.directive.model.invalid.error\"), ToastUtil.ToastType.WARN);\n } else if (selectedModelsContainsModel()) {\n ToastUtil.showToastMessage($translate.instant(\"input.model.directive.model.alread.inlist.warn\"), ToastUtil.ToastType.WARN);\n } else {\n vm.modelForm['inputListModel'].$setValidity('validQtdMin', true, vm.modelForm['inputListModel']);\n vm.listModelValues.items.push(angular.copy(vm.model));\n vm.listModel = vm.listModelValues.items;\n vm.model = \"\";\n }\n }\n }\n\n function init() {\n watchList();\n loadModel();\n initListViewModel();\n }\n\n function watchList() {\n $scope.$watch(\"ctrl.listModel\", function () {\n $interval(updateList, 250, 1);\n });\n }\n\n function updateList() {\n vm.listModelValues.items = vm.listModel;\n if (vm.listModelValues.items.length == 0) {\n vm.modelForm['inputListModel'].$setValidity('validQtdMin', false, vm.modelForm['inputListModel']);\n } else {\n vm.modelForm['inputListModel'].$setValidity('validQtdMin', true, vm.modelForm['inputListModel']);\n }\n }\n\n function initListViewModel() {\n var variantsStyle = \"width: 60%;\";\n var nameStyle = \"width: 30%;\";\n\n var properties = [\n ListModel.getProperties(\"input.model.directive.table.header.model\", \"Title\", true, null, nameStyle, null, null),\n ListModel.getProperties(\"input.model.directive.table.header.variant\", \"Variants\", false, getValueToVariants, variantsStyle, null, null)\n ];\n //Build menu\n var actionMenuItems = [\n ListModel.getActionMenuItem(ListModel.ActionMenuEnum.DELETE, \"Id\", \"Title\", deleteModelFromList)\n ];\n var actionMenu = ListModel.getActionMenu(actionMenuItems, ListModel.ActionMenuTypeEnum.INLINE);\n vm.listModelValues = ListModel.getListModel(properties, vm.listModel, actionMenu);\n }\n\n function deleteModelFromList(id) {\n angular.forEach(vm.listModelValues.items, function (item, key) {\n if (item.Id == id) {\n vm.listModelValues.items.splice(key, 1);\n }\n });\n\n if (vm.listModelValues.items.length == 0) {\n vm.modelForm['inputListModel'].$setValidity('validQtdMin', false, vm.modelForm['inputListModel']);\n }\n }\n\n function getValueToVariants(variants) {\n var variantsValue = \"\";\n if (angular.isDefined(variants)) {\n angular.forEach(variants, function (variant) {\n variantsValue += (variantsValue == \"\") ? \" \" + variant.Code : \"; \" + variant.Code;\n });\n }\n return variantsValue;\n }\n\n function isValidModel() {\n var isValid = false;\n if (typeof vm.model === 'string') {\n angular.forEach(vm.models, function (item) {\n if (item.Title == vm.model.Title) {\n isValid = true;\n }\n });\n } else {\n isValid = true;\n }\n return isValid;\n }\n\n function selectedModelsContainsModel() {\n var contains = false;\n angular.forEach(vm.listModelValues.items, function (item) {\n if (item.Id == vm.model.Id) {\n contains = true;\n }\n });\n return contains;\n }\n\n function loadModel() {\n ModelService.listModelsWithNoClients().then(function (response) {\n vm.models = angular.copy(response);\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"input.model.directive.model.load.error\"), ToastUtil.ToastType.ERROR);\n });\n }\n\n init();\n }\n\n function InputModelDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'InputModelController',\n transclude: true,\n templateUrl: \"app/components/template/input-model.html\",\n bindToController: true,\n scope: {\n listModel: '=',\n isDisabled: '=?',\n isRequired: '=?'\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('InputModelController', InputModelController)\n .directive('inputModel', InputModelDirective);\n})();\n\n(function () {\n\n 'use strict';\n\n function InputListTestInspecSubTypeController($translate, $log, $scope, $interval, ToastUtil,\n DefaultService, ListModel) {\n var vm = this;\n\n vm.subtypes = [];\n // vm.subtype = \"\";\n vm.Page = 1;\n vm.listSubtypeValues = {};\n var httpStatusCodeConflict = 409;\n\n if (angular.isUndefined(vm.subtypeObj)) {\n vm.subtypeObj = \"\";\n }\n\n\n if (angular.isUndefined(vm.isDisabled)) {\n vm.isDisabled = false;\n }\n\n if (angular.isUndefined(vm.listSubtype)) {\n vm.listSubtype = [];\n }\n\n if (angular.isUndefined(vm.isListComponent)) {\n vm.isListComponent = true;\n }\n\n if (angular.isUndefined(vm.filterByInspecType)) {\n vm.filterByInspecType = false;\n }\n\n if (angular.isUndefined(vm.listAssociated)) {\n vm.listAssociated = true;\n }\n\n vm.addSubtype = function () {\n if (vm.isDisabled === false && vm.subtypeObj && vm.subtypeObj.Id) {\n if (selectedModelsContainsModel()) {\n ToastUtil.showToastMessage($translate.instant(\"test.ort.type.subtype.duplicated.error.msg\"), ToastUtil.ToastType.WARN);\n } else {\n if (vm.form) {\n vm.form['inputListSubtype']['inputListSubtype'].$setValidity('validQtdMin', true, vm.form['inputListSubtype']['inputListSubtype']);\n }\n vm.listSubtypeValues.items.push(angular.copy(vm.subtypeObj));\n vm.listSubtype = vm.listSubtypeValues.items;\n vm.subtypeObj = \"\";\n }\n }\n }\n\n vm.isTrue = function (value) {\n return (value === true || value == \"true\");\n }\n\n function init() {\n watchList();\n watchFilterType();\n loadListSubtypes();\n initListViewSubtype();\n }\n\n function watchList() {\n $scope.$watch(\"ctrl.listSubtype\", function () {\n $interval(updateList, 250, 1);\n });\n }\n\n function watchFilterType() {\n if (vm.isTrue(vm.filterByInspecType)) {\n $scope.$watch(\"ctrl.filterInspecType\", function () {\n $interval(loadListSubtypes, 250, 1);\n });\n }\n }\n\n function updateList() {\n vm.listSubtypeValues.items = vm.listSubtype;\n if (vm.form) {\n if (vm.listSubtypeValues.items.length == 0) {\n vm.form['inputListSubtype']['inputListSubtype'].$setValidity('validQtdMin', false, vm.form['inputListSubtype']['inputListSubtype']);\n } else {\n vm.form['inputListSubtype']['inputListSubtype'].$setValidity('validQtdMin', true, vm.form['inputListSubtype']['inputListSubtype']);\n }\n }\n }\n\n function initListViewSubtype() {\n var nameStyle = \"width: 90%;\";\n var properties = [\n ListModel.getProperties(\"test.ort.type.subtype.label\", \"Title\", true, null, nameStyle, null, null)\n ];\n //Build menu\n var actionMenuItems = [\n ListModel.getActionMenuItem(ListModel.ActionMenuEnum.DELETE, \"Id\", \"Title\", deleteModelFromList)\n ];\n var actionMenu = ListModel.getActionMenu(actionMenuItems, ListModel.ActionMenuTypeEnum.INLINE);\n vm.listSubtypeValues = ListModel.getListModel(properties, vm.listSubtype, actionMenu);\n\n }\n\n function deleteModelFromList(id) {\n\n DefaultService.deleteTestInspectionSubType(id).then(function () {\n\n angular.forEach(vm.listSubtypeValues.items, function (item, key) {\n if (item.Id == id) {\n vm.listSubtypeValues.items.splice(key, 1);\n }\n });\n if (vm.form) {\n if (vm.listSubtypeValues.items.length == 0) {\n vm.form['inputListSubtype']['inputListSubtype'].$setValidity('validQtdMin', false, vm.form['inputListSubtype']['inputListSubtype']);\n }\n }\n }).catch(function (error) {\n $log.log(error);\n if (error.status === httpStatusCodeConflict) {\n ToastUtil.showToastMessage($translate.instant(\"test.sub.type.settings.deleted.failed\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function selectedModelsContainsModel() {\n var contains = false;\n angular.forEach(vm.listSubtypeValues.items, function (item) {\n if (item.Id == vm.subtypeObj.Id) {\n contains = true;\n }\n });\n return contains;\n }\n\n function loadListSubtypes() {\n var searchParams = {\n CsActive: 1,\n GenericFilterID: vm.isTrue(vm.filterByInspecType) ? vm.filterInspecType.Id : '',\n IsListFromUnion: (vm.isTrue(vm.listAssociated) ? true : false)\n };\n\n DefaultService.loadTestInspectionSubType(searchParams).then(function (response) {\n vm.subtypes = angular.copy(response);\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n });\n }\n\n init();\n }\n\n function InputListInspecSubTypeDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'InputListTestInspecSubTypeController',\n transclude: true,\n templateUrl: \"app/components/template/input-list-test-inspec-sub-type.html\",\n bindToController: true,\n scope: {\n listSubtype: '=?',\n listAssociated: '@?',\n isDisabled: '=?',\n isRequired: '=?ngRequired',\n isListComponent: '@?',\n subtypeObj: '=?',\n filterByInspecType: '@?',\n filterInspecType: '=?',\n form: '=?'\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('InputListTestInspecSubTypeController', InputListTestInspecSubTypeController)\n .directive('inputListTestSubtype', InputListInspecSubTypeDirective);\n})();\n\n(function () {\n\n 'use strict';\n\n\n /**\n *\n */\n function InputListPartInspecSubTypeController($translate, $log, $scope, $interval, ToastUtil,\n DefaultService, ListModel) {\n var vm = this;\n\n vm.subtypes = [];\n // vm.subtype = \"\";\n vm.Page = 1;\n vm.listSubtypeValues = {};\n var httpStatusCodeConflict = 409;\n\n if (angular.isUndefined(vm.subtypeObj)) {\n vm.subtypeObj = \"\";\n }\n\n\n if (angular.isUndefined(vm.isDisabled)) {\n vm.isDisabled = false;\n }\n\n if (angular.isUndefined(vm.listSubtype)) {\n vm.listSubtype = [];\n }\n\n if (angular.isUndefined(vm.isListComponent)) {\n vm.isListComponent = true;\n }\n\n if (angular.isUndefined(vm.filterByInspecType)) {\n vm.filterByInspecType = false;\n }\n\n if (angular.isUndefined(vm.listAssociated)) {\n vm.listAssociated = true;\n }\n\n\n vm.addSubtype = function () {\n if (vm.isDisabled === false && vm.subtypeObj && vm.subtypeObj.Id) {\n if (selectedModelsContainsModel()) {\n ToastUtil.showToastMessage($translate.instant(\"part.iqc.type.subtype.duplicated.error.msg\"), ToastUtil.ToastType.WARN);\n } else {\n if (vm.form) {\n vm.form['inputListSubtype']['inputListSubtype'].$setValidity('validQtdMin', true, vm.form['inputListSubtype']['inputListSubtype']);\n }\n vm.listSubtypeValues.items.push(angular.copy(vm.subtypeObj));\n vm.listSubtype = vm.listSubtypeValues.items;\n vm.subtypeObj = \"\";\n }\n }\n }\n\n\n vm.isTrue = function (value) {\n return (value === true || value == \"true\");\n }\n\n function init() {\n watchList();\n watchFilterType();\n loadListSubtypes();\n initListViewSubtype();\n }\n\n function watchList() {\n $scope.$watch(\"ctrl.listSubtype\", function () {\n $interval(updateList, 250, 1);\n });\n }\n\n function watchFilterType() {\n if (vm.isTrue(vm.filterByInspecType)) {\n $scope.$watch(\"ctrl.filterInspecType\", function () {\n $interval(loadListSubtypes, 250, 1);\n });\n }\n }\n\n function updateList() {\n vm.listSubtypeValues.items = vm.listSubtype;\n if (vm.form) {\n if (vm.listSubtypeValues.items.length == 0) {\n vm.form['inputListSubtype']['inputListSubtype'].$setValidity('validQtdMin', false, vm.form['inputListSubtype']['inputListSubtype']);\n } else {\n vm.form['inputListSubtype']['inputListSubtype'].$setValidity('validQtdMin', true, vm.form['inputListSubtype']['inputListSubtype']);\n }\n }\n }\n\n function initListViewSubtype() {\n var nameStyle = \"width: 90%;\";\n var properties = [\n ListModel.getProperties(\"part.iqc.type.subtype.label\", \"Title\", true, null, nameStyle, null, null)\n ];\n //Build menu\n var actionMenuItems = [\n ListModel.getActionMenuItem(ListModel.ActionMenuEnum.DELETE, \"Id\", \"Title\", deleteModelFromList)\n ];\n var actionMenu = ListModel.getActionMenu(actionMenuItems, ListModel.ActionMenuTypeEnum.INLINE);\n vm.listSubtypeValues = ListModel.getListModel(properties, vm.listSubtype, actionMenu);\n\n }\n\n function deleteModelFromList(id) {\n\n DefaultService.deleteInspectionSubType(id).then(function () {\n\n angular.forEach(vm.listSubtypeValues.items, function (item, key) {\n if (item.Id == id) {\n vm.listSubtypeValues.items.splice(key, 1);\n }\n });\n if (vm.form) {\n if (vm.listSubtypeValues.items.length == 0) {\n vm.form['inputListSubtype']['inputListSubtype'].$setValidity('validQtdMin', false, vm.form['inputListSubtype']['inputListSubtype']);\n }\n }\n\n }).catch(function (error) {\n $log.log(error);\n if (error.status === httpStatusCodeConflict) {\n ToastUtil.showToastMessage($translate.instant(\"part.sub.type.settings.deleted.failed\"), ToastUtil.ToastType.WARN);\n }\n else\n { \n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function selectedModelsContainsModel() {\n var contains = false;\n angular.forEach(vm.listSubtypeValues.items, function (item) {\n if (item.Id == vm.subtypeObj.Id) {\n contains = true;\n }\n });\n return contains;\n }\n\n function loadListSubtypes() {\n var searchParams = {\n CsActive: 1,\n GenericFilterID: vm.isTrue(vm.filterByInspecType) ? vm.filterInspecType.Id : '',\n IsListFromUnion: (vm.isTrue(vm.listAssociated) ? true : false)\n };\n\n DefaultService.loadPartInspectionSubType(searchParams).then(function (response) {\n vm.subtypes = angular.copy(response);\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n });\n }\n\n init();\n }\n\n\n function InputListInspecSubTypeDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'InputListPartInspecSubTypeController',\n transclude: true,\n templateUrl: \"app/components/template/input-list-part-inspec-sub-type.html\",\n bindToController: true,\n scope: {\n listSubtype: '=?',\n listAssociated: '@?',\n isDisabled: '=?',\n isRequired: '=?ngRequired',\n isListComponent: '@?',\n subtypeObj: '=?',\n filterByInspecType: '@?',\n filterInspecType: '=?',\n form: '=?'\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('InputListPartInspecSubTypeController', InputListPartInspecSubTypeController)\n .directive('inputListPartSubtype', InputListInspecSubTypeDirective);\n})();\n\n(function () {\n\n 'use strict';\n\n\n function EmailTypeEnum() {\n var vm = this;\n /**\n * Enum to External Email Type.\n * @type {{BlockedMaterial: number, ProductionPlan: number, MainReport: number}}\n */\n vm.types = {\n BlockedMaterial: 0,\n ProductionPlan: 1,\n MainReport: 2,\n BlockedMaterialGoodList: 3\n };\n }\n\n\n /**\n *InputListEmailController.\n */\n function InputListEmailController(InputListEmailService, ToastUtil, $translate, $log, AuthService, EmailTypeEnum) {\n\n var vm = this;\n\n vm.listEmail = undefined;\n\n if (vm.isDisabled == undefined) {\n vm.isDisabled = false;\n }\n\n if (vm.showVerticalList == undefined) {\n vm.showVerticalList = 'false';\n }\n\n if (vm.isEmailBlockedMaterial == undefined) {\n vm.isEmailBlockedMaterial = false;\n }\n\n if (vm.isEmailBlockedMaterialGoodList == undefined) {\n vm.isEmailBlockedMaterialGoodList = false;\n }\n\n if (vm.isEmailProductionPlan == undefined) {\n vm.isEmailProductionPlan = false;\n }\n\n if (vm.isEmailMainReport == undefined) {\n vm.isEmailMainReport = false;\n }\n\n vm.itemClicked = function () {\n var userEmail = vm.getEmailObj();\n vm.saveEmail(userEmail);\n };\n\n vm.insertNewEmail = function (form) {\n if (form.$valid) {\n\n var userEmail = vm.getEmailObj();\n userEmail.Business = {\n Id: AuthService.getBusinessId()\n };\n\n vm.saveEmail(userEmail);\n }\n };\n\n vm.saveEmail = function (userEmail) {\n\n if (userEmail.Email != \"\" && userEmail.Email != undefined) {\n if (!vm.containsEmail(userEmail)) {\n userEmail.Business = {\n Id: AuthService.getBusinessId()\n };\n\n var type = getEmailTypeToSave();\n\n userEmail.IsGroup = (type == -1) ? false : true;\n InputListEmailService.save(userEmail, type).then(function (response) {\n var email = angular.copy(response);\n vm.emailList.push(email);\n if (!containsInListEmail(email)) {\n vm.listEmail.push(email);\n }\n })\n .catch(function (error) {\n $log.log(error);\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n }\n vm.emailList.push(angular.copy(userEmail));\n });\n\n vm.model = \"\";\n } else {\n ToastUtil.showToastMessage($translate.instant('input.email.directive.duplicatedmail'),\n ToastUtil.ToastType.WARN);\n }\n }\n };\n\n vm.getEmailObj = function () {\n var obj = {};\n if (vm.model.Email == undefined) {\n var externalEmailBusinessDTO = {\n BusinessId: AuthService.getBusinessId()\n }\n\n if (vm.isEmailProductionPlan) {\n obj = {\n Email: angular.copy(vm.model),\n Id: 0\n }\n externalEmailBusinessDTO.Type = EmailTypeEnum.types.ProductionPlan;\n } else if (vm.isEmailMainReport) {\n obj = {\n Email: angular.copy(vm.model),\n Id: 0\n }\n externalEmailBusinessDTO.Type = EmailTypeEnum.types.MainReport;\n } else if (vm.isEmailBlockedMaterialGoodList) {\n obj = {\n Email: angular.copy(vm.model),\n Id: 0\n }\n externalEmailBusinessDTO.Type = EmailTypeEnum.types.BlockedMaterialGoodList;\n } else {\n obj = {\n Email: angular.copy(vm.model),\n Id: 0\n }\n externalEmailBusinessDTO.Type = EmailTypeEnum.types.BlockedMaterial;\n }\n\n obj.ExternalEmailBusiness = [];\n obj.ExternalEmailBusiness.push(externalEmailBusinessDTO)\n } else {\n obj = vm.model;\n if (vm.isEmailProductionPlan) {\n obj = addEmailToGroup(obj, EmailTypeEnum.types.ProductionPlan);\n } else if (vm.isEmailMainReport) {\n obj = addEmailToGroup(obj, EmailTypeEnum.types.MainReport);\n } else if (vm.isEmailBlockedMaterial) {\n obj = addEmailToGroup(obj, EmailTypeEnum.types.BlockedMaterial);\n } else if (vm.isEmailBlockedMaterialGoodList) {\n obj = addEmailToGroup(obj, EmailTypeEnum.types.BlockedMaterialGoodList);\n }\n }\n obj.CsActive = 1;\n return obj;\n };\n\n InputListEmailService.listAll().then(function (response) {\n vm.listEmail = []\n angular.forEach(response, function (email) {\n if (!containsInListEmail(email)) {\n vm.listEmail.push(email);\n }\n });\n }).catch(function (error) {\n $log.log(error);\n //No need an action.\n });\n\n vm.remove = function (item) {\n if (isEmailFromGroup(item)) {\n\n item = removeFromItemToSave(item);\n var type = getEmailTypeToSave();\n\n item.IsGroup = (type == -1) ? false : true;\n\n InputListEmailService.save(item, type).then(function () {\n vm.removeItemFromList(item);\n })\n .catch(function (error) {\n $log.log(error);\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(\"blockedmaterial.remove.email.group.error.msg\"), ToastUtil.ToastType.ERROR);\n }\n });\n } else {\n vm.removeItemFromList(item);\n }\n };\n\n vm.removeItemFromList = function (item) {\n var index = vm.emailList.indexOf(item);\n if (index > -1) {\n vm.emailList.splice(index, 1);\n }\n };\n\n vm.containsEmail = function (email) {\n var contains = false;\n if (email) {\n angular.forEach(vm.emailList, function (mail) {\n if (mail.Email == email.Email) {\n contains = true;\n }\n });\n }\n return contains;\n };\n\n function containsInListEmail(email) {\n var contains = false;\n if (email) {\n angular.forEach(vm.listEmail, function (mail) {\n if (mail.Email == email.Email) {\n contains = true;\n }\n });\n }\n return contains;\n }\n\n function addEmailToGroup(model, type) {\n if (!checkIsEmailAlreadInGroup(model, type)) {\n var ExternalB = {\n BusinessId: AuthService.getBusinessId(),\n Type: type\n }\n model.ExternalEmailBusiness = (model.ExternalEmailBusiness == null) ? [] : model.ExternalEmailBusiness;\n model.ExternalEmailBusiness.push(ExternalB);\n }\n return model;\n }\n\n /**\n * Checks if Email is already in a group.\n * @param model\n * @param type\n * @returns {boolean}\n */\n function checkIsEmailAlreadInGroup(model, type) {\n var isInGroup = false;\n if (model.ExternalEmailBusiness != null && model.ExternalEmailBusiness.length > 0) {\n angular.forEach(model.ExternalEmailBusiness, function (item) {\n if (item.BusinessId == AuthService.getBusinessId() && item.Type == type) {\n isInGroup = true;\n }\n });\n\n }\n return isInGroup;\n }\n\n /**\n * Checks if email is to any group.\n * @returns {boolean}\n */\n function isEmailFromGroup() {\n var isFromAnyGroup = false;\n if (vm.isEmailProductionPlan || vm.isEmailMainReport || vm.isEmailBlockedMaterial || vm.isEmailBlockedMaterialGoodList) {\n isFromAnyGroup = true;\n }\n\n return isFromAnyGroup;\n }\n\n /**\n * Returns email type to save.\n * @returns {number}\n */\n function getEmailTypeToSave() {\n var type = 0;\n if (vm.isEmailProductionPlan) {\n type = EmailTypeEnum.types.ProductionPlan;\n } else if (vm.isEmailMainReport) {\n type = EmailTypeEnum.types.MainReport;\n } else if (vm.isEmailBlockedMaterial) {\n type = EmailTypeEnum.types.BlockedMaterial;\n } else if (vm.isEmailBlockedMaterialGoodList) {\n type = EmailTypeEnum.types.BlockedMaterialGoodList;\n } else {\n // it isn't a group.\n type = -1;\n }\n\n return type;\n }\n\n /**\n * Remove email from list before save obj.\n * @param item\n * @returns {*}\n */\n function removeFromItemToSave(item) {\n var typeToRemove = vm.isEmailBlockedMaterial ? EmailTypeEnum.types.BlockedMaterial : vm.isEmailProductionPlan ? EmailTypeEnum.types.ProductionPlan : EmailTypeEnum.types.MainReport;\n for (var i = 0; i < item.ExternalEmailBusiness.length; i++) {\n if (item.ExternalEmailBusiness[i].Type == typeToRemove && item.ExternalEmailBusiness[i].BusinessId == AuthService.getBusinessId()) {\n item.ExternalEmailBusiness.splice(i, 1);\n }\n }\n return item;\n }\n }\n\n function InputListEmailDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'InputListEmailController',\n transclude: true,\n templateUrl: \"app/components/template/input-list-email.html\",\n bindToController: true,\n scope: {\n emailList: '=',\n isDisabled: '=?',\n showVerticalList: '@?',\n isEmailBlockedMaterial: '@?',\n isEmailBlockedMaterialGoodList: '@?',\n isEmailProductionPlan: '@?',\n isEmailMainReport: '@?',\n modelToFilter: '='\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('InputListEmailController', InputListEmailController)\n .directive('inputListEmail', InputListEmailDirective)\n .service('EmailTypeEnum', EmailTypeEnum);\n})();\n\n(function () {\n\n 'use strict';\n\n function InputListDRIController($scope, DefaultService, ToastUtil, $interval, $translate, $log) {\n\n var vm = this, business = vm.business;\n\n vm.DRIs = [];\n vm.newItem = '';\n vm.showMsgDuplicateItens = false;\n\n if (!vm.hideTeamLeader) {\n vm.hideTeamLeader = false;\n }\n\n vm.updateModel = function (value) {\n vm.newItem = value;\n };\n\n vm.addNewItem = function () {\n if (vm.newItem != undefined && vm.newItem.Name != undefined && vm.newItem.Name.length > 0 && !listContainsItem(vm.list, vm.newItem)) {\n\n vm.list.push(angular.copy(vm.newItem));\n\n if (vm.list.length === 1) {\n vm.list[0].TeamLeader = true;\n }\n }\n\n vm.newItem = '';\n };\n\n vm.checkedTeamLeader = function (control) {\n vm.list.forEach(function (b) {\n b.TeamLeader = control === b;\n });\n };\n\n vm.valueToShow = function (item) {\n return item;\n };\n\n vm.remove = function (id) {\n for (var i = 0; i < vm.list.length; i++) {\n if (vm.list[i].Id == id) {\n vm.list.splice(i, 1);\n }\n }\n };\n\n function loadUsers() {\n business = vm.business;\n if (angular.isDefined(business)) {\n DefaultService.loadUserInputDirective(business)\n .then(function (response) {\n vm.DRIs = angular.copy(response);\n })\n .catch(function (error) {\n $log.log(error);\n });\n }\n }\n\n\n\n function listContainsItem(list, item) {\n\n for (var i = 0; i < list.length; i++) {\n\n if (list[i].Id == item.Id) {\n\n if (vm.showMsgDuplicateItens) {\n ToastUtil.showToastMessage($translate.instant('error.user.duplicate').replace(\"$name\", item.Name));\n }\n\n return true; // already contains.\n }\n }\n\n return false;\n }\n\n function init() {\n $scope.$watch(\"ctrl.business\", function () {\n $interval(loadUsers, 50, 1);\n });\n }\n\n init();\n }\n\n function InputListDRIDirective() {\n return {\n bindToController: true,\n restrict: 'E',\n scope: {\n list: '=',\n titleLabel: '@',\n disableInput: '=',\n business: '=',\n disableDelete: '=',\n isRequired: '=',\n hideTeamLeader: '=?',\n changeFn: '&?',\n showHint: '@?',\n hintText: '@',\n showMsgDuplicateItens: '@?',\n idDirective: '@'\n },\n replace: true,\n templateUrl: \"app/components/template/input-list-dri.html\",\n controllerAs: 'ctrl',\n controller: 'InputListDRIController'\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('InputListDRIController', InputListDRIController)\n .directive('inputListDri', InputListDRIDirective);\n})();\n\n(function () {\n\n 'use strict';\n /**\n *\n */\n function InputDriController(DefaultService, AuthService, $log) {\n var vm = this, business = vm.business;\n vm.DRIs = [];\n\n if (vm.showHint == undefined) {\n vm.showHint = true;\n }\n\n vm.atualizarModel = function () {\n if (vm.modelIsId) {\n vm.model = vm.driModel.Id;\n vm.modelName = vm.driModel.Name;\n }\n };\n\n if (vm.modelIsId) {\n getDriFromId(vm.model);\n }\n\n if (vm.fieldDisabled == undefined) {\n vm.fieldDisabled = false;\n\n }\n\n if (vm.fieldRequired == undefined) {\n vm.fieldRequired = false;\n\n }\n\n if (vm.driShowValidation == undefined) {\n vm.driShowValidation = false;\n }\n\n if (vm.label == undefined) {\n vm.label = '';\n }\n\n if(angular.isUndefined(business)){\n business = AuthService.getBusinessId();\n }\n\n var searchParams = {\n BusinessId: business,\n CsActive: 1,\n IsSysAdmin: AuthService.isSysAdmin()\n };\n\n //Load DRIs\n DefaultService.loadDRIs(searchParams)\n .then(function (response) {\n\n vm.DRIs = angular.copy(response);\n\n getDriFromId(vm.model);\n })\n .catch(function (error) {\n $log.log(error);\n // TODO ????????????\n //vm.errorMsgArray.push(error.message);\n });\n\n function getDriFromId(driId) {\n if (vm.DRIs.length > 0 && vm.modelIsId) {\n angular.forEach(vm.DRIs, function (value) {\n if (value.Id == driId) {\n vm.driModel = angular.copy(value);\n }\n });\n }\n }\n }\n\n function InputDriDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'InputDriController',\n templateUrl: \"app/components/template/input-dri.html\",\n bindToController: true,\n scope: {\n model: '=',\n showHint: '@?',\n modelName: '=',\n fieldDisabled: '=?',\n fieldRequired: '=?',\n driShowValidation: '&?',\n label: '@',\n modelIsId: '@?',\n business: '=?'\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('InputDriController', InputDriController)\n .directive('inputDri', InputDriDirective);\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *\n */\n function InputDateController($scope, $interval) {\n var vm = this;\n\n if (vm.fieldId == undefined) {\n vm.fieldId = new Date().toString();\n }\n\n if (vm.placeHolder == undefined) {\n vm.placeHolder = \"dd/mm/yyyy\";\n }\n\n if (vm.dateFormat == undefined) {\n vm.dateFormat = \"dd/MM/yyyy\";\n }\n\n if (vm.model == undefined || vm.model == \"\" || vm.model == null) {\n if (vm.initNoDate == true || vm.initNoDate == \"true\") {\n vm.model = null;\n } else {\n vm.model = new Date();\n }\n }\n\n vm.popup = {\n opened: false\n };\n\n vm.dateOptions = {\n formatYear: 'yy',\n maxDate: new Date(9999, 5, 22),\n minDate: new Date(),\n startingDay: 1\n };\n\n vm.open = function () {\n vm.popup.opened = true;\n };\n\n vm.dateChangeEvent = function() {\n $interval(callParentDateChange, 200, 1);\n };\n\n function callParentDateChange() {\n vm.dateChange();\n }\n\n vm.inlineOptions = {\n customClass: getDayClass,\n minDate: new Date(),\n showWeeks: false\n };\n\n vm.toggleMin = function () {\n vm.inlineOptions.minDate = vm.inlineOptions.minDate ? null : new Date();\n vm.dateOptions.minDate = vm.inlineOptions.minDate;\n };\n\n vm.toggleMin();\n\n function getDayClass(data) {\n var date = data.date,\n mode = data.mode;\n if (mode === 'day') {\n var dayToCheck = new Date(date).setHours(0, 0, 0, 0);\n\n for (var i = 0; i < $scope.events.length; i++) {\n var currentDay = new Date($scope.events[i].date).setHours(0, 0, 0, 0);\n\n if (dayToCheck === currentDay) {\n return $scope.events[i].status;\n }\n }\n }\n\n return '';\n }\n }\n\n function InputDateDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'InputDateController',\n transclude: false,\n templateUrl: \"app/components/template/input-date.html\",\n bindToController: true,\n scope: {\n model: '=',\n initNoDate: '=',\n isRequired: '=?',\n dateChange: '&',\n fieldDisabled: '=?',\n fieldId: '@?',\n placeHolder: '@'\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('InputDateController', InputDateController)\n .directive('inputDate', InputDateDirective);\n})();\n\n/**\n * Created by mateus.said (mateus.said@fpf.br)on 09/05/2017.\n */\n(function () {\n\n 'use strict';\n\n /**\n *Controller to Input client directive.\n */\n function InputClientController($translate, $log, $scope, $interval, ToastUtil, DefaultService, ListModel, ProjectService) {\n var vm = this;\n\n vm.clients = [];\n vm.client = \"\";\n vm.Page = 1;\n vm.clientForm = {};\n\n vm.listClientValues = {};\n\n if (angular.isUndefined(vm.isDisabled)) {\n vm.isDisabled = false;\n }\n\n if (angular.isUndefined(vm.listClient)) {\n vm.listClient = [];\n }\n\n vm.addClient = function () {\n if (vm.isDisabled === false && vm.client && vm.client.Id) {\n if (selectedModelsContainsModel()) {\n ToastUtil.showToastMessage($translate.instant(\"input.client.directive.client.alread.inlist.warn\"), ToastUtil.ToastType.WARN);\n } else {\n vm.clientForm['inputListClient'].$setValidity('validQtdMin', true, vm.clientForm['inputListClient']);\n vm.listClientValues.items.push(angular.copy(vm.client));\n vm.listClient = vm.listClientValues.items;\n vm.client = \"\";\n }\n }\n }\n\n\n function init() {\n watchList();\n loadListClients();\n initListViewClient();\n }\n\n function watchList() {\n $scope.$watch(\"ctrl.listClient\", function () {\n $interval(updateList, 250, 1);\n });\n }\n\n function updateList() {\n vm.listClientValues.items = vm.listClient;\n if (vm.listClientValues.items.length === 0) {\n vm.clientForm['inputListClient'].$setValidity('validQtdMin', false, vm.clientForm['inputListClient']);\n } else {\n vm.clientForm['inputListClient'].$setValidity('validQtdMin', true, vm.clientForm['inputListClient']);\n }\n }\n\n function initListViewClient() {\n var nameStyle = \"width: 90%;\";\n var properties = [\n ListModel.getProperties(\"project.input.client.label\", \"Title\", true, null, nameStyle, null, null)\n ];\n //Build menu\n var actionMenuItems = [\n ListModel.getActionMenuItem(ListModel.ActionMenuEnum.DELETE, \"Id\", \"Title\", deleteModelFromList)\n ];\n var actionMenu = ListModel.getActionMenu(actionMenuItems, ListModel.ActionMenuTypeEnum.INLINE);\n vm.listClientValues = ListModel.getListModel(properties, vm.listClient, actionMenu);\n\n }\n\n function deleteModelFromList(id) {\n if (vm.idProject) {\n ProjectService.deleteAssociation(vm.idProject, id).then(\n function (response) {\n if (response) {\n angular.forEach(vm.listClientValues.items, function (item, key) {\n if (item.Id == id) {\n vm.listClientValues.items.splice(key, 1);\n }\n });\n if (vm.listClientValues.items.length == 0) {\n vm.clientForm['inputListClient'].$setValidity('validQtdMin', false, vm.clientForm['inputListClient']);\n }\n }\n }).catch(function (error) {\n $log.log(error);\n if (error.status == 401) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if (error.status == 409) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n }\n });\n } else {\n angular.forEach(vm.listClientValues.items, function (item, key) {\n if (item.Id == id) {\n vm.listClientValues.items.splice(key, 1);\n }\n });\n\n if (vm.listClientValues.items.length == 0) {\n vm.clientForm['inputListClient'].$setValidity('validQtdMin', false, vm.clientForm['inputListClient']);\n }\n }\n }\n\n function selectedModelsContainsModel() {\n var contains = false;\n angular.forEach(vm.listClientValues.items, function (item) {\n if (item.Id == vm.client.Id) {\n contains = true;\n }\n });\n return contains;\n }\n\n function loadListClients() {\n var filterModel = {\n CsActive: 1\n }\n DefaultService.loadClients(filterModel).then(function (response) {\n vm.clients = angular.copy(response);\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n });\n }\n\n init();\n }\n\n\n function InputClientDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'InputClientController',\n transclude: true,\n templateUrl: \"app/components/template/input-client.html\",\n bindToController: true,\n scope: {\n listClient: '=',\n isDisabled: '=?',\n isRequired: '=?',\n idProject: '=?'\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('InputClientController', InputClientController)\n .directive('inputClient', InputClientDirective);\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *\n */\n function DivInputController($scope) {\n\n var vm = this;\n //vm.label = $scope.label;\n\n if(angular.isUndefined(vm.showHintInline)){\n vm.showHintInline = false;\n }\n\n if(angular.isUndefined(vm.warningHint)){\n vm.warningHint = false;\n }\n\n vm.isTrue = function(value) {\n return (value === true || value == \"true\" );\n }\n\n vm.requiredLabel = '';\n vm.requiredSymbol = \"*\";\n if (!vm.name) {\n vm.name = 'divInputForm';\n }\n vm.getFormData = function () {\n vm.form = $scope[vm.name];\n }\n }\n\n function DivInputDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'DivInputController',\n transclude: true,\n templateUrl: \"app/components/template/div-input.html\",\n bindToController: true,\n scope: {\n name: '@',\n label: '@',\n isRequired: '=',\n msgToHint: '@',\n showHintInline: '@?',\n warningHint: '@?'\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('DivInputController', DivInputController)\n .directive('divInput', DivInputDirective);\n})();\n\n(function() {\n\n\t'use strict';\n\n\t/**\n\t *\n\t */\n\tfunction DivInputListController($scope, toastr, $translate) {\n\n\t\tvar vm = this;\n\n\t\tvm.newItem = '';\n vm.showMsgDuplicateItens = false;\n\n\t\tvm.addNewItem = function() {\n vm.changeFn();\n\t\t\tif(vm.newItem.length > 0 && !listContainsItem(vm.list, vm.newItem)) {\n\n if(vm.isEmail){\n var email = vm.validateEmail(vm.newItem);\n\n if(!email)\n return;\n }\n\n var obj = {};\n obj[vm.valueToModel] = vm.newItem;\n\n\t\t\t\tvm.list.push(obj);\n\t\t\t}\n\n\t\t\tvm.newItem = '';\n\t\t};\n\n vm.validateEmail = function (email) {\n var re = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n return re.test(email);\n };\n\n vm.valueToShow = function(item){\n return item[vm.valueToModel];\n };\n\n vm.remove = function(item) {\n vm.changeFn();\n var index = vm.list.indexOf(item);\n if (index > -1) {\n vm.list.splice(index, 1);\n }\n };\n\n\n\n\t\tvar listContainsItem = function(list, item) {\n\n var isContain = false;\n\n\t\t\tfor (var i = 0; i < list.length; i++) {\n var values = Object.values(list[i]);\n angular.forEach(values, function(value){\n if ( value === item ){\n if(vm.showMsgDuplicateItens){\n toastr.clear();\n toastr.error($translate.instant('defect.serial.duplicate').replace(\"$id\", item), {\n closeButton: true\n });\n }\n isContain = true;\n }\n });\n\t\t\t}\n\n\t\t\treturn isContain;\n\t\t};\n\t}\n\n\tDivInputListController.$inject = ['$scope', 'toastr','$translate'];\n\n\tfunction DivInputListDirective() {\n\t\treturn {\n bindToController:true,\n\t\t\trestrict: 'E',\n\t\t\tscope: {\n\t\t\t\tlist : '=',\n\t\t\t\ttitleLabel : '@',\n\t\t\t\tdisableInput : '=',\n\t\t\t\tdisableDelete : '=',\n\t\t\t\tisRequired : '=',\n isEmail : '=',\n\t\t\t\tvalueToModel: '@',\n\t\t\t\tchangeFn: '&',\n\t\t\t\tshowHint: '@?',\n\t\t\t\thintText: '@',\n showMsgDuplicateItens: '@?',\n idDirective : '@'\n\t\t\t},\n\t\t\treplace:true,\n\t\t\ttemplateUrl : \"app/components/template/div-input-list.html\",\n\t\t\tcontrollerAs : 'ctrl',\n\t\t\tcontroller : 'DivInputListController'\n\t\t};\n\t}\n\n\tangular.module('aqmsFrontend')\n\t\t.controller('DivInputListController', DivInputListController)\n\t\t.directive('divInputList', DivInputListDirective);\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *\n */\n function DivAccordionController($scope, $translate) {\n var vm = this;\n $scope.oneAtATime = true;\n\n if ($scope.title == undefined)\n vm.header = 'set header: ' +\n '

{{\\'' + title + '\\' | translate }}

';\n\n if (subtitle) {\n modalTemplate += '
{{\\'' + subtitle + '\\' | translate }}
';\n }\n\n modalTemplate += directive + '';\n\n var modalInstance = modal.open({\n animation: true,\n template: modalTemplate,\n controller: function ($scope) {\n $scope.$on('modal.closing', function (event, reason) {\n if (closeListener != undefined) {\n if (reason == 'ok') {\n closeListener();\n } else if (reason == 'cancel') {\n cancelListener();\n }\n }\n // You can use this to prevent the modal from closing, use event.preventDefault();\n });\n\n $scope.parentDialog = ctrl;\n $scope.modelDialog = model;\n }\n });\n return modalInstance;\n };\n }\n\n angular.module('aqmsFrontend').service('DialogControllerTemplate',\n DialogControllerTemplate);\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *\n */\n function DialogController($uibModal) {\n var vm = this;\n var modal = $uibModal;\n\n vm.close = function close() {};\n\n vm.show = function show(title, directive, ctrl) {\n return this.show(title, directive, ctrl, null);\n };\n\n vm.showWithCloseListener = function show(title, directive, ctrl, closeListener) {\n return this.show(title, directive, ctrl, null, closeListener);\n };\n\n /*Possible Size's: sm,md,lg*/\n vm.show = function show(title, directive, ctrl, model, closeListener, size) {\n if (size == undefined) {\n size = 'md';\n }\n var modalTemplate = '
' +\n '
' +\n '

{{\\'' + title + '\\' | translate }}

' + directive + '
';\n\n var modalInstance = modal.open({\n animation: true,\n template: modalTemplate,\n size: size,\n controller: function ($scope) {\n $scope.$on('modal.closing', function () {\n if (closeListener != undefined) {\n closeListener();\n }\n // You can use this to prevent the modal from closing, use event.preventDefault();\n });\n\n $scope.parentDialog = ctrl;\n $scope.modelDialog = model;\n }\n });\n\n return modalInstance;\n\n };\n }\n\n angular.module('aqmsFrontend').service('DialogController',\n DialogController);\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n * \n */\n function DialogConfirmController($scope) {\n var vm = this;\n var scope = $scope;\n\n vm.message = \"Continue\";\n if ($scope.modelDialog != undefined) {\n vm.message = $scope.modelDialog;\n }\n\n vm.close = function () {\n scope.$dismiss('cancel');\n };\n\n vm.confirm = function () {\n scope.parentDialog();\n scope.$close('ok');\n };\n }\n\n function DialogConfirmDirective() {\n return {\n restrict: 'E',\n replace: true,\n templateUrl: \"app/components/template/dialog-confirm.html\",\n controllerAs: 'ctrl',\n controller: 'DialogConfirmController'\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('DialogConfirmController', DialogConfirmController)\n .directive('dialogConfirm', DialogConfirmDirective);\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n * \n */\n function CheckItemController($scope) {\n var vm = this;\n vm.item = $scope.model;\n vm.list = $scope.selecteds;\n vm.isDisabled = $scope.isDisabled;\n\n if (angular.isUndefined($scope.isRequired)) {\n vm.isRequired = false;\n }\n else\n {\n vm.isRequired = true;\n }\n\n vm.toggle = function () {\n var list = vm.list;\n var item = vm.item;\n var idx = list.indexOf(item);\n if (idx > -1) {\n list.splice(idx, 1);\n } else {\n list.push(item);\n }\n };\n\n vm.exists = function () {\n var item = vm.item;\n return vm.list.indexOf(item) > -1;\n };\n }\n\n CheckItemController.$inject = ['$scope'];\n\n function CheckItemDirective() {\n return {\n restrict: 'EA',\n templateUrl: \"app/components/template/check-item.html\",\n scope: {\n model: '=',\n selecteds: '=',\n description: '@',\n isDisabled: '=',\n isRequired: '='\n },\n controllerAs: 'ctrl',\n controller: 'CheckItemController'\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('CheckItemController', CheckItemController)\n .directive('checkItem', CheckItemDirective);\n})();\n\n/*eslint no-undef: 0*/\n(function () {\n\n 'use strict';\n\n /**\n * ChartPieUtil.\n * @constructor\n */\n function ChartPieUtil() {\n var vm = this;\n\n vm.getPieChartObj = function (label, total, color) {\n return {\n key: angular.copy(label),\n y: angular.copy(total),\n color: color\n };\n };\n }\n\n /**\n *ChartPieController\n */\n function ChartPieController($scope, $translate, $window) {\n\n var vm = this;\n\n if (vm.height == undefined) {\n vm.height = 300;\n }\n\n if (vm.showLabels == undefined) {\n vm.showLabels = true;\n }\n\n if (vm.transitionDuration == undefined) {\n vm.transitionDuration = 500;\n }\n\n if (vm.showLegend == undefined) {\n vm.showLegend = true;\n }\n\n if (vm.showValueInLabel == undefined) {\n vm.showValueInLabel = true;\n }\n\n if (vm.titleTextKey == undefined) {\n vm.titleTextKey = \"\";\n }\n\n if (vm.subTitleTextKey == undefined) {\n vm.subTitleTextKey = \"\";\n }\n\n vm.geLocalizedText = function (key) {\n return ($translate.instant(key));\n };\n\n vm.init = function () {\n vm.watchLocaleChange();\n };\n\n /**\n * Watch for locale changes, and update chart, to translate labels.\n */\n vm.watchLocaleChange = function () {\n $scope.$watch(function () {\n return $window.localStorage.defaultLanguage;\n }, function () {\n if ($scope.api != undefined) {\n $scope.api.refresh();\n $scope.api.update();\n }\n });\n };\n\n vm.options = {\n chart: {\n type: 'pieChart',\n height: vm.height,\n x: function (d) {\n return vm.geLocalizedText(d.key);\n },\n y: function (d) {\n return d.y;\n },\n showLabels: (vm.showLabels == \"true\" || vm.showLabels == true) ? true : false,\n showLegend: (vm.showLegend == \"true\" || vm.showLegend == true) ? true : false,\n duration: vm.transitionDuration,\n labelThreshold: 0.01,\n labelSunbeamLayout: false,\n labelType: vm.showValueInLabel ? 'value' : 'key',\n valueFormat: function (d) {\n return d3.format(',.0f')(d);\n },\n legend: {\n margin: {\n top: 20,\n right: 0,\n bottom: 5,\n left: 0\n }\n },\n\n pie: {\n dispatch: {\n elementClick: function () {\n if (vm.chartClickFn) {\n vm.chartClickFn();\n }\n }\n }\n }\n }\n };\n\n vm.init();\n }\n\n\n function ChartPieDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'ChartPieController',\n transclude: true,\n templateUrl: \"app/components/template/chart-pie.html\",\n bindToController: true,\n scope: {\n height: '@?',\n showLabels: '@?',\n transitionDuration: '@?',\n showLegend: '@?',\n showValueInLabel: '@?',\n titleTextKey: '@',\n subTitleTextKey: '@',\n chartData: '=',\n chartClickFn: '&'\n\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('ChartPieController', ChartPieController)\n .service('ChartPieUtil', ChartPieUtil)\n .directive('chartPie', ChartPieDirective);\n})();\n\n/*eslint no-undef: 0*/\n(function () {\n\n 'use strict';\n\n /**\n * ChartBarUtil.\n * @constructor\n */\n function ChartMultiBarHorizontalUtil() {\n var vm = this;\n\n vm.getSerieObj = function (key, color, values, translateKey) {\n return {\n \"key\": key,\n \"color\": color,\n \"values\": values,\n \"translateKey\": translateKey\n }\n };\n\n vm.getSerieValueObj = function (label, value) {\n return {\n \"label\": label,\n \"value\": value\n }\n };\n }\n\n /**\n *ChartMultiBarHorizontalController\n */\n function ChartMultiBarHorizontalController($scope, $translate, $window, $interval) {\n\n var vm = this;\n\n if (angular.isUndefined(vm.chartStyle)) {\n vm.chartStyle = \"height: 80vh; width: 80vw;\";\n }\n\n if (angular.isUndefined(vm.showLegend)) {\n vm.showLegend = true;\n }\n\n if (angular.isUndefined(vm.showControls)) {\n vm.showControls = true;\n }\n\n if (angular.isUndefined(vm.showValues)) {\n vm.showValues = true;\n }\n\n if (angular.isUndefined(vm.transitionDuration)) {\n vm.transitionDuration = 500;\n }\n\n if (angular.isUndefined(vm.yAxisLabel)) {\n vm.yAxisLabel = \"\";\n }\n\n if (angular.isUndefined(vm.tickValues)) {\n vm.tickValues = 5;\n }\n\n if (angular.isUndefined(vm.titleTextKey)) {\n vm.titleTextKey = \"\";\n }\n\n if (angular.isUndefined(vm.subTitleTextKey)) {\n vm.subTitleTextKey = \"\";\n }\n\n vm.geLocalizedText = function (key) {\n return ($translate.instant(key));\n };\n\n vm.init = function () {\n vm.watchLocaleChange();\n vm.watchSlide();\n // Workaround to avoid worng width on chart.\n vm.watchChartstyle();\n $interval(updateChart, 1000, 1);\n };\n\n\n vm.watchChartstyle = function () {\n if (angular.isDefined(vm.chartStyle)) {\n $scope.$watch(\"ctrl.chartStyle\", function () {\n $interval(updateChart, 250, 1);\n });\n }\n };\n\n vm.watchSlide = function () {\n if (angular.isDefined(vm.activeFlag)) {\n $scope.$watch(\"ctrl.activeFlag\", function () {\n $interval(updateChart, 250, 1);\n });\n }\n };\n\n /**\n * Watch for locale changes, and update chart, to translate labels.\n */\n vm.watchLocaleChange = function () {\n $scope.$watch(function () {\n return $window.localStorage.defaultLanguage;\n }, function () {\n\n angular.forEach(vm.chartData, function (data) {\n data.key = vm.geLocalizedText(data.translateKey);\n });\n\n updateChart();\n\n });\n };\n\n function updateChart() {\n if ($scope.api != undefined) {\n $scope.api.refresh();\n $scope.api.update();\n }\n }\n\n vm.options = {\n chart: {\n type: 'multiBarHorizontalChart',\n showLegend: (vm.showLegend == \"true\" || vm.showLegend == true) ? true : false,\n showControls: (vm.showControls == \"true\" || vm.showControls == true) ? true : false,\n showValues: (vm.showValues == \"true\" || vm.showValues == true) ? true : false,\n valueFormat: function (d) {\n return d3.format(',.0f')(d);\n },\n margin: {\n top: 40,\n right: 10,\n bottom: 20,\n left: 230\n },\n x: function (d) {\n return d.label;\n },\n y: function (d) {\n return d.value;\n },\n duration: vm.transitionDuration,\n xAxis: {\n showMaxMin: false\n },\n yAxis: {\n axisLabel: vm.yAxisLabel,\n axisLabelDistance: -10,\n ticks: vm.tickValues,\n tickFormat: function (d) {\n return d3.format('.0f')(d);\n }\n },\n callback: function (chart) {\n chart.multibar.dispatch.on('elementClick', function () {\n if (angular.isDefined(vm.chartClickFn)) {\n vm.chartClickFn();\n }\n });\n }\n }\n };\n\n vm.init();\n }\n\n function ChartMultiBarHorizontalDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'ChartMultiBarHorizontalController',\n transclude: true,\n templateUrl: \"app/components/template/chart-multi-bar-horizontal.html\",\n bindToController: true,\n scope: {\n chartStyle: '=?',\n showLegend: '@?',\n showControls: '@?',\n showValues: '@?',\n transitionDuration: '@?',\n yAxisLabel: '@?',\n tickValues: '@?',\n titleTextKey: '@',\n subTitleTextKey: '@',\n chartData: '=',\n chartClickFn: '&',\n activeFlag: '='\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('ChartMultiBarHorizontalController', ChartMultiBarHorizontalController)\n .directive('chartMultiBarHorizontal', ChartMultiBarHorizontalDirective)\n .service('ChartMultiBarHorizontalUtil', ChartMultiBarHorizontalUtil);\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n * ChartGaugeUtil.\n * @constructor\n */\n function ChartGaugeUtil() {\n var vm = this;\n\n var red = \"#e44e4e\";\n var orange = \"#e4994e\";\n var blue = \"#4e4ee4\";\n var green = \"#4ee44e\"\n\n vm.value = 50;\n\n vm.getRangeItem = function (min, max, color) {\n return {\n min: min,\n max: max,\n color: color\n }\n };\n\n\n vm.getFirstPassYeldRange = function() {\n var ranges = [\n {\n min: 50,\n max: 85,\n color: red\n },\n {\n min: 85.1,\n max: 90,\n color: orange\n },\n {\n min: 90.1,\n max: 95,\n color: blue\n },\n {\n min: 95.1,\n max: 100,\n color: green\n }\n\n ];\n return ranges;\n };\n\n\n vm.getFinalPassYeldRange = function() {\n var ranges = [\n {\n min: 95,\n max: 99.5,\n color: red\n },\n {\n min: 99.51,\n max: 99.7,\n color: orange\n },\n {\n min: 99.71,\n max: 100,\n color: green\n }\n\n ];\n return ranges;\n };\n\n vm.getScrapRateRange = function() {\n var ranges = [\n {\n min: 0.0,\n max: 0.30,\n color: green\n },\n {\n min: 0.31,\n max: 0.45,\n color: orange\n },\n {\n min: 0.46,\n max: 0.60,\n color: red\n }\n\n ];\n return ranges;\n };\n\n }\n\n\n /**\n *ChartGaugeController\n */\n function ChartGaugeController(ChartGaugeUtil, $scope, $interval) {\n\n var vm = this;\n\n if(angular.isUndefined(vm.chartStyle)){\n vm.chartStyle = \"30vw\";\n }\n\n if (angular.isUndefined(vm.currentValue)) {\n vm.currentValue = 50;\n }\n\n if (angular.isUndefined(vm.upLimit)) {\n vm.upLimit = 100;\n } else {\n vm.upLimit = parseFloat(angular.copy(vm.upLimit));\n }\n\n if (angular.isUndefined(vm.loLimit)) {\n vm.loLimit = 0;\n } else {\n vm.loLimit = parseFloat(angular.copy(vm.loLimit));\n }\n\n vm.getchartLowerLimit = function() {\n return parseFloat(angular.copy(vm.chartTempLowerLimit));\n }\n\n vm.getchartUpperLimit = function() {\n return parseFloat(angular.copy(vm.chartTempLowerLimit));\n }\n\n if (angular.isUndefined(vm.unit)) {\n vm.unit = \"%\";\n }\n\n if (angular.isUndefined(vm.precision)) {\n vm.precision = 0;\n }\n\n if (angular.isUndefined(vm.ranges)) {\n vm.ranges = ChartGaugeUtil.getFirstPassYeldRange();\n }\n\n if (angular.isUndefined(vm.titleTextKey)) {\n vm.titleTextKey = \"\";\n }\n\n if (angular.isUndefined(vm.subTitleTextKey)) {\n vm.subTitleTextKey = \"\";\n }\n\n if (angular.isUndefined(vm.showLegend)) {\n vm.showLegend = true;\n }\n\n if (angular.isUndefined(vm.chartMajorGraduations)) {\n vm.chartMajorGraduations = 5;\n } else{\n vm.chartMajorGraduations = angular.copy(parseInt(vm.chartMajorGraduations));\n }\n\n if(angular.isUndefined(vm.chartMajorGraduationPrecision)){\n vm.chartMajorGraduationPrecision = 0;\n } else {\n vm.chartMajorGraduationPrecision = angular.copy(parseInt(vm.chartMajorGraduationPrecision));\n }\n\n if (angular.isUndefined(vm.chartMajorGraduationTextSize)) {\n vm.chartMajorGraduationTextSize = \"default\";\n } else {\n vm.chartMajorGraduationTextSize = angular.copy(parseInt(vm.chartMajorGraduationTextSize));\n }\n\n if(angular.isUndefined(vm.chartNeedleValueTextSize)){\n vm.chartNeedleValueTextSize = \"default\";\n }else {\n vm.chartNeedleValueTextSize = angular.copy(parseInt(vm.chartNeedleValueTextSize));\n }\n\n if(angular.isUndefined(vm.chartAngle)){\n vm.chartAngle = \"120\";\n }\n\n\n\n\n vm.boolIsTrue = function(value) {\n return (value == \"true\" || value == true) ? true : false;\n };\n\n\n vm.getLegendText = function(legend) {\n return legend.min + vm.unit + \" - \" + legend.max + vm.unit ;\n };\n\n vm.getLegendStyle = function(legend) {\n var legendCss = \"background-color: #Color; padding : 3px 7px 5px 7px; font-weight: bold; font-size: 0.9vw;\"\n return legendCss.replace(\"#Color\", legend.color);\n }\n\n\n vm.getParentLegendStyle = function(index) {\n var style = \"display: inline-block; \";\n if( index > 0 ){\n style += \" margin-left: 5px;\";\n }\n return style;\n };\n\n\n function init() {\n watchSlide();\n watchChartstyle();\n }\n\n function watchChartstyle() {\n if (angular.isDefined(vm.chartStyle)) {\n $scope.$watch(\"ctrl.chartStyle\", function () {\n updateChart();\n });\n }\n }\n\n function watchSlide() {\n if (angular.isDefined(vm.activeFlag)) {\n $scope.$watch(\"ctrl.activeFlag\", function () {\n updateChart();\n });\n }\n }\n\n vm.isSHow = true;\n function updateChart() {\n vm.isSHow = false;\n $interval(showChart, 100, 1);\n }\n\n function showChart(){\n vm.isSHow = true;\n }\n\n init();\n }\n\n function ChartGaugeDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'ChartGaugeController',\n transclude: true,\n templateUrl: \"app/components/template/chart-gauge.html\",\n bindToController: true,\n scope: {\n chartStyle: '=?',\n currentValue: '=?',\n upLimit: '=?',\n loLimit: '=?',\n unit: '@?',\n precision: '@?',\n ranges: '=?',\n showLegend: '@?',\n titleTextKey: '@?',\n subTitleTextKey: '@?',\n chartMajorGraduations: '@?',\n chartMajorGraduationTextSize: '@?',\n chartMajorGraduationPrecision: '@?',\n chartNeedleValueTextSize: '@?',\n chartAngle: '@?',\n activeFlag: '='\n\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('ChartGaugeController', ChartGaugeController)\n .directive('chartGauge', ChartGaugeDirective)\n .service('ChartGaugeUtil', ChartGaugeUtil);\n})();\n\n/*eslint no-undef: 0*/\n(function () {\n\n 'use strict';\n\n /**\n * ChartBarUtil.\n * @constructor\n */\n function ChartBarUtil() {\n var vm = this;\n\n vm.getBarChartObj = function (label, labelEn, value, color) {\n return {\n label: label,\n labelEn: labelEn,\n value: value,\n color: color\n };\n };\n }\n\n /**\n *ChartBarController\n */\n function ChartBarController($scope, $translate, $window, $interval) {\n\n var vm = this;\n var currentLocale = $window.localStorage.defaultLanguage;\n\n if (vm.height == undefined) {\n vm.height = 300;\n }\n\n if (angular.isUndefined(vm.showValues)) {\n vm.showValues = true;\n }\n\n if (vm.transitionDuration == undefined) {\n vm.transitionDuration = 500;\n }\n\n if (vm.xAxisLabel == undefined) {\n vm.xAxisLabel = \"\";\n }\n\n if (angular.isUndefined(vm.labelX)) {\n vm.labelX = \"\";\n }\n\n if (vm.yAxisLabel == undefined) {\n vm.yAxisLabel = \"\";\n }\n\n if (vm.tickValues == undefined) {\n vm.tickValues = 5;\n }\n\n if (vm.titleTextKey == undefined) {\n vm.titleTextKey = \"\";\n }\n\n if (vm.subTitleTextKey == undefined) {\n vm.subTitleTextKey = \"\";\n }\n\n if (angular.isUndefined(vm.marginTopTitle)) {\n vm.marginTopTitle = 15;\n }\n\n if (angular.isUndefined(vm.fontSizeTitle)) {\n vm.fontSizeTitle = 25;\n }\n\n if (angular.isUndefined(vm.chartStyle)) {\n vm.chartStyle = \"height: 450px; width: 100%\";\n }\n\n if (angular.isUndefined(vm.rotateAngleXAxisLabel)) {\n vm.rotateAngleXAxisLabel = \"0\";\n }\n\n if (angular.isUndefined(vm.bottomChartMargin)) {\n vm.bottomChartMargin = \"50\";\n }\n\n if (angular.isUndefined(vm.showLegend)) {\n vm.showLegend = false;\n }\n\n vm.geLocalizedText = function (key) {\n return ($translate.instant(key));\n };\n\n vm.init = function () {\n vm.watchLocaleChange();\n vm.watchSlide();\n vm.watchChartstyle();\n $interval(updateChart, 250, 1);\n };\n\n /**\n * Watch for locale changes, and update chart, to translate labels.\n */\n vm.watchLocaleChange = function () {\n $scope.$watch(function () {\n currentLocale = $window.localStorage.defaultLanguage;\n return $window.localStorage.defaultLanguage;\n }, function () {\n updateChart();\n vm.options.chart.xAxis.axisLabel = vm.geLocalizedText(vm.labelX)\n });\n };\n\n function updateChart() {\n if ($scope.api != undefined) {\n $scope.api.refresh();\n $scope.api.update();\n }\n }\n\n vm.watchChartstyle = function () {\n if (angular.isDefined(vm.chartStyle)) {\n $scope.$watch(\"ctrl.chartStyle\", function () {\n $interval(updateChart, 250, 1);\n });\n }\n };\n\n vm.watchSlide = function () {\n if (angular.isDefined(vm.activeFlag)) {\n $scope.$watch(\"ctrl.activeFlag\", function () {\n $interval(updateChart, 250, 1);\n });\n }\n };\n\n /**\n * rotateAngleXAxisLabel: '@?',\n xAxisMarginBottom: '@?',\n */\n vm.options = {\n chart: {\n showLabels: true,\n showLegend: vm.showLegend,\n type: 'discreteBarChart',\n showDistY: true,\n\n margin: {\n top: 20,\n right: 20,\n bottom: parseInt(vm.bottomChartMargin),\n left: 55\n },\n bars: {\n forceY: [0]\n },\n x: function (d) {\n return vm.geLocalizedText(angular.isDefined(d.labelEn) ? (currentLocale == \"en\") ? d.labelEn : d.label : d.label);\n },\n y: function (d) {\n return d.value;\n },\n showValues: vm.showValues,\n valueFormat: function (d) {\n return d3.format(',.0f')(d);\n },\n duration: vm.transitionDuration,\n xAxis: {\n axisLabel: vm.geLocalizedText(vm.labelX),\n axisLabelDistance: 10,\n rotateLabels: vm.rotateAngleXAxisLabel\n },\n yAxis: {\n axisLabel: vm.geLocalizedText(vm.yAxisLabel),\n axisLabelDistance: -15,\n tickFormat: (d3.format('.0f')),\n ticks: vm.tickValues,\n showMaxMin: false\n },\n discretebar: {\n dispatch: {\n elementClick: function () {\n vm.chartClickFn()\n }\n }\n }\n }\n };\n\n vm.init();\n }\n\n function ChartBarDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'ChartBarController',\n transclude: true,\n templateUrl: \"app/components/template/chart-bar.html\",\n bindToController: true,\n scope: {\n chartStyle: '=?',\n showValues: '@?',\n transitionDuration: '@?',\n rotateAngleXAxisLabel: '@?',\n bottomChartMargin: '@?',\n xAxisLabel: '@?',\n yAxisLabel: '@?',\n tickValues: '@?',\n titleTextKey: '@',\n subTitleTextKey: '@',\n chartData: '=',\n chartClickFn: '&',\n activeFlag: '=',\n labelX: '@?',\n fontSizeTitle: '@?',\n marginTopTitle: '@?',\n showLegend: '@?'\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('ChartBarController', ChartBarController)\n .directive('chartBar', ChartBarDirective)\n .service('ChartBarUtil', ChartBarUtil);\n})();\n\n/**\n * Created by mateus.said on 17/03/2017.\n */\n(function () {\n\n 'use strict';\n\n function CarouselUtil() {\n var vm = this;\n /**\n * return an object item to auto interval options list.\n * @param description\n * @param valueInMinutes\n * @returns {{name: *, value: number}}\n */\n vm.getAutoIntervalListItem = function (description, valueInMinutes) {\n return {\n name: description,\n value: (valueInMinutes * 60 * 1000)\n };\n\n };\n }\n\n\n /**\n *ChartBarController\n */\n function CarouselController($translate, $interval,$document, ToastUtil) {\n var vm = this;\n\n /**\n * This attr is filled by carousel-item and is used to prevent auto swipe when mouse is over slide.\n *\n * @type {boolean}\n */\n vm.isMouseOver = false;\n\n vm.isLockSlide = false;\n\n var intervalEvent = null;\n vm.animateClass = \"animated zoomInUp\";\n\n\n if (angular.isUndefined(vm.height)) {\n vm.height = 450;\n }\n if (angular.isUndefined(vm.width)) {\n vm.width = 450;\n }\n if (angular.isUndefined(vm.carouselId)) {\n vm.carouselId = \"carouselId\";\n }\n\n if (angular.isUndefined(vm.current)) {\n vm.current = 0;\n } else {\n vm.current = parseInt(vm.current);\n }\n\n if (angular.isUndefined(vm.infiniteList)) {\n vm.infiniteList = true;\n }\n\n if (angular.isUndefined(vm.autoSwipeIntervalList)) {\n\n vm.autoSwipeIntervalList = [\n {name: '10 seg', value: (1 * 10 * 1000)},\n {name: '20 seg', value: (1 * 20 * 1000)},\n {name: '01 min', value: (1 * 60 * 1000)},\n {name: '02 min', value: (2 * 60 * 1000)\n }];\n\n vm.autoIntervalModel = vm.autoSwipeIntervalList[0];\n } else {\n vm.autoIntervalModel = vm.autoSwipeIntervalList[0];\n }\n\n if( angular.isUndefined(vm.showAutoSwipeControl) ){\n vm.showAutoSwipeControl = \"true\";\n }\n\n\n if (angular.isUndefined(vm.list)) {\n vm.listSize = 0;\n } else {\n vm.listSize = vm.list.length;\n }\n\n\n if (angular.isUndefined(vm.showLockOption)) {\n vm.showLockOption = \"true\";\n }\n\n if (angular.isUndefined(vm.enableLockOnMouseOver)) {\n vm.enableLockOnMouseOver = false;\n }\n\n vm.fullScreen = function (elem) {\n\n var element = $document[0].getElementById(elem);\n\n if (angular.isDefined(element.mozRequestFullScreen)) {\n element.mozRequestFullScreen();\n } else if (angular.isDefined(element.webkitRequestFullscreen)) {\n element.webkitRequestFullscreen();\n } else if (angular.isDefined(element.msRequestFullscreen)) {\n element.msRequestFullscreen();\n } else {\n ToastUtil.showToastMessage($translate.instant('fullscreen.error'), ToastUtil.ToastType.ERROR);\n }\n }\n\n vm.exitFullScreen = function () {\n\n if ($document[0].mozCancelFullScreen) {\n $document[0].mozCancelFullScreen();\n } else if ($document[0].webkitExitFullscreen) {\n $document[0].webkitExitFullscreen();\n } else if($document[0].msExitFullscreen){\n $document[0].msExitFullscreen();\n }\n }\n\n /**\n * Function to slide (next)\n */\n vm.nextSlide = function () {\n vm.animateClass = \"animated bounceInRight\";\n vm.updateListSize();\n var newPosition = parseInt(vm.current) + 1;\n if (newPosition < vm.listSize) {\n vm.current = newPosition;\n\n } else if (isInfiniteList()) {\n vm.current = 0;\n }\n slideEndFn();\n };\n\n\n /**\n * Function to slide (previous)\n */\n vm.prevSlide = function () {\n vm.animateClass = \"animated bounceInLeft\";\n vm.updateListSize();\n var newPosition = parseInt(vm.current) - 1;\n if (newPosition >= 0) {\n vm.current = newPosition;\n } else if (isInfiniteList()) {\n vm.current = (vm.listSize - 1);\n }\n slideEndFn();\n\n };\n\n\n /**\n * Update list size.\n */\n vm.updateListSize = function () {\n var newLength = vm.list.length;\n if (vm.listSize != newLength) {\n vm.listSize = newLength;\n if (!vm.isLockSlide || vm.current > vm.listSize) {\n vm.current = 0;\n vm.isLockSlide = false;\n }\n callSwipeListener();\n }\n };\n\n\n vm.carouselClicked = function () {\n if (angular.isDefined(vm.clickFn)) {\n vm.clickFn();\n }\n };\n\n function init() {\n if (vm.autoIntervalModel.value > 0) {\n setIntervalEvent();\n }\n }\n\n /**\n * Function called on slide (next, prev) ends to call listeners and reset animation.\n */\n function slideEndFn() {\n callSwipeListener();\n $interval(resetAnimation, 500, 1);\n }\n\n /**\n * Set an empty class to reset animation.\n */\n function resetAnimation() {\n vm.animateClass = \"\";\n }\n\n /**\n * Listener to swipe.\n */\n function callSwipeListener() {\n if (angular.isDefined(vm.swipeListenerFn)) {\n vm.swipeListenerFn();\n }\n }\n\n /**\n * Set interval event to auto swipe.\n */\n function setIntervalEvent() {\n intervalEvent = $interval(autoSwipe, vm.autoIntervalModel.value);\n }\n\n /**\n * Resets interval event when slide is changed.\n */\n vm.resetIntervalEvent = function () {\n if (intervalEvent != null) {\n $interval.cancel(intervalEvent);\n setIntervalEvent();\n }\n };\n\n /**\n * Function to Auto Swipe slides.\n */\n function autoSwipe() {\n if (!vm.isLockSlide && vm.listSize > 1) {\n if ((vm.boolIsTrue(vm.enableLockOnMouseOver) && vm.isMouseOver)) {\n return;\n }\n vm.nextSlide();\n }\n }\n\n vm.boolIsTrue = function(itemBool) {\n return (itemBool == \"true\" || itemBool == true) ? true : false;\n };\n\n /**\n * Method to check if list is infinite\n * @returns {boolean}\n */\n function isInfiniteList() {\n return (vm.infiniteList == \"true\" || vm.infiniteList == true) ? true : false;\n }\n\n init();\n }\n\n function CarouselDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'CarouselController',\n transclude: {\n 'controls': '?carouselControl',\n 'body': 'carouselBody'\n },\n templateUrl: \"app/components/template/carousel.html\",\n bindToController: true,\n scope: {\n height: '@?',\n width: '@?',\n list: '=',\n infiniteList: '@?',\n autoSwipeIntervalList: '=?',\n showAutoSwipeControl: '@?',\n titleKey: '@?',\n carouselId: '@?',\n showLockOption: '@?',\n enableLockOnMouseOver: '@?',\n current: '=?',\n clickFn: '&?',\n swipeListenerFn: '&?'\n\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('CarouselController', CarouselController)\n .service('CarouselUtil', CarouselUtil)\n .directive('carouselDir', CarouselDirective);\n})();\n\n/**\n * Created by mateus.said on 17/03/2017.\n */\n(function () {\n\n 'use strict';\n\n function CarouselUtil() {\n var vm = this;\n /**\n * return an object item to auto interval options list.\n * @param description\n * @param valueInMinutes\n * @returns {{name: *, value: number}}\n */\n vm.getAutoIntervalListItem = function (description, valueInMinutes) {\n return {\n name: description,\n value: (valueInMinutes * 60 * 1000)\n };\n\n };\n }\n\n\n /**\n *ChartBarController\n */\n function CarouselMultipleController($scope, $translate, $interval, $document, ToastUtil) {\n var vm = this;\n\n /**\n * This attr is filled by carousel-item and is used to prevent auto swipe when mouse is over slide.\n *\n * @type {boolean}\n */\n vm.isMouseOver = false;\n\n vm.isLockSlide = false;\n\n vm.animateClass = \"animated zoomInUp\";\n\n vm.fullScreen = function (elem) {\n\n var element = $document[0].getElementById(elem);\n\n if (angular.isDefined(element.mozRequestFullScreen)) {\n element.mozRequestFullScreen();\n } else if (angular.isDefined(element.webkitRequestFullscreen)) {\n element.webkitRequestFullscreen();\n } else if (angular.isDefined(element.msRequestFullscreen)) {\n element.msRequestFullscreen();\n } else {\n ToastUtil.showToastMessage($translate.instant('fullscreen.error'), ToastUtil.ToastType.ERROR);\n }\n }\n\n vm.exitFullScreen = function () {\n\n if ($document[0].mozCancelFullScreen) {\n $document[0].mozCancelFullScreen();\n } else if ($document[0].webkitExitFullscreen) {\n $document[0].webkitExitFullscreen();\n } else if ($document[0].msExitFullscreen) {\n $document[0].msExitFullscreen();\n }\n }\n\n /**\n * Function to slide (next)\n */\n vm.nextSlide = function () {\n vm.animateClass = \"animated bounceInRight\";\n vm.updateListSize();\n var newPosition = vm.listChartTypes[1].TYPE;\n if (newPosition < vm.listSize) {\n moveChart(newPosition);\n } else if (isInfiniteList()) {\n vm.current = vm.chartList[0].TYPE;\n }\n slideEndFn();\n };\n\n /**\n * Function to slide (previous)\n */\n vm.prevSlide = function () {\n vm.animateClass = \"animated bounceInLeft\";\n vm.updateListSize();\n var newPosition = 0;\n if ((vm.current - 1) >= 0) {\n newPosition = vm.chartList[vm.current - 1].TYPE;\n } else {\n newPosition = vm.chartList[vm.chartList.length - 1].TYPE;\n }\n if (newPosition >= 0) {\n moveChart(newPosition);\n } else if (isInfiniteList()) {\n vm.current = (vm.listSize - 1);\n }\n slideEndFn();\n\n };\n\n /**\n * Update list size.\n */\n vm.updateListSize = function () {\n var newLength = vm.chartList.length;\n if (vm.listSize != newLength) {\n vm.listSize = newLength;\n if (!vm.isLockSlide || vm.current > vm.listSize) {\n vm.current = 0;\n vm.isLockSlide = false;\n }\n callSwipeListener();\n }\n };\n\n vm.carouselClicked = function () {\n if (angular.isDefined(vm.clickFn)) {\n vm.clickFn();\n }\n };\n\n vm.getClassActive = function (index) {\n if (vm.listChartTypes[index].ACTIVE) {\n return \"active\";\n }\n }\n\n vm.changeChart = function (index) {\n var newPosition;\n vm.animateClass = \"animated bounceInRight\";\n vm.updateListSize();\n if (index > vm.current) {\n newPosition = vm.chartList[index].TYPE;\n if (newPosition < vm.listSize) {\n var cont = 0;\n for (var i = 0; i < vm.listChartTypes.length; i++) {\n if (angular.isDefined(vm.chartList[newPosition + i])) {\n vm.listChartTypes[i] = angular.copy(vm.chartList[newPosition + i]);\n vm.listChartTypes[i].ACTIVE = false;\n } else {\n vm.listChartTypes[i] = angular.copy(vm.chartList[cont]);\n vm.listChartTypes[i].ACTIVE = false;\n cont++;\n }\n }\n vm.listChartTypes[0].ACTIVE = true;\n vm.current = vm.listChartTypes[0].TYPE;\n } else if (isInfiniteList()) {\n vm.current = 0;\n }\n slideEndFn();\n } else if (index < vm.current) {\n moveChart(index);\n slideEndFn();\n }\n\n }\n\n vm.boolIsTrue = function (itemBool) {\n return (itemBool == \"true\" || itemBool == true) ? true : false;\n };\n\n function loadCarousel() {\n if (angular.isUndefined(vm.form)) {\n vm.form = null;\n }\n\n if (angular.isUndefined(vm.height)) {\n vm.height = 450;\n }\n\n if (angular.isUndefined(vm.width)) {\n vm.width = 450;\n }\n\n if (angular.isUndefined(vm.carouselId)) {\n vm.carouselId = \"carouselId\";\n }\n\n if (angular.isUndefined(vm.current)) {\n vm.current = 0;\n } else {\n vm.current = parseInt(vm.current);\n }\n\n if (angular.isUndefined(vm.infiniteList)) {\n vm.infiniteList = true;\n }\n\n if (angular.isUndefined(vm.list)) {\n vm.listSize = 0;\n } else {\n vm.listSize = vm.chartList.length;\n }\n\n if (angular.isUndefined(vm.chartList)) {\n vm.chartList = [];\n } else {\n if (vm.chartList.length > 0) {\n vm.listChartTypes = null;\n\n if (vm.chartList.length > 3)\n vm.listChartTypes = Array(4).fill(null);\n else\n vm.listChartTypes = Array(vm.chartList.length).fill(null);\n\n for (var i = 0; i < vm.listChartTypes.length; i++) {\n vm.listChartTypes[i] = angular.copy(vm.chartList[i]);\n vm.listChartTypes[i].ACTIVE = false;\n }\n vm.listChartTypes[0].ACTIVE = true;\n }\n }\n\n if (angular.isUndefined(vm.showLockOption)) {\n vm.showLockOption = \"true\";\n }\n\n if (angular.isUndefined(vm.enableLockOnMouseOver)) {\n vm.enableLockOnMouseOver = false;\n }\n }\n /**\n * Listener to swipe.\n */\n function callSwipeListener() {\n if (angular.isDefined(vm.swipeListenerFn)) {\n if (angular.isDefined(vm.form) || vm.form.$valid) {\n vm.swipeListenerFn();\n }\n }\n }\n\n function moveChart(position) {\n var newPosition = angular.copy(position);\n var cont = 0;\n for (var i = 0; i < vm.listChartTypes.length; i++) {\n if (angular.isDefined(vm.chartList[newPosition + i])) {\n vm.listChartTypes[i] = angular.copy(vm.chartList[newPosition + i]);\n vm.listChartTypes[i].ACTIVE = false;\n } else {\n vm.listChartTypes[i] = angular.copy(vm.chartList[cont]);\n vm.listChartTypes[i].ACTIVE = false;\n cont++;\n }\n }\n vm.listChartTypes[0].ACTIVE = true;\n vm.current = vm.listChartTypes[0].TYPE;\n }\n\n /**\n * Function called on slide (next, prev) ends to call listeners and reset animation.\n */\n function slideEndFn() {\n callSwipeListener();\n $interval(resetAnimation, 500, 1);\n }\n\n /**\n * Set an empty class to reset animation.\n */\n function resetAnimation() {\n vm.animateClass = \"\";\n }\n\n /**\n * Method to check if list is infinite\n * @returns {boolean}\n */\n function isInfiniteList() {\n return (vm.infiniteList == \"true\" || vm.infiniteList == true) ? true : false;\n }\n\n function watchListVariantObj() {\n $scope.$watch(\"ctrl.chartList\", function (newValue) {\n if (newValue) {\n loadCarousel();\n }\n });\n }\n\n function init() {\n loadCarousel();\n watchListVariantObj();\n }\n\n init();\n }\n\n function CarouselMultipleDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'CarouselMultipleController',\n transclude: {\n 'controls': '?carouselControl',\n 'body': 'carouselBody'\n },\n templateUrl: \"app/components/template/carousel-multiple.html\",\n bindToController: true,\n scope: {\n height: '@?',\n width: '@?',\n list: '=',\n infiniteList: '@?',\n showAutoSwipeControl: '@?',\n chartList: '=',\n carouselId: '@?',\n showLockOption: '@?',\n enableLockOnMouseOver: '@?',\n current: '=?',\n clickFn: '&?',\n swipeListenerFn: '&?',\n year: '=?',\n form: '=?'\n\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('CarouselMultipleController', CarouselMultipleController)\n .service('CarouselUtil', CarouselUtil)\n .directive('carouselMultiple', CarouselMultipleDirective);\n})();\n\n(function () {\n\n 'use strict';\n\n function CarouselUtil() {\n var vm = this;\n /**\n * return an object item to auto interval options list.\n * @param description\n * @param valueInMinutes\n * @returns {{name: *, value: number}}\n */\n vm.getAutoIntervalListItem = function (description, valueInMinutes) {\n return {\n name: description,\n value: (valueInMinutes * 60 * 1000)\n };\n\n };\n }\n\n\n /**\n *ChartBarController\n */\n function CarouselMultipleContractController($translate, $interval,$document, ToastUtil) {\n var vm = this;\n\n /**\n * This attr is filled by carousel-item and is used to prevent auto swipe when mouse is over slide.\n *\n * @type {boolean}\n */\n vm.isMouseOver = false;\n\n vm.isLockSlide = false;\n\n vm.animateClass = \"animated zoomInUp\";\n\n\n if (angular.isUndefined(vm.height)) {\n vm.height = 450;\n }\n if (angular.isUndefined(vm.width)) {\n vm.width = 450;\n }\n if (angular.isUndefined(vm.carouselId)) {\n vm.carouselId = \"carouselId\";\n }\n\n if (angular.isUndefined(vm.current)) {\n vm.current = 0;\n } else {\n vm.current = parseInt(vm.current);\n }\n\n if (angular.isUndefined(vm.infiniteList)) {\n vm.infiniteList = true;\n }\n\n if (angular.isUndefined(vm.list)) {\n vm.listSize = 0;\n } else {\n vm.listSize = vm.chartList.length;\n }\n\n if (angular.isUndefined(vm.chartList)) {\n vm.chartList = [];\n }\n\n if (angular.isUndefined(vm.showLockOption)) {\n vm.showLockOption = \"true\";\n }\n\n if (angular.isUndefined(vm.enableLockOnMouseOver)) {\n vm.enableLockOnMouseOver = false;\n }\n\n vm.fullScreen = function (elem) {\n\n var element = $document[0].getElementById(elem);\n\n if (angular.isDefined(element.mozRequestFullScreen)) {\n element.mozRequestFullScreen();\n } else if (angular.isDefined(element.webkitRequestFullscreen)) {\n element.webkitRequestFullscreen();\n } else if (angular.isDefined(element.msRequestFullscreen)) {\n element.msRequestFullscreen();\n } else {\n ToastUtil.showToastMessage($translate.instant('fullscreen.error'), ToastUtil.ToastType.ERROR);\n }\n }\n\n vm.exitFullScreen = function () {\n\n if ($document[0].mozCancelFullScreen) {\n $document[0].mozCancelFullScreen();\n } else if ($document[0].webkitExitFullscreen) {\n $document[0].webkitExitFullscreen();\n } else if($document[0].msExitFullscreen){\n $document[0].msExitFullscreen();\n }\n }\n\n /**\n * Function to slide (next)\n */\n vm.nextSlide = function () {\n vm.animateClass = \"animated bounceInRight\";\n vm.updateListSize();\n var newPosition = parseInt(vm.current) + 1;\n if (newPosition < vm.listSize) {\n vm.current = newPosition;\n\n } else if (isInfiniteList()) {\n vm.current = 0;\n }\n slideEndFn();\n };\n\n\n /**\n * Function to slide (previous)\n */\n vm.prevSlide = function () {\n vm.animateClass = \"animated bounceInLeft\";\n vm.updateListSize();\n var newPosition = parseInt(vm.current) - 1;\n if (newPosition >= 0) {\n vm.current = newPosition;\n } else if (isInfiniteList()) {\n vm.current = (vm.listSize - 1);\n }\n slideEndFn();\n\n };\n\n\n /**\n * Update list size.\n */\n vm.updateListSize = function () {\n var newLength = vm.chartList.length;\n if (vm.listSize != newLength) {\n vm.listSize = newLength;\n if (!vm.isLockSlide || vm.current > vm.listSize) {\n vm.current = 0;\n vm.isLockSlide = false;\n }\n // callSwipeListener();\n }\n };\n\n\n vm.carouselClicked = function () {\n if (angular.isDefined(vm.clickFn)) {\n vm.clickFn();\n }\n };\n\n vm.getClassActive = function (index) {\n if ( vm.current == index ) {\n return \"active\";\n }\n }\n\n vm.changeChart = function(index) {\n var newPosition;\n if ( index > vm.current ) {\n vm.animateClass = \"animated bounceInRight\";\n vm.updateListSize();\n newPosition = index;\n if (newPosition < vm.listSize) {\n vm.current = newPosition;\n } else if (isInfiniteList()) {\n vm.current = 0;\n }\n slideEndFn();\n } else if ( index < vm.current ) {\n vm.animateClass = \"animated bounceInLeft\";\n vm.updateListSize();\n newPosition = index;\n if (newPosition >= 0) {\n vm.current = newPosition;\n } else if (isInfiniteList()) {\n vm.current = (vm.listSize - 1);\n }\n slideEndFn();\n }\n\n }\n\n function init() {\n\n }\n\n /**\n * Function called on slide (next, prev) ends to call listeners and reset animation.\n */\n function slideEndFn() {\n // callSwipeListener();\n $interval(resetAnimation, 500, 1);\n }\n\n /**\n * Set an empty class to reset animation.\n */\n function resetAnimation() {\n vm.animateClass = \"\";\n }\n\n vm.boolIsTrue = function(itemBool) {\n return (itemBool == \"true\" || itemBool == true) ? true : false;\n };\n\n /**\n * Method to check if list is infinite\n * @returns {boolean}\n */\n function isInfiniteList() {\n return (vm.infiniteList == \"true\" || vm.infiniteList == true) ? true : false;\n }\n\n init();\n }\n\n function CarouselMultipleContractDirective() {\n return {\n restrict: 'E',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'CarouselMultipleContractController',\n transclude: {\n 'controls': '?carouselControl',\n 'body': 'carouselBody'\n },\n templateUrl: \"app/components/template/carousel-multiple-contract.html\",\n bindToController: true,\n scope: {\n height: '@?',\n width: '@?',\n list: '=',\n infiniteList: '@?',\n showAutoSwipeControl: '@?',\n chartList: '=',\n carouselId: '@?',\n showLockOption: '@?',\n enableLockOnMouseOver: '@?',\n current: '=?',\n clickFn: '&?',\n swipeListenerFn: '&?',\n year: '=?'\n\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('CarouselMultipleContractController', CarouselMultipleContractController)\n .service('CarouselUtil', CarouselUtil)\n .directive('carouselMultipleContract', CarouselMultipleContractDirective);\n})();\n\n/**\n * Created by mateus.said on 17/03/2017.\n */\n(function () {\n\n 'use strict';\n\n /**\n *CarouselItemController\n */\n function CarouselItemController($scope) {\n var vm = this;\n\n vm.current = $scope.$parent.$parent.$parent.ctrl.current;\n\n vm.mouseOverIn = function () {\n $scope.$parent.$parent.$parent.ctrl.isMouseOver = true;\n };\n\n vm.mouseOverOut = function () {\n $scope.$parent.$parent.$parent.ctrl.isMouseOver = false;\n };\n\n function init() {\n watchCurrentValue();\n watchListParent();\n watchSwipeInterval();\n }\n\n /**\n * Watch list to update listSize and current (slide) in parent.\n */\n function watchListParent() {\n $scope.$watch(function () {\n return $scope.$parent.$parent.$parent.ctrl.list;\n }, function () {\n $scope.$parent.$parent.$parent.ctrl.updateListSize();\n });\n }\n\n function watchSwipeInterval() {\n if( angular.isUndefined(vm.autoSwipe) ){\n $scope.$watch(function () {\n return $scope.$parent.$parent.$parent.ctrl.autoIntervalModel;\n }, function () {\n $scope.$parent.$parent.$parent.ctrl.resetIntervalEvent();\n });\n }\n }\n\n /**\n * Watch to update current attrinbute in parent.\n */\n function watchCurrentValue() {\n $scope.$watch(function () {\n return $scope.$parent.$parent.$parent.ctrl.current;\n }, function () {\n vm.current = $scope.$parent.$parent.$parent.ctrl.current;\n });\n }\n\n init();\n }\n\n function CarouselItemDirective() {\n return {\n restrict: 'EA',\n replace: true,\n controllerAs: 'ctrl',\n controller: 'CarouselItemController',\n transclude: true,\n templateUrl: \"app/components/template/carousel-item.html\",\n bindToController: true,\n scope: {\n index: '@',\n autoSwipe: '=?'\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('CarouselItemController', CarouselItemController)\n .directive('carouselItem', CarouselItemDirective);\n})();\n\n/**\n * Copyright (c) 2015 nclsptrs\n * https://github.com/nclsptrs/angular-clear-input\n */\n(function () {\n\n 'use strict';\n /** @ngInject */\n function clearable($interval, $document) {\n var directive = {\n restrict: 'A',\n scope: {\n clearableModel: '=?'\n },\n require: 'ngModel',\n link: link\n };\n\n var style = $document[0].createElement('style');\n style.type = 'text/css';\n style.innerHTML =\n '.clearable {' +\n 'background-image: url(data:image/gif;base64,R0lGODlhBwAHAIAAAP///5KSkiH5BAAAAAAALAAAAAAHAAcAAAIMTICmsGrIXnLxuDMLADs=);' +\n 'background-repeat: no-repeat;' +\n 'background-attachment: initial;' +\n 'background-position: right -10px center;' +\n '}' +\n '.clearable.x {' +\n 'transition: background 0.2s;' +\n 'background-position: right 10px center;' +\n '}' +\n '.clearable.onX {' +\n 'cursor: pointer;' +\n '}';\n\n $document[0].getElementsByTagName('head')[0].appendChild(style);\n\n function link(scope, elem, attrs, ctrl) {\n\n\n function addOrRemoveClass() {\n elem[toggleClass(elem.val())]('x');\n }\n\n scope.$watch(\"clearableModel\", function () {\n $interval(addOrRemoveClass, 500, 10);\n })\n\n elem.addClass('clearable');\n\n elem.bind('input', function () {\n elem[toggleClass(elem.val())]('x');\n });\n\n elem.on('mousemove', function (e) {\n if (elem.hasClass('x')) {\n elem[toggleClass(this.offsetWidth - 25 < e.clientX - this.getBoundingClientRect().left)]('onX');\n }\n });\n\n elem.bind('keydown', function (event) {\n var code = event.keyCode;\n if (code === 27) {\n elem.removeClass('x onX').val(undefined);\n ctrl.$setViewValue(undefined);\n ctrl.$render();\n scope.$digest();\n addOrRemoveClass();\n event.preventDefault();\n }\n });\n\n elem.on('click', function () {\n if (elem.hasClass('onX')) {\n elem.removeClass('x onX').val(undefined);\n ctrl.$setViewValue(undefined);\n ctrl.$render();\n scope.$digest();\n addOrRemoveClass();\n }\n });\n\n function toggleClass(v) {\n return v ? 'addClass' : 'removeClass';\n }\n }\n\n return directive;\n\n }\n\n angular.module('aqmsFrontend')\n .directive('clearable', clearable);\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n * ### ### #####-#### as c area front-end\n */\n function PhoneNumberFilter() {\n return function (number) {\n\n if (!number) { return ''; }\n\n number = String(number);\n var formattedNumber = number;\n\n var country = number.substring(0, 3);\n number = number.slice(3);\n\n var area = number.substring(0, 3);\n number = number.slice(3);\n\n var frontSize = number.length > 8 ? 5 : 4, front = number.substring(0, frontSize), end = number.slice(frontSize);\n\n formattedNumber = (\"+\" + country + \" \" + area + \" \" + front + \"-\" + end);\n\n return formattedNumber;\n }\n }\n\n angular.module('aqmsFrontend').filter('phonenumber',\n PhoneNumberFilter);\n})();\n\n(function() {\n\n\t'use strict';\n\n\t/**\n\t *\n\t */\n\tfunction RemarkChecklistVersionController($scope) {\n\n\t\tvar vm = this;\n vm.value = \"\";\n\n vm.getSize = function(){\n return $scope.parentDialogSize;\n };\n\n\n vm.isConfirmDisabled = function(){\n return !vm.value || vm.value.length < 3;\n };\n\n vm.close = function () {\n $scope.$close('cancel');\n $scope.$dismiss();\n };\n\n vm.confirm = function () {\n $scope.parentDialog({value: vm.value});\n $scope.$close('ok');\n };\n\n\t}\n\n\tfunction RemarkChecklistVersionDirective() {\n\t\treturn {\n\t\t\trestrict: 'E',\n\t\t\treplace: true,\n\t\t\ttemplateUrl : \"app/checklist/remark-checklist-version.html\",\n\t\t\tcontrollerAs : 'ctrl',\n\t\t\tcontroller : 'RemarkChecklistVersionController'\n\t\t};\n\t}\n\n\tangular.module('aqmsFrontend')\n\t\t.controller('RemarkChecklistVersionController', RemarkChecklistVersionController)\n\t\t.directive('remarkVersion', RemarkChecklistVersionDirective);\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *\n */\n function RemarkChecklistTemplateVersionController($scope) {\n\n var vm = this;\n vm.value = \"\";\n\n vm.isConfirmDisabled = function () {\n return vm.value.length < 3;\n };\n\n vm.close = function () {\n $scope.$close('cancel');\n $scope.$dismiss();\n };\n\n vm.confirmVersion = function () {\n //vm.confirmListener(vm.value);\n $scope.parentDialog.confirmAlterationRemark(vm.value);\n $scope.$close('ok');\n };\n }\n\n function RemarkChecklistTemplateVersionDirective() {\n return {\n restrict: 'E',\n replace: true,\n templateUrl: \"app/checklist/remark-checklist-version.html\",\n controllerAs: 'ctrl',\n controller: 'RemarkChecklistTemplateVersionController'\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('RemarkChecklistTemplateVersionController', RemarkChecklistTemplateVersionController)\n .directive('remarkVersionTemplate', RemarkChecklistTemplateVersionDirective);\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n *\n */\n function CopyTemplateController($scope, $translate) {\n\n var vm = this;\n\n vm.template = null;\n vm.oldTitle;\n\n vm.initView = function () {\n var model = $scope.modelDialog;\n vm.template = angular.copy(model);\n //clean remark change version history\n vm.template.ChangeVersionRemark = undefined;\n\n // change Title\n vm.oldTitle = vm.template.Title;\n vm.template.Title = $translate.instant('checklist.copyTemplate.title').replace(\"#title\", vm.oldTitle);\n\n };\n\n vm.close = function () {\n $scope.$dismiss('cancel');\n };\n\n vm.save = function () {\n\n // validate title\n if (!vm.validateNewTitle()) {\n // TODO show warning\n return;\n }\n\n // TODO save template\n vm.template.Id = 0;\n vm.template.Version = '1.0';\n vm.template.CsActive = true;\n\n // after template is saved, open dialog with new object\n $scope.parentDialog.loadCopyChecklist(vm.template);\n $scope.$close('ok');\n };\n\n vm.validateNewTitle = function () {\n return vm.oldTitle != vm.template.Title;\n }\n\n vm.validateTitle = function () {\n if (vm.template.Title != undefined && ((vm.template.Title + '').length > 0)) {\n return true;\n }\n return false;\n };\n\n vm.initView();\n }\n\n function CopyTemplateDirective() {\n return {\n restrict: 'E',\n replace: true,\n templateUrl: \"app/checklist/copy-template.html\",\n controllerAs: 'ctrl',\n controller: 'CopyTemplateController'\n };\n }\n\n angular.module('aqmsFrontend')\n .controller('CopyTemplateController', CopyTemplateController)\n .directive('copyTemplate', CopyTemplateDirective);\n})();\n\n/*eslint angular/json-functions: 0*/\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('ChecklistsTemplatesListController', ChecklistsTemplatesListController);\n\n function ChecklistsTemplatesListController(DefaultService, AuthService, ChecklistService, $state, $scope, ToastUtil, $log, $translate, $document) {\n\n var vm = this;\n\n vm.itensPerPageList = [\n {name: '5', value: 5, before: 0, after: 6}, \n {name: '10', value: 10, before: 5, after: 11}, \n {name: '20', value: 20, before: 10, after: 21}, \n {name: '30', value: 30, before: 20, after: 31}, \n {name: '40', value: 40, before: 30, after: 41}, \n {name: '50', value: 50, before: 40, after: 51}]\n\n vm.itemPerPage = vm.itensPerPageList[0];\n\n vm.totalList = 0;\n vm.checklistList = [];\n\n vm.statusList = [{\n id: \"\",\n Name: 'checklist.template.allStatus'\n }, {\n id: 1,\n Name: 'checklist.template.statusEnable'\n }, {\n id: 2,\n Name: 'checklist.template.statusDisable'\n }];\n\n vm.searchParams = {\n IdOrTitle: '',\n Version: '',\n Status: vm.statusList[0].id,\n Page: 1,\n MaxPerPage: vm.itemPerPage.value\n };\n\n vm.clearFields = function() {\n vm.itemPerPage = vm.itensPerPageList[0];\n vm.searchParams = {\n IdOrTitle: '',\n Version: '',\n Status: vm.statusList[0].id,\n Page: 1,\n MaxPerPage: vm.itemPerPage.value\n };\n }\n\n vm.disableChecklistTemplate = true;\n\n vm.shouldShow = function (item) {\n if(vm.totalList > 0 && item != undefined) {\n return vm.totalList >= item.value || (vm.totalList < item.after && vm.totalList > item.before);\n }\n return false;\n }\n \n vm.changeItemsPerPage = function() {\n if ( vm.itemPerPage == null ) {\n vm.itemPerPage = vm.itensPerPageList[0];\n }\n vm.searchParams.Page = 1;\n vm.searchParams.MaxPerPage = vm.itemPerPage.value;\n vm.search();\n }\n\n vm.init = function () {\n loadProfileModules();\n vm.search();\n };\n\n vm.useChecklist = function (checklist) {\n if (validateAddPermission()) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('checklists-create', {\n template: checklist.Id\n });\n }\n };\n\n vm.addTemplate = function () {\n if (validateAddPermission()) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('checklists-templates', {});\n }\n };\n\n vm.edit = function (id) {\n if (validateEditPermission()) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('templates-edit', {\n Id: id\n });\n }\n };\n\n vm.delete = function (id) {\n if (validateDeletePermission()) {\n ChecklistService.deleteTemplate(id)\n .then(function (response) {\n if (response) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go($state.current, {}, {\n reload: true\n });\n ToastUtil.showToastMessage($translate.instant(\"checklist.deleted.success\"), ToastUtil.ToastType.SUCCESS);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"checklist.template.deleted.failed\"), ToastUtil.ToastType.WARN);\n }\n })\n .catch(function (error) {\n $log.log(error);\n\n if (error.data && error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n } else if (error.status != $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(error.Message), ToastUtil.ToastType.ERROR);\n }\n });\n }\n };\n\n vm.saveOrUpdate = function (template) {\n if (validateEditPermission()) {\n ChecklistService.inactivateChecklistTemplate(template)\n .then(function () {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go($state.current, {}, {\n reload: true\n });\n ToastUtil.showToastMessage($translate.instant(\"checklist.template.save.success\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(function (error) {\n $log.log(error);\n\n if (error.data && error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n } else if (error.status != $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(error.Message), ToastUtil.ToastType.ERROR);\n }\n });\n }\n };\n\n vm.searchCheckTemplates = function() {\n vm.itemPerPage = vm.itensPerPageList[0];\n vm.searchParams.Page = 1;\n vm.searchParams.MaxPerPage = vm.itemPerPage.value;\n vm.search();\n }\n\n vm.search = function () {\n if (sessionStorage.getItem(\"searchParams\")) {\n vm.searchParams = JSON.parse(sessionStorage.getItem(\"searchParams\"));\n sessionStorage.removeItem(\"searchParams\");\n vm.itensPerPageList.forEach(function(element) {\n if (element.value == vm.searchParams.MaxPerPage) {\n vm.itemPerPage = element;\n return;\n }\n });\n }\n ChecklistService.listAllChecklistsTemplate(vm.searchParams)\n .then(function (response) {\n vm.checklistList = response.resultList;\n vm.totalList = response.total;\n vm.setFoucusElement('titleIdSearch');\n })\n .catch(function (error) {\n vm.searchParams.Status = 0;\n $log.log(error);\n\n if (error.data && error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n } else if (error.status != $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"error.checklist.search\"), ToastUtil.ToastType.ERROR);\n }\n\n vm.setFoucusElement('titleIdSearch');\n });\n };\n\n vm.setFoucusElement = function (element) {\n if (element) {\n if ($document[0].getElementById(element) !== null) {\n $document[0].getElementById(element).focus();\n }\n }\n };\n\n vm.filtrar = function (keyEvent) {\n if (keyEvent.which === 13)\n vm.search();\n };\n\n vm.changeStatus = function (template) {\n if (validateEditPermission()) {\n template.CsActive = !template.CsActive;\n\n vm.saveOrUpdate(template);\n }\n };\n\n vm.create = function () {\n\n if (validateAddPermission() && validateApprovePermission()) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('templates-create');\n }\n };\n\n function loadProfileModules() {\n var profileModule = {};\n\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.moduleChecklist;\n\n DefaultService.loadModules(profileModule)\n .then(\n function (response) {\n vm.profile = angular.copy(response);\n\n //Only Approvers have permission to access checklist templates\n validateViewPermission();\n vm.disableChecklistTemplate = !vm.profile.CanApprove;\n })\n .catch(\n function (error) {\n $log.log(error);\n\n if (error.data && error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n } else if (error.status != $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n }\n\n });\n }\n\n function validateViewPermission() {\n //Only Approvers have permission to access checklist templates\n if (!vm.profile.CanView || !vm.profile.CanApprove) {\n $state.go('not-authorized', {}, {});\n }\n }\n\n function validateEditPermission() {\n if (!vm.profile.CanEdit) {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n return false;\n }\n\n return true;\n }\n\n function validateAddPermission() {\n if (!vm.profile.CanAdd) {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n return false;\n }\n\n return true;\n }\n\n function validateApprovePermission() {\n if (!vm.profile.CanApprove) {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n return false;\n }\n\n return true;\n }\n\n function validateDeletePermission() {\n if (!vm.profile.CanDelete) {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n return false;\n }\n\n return true;\n }\n\n vm.init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('ChecklistsTemplatesEditController', ChecklistsTemplatesEditController);\n\n function ChecklistsTemplatesEditController(AuthService, DefaultService, ChecklistService, ToastUtil, $translate, $state, $scope, DialogControllerTemplate, DialogController, $stateParams, $log) {\n\n var vm = this;\n\n vm.checklist =\n {\n Version : '1.0',\n ChecklistTemplateProcesses : [],\n Status: true,\n CsActive: true,\n ChangeVersionRemark: '',\n Checklists : []\n };\n\n vm.ParamTypeId = {\n LESSTHAN : 0,\n BIGGERTHAN: 1,\n BETWEEN: 2,\n EQUALTO: 3,\n OKNOK: 4\n };\n\n\n vm.statusList = [{Id:0,CsActive: true, Name: 'checklist.template.list.active'}, {Id:1,CsActive: false,Name: 'checklist.template.list.inactive'}];\n\n vm.init = function () {\n vm.checklist.Status = vm.statusList[0];\n loadProfileModules();\n };\n\n vm.saveNewVersion = function() {\n DialogController.showWithCloseListener('checklist.copy.dialog.title', '', vm);\n };\n\n vm.loadCopyChecklist = function(copy) {\n // update state parameters\n $state.transitionTo('templates-edit', { Id: 0 }, { notify: false });\n\n // copy new object\n vm.checklist = angular.copy(copy);\n\n if(vm.checklist.CsActive){\n vm.checklist.Status = vm.statusList[0];\n }\n else{\n vm.checklist.Status = vm.statusList[1];\n }\n\n vm.removeProcessesUnchecked();\n };\n\n vm.loadChecklistTemplate = function(checklistId) {\n ChecklistService.getChecklistTemplateById(checklistId)\n .then(\n function(response){\n vm.checklist = angular.copy(response);\n\n if(vm.checklist.ChecklistTemplateProcesses)\n {\n for(var i = 0; i < vm.checklist.ChecklistTemplateProcesses.length; i++){\n if(vm.checklist.ChecklistTemplateProcesses[i].CsActive)\n {\n vm.checklist.ChecklistTemplateProcesses[i].Checked= true;\n }\n else {\n vm.checklist.ChecklistTemplateProcesses[i].Checked= false;\n }\n }\n }\n\n vm.injectCheckboxValues(vm.checklist);\n\n if(vm.checklist.CsActive){\n vm.checklist.Status = vm.statusList[0];\n }\n else{\n vm.checklist.Status = vm.statusList[1];\n }\n }\n )\n .catch(function(error){\n $log.log(error);\n\n if(error.data && error.data.ToastType == 1){\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n else if(error.status != $scope.HttpStatusUnauthorized){\n ToastUtil.showToastMessage($translate.instant(\"error.checklist.search.template\"), ToastUtil.ToastType.ERROR);\n }\n });\n };\n\n vm.injectCheckboxValues = function(template){\n for(var i = 0; i <= template.ChecklistTemplateProcesses.length - 1; i++){\n var process = template.ChecklistTemplateProcesses[i];\n\n if(angular.isDefined(process)){\n process.isAccordionOpened = true;\n }\n }\n };\n\n vm.isEdit = function() {\n return vm.checklist.Id;\n };\n\n vm.copyTemplate = function() {\n DialogController.show('checklist.title.copyTemplate', '', vm, vm.checklist);\n };\n\n vm.goBack = function () {\n $state.go('checklists-templates');\n };\n\n vm.saveChecklistTemplate = function()\n {\n if(angular.isDefined(vm.checklist.Title) && vm.checklist.Title.length > 0){\n\n if(!validateProcessParameters()){\n ChecklistService.saveChecklistTemplate(vm.checklist)\n .then(function () {\n vm.isSaving = false;\n $state.go('checklists-templates');\n ToastUtil.showToastMessage($translate.instant(\"checklist.template.save.success\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(function (error) {\n $log.log(error);\n vm.isSaving = false;\n\n if (error.status === $scope.HttpStatusCodeConflict) {\n $state.go('checklists-templates');\n ToastUtil.showToastMessage($translate.instant(\"msg.error.model.already.updated\"), ToastUtil.ToastType.WARN);\n }\n else if(error.data.Message.indexOf('title.failed') !== -1)\n {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n }\n else if(error.data && error.data.ToastType == 1){\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n else if(error.status != $scope.HttpStatusUnauthorized){\n ToastUtil.showToastMessage($translate.instant(\"checklist.template.save.title.failed\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n else{\n vm.isSaving = false;\n ToastUtil.showToastMessage($translate.instant('error.msg.template.process.parameters.invalid'), ToastUtil.ToastType.WARN);\n }\n }\n };\n\n vm.validateTemplateAssociated = function()\n {\n ChecklistService.validateTemplateAssociated(vm.checklist.Id)\n .then(function (response) {\n if(response){\n DialogControllerTemplate.showWithCloseListener('checklist.copy.dialog.title','checklist.template.new.version', '', vm.confirmSaveNewVersion, null, vm.cancelSaveNewVersion);\n }\n else{\n vm.saveChecklistTemplate();\n }\n })\n .catch(function (error) {\n $log.log(error);\n vm.isSaving = false;\n\n if(error.data && error.data.ToastType == 1){\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n else if(error.status != $scope.HttpStatusUnauthorized){\n ToastUtil.showToastMessage($translate.instant(\"checklist.template.save.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n };\n\n vm.validateTemplateSameTitle = function()\n {\n var id = 0;\n\n if(vm.checklist.Id){\n id = vm.checklist.Id;\n }\n\n ChecklistService.validateTemplateSameTitle(id, vm.checklist.Title)\n .then(function (response) {\n if(response){\n vm.isSaving = false;\n ToastUtil.showToastMessage($translate.instant(\"checklist.template.save.title.failed\"), ToastUtil.ToastType.ERROR);\n }\n else{\n if(vm.checklist.Id > 0){\n // Validates whether the template is already associated with some checklist.\n // If true, show displays modal to add information.\n // If false, follow normal save.\n vm.validateTemplateAssociated();\n }\n else {\n vm.saveChecklistTemplate();\n }\n }\n })\n .catch(function (error) {\n $log.log(error);\n\n vm.isSaving = false;\n\n if(error.data && error.data.ToastType == 1){\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n else if(error.status != $scope.HttpStatusUnauthorized){\n ToastUtil.showToastMessage($translate.instant(\"checklist.template.save.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n };\n\n vm.confirmSaveNewVersion = function(modal) {\n\n if(angular.isDefined(modal) && angular.isDefined(modal.value)){\n vm.checklist.ChangeVersionRemark = modal.value;\n }\n\n vm.removeProcessesUnchecked();\n\n vm.saveChecklistTemplate();\n };\n\n vm.cancelSaveNewVersion = function() {\n vm.isSaving = false;\n };\n\n vm.removeProcessesUnchecked = function () {\n for(var i = 0; i < vm.checklist.ChecklistTemplateProcesses.length; i++){\n if(!vm.checklist.ChecklistTemplateProcesses[i].Checked)\n vm.checklist.ChecklistTemplateProcesses.splice(i,1);\n }\n };\n\n vm.isSaving = false;\n\n vm.save = function () {\n if(!vm.isSaving){\n vm.isSaving = true;\n // Checks to see if the template has the same title.\n vm.validateTemplateSameTitle();\n }\n };\n\n function validateProcessParameters() {\n if(vm.checklist.ChecklistTemplateProcesses.length <= 0)\n return true;\n\n if(vm.checklist.ChecklistTemplateProcesses.length > 0){\n for(var i = 0; i < vm.checklist.ChecklistTemplateProcesses.length; i++) {\n if (angular.isUndefined(vm.checklist.ChecklistTemplateProcesses[i].ChecklistTemplateParameters))\n {\n return true;\n }\n else {\n if(vm.checklist.ChecklistTemplateProcesses[i].ChecklistTemplateParameters.length === 0)\n {\n return true;\n }\n }\n }\n\n return false;\n }\n }\n\n vm.validateAddProcess = function() {\n // TODO validation\n return true;\n };\n\n // Open dialog to create new process\n vm.openAddProcess = function() {\n DialogController.show('checklist.label.addProcess', '', vm);\n };\n\n // the dialog 'process-form' calls this function to add a new process\n vm.addProcess = function(process) {\n if(vm.checklist.ChecklistTemplateProcesses === null)\n vm.checklist.ChecklistTemplateProcesses = [];\n\n if(vm.checklist.ChecklistTemplateProcesses.length > 0) {\n var existInList = false;\n var titleAlreadyExist = false;\n\n //if exist in list and if editing, the list will not edit because already edited by process directive\n for( var i = 0; i <= (vm.checklist.ChecklistTemplateProcesses.length-1); i++){\n vm.checklist.ChecklistTemplateProcesses.filter(function(obj){\n if(angular.isDefined(process.$$hashKey) && obj.$$hashKey == process.$$hashKey)\n existInList = true;\n\n if(angular.isDefined(process.Title) && obj.Title.toLowerCase() == process.Title.toLowerCase())\n titleAlreadyExist = true;\n });\n }\n\n //if exist in list and if editing, the list will not edit because already edited by process directive\n //if not exist in the list, add process\n if (!existInList && !titleAlreadyExist)\n vm.checklist.ChecklistTemplateProcesses.push(process);\n }\n else{\n vm.checklist.ChecklistTemplateProcesses.push(process);\n }\n };\n\n // open dialog to edit a process\n vm.editProcess = function(process) {\n DialogController.show('checklist.label.editProcess', '', vm, process);\n };\n\n vm.deleteProcess = function(process) {\n\n var index = vm.checklist.ChecklistTemplateProcesses.map(function(p){ return p.Title }).indexOf(process.Title);\n\n if (index != -1){\n vm.checklist.ChecklistTemplateProcesses.splice(index,1);\n }\n\n // TODO delete process\n };\n\n // open dialog to create control parameters for the process\n vm.openAddParameters = function(process) {\n var model = [];\n model['process'] = process;\n DialogController.show('checklist.label.newParameters', '', vm, model);\n };\n\n // the dialog 'control-param-form' calls this function to add new control parameters\n vm.addParameters = function(model) {\n var sProcess = model.process;\n var sParameters = model.parameters;\n\n //If Ok.NOK, set value default (true)\n if(sParameters.PatrolResultType == \"4\"){\n sParameters.ValueReference1 = 1;\n }\n\n var index = vm.checklist.ChecklistTemplateProcesses.map(function(sProcess){ return sProcess.Title; }).indexOf(sProcess.Title);\n var process = vm.checklist.ChecklistTemplateProcesses[index];\n\n if(angular.isUndefined(process.ChecklistTemplateParameters))\n process.ChecklistTemplateParameters = [];\n\n if(process.ChecklistTemplateParameters.length > 0){\n var existInList = false;\n\n for( var i = 0; i <= (process.ChecklistTemplateParameters.length-1); i++){\n process.ChecklistTemplateParameters.filter(function(obj){\n if(angular.isDefined(sParameters.$$hashKey) && obj.$$hashKey == sParameters.$$hashKey)\n existInList = true;\n });\n }\n\n if (!existInList)\n process.ChecklistTemplateParameters.push(sParameters);\n }\n else{\n process.ChecklistTemplateParameters.push(sParameters);\n }\n };\n\n // open dialog to edit control parameters of the process\n vm.editParameters = function(process, parameters) {\n var model = [];\n model['process'] = process;\n model['parameters'] = parameters;\n DialogController.show('checklist.label.editParameters', '', vm, model);\n };\n\n vm.deleteParameters = function(process, parameters) {\n var index = vm.checklist.ChecklistTemplateProcesses.map(function(p){ return p.$$hashKey }).indexOf(process.$$hashKey);\n\n if (index != -1){\n var indexParameter = vm.checklist.ChecklistTemplateProcesses[index].ChecklistTemplateParameters.map(function(p){ return p.$$hashKey }).indexOf(parameters.$$hashKey);\n\n if (indexParameter != -1){\n vm.checklist.ChecklistTemplateProcesses[index].ChecklistTemplateParameters.splice(indexParameter, 1);\n }\n }\n };\n\n vm.export = function () {\n // TODO\n };\n\n vm.statusChanged = function(){\n vm.checklist.CsActive = vm.checklist.Status.CsActive;\n };\n\n\n vm.getParamTypeReference = function( referenceValue1, referenceValue2, paramTypeId ) {\n var reference = \"\";\n switch (parseInt(paramTypeId)) {\n case vm.ParamTypeId.LESSTHAN:\n reference = \"< \" + referenceValue1;\n break;\n case vm.ParamTypeId.BIGGERTHAN:\n reference = \"> \" + referenceValue1;\n break;\n case vm.ParamTypeId.BETWEEN:\n reference = \"> \" + referenceValue1 + \" < \" + referenceValue2;\n break;\n case vm.ParamTypeId.EQUALTO:\n reference = \"= \" + referenceValue1;\n break;\n case vm.ParamTypeId.OKNOK:\n reference = \"OK/NOK \";\n break;\n }\n\n return reference;\n };\n\n function loadProfileModules() {\n var profileModule = {};\n\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.moduleChecklist;\n\n DefaultService.loadModules(profileModule)\n .then(\n function (response) {\n vm.profile = angular.copy(response);\n\n InitPageValidatePermissions();\n })\n .catch(\n function (error) {\n $log.log(error);\n\n if (error.status === $scope.HttpStatusCodeConflict) {\n $state.go('checklists');\n ToastUtil.showToastMessage($translate.instant(\"msg.error.model.already.updated\"), ToastUtil.ToastType.WARN);\n }\n else if(error.data && error.data.ToastType == 1)\n {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n else if(error.status != $scope.HttpStatusUnauthorized){\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n }\n\n });\n }\n\n function InitPageValidatePermissions(){\n\n //IF Checklist Edition\n if (!angular.isUndefined($stateParams.Id) && $stateParams.Id > 0) {\n validateEditPermission();\n vm.loadChecklistTemplate($stateParams.Id);\n }\n else {\n validateAddPermission();\n }\n\n }\n\n function validateEditPermission() {\n if (!vm.profile.CanEdit) {\n $state.go('not-authorized', {}, {});\n }\n }\n\n function validateAddPermission() {\n if (!vm.profile.CanAdd) {\n $state.go('not-authorized', {}, {});\n }\n }\n\n vm.init();\n }\n})();\n\n/*eslint angular/json-functions: 0*/\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('ChecklistsListController', ChecklistsListController);\n\n function ChecklistsListController(ChecklistService, $state, DefaultService, ToastUtil, moment, AuthService, $translate, $log, $scope) {\n\n var vm = this;\n\n vm.itensPerPageList = [\n {name: '5', value: 5, before: 0, after: 6}, \n {name: '10', value: 10, before: 5, after: 11}, \n {name: '20', value: 20, before: 10, after: 21}, \n {name: '30', value: 30, before: 20, after: 31}, \n {name: '40', value: 40, before: 30, after: 41}, \n {name: '50', value: 50, before: 40, after: 51}]\n \n vm.itemPerPage = vm.itensPerPageList[0];\n\n vm.profile = {\n canAdd: false,\n canEdit: false,\n canDelete: false,\n canView: false\n };\n\n vm.StatusId = {\n ONGOING: 1,\n SENT: 2,\n APPROVED: 3\n };\n\n vm.statusList = [{\n id: vm.StatusId.ONGOING,\n Name: 'checklist.label.ongoing'\n }, {\n id: vm.StatusId.SENT,\n Name: 'checklist.label.sent'\n }, {\n id: vm.StatusId.APPROVED,\n Name: 'checklist.label.approved'\n }];\n\n vm.searchParams = {\n IdOrTitle: '',\n StartDate: '',\n ModelId: '',\n Model: '',\n Variant: '',\n VariantId: '',\n Version: '',\n StatusTemp: {},\n Status: 0,\n Section: '',\n SectionTemp: '',\n Station: '',\n StationTemp: '',\n Page: 1,\n MaxPerPage: vm.itemPerPage.value,\n BusinessId: AuthService.getBusinessId()\n };\n vm.totalLista = 0;\n\n vm.clearFields = function () {\n vm.searchParams.IdOrTitle = '';\n vm.searchParams.StartDate = '';\n vm.searchParams.ModelId = '';\n vm.searchParams.Model = '';\n vm.searchParams.Variant = '';\n vm.searchParams.VariantId = '';\n vm.searchParams.Version = '';\n vm.searchParams.StatusTemp = {};\n vm.searchParams.Status = 0;\n vm.searchParams.Section = '';\n vm.searchParams.SectionTemp = '';\n vm.searchParams.Station = '';\n vm.searchParams.StationTemp = '';\n vm.searchParams.StartDateTemp = null;\n vm.searchParams.Turn = null;\n vm.searchParams.Project = null;\n vm.searchParams.Client = null;\n };\n\n vm.shouldShow = function (item) {\n if(vm.totalLista > 0 && item != undefined) {\n return vm.totalLista >= item.value || (vm.totalLista < item.after && vm.totalLista > item.before);\n }\n return false;\n }\n \n vm.changeItemsPerPage = function() {\n vm.searchParams.Page = 1;\n }\n\n //needed to identify if current user can create checklist template\n vm.disableChecklistTemplate = true;\n\n vm.init = function () {\n loadProfileModules();\n vm.search();\n };\n\n vm.searchCheckList = function() {\n vm.searchParams.Page = 1;\n vm.search();\n }\n\n vm.getFormatedDate = function (date) {\n var dateFormated = moment.utc(date).format('DD/MM/YYYY');\n return dateFormated;\n };\n \n function validateSearchParams(){\n if (vm.searchParams.MaxPerPage == null) {\n vm.searchParams.MaxPerPage = 5;\n }\n\n\n if (vm.searchParams.StartDateTemp != undefined && vm.searchParams.StartDateTemp != ''){\n vm.searchParams.StartDate = moment(angular.copy(vm.searchParams.StartDateTemp)).format('DD/MM/YYYY');\n }\n else{\n vm.searchParams.StartDate = '';\n }\n\n if(angular.isDefined(vm.searchParams.Project) && vm.searchParams.Project != null){\n vm.searchParams.ProjectId = vm.searchParams.Project.Id;\n }\n else{\n vm.searchParams.ProjectId = '';\n }\n\n if(angular.isDefined(vm.searchParams.Client) && vm.searchParams.Client != null){\n vm.searchParams.ClientId = vm.searchParams.Client.Id;\n }\n else{\n vm.searchParams.ClientId = '';\n }\n\n if(angular.isDefined(vm.searchParams.Model) && vm.searchParams.Model != null){\n vm.searchParams.ModelId = vm.searchParams.Model.Id;\n }\n else{\n vm.searchParams.ModelId = '';\n }\n\n if(angular.isDefined(vm.searchParams.Variant) && vm.searchParams.Variant != null){\n vm.searchParams.VariantId = vm.searchParams.Variant.Id;\n }\n else{\n vm.searchParams.VariantId = '';\n }\n\n if(angular.isDefined(vm.searchParams.Turn) && vm.searchParams.Turn != null){\n vm.searchParams.TurnId = vm.searchParams.Turn.Id;\n }\n else{\n vm.searchParams.TurnId = '';\n }\n\n vm.searchParams.Section = !vm.searchParams.SectionTemp ? '' : angular.copy(vm.searchParams.SectionTemp.Id);\n vm.searchParams.Station = !vm.searchParams.StationTemp ? '' : angular.copy(vm.searchParams.StationTemp.Id);\n\n }\n\n vm.search = function () {\n if (sessionStorage.getItem(\"checklistSearchParams\")) {\n vm.searchParams = JSON.parse(sessionStorage.getItem(\"checklistSearchParams\"));\n sessionStorage.removeItem(\"checklistSearchParams\");\n }\n validateSearchParams();\n\n ChecklistService.listAllChecklists(angular.copy(vm.searchParams))\n .then(function (response) {\n vm.checklistList = angular.copy(response);\n vm.totalLista = response.total;\n })\n .catch(function (error) {\n $log.log(error);\n\n if(error.data && error.data.ToastType == 1){\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n else if(error.status != $scope.HttpStatusUnauthorized){\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n }\n });\n };\n\n vm.edit = function (checklist) {\n if(validateEditPermission()){\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"checklistSearchParams\", searchParams);\n $state.go('checklists-edit', {\n Id: checklist.Id\n });\n }\n };\n\n vm.delete = function (checklistId) {\n if(validateDeletePermission()){\n ChecklistService.deleteChecklist(checklistId)\n .then(function () {\n vm.search();\n ToastUtil.showToastMessage($translate.instant(\"checklist.delete.success\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(function (error) {\n $log.log(error);\n\n if(error.data && error.data.ToastType == 1){\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n else if(error.status != $scope.HttpStatusUnauthorized){\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n }\n });\n }\n };\n\n vm.getStatusIconClass = function (statusId) {\n if (statusId == vm.StatusId.SENT) {\n return 'ic-sent';\n } else if (statusId == vm.StatusId.APPROVED) {\n return 'ic-approved';\n }\n return '';\n };\n\n vm.getStatusName = function (statusId) {\n var statusTitle = \"\";\n angular.forEach(vm.statusList, function (value) {\n if (value.id == statusId) {\n statusTitle = value.Name;\n }\n });\n return statusTitle;\n };\n\n vm.getStatusTextClass = function (statusId) {\n if (statusId == vm.StatusId.SENT || statusId == vm.StatusId.APPROVED) {\n return 'checklist-text-ic';\n }\n return 'checklist-text-no-ic';\n };\n\n vm.setStatusId = function (statusId) {\n vm.searchParams.Status = statusId;\n };\n\n vm.addChecklist = function(){\n if(validateAddPermission()){\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"checklistSearchParams\", searchParams);\n $state.go('checklists-create', {});\n }\n };\n\n function loadProfileModules() {\n var profileModule = {};\n\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.moduleChecklist;\n\n DefaultService.loadModules(profileModule)\n .then(function (response) {\n vm.profile = angular.copy(response);\n\n validateViewPermission();\n vm.disableChecklistTemplate = !vm.profile.CanApprove;\n })\n .catch(function (error) {\n $log.log(error);\n\n if(error.data && error.data.ToastType == 1)\n {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n else if(error.status != $scope.HttpStatusUnauthorized){\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function validateViewPermission(){\n if(!vm.profile.CanView){\n $state.go('not-authorized', {}, {});\n }\n }\n\n function validateEditPermission(){\n if(!vm.profile.CanEdit){\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n return false;\n }\n\n return true;\n }\n\n function validateAddPermission(){\n if(!vm.profile.CanAdd){\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n return false;\n }\n\n return true;\n }\n\n function validateDeletePermission() {\n if (!vm.profile.CanDelete) {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n return false;\n }\n\n return true;\n }\n\n vm.init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('ChecklistsEditController', ChecklistsEditController);\n\n function ChecklistsEditController($scope, $document, $window, ChecklistService, ToastUtil, $translate, $state, DialogControllerTemplate, $stateParams, moment, AuthService, DefaultService, $log) {\n\n var vm = this;\n\n vm.selectedChecklistTemplateProcesses = null;\n vm.checklist = {};\n vm.checklist.SaveNewVersion = false;\n vm.idToEdit = -1;\n vm.checkListTotal = {ocorrence: 0, process:0, processPendent: 0, processComplete: 0};\n vm.checkOcorrencias = false;\n vm.disableExport = true;\n\n vm.StatusId = {\n ONGOING : 1,\n SENT: 2,\n APPROVED: 3\n };\n\n vm.profile = {\n CanApprove : false\n };\n\n /**\n * Param types.\n * @type {{LESSTHAN: number, BIGGERTHAN: number, BETWEEN: number, EQUALTO: number, OKNOK: number}}\n */\n var ParamTypeId = {\n LESSTHAN: 0,\n BIGGERTHAN: 1,\n BETWEEN: 2,\n EQUALTO: 3,\n OKNOK: 4\n };\n\n vm.statusList = [ { id : vm.StatusId.ONGOING, Name : 'checklist.label.ongoing'}, { id : vm.StatusId.SENT, Name : 'checklist.label.sent'}, { id : vm.StatusId.APPROVED, Name : 'checklist.label.approved'} ];\n\n vm.PatrolResultOptions = [ { Title : \"OK\", Value : 1 }, { Title : \"NOK\", Value : 0 } ];\n\n vm.templateOptions = {\n resultList : []\n };\n\n vm.searchParams = {\n IdOrTitle: '',\n Version: '',\n Status: 1,\n Page: 0,\n MaxPerPage: 0,\n BusinessId: AuthService.getBusinessId()\n };\n\n vm.isSaving = false;\n\n vm.isTemplateCmbDisabled = false;\n\n vm.shouldNotEdit = function() {\n var isDisabled = false;\n if ( vm.checklist.Status == vm.StatusId.SENT) {\n isDisabled = true;\n }\n return isDisabled;\n };\n\n vm.shouldNotEditProcess = function(ProcessIsActiveTemp) {\n if(!ProcessIsActiveTemp) {\n return true;\n } else {\n return false;\n }\n };\n\n vm.submitForm = function () {\n\n if (vm.isSaving) {\n return;\n }\n\n if(vm.checklist.Status == vm.StatusId.APPROVED){\n DialogControllerTemplate.showWithCloseListener('checklist.copy.dialog.title','checklist.modal.new.version', '', vm.confirmSaveNewVersion);\n return;\n }\n\n save();\n };\n\n vm.confirmSaveNewVersion = function(item) {\n vm.checklist.Id = 0;\n vm.checklist.SaveNewVersion = true;\n vm.checklist.ChangeVersionRemark = item.value;\n vm.checklist.Version = getNewVersion(vm.checklist.Version);\n vm.checklist.Status = vm.StatusId.ONGOING;\n vm.checklist.CheckListResults = [];\n vm.checklist.ApprovedBy = undefined;\n\n save();\n };\n\n //Change status to Pending Approval and save checklist.\n vm.sendChecklist = function() {\n vm.lastStatusChecklist = angular.copy(vm.checklist.Status);\n vm.checklist.Status = vm.statusList[1].id;\n save();\n };\n\n //Change status to approved, set approvedBy and save checklist.\n vm.approveChecklist = function() {\n if(vm.isSaving){\n return;\n }\n\n if(validateApprovePermission()) {\n if(vm.checklist.Status == vm.StatusId.SENT) {\n vm.checklist.ApprovedBy = getCurrentUser();\n vm.checklist.Status = vm.checklist.Status = vm.statusList[2].id;\n save();\n }\n else {\n ToastUtil.showToastMessage($translate.instant('error.msg.checklist.send.approval'), ToastUtil.ToastType.WARN);\n }\n }\n };\n\n vm.saveNewVersion = function() {\n\n vm.checklist.Id = 0;\n vm.checklist.Title = \"Copy of \" + vm.checklist.Title;\n vm.checklist.ChangeVersionRemark = '';\n vm.checklist.Version = '1.0';\n vm.checklist.Status = vm.StatusId.ONGOING;\n vm.checklist.CheckListResults = [];\n vm.checklist.ApprovedBy = undefined;\n\n $state.transitionTo('checklists-edit', { Id: 0 }, { notify: false });\n\n clearProcessValues();\n };\n\n vm.canSendChecklist = function(){\n var canSend = true;\n\n if(angular.isDefined(vm.checklist.CheckListTemplate) && vm.checklist.CheckListTemplate != null\n && angular.isDefined(vm.checklist.CheckListTemplate.ChecklistTemplateProcesses) && vm.checklist.CheckListTemplate.ChecklistTemplateProcesses != null\n && vm.checklist.CheckListTemplate.ChecklistTemplateProcesses.length > 0){\n\n //will loop in list of processes\n for(var i = 0; i < vm.checklist.CheckListTemplate.ChecklistTemplateProcesses.length; i++){\n\n var process = vm.checklist.CheckListTemplate.ChecklistTemplateProcesses[i];\n\n if(process.ChecklistTemplateParameters != undefined && process.ChecklistTemplateParameters.length > 0){\n\n //will loop in list of parameters\n for(var y = 0; y < process.ChecklistTemplateParameters.length; y++) {\n if(process.ChecklistTemplateParameters[y].ProcessIsActiveTemp)\n if(process.ChecklistTemplateParameters[y].ParamResultTemp == undefined || process.ChecklistTemplateParameters[y].ParamResultTemp == '' || process.ChecklistTemplateParameters[y].ParamResultTemp.length <= 0){\n canSend = false;\n }\n }\n }\n else{\n canSend = false;\n }\n }\n }\n else{\n canSend = false;\n }\n\n return canSend;\n };\n\n /**\n * Returns Selected Model object to persist.\n * @returns {Array}\n */\n vm.getSelectedModels = function () {\n var models = [];\n for (var selectedModel = 0; selectedModel < vm.selectedModels.length; selectedModel++) {\n for (var model = 0; model < vm.Models.length; model++) {\n if (vm.Models[model].Id == vm.selectedModels[selectedModel]) {\n models.push(vm.Models[model]);\n break;\n }\n }\n }\n\n return models;\n };\n\n vm.isCmbTemplateDisabled = function(checklistTemplateParameters){\n var isAnyResultFilled = false;\n angular.forEach(checklistTemplateParameters, function (parameter) {\n\n if ((parameter.ParamResultTemp != undefined && parameter.ParamResultTemp != \"\") || (parameter.ParamRemarkTemp != undefined && parameter.ParamRemarkTemp != \"\") ) {\n isAnyResultFilled = true;\n }\n });\n\n vm.isTemplateCmbDisabled = angular.copy(isAnyResultFilled);\n };\n\n vm.disableEnableAllParameters = function(checklistTemplateProcesses){\n angular.forEach(checklistTemplateProcesses.ChecklistTemplateParameters, function (parameter) {\n if(checklistTemplateProcesses.ProcessIsActiveInChecklist) {\n parameter.ProcessIsActiveTemp = true;\n }\n else {\n parameter.ProcessIsActiveTemp = false;\n parameter.ParamResultTemp = null;\n }\n });\n\n };\n\n vm.disableEnableParameter = function(templateProcesses, parameters) {\n if(!parameters.ProcessIsActiveTemp) {\n parameters.ParamResultTemp = null;\n }\n\n if(parameters.ProcessIsActiveTemp) {\n templateProcesses.ProcessIsActiveInChecklist = true;\n }\n\n };\n\n vm.setWeek = function () {\n vm.checklist.Week = moment(vm.checklist.StartDate).isoWeek();\n };\n\n vm.showSaveNewVersionButton = function() {\n return vm.checklist.Status == vm.StatusId.APPROVED && vm.checklist.Id != undefined && vm.checklist.Id > 0 && !vm.isSaving;\n };\n\n vm.isSendButtonDisabled = function() {\n return (vm.checklist.Status != vm.StatusId.ONGOING);\n };\n\n vm.validateTemplate = function () {\n if (vm.checklist.CheckListTemplate)\n return false;\n return true;\n };\n\n vm.patrolResultOcorrenceCount = function(checklistTemplateProcesses) {\n var total = 0;\n\n checklistTemplateProcesses.ChecklistTemplateParameters.forEach(function (item) {\n var result = vm.isResultOk(item.ParamResultTemp, item.ValueReference1, item.ValueReference2, item.PatrolResultType);\n total = result === false ? total + 1 : total;\n });\n return total;\n };\n\n vm.patrolResultCount = function(checklistTemplateProcesses) {\n var total = 0;\n\n checklistTemplateProcesses.ChecklistTemplateParameters.forEach(function (item) {\n if(item.ParamResultTemp != null && item.ParamResultTemp.length > 0)\n total++;\n });\n return total;\n }; \n\n vm.getTotalCheckLists =function() {\n var ocorrence= 0, processPendent= 0, processComplete = 0;\n\n if(vm.checklist.CheckListTemplate === undefined || vm.checklist.CheckListTemplate === null || vm.checklist.CheckListTemplate.ChecklistTemplateProcesses === undefined || vm.checklist.CheckListTemplate.ChecklistTemplateProcesses === null || vm.checklist.CheckListTemplate.ChecklistTemplateProcesses.length === 0)\n return;\n\n vm.checklist.CheckListTemplate.ChecklistTemplateProcesses.forEach(function (item) {\n item.ChecklistTemplateParameters.forEach(function (item2) {\n \n if(item2.ParamResultTemp != null && item2.ParamResultTemp.length > 0)\n processComplete++;\n else\n processPendent++;\n \n var result = vm.isResultOk(item2.ParamResultTemp, item2.ValueReference1, item2.ValueReference2, item2.PatrolResultType);\n ocorrence = result === false ? ocorrence + 1 : ocorrence;\n });\n });\n\n vm.checkListTotal.process = vm.checklist.CheckListTemplate.ChecklistTemplateProcesses.length;\n vm.checkListTotal.ocorrence = ocorrence;\n vm.checkListTotal.processPendent = processPendent;\n vm.checkListTotal.processComplete = processComplete;\n };\n\n $scope.filterOcorrences = function(item) {\n if(!vm.checkOcorrencias)\n return true;\n\n var result = vm.isResultOk(item.ParamResultTemp, item.ValueReference1, item.ValueReference, item.PatrolResultType);\n return !result;\n };\n\n vm.isResultOk = function(paramResult, referenceValue1, referenceValue2, paramTypeId) {\n var isOk = false;\n\n if(paramResult == undefined){\n isOk = true;\n } else {\n paramResult = parseFloat(angular.copy(paramResult));\n switch (paramTypeId) {\n case ParamTypeId.LESSTHAN:\n isOk = paramResult < referenceValue1;\n break;\n case ParamTypeId.BIGGERTHAN:\n isOk = paramResult > referenceValue1;\n break;\n case ParamTypeId.BETWEEN:\n isOk = ( paramResult >= referenceValue1 && paramResult <= referenceValue2 );\n break;\n case ParamTypeId.EQUALTO:\n isOk = (paramResult == referenceValue1);\n break;\n case ParamTypeId.OKNOK:\n isOk = (paramResult == 1);\n break;\n }\n }\n\n\n return isOk;\n };\n\n vm.getParamTypeReference = function(referenceValue1, referenceValue2, paramTypeId ) {\n var reference = \"\";\n switch (paramTypeId) {\n case ParamTypeId.LESSTHAN:\n reference = \"< \" + referenceValue1;\n break;\n case ParamTypeId.BIGGERTHAN:\n reference = \"> \" + referenceValue1;\n break;\n case ParamTypeId.BETWEEN:\n reference = \">= \" + referenceValue1 + \" <= \" + referenceValue2;\n break;\n case ParamTypeId.EQUALTO:\n reference = \"= \" + referenceValue1;\n break;\n case ParamTypeId.OKNOK:\n reference = \"OK\";\n break;\n }\n\n return reference;\n };\n\n vm.loadProcessesById = function(){\n var id = vm.checklist.CheckListTemplate.Id;\n\n ChecklistService.getChecklistTemplateById(id)\n .then(function(response){\n vm.checklist.CheckListTemplate.ChecklistTemplateProcesses = response.ChecklistTemplateProcesses;\n vm.selectedChecklistTemplateProcesses = vm.checklist.CheckListTemplate.ChecklistTemplateProcesses[0];\n })\n .catch(function(error){\n $log.log(error);\n\n if (error.status === $scope.HttpStatusCodeConflict) {\n $state.go('checklist');\n ToastUtil.showToastMessage($translate.instant(\"msg.error.model.already.updated\"), ToastUtil.ToastType.WARN);\n }\n else if(error.data && error.data.ToastType == 1)\n {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n else if(error.status != $scope.HttpStatusUnauthorized){\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n }\n });\n };\n\n vm.escape = function(value) {\n return value.replace(/\\'/mg, \"'\");\n };\n\n vm.export = function () {\n if (!vm.disableExport) {\n\n vm.disableExport = true;\n\n ChecklistService.export(vm.checklist.Id, $translate.use())\n .then(function (response) {\n\n var date = moment().format(\"DD_MM_YYYY_HH_mm_ss\");\n\n var newFIle = new Blob([response], {\n type: 'application/vnd.ms-excel'\n });\n var fileURL = URL.createObjectURL(newFIle);\n var a = $document[0].createElement(\"a\");\n $document[0].body.appendChild(a);\n a.style = \"display: none\";\n a.href = fileURL;\n a.download = $translate.instant('checklist.report') + \"_\" + date + \".xls\";\n a.click();\n vm.disableExport = false;\n\n }).catch(function () {\n ToastUtil.showToastMessage($translate.instant(\"service.load.error\"), ToastUtil.ToastType.ERROR);\n vm.disableExport = false;\n });\n }\n }; \n function clearProcessValues()\n {\n if(angular.isDefined(vm.checklist.CheckListTemplate.ChecklistTemplateProcesses))\n {\n for (var i = 0; i < vm.checklist.CheckListTemplate.ChecklistTemplateProcesses.length; i++) {\n if(angular.isDefined(vm.checklist.CheckListTemplate.ChecklistTemplateProcesses[i].ChecklistTemplateParameters))\n {\n if(vm.checklist.CheckListTemplate.ChecklistTemplateProcesses[i].ChecklistTemplateParameters.length > 0)\n {\n for (var j = 0; j < vm.checklist.CheckListTemplate.ChecklistTemplateProcesses[i].ChecklistTemplateParameters.length; j++) {\n vm.checklist.CheckListTemplate.ChecklistTemplateProcesses[i].ChecklistTemplateParameters[j].ChecklistsResultAttachments = [];\n vm.checklist.CheckListTemplate.ChecklistTemplateProcesses[i].ChecklistTemplateParameters[j].ChecklistsResultAttachmentsTemp = [];\n vm.checklist.CheckListTemplate.ChecklistTemplateProcesses[i].ChecklistTemplateParameters[j].ParamRemarkTemp = '';\n vm.checklist.CheckListTemplate.ChecklistTemplateProcesses[i].ChecklistTemplateParameters[j].ParamResultTemp = '';\n vm.checklist.CheckListTemplate.ChecklistTemplateProcesses[i].ChecklistTemplateParameters[j].ProcessIsActiveTemp = true;\n }\n }\n }\n }\n }\n }\n\n /**\n * retruns a new version.\n * @param currentVersion\n * @returns {string}\n */\n function getNewVersion(currentVersion) {\n var temp = parseFloat(currentVersion).toFixed(1);\n\n var values = temp.split(\".\");\n if( parseFloat(values[1]) <= 8 ) {\n values[1] = parseFloat(values[1]) + 1;\n } else {\n values[0] = parseFloat(values[0]) + 1;\n values[1] = 0;\n }\n\n return values[0] + \".\" + values[1];\n }\n\n function save(){\n vm.isSaving = true;\n vm.checklist.UserLogged = $window.localStorage.userID;\n\n ChecklistService.saveChecklist(vm.checklist)\n .then(function () {\n vm.isSaving = false;\n $state.go('checklists');\n ToastUtil.showToastMessage($translate.instant(\"new.checklist.save.success\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(function (error) {\n $log.log(error);\n\n if(vm.lastStatusChecklist) {\n vm.checklist.Status = vm.lastStatusChecklist;\n }\n vm.isSaving = false;\n\n if (error.status === $scope.HttpStatusCodeConflict) {\n $state.go('checklists');\n ToastUtil.showToastMessage($translate.instant(\"msg.error.model.already.updated\"), ToastUtil.ToastType.WARN);\n }\n else if(error.data && error.data.ToastType == 1){\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n else if(error.status != $scope.HttpStatusUnauthorized){\n ToastUtil.showToastMessage($translate.instant(\"new.checklist.save.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function loadChecklistById() {\n //Load in edit mode\n ChecklistService.getChecklistById(vm.idToEdit)\n .then(function (response) {\n vm.checklist = angular.copy(response);\n vm.isTemplateCmbDisabled = true;\n vm.checklist.CreatedDate = moment(vm.checklist.CreatedDate, 'YYYY/MM/DD').toDate();\n vm.checklist.UpdatedDateTemp = moment(vm.checklist.UpdatedDate).format(\"DD/MM/YYYY HH:mm:ss\");\n vm.checklist.StartDate = moment(vm.checklist.StartDate, 'YYYY/MM/DD').toDate();\n setTemplateToEdit();\n })\n .catch(function (error) {\n $log.log(error);\n\n if(error.data && error.data.ToastType == 1){\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n else if(error.status != $scope.HttpStatusUnauthorized){\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function setTemplateToEdit(){\n if ( vm.checklist != undefined && vm.checklist.CheckListTemplate != undefined && vm.templateOptions != undefined ) {\n vm.selectedChecklistTemplateProcesses = vm.checklist.CheckListTemplate.ChecklistTemplateProcesses[0];\n var isTemplateInactive = true;\n\n angular.forEach(vm.templateOptions.resultList, function(value, key){\n if ( value.Id == vm.checklist.CheckListTemplate.Id) {\n vm.templateOptions.resultList.splice(key, 1);\n vm.templateOptions.resultList.push(vm.checklist.CheckListTemplate);\n isTemplateInactive = false;\n }\n });\n\n if( isTemplateInactive ){\n vm.templateOptions.resultList.push(vm.checklist.CheckListTemplate);\n }\n \n vm.disableExport = !angular.copy(vm.profile.CanExport);\n }\n }\n\n /**\n * Init Object to new Checklist.\n */\n function initNewChecklist() {\n vm.checklist.Version = \"1.0\";\n vm.checklist.CreatedBy = getCurrentUser();\n vm.checklist.UpdatedBy = getCurrentUser();\n vm.checklist.UpdatedDateTemp = moment(new Date()).format(\"DD/MM/YYYY HH:mm:ss\");\n vm.checklist.Status = vm.statusList[0].id; //OnGoing\n vm.checklist.Business = {Id: AuthService.getBusinessId()};\n }\n\n function getCurrentUser() {\n return { Name: vm.currentUser.Name, Id: vm.currentUser.Id };\n }\n\n /**\n * Load All templates to combo component\n */\n function loadAllChecklistTemplate(){\n DefaultService.listAllChecklistsTemplate(vm.searchParams)\n .then(function (response) {\n vm.templateOptions = angular.copy(response);\n if(vm.idToEdit) {\n setTemplateToEdit();\n }\n })\n .catch(function (error) {\n $log.log(error);\n\n if(error.data && error.data.ToastType == 1){\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n else if(error.status != $scope.HttpStatusUnauthorized){\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n }\n });\n }\n\n function loadCurrentUser() {\n vm.currentUser = {\n Id: $window.localStorage.userID,\n Name : $window.localStorage.aliasAqms\n };\n }\n\n function loadProfileModules() {\n var profileModule = {};\n\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.moduleChecklist;\n\n DefaultService.loadModules(profileModule)\n .then(\n function (response) {\n vm.profile = angular.copy(response);\n\n InitPageValidatePermissions();\n })\n .catch(\n function (error) {\n $log.log(error);\n\n if (error.status === $scope.HttpStatusCodeConflict) {\n $state.go('checklists');\n ToastUtil.showToastMessage($translate.instant(\"msg.error.model.already.updated\"), ToastUtil.ToastType.WARN);\n }\n else if(error.data && error.data.ToastType == 1)\n {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n else if(error.status != $scope.HttpStatusUnauthorized){\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n }\n\n });\n }\n\n function InitPageValidatePermissions(){\n //IF Checklist Edition\n if (!angular.isUndefined(vm.idToEdit) && vm.idToEdit > 0) {\n validateEditPermission();\n loadChecklistById(vm.idToEdit);\n }\n else {\n validateAddPermission();\n initNewChecklist();\n }\n }\n\n function validateEditPermission() {\n if (!vm.profile.CanEdit) {\n $state.go('not-authorized', {}, {});\n }\n }\n\n function validateAddPermission() {\n if (!vm.profile.CanAdd) {\n $state.go('not-authorized', {}, {});\n }\n }\n\n function validateApprovePermission(){\n if(!vm.profile.CanApprove){\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n return false;\n }\n\n return true;\n }\n\n function init() {\n vm.idToEdit = $stateParams.Id;\n\n loadProfileModules();\n if(vm.idToEdit === undefined || vm.idToEdit === null || vm.idToEdit === 0)\n loadAllChecklistTemplate();\n loadCurrentUser();\n vm.setWeek();\n }\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(ChecklistTranslate);\n\n /** @ngInject */\n function ChecklistTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'checklist.title': 'Checklist',\n 'checklist.title.new': 'New Checklist',\n 'checklist.title.edit': 'Checklist Editing',\n 'checklist.title.template': 'New Template',\n 'checklist.title.template.edit': 'Checklist Template Editing',\n 'checklist.title.checklists': 'Checklists',\n 'checklist.title.templates': 'Checklists Templates',\n 'checklist.title.process': 'Processes - Occurrences / Check Items / Total Items',\n 'checklist.title.processTitle': 'Process Title',\n 'checklist.title.controlParametersTitle': 'Control Parameters Title',\n 'checklist.title.inspection': 'Inspection',\n 'checklist.title.frequency': 'Frequency',\n 'checklist.title.specification': 'Specification',\n 'checklist.title.patrolResult': 'Patrol Result',\n 'checklist.title.remarkDetail': 'Remark / Detail',\n 'checklist.title.evidence': 'Evidence',\n 'checklist.title.copyTemplate': 'Make a copy of this template',\n 'checklist.identification': 'Checklist Identification',\n 'checklist.template.identification': 'Template Identification',\n 'checklist.use.item': 'Use this checklist',\n 'checklist.copyTemplate.title': 'Copy of #title',\n 'checklist.button.takePicture': 'Take a picture',\n 'checklist.button.copy': 'Copy',\n 'checklist.button.create.template': 'Create new template',\n 'checklist.button.send': 'Send to Approval',\n 'checklist.button.approve': 'Approve',\n 'checklist.label.copyTemplate': 'New template title',\n 'checklist.label.checklistTitle': 'Checklist Title',\n 'checklist.label.templateTitle': 'Template Title',\n 'checklist.label.templateVersion': 'Template Version',\n 'checklist.label.checklist.name': 'Checklist Title',\n 'checklist.label.checklist.startdate': 'Start date',\n 'checklist.label.checklist.occurrence': 'Occurrence',\n 'checklist.label.template.name': 'Template Title',\n 'checklist.label.model': 'Model',\n 'checklist.label.startDate': 'Start Date',\n 'checklist.label.project': 'Project',\n 'checklist.label.client': 'Client',\n 'checklist.label.turn': 'Turn',\n 'checklist.label.week': 'Week',\n 'checklist.label.version': 'Version',\n 'checklist.label.status': 'Status',\n 'checklist.label.ongoing': 'On Going',\n 'checklist.label.approved': 'Approved',\n 'checklist.label.sent': 'Pending Approval',\n 'checklist.label.newTemplate': 'Create Checklist Template',\n 'checklist.label.approvedBy': 'Approved by',\n 'checklist.label.createdBy': 'Created by',\n 'checklist.label.addProcess': 'Add Process',\n 'checklist.label.editProcess': 'Edit Process',\n 'checklist.label.addParameters': 'Add Control Parameters',\n 'checklist.label.newParameters': 'New Control Parameters',\n 'checklist.label.editParameters': 'Edit Control Parameters',\n 'checklist.label.lessThan': '<',\n 'checklist.label.greaterThan': '>',\n 'checklist.label.range': 'to',\n 'checklist.label.equalTo': 'Equal to',\n 'checklist.label.okNok': 'OK / NOK',\n 'checklist.placeholder.copyTemplate': 'Write the new template title...',\n 'checklist.placeholder.search.checklists': 'Search Checklist by title or id',\n 'checklist.placeholder.search.templates': 'Search by title or id',\n 'checklist.placeholder.edit.title': 'Write the Checklist title...',\n 'checklist.placeholder.process.title': 'Write the process title...',\n 'checklist.placeholder.controlParam.title': 'Write a control parameters title...',\n 'checklist.placeholder.controlParam.inspection': 'Write the inspection...',\n 'checklist.placeholder.controlParam.specification': 'Write the specification...',\n 'checklist.placeholder.controlParam.frequency': 'Write the frequency...',\n 'checklist.validation.checklistStartDate.required': 'Start Date is required.',\n 'checklist.validation.title.required': 'Control parameters title is required.',\n 'checklist.validation.ValueReference2.invalid': 'The second value must be greater than the first value.',\n 'checklist.validation.title.exist': 'Title already exist.',\n 'checklist.validation.inspection.required': 'Inspection is required.',\n 'checklist.validation.specification.required': 'Specification is required.',\n 'checklist.validation.frequency.required': 'Frequency is required.',\n 'checklist.validation.double': 'Invalid parameter.',\n 'checklist.not.found.process': 'No process found.',\n 'dialog.title.patrolResult': 'Confirm result',\n 'dialog.confirm.patrolResult': 'The reported result is different than expected. Do you want to confirm this result?',\n 'checklist.notFoundTemplates': 'No checklist template found.',\n 'checklist.deleted.success': 'Checklist template deleted with success.',\n 'checklist.deleted.error': 'There was an error deleting the checklist template.',\n 'error.checklist.search': 'An error occurred when trying to load a list of checklist template.',\n 'error.checklist.search.template': 'An error occurred when trying to load a checklist template.',\n 'checklist.template.save.error': 'There was an error saving the checklist template.',\n 'checklist.template.save.success': 'Checklist template saved with success.',\n 'checklist.btn.new': 'New Checklist',\n 'new.checklist.cmb.template': 'Template',\n 'button.copy': 'Copy',\n 'checklist.template.new.version': 'You will be creating a new version of this Checklist Template, describe the changes you have made:',\n 'checklist.modal.new.version': 'You will be creating a new version of this Checklist, describe the changes you have made:',\n 'checklist.template.save.title.failed': 'Title of template already registered.',\n 'checklist.template.deleted.failed': 'Could not delete this template. There is an associated checklist.',\n 'checklist.template.statusEnable': 'Active',\n 'checklist.template.statusDisable': 'Inactive',\n 'checklist.template.allStatus': 'All status',\n 'checklist.template.allmodels': 'All models',\n 'checklist.template.search.version': 'Search by version',\n 'checklist.template.list.activate': 'Activate',\n 'checklist.template.list.inactivate': 'Inactivate',\n 'checklist.template.list.active': 'Active',\n 'checklist.template.list.inactive': 'Inactive',\n 'new.checklist.cmb.template.hint': 'Select the checklist template...',\n 'new.checklist.cmb.model.hint': 'Select the model to checklist...',\n 'new.checklist.save.success': 'Checklist saved with success.',\n 'new.checklist.save.error': 'An error occoured when trying to save checklist, please contact your administrator.',\n 'checklist.copy.dialog.title': 'Alteration Remark',\n 'newchecklist.validation.template.required': 'You need to select a template.',\n 'newchecklist.validation.startdate.required': 'Start date is required.',\n 'newchecklist.validation.model.required': 'You need to select a model.',\n 'newchecklist.validation.reference1': 'Informed value does not match with reference value.',\n 'newchecklist.reference.value': 'Reference value: ',\n 'load.all.checklist.error': 'Error while trying to load checklists.',\n 'load.all.checklist.notFound': 'No Checklist found.',\n 'checklist.delete.error': 'An error occurred while trying to remove the checklist.',\n 'checklist.delete.success': 'Checklist successfully removed.',\n 'error.msg.checklist.send.approval': 'The status of checklist is not correct, checklist needs to be submitted for approval.',\n 'error.msg.template.process.parameters.invalid': 'You must add at least one process and one parameter.',\n 'checklist.label.filter.ocorrences': 'Filter Ocurrences',\n 'checklist.label.total.processes': 'Processes',\n 'checklist.label.total.complete': 'Complete',\n 'checklist.label.total.occurrences': 'Occurrences',\n 'checklist.label.total.pendent': 'Pending Items',\n 'load.all.occurrences.notFound': 'No Occurrences found.',\n 'checklist.report': 'Report_Checklist'\n });\n\n $translateProvider.translations('pt', {\n 'checklist.title': 'Checklist',\n 'checklist.title.new': 'Novo Checklist',\n 'checklist.title.edit': 'Edição de Checklist',\n 'checklist.title.template': 'Novo Template',\n 'checklist.title.template.edit': 'Edição de Template',\n 'checklist.title.checklists': 'Checklists',\n 'checklist.title.templates': 'Checklists Templates',\n 'checklist.title.process': 'Processos - Ocorrências / Items realizados / Total Itens', \n 'checklist.title.processTitle': 'Título do Processo',\n 'checklist.title.controlParametersTitle': 'Título dos Parâmetros de Controle',\n 'checklist.title.inspection': 'Inspeção',\n 'checklist.title.frequency': 'Frequência',\n 'checklist.title.specification': 'Especificação',\n 'checklist.title.patrolResult': 'Julgamento',\n 'checklist.title.remarkDetail': 'Observação / Detalhe',\n 'checklist.title.evidence': 'Evidência',\n 'checklist.title.copyTemplate': 'Fazer uma cópia deste template',\n 'checklist.identification': 'Identificação do Checklist',\n 'checklist.template.identification': 'Identificação do Template',\n 'checklist.use.item': 'Usar este checklist',\n 'checklist.copyTemplate.title': 'Cópia de #title',\n 'checklist.button.takePicture': 'Tire uma foto',\n 'checklist.button.copy': 'Copiar',\n 'checklist.button.send': 'Enviar para Aprovação',\n 'checklist.button.approve': 'Aprovar',\n 'checklist.button.create.template': 'Criar novo template',\n 'checklist.label.copyTemplate': 'Título do novo template',\n 'checklist.label.checklistTitle': 'Título do Checklist',\n 'checklist.label.templateTitle': 'Título do Template',\n 'checklist.label.templateVersion': 'Versão do Template',\n 'checklist.label.checklist.name': 'Título do Checklist',\n 'checklist.label.checklist.occurrence': 'Ocorrência',\n 'checklist.label.checklist.startdate': 'Data de início',\n 'checklist.label.template.name': 'Título do Template',\n 'checklist.label.project': 'Projeto',\n 'checklist.label.client': 'Cliente',\n 'checklist.label.turn': 'Turno',\n 'checklist.label.model': 'Modelo',\n 'checklist.label.startDate': 'Data de Início',\n 'checklist.label.week': 'Semana',\n 'checklist.label.version': 'Versão',\n 'checklist.label.status': 'Situação',\n 'checklist.label.ongoing': 'Em Andamento',\n 'checklist.label.approved': 'Aprovado',\n 'checklist.label.sent': 'Pendente de Aprovação',\n 'checklist.label.newTemplate': 'Criar Template de Checklist',\n 'checklist.label.approvedBy': 'Aprovado por',\n 'checklist.label.createdBy': 'Criado por',\n 'checklist.label.addProcess': 'Adicionar Processo',\n 'checklist.label.editProcess': 'Editar Processo',\n 'checklist.label.addParameters': 'Adicionar Parâmetros de Controle',\n 'checklist.label.newParameters': 'Criar Parâmetros de Controle',\n 'checklist.label.editParameters': 'Editar Parâmetros de Controle',\n 'checklist.label.lessThan': '<',\n 'checklist.label.greaterThan': '>',\n 'checklist.label.range': 'até',\n 'checklist.label.equalTo': 'Igual a',\n 'checklist.label.okNok': 'OK / NOK',\n 'checklist.placeholder.copyTemplate': 'Escreva o título do novo template...',\n 'checklist.placeholder.search.checklists': 'Buscar Checklist por título ou id',\n 'checklist.placeholder.search.templates': 'Buscar por título ou id',\n 'checklist.placeholder.edit.title': 'Escreva o título do Checklist...',\n 'checklist.placeholder.process.title': 'Escreva o título do processo...',\n 'checklist.placeholder.controlParam.title': 'Escreva um tíulo para os parâmetros de controle...',\n 'checklist.placeholder.controlParam.inspection': 'Escreva a inspeção...',\n 'checklist.placeholder.controlParam.specification': 'Escreva a especificação...',\n 'checklist.placeholder.controlParam.frequency': 'Escreva a frequência...',\n 'checklist.validation.checklistStartDate.required': 'Data de início é obrigatória.',\n 'checklist.validation.title.required': 'Título dos parâmetros de controle é obrigatório.',\n 'checklist.validation.ValueReference2.invalid': 'O segundo valor precisa ser maior do que o primeiro.',\n 'checklist.validation.title.exist': 'Título já existente.',\n 'checklist.validation.inspection.required': 'Inspeção é obrigatória.',\n 'checklist.validation.specification.required': 'Especificação é obrigatória.',\n 'checklist.validation.frequency.required': 'Frequência é obrigatória.',\n 'checklist.validation.double': 'Parâmetro inválido.',\n 'checklist.not.found.process': 'Nenhum processo encontrado.',\n 'dialog.title.patrolResult': 'Confirmar resultado',\n 'dialog.confirm.patrolResult': 'O resultado informado é diferente do esperado. Deseja confirmar este resultado?',\n 'checklist.notFoundTemplates': 'Nenhum checklist template encontrado.',\n 'checklist.deleted.success': 'O checklist template foi excluído com sucesso.',\n 'checklist.deleted.error': 'Ocorreu um erro ao deletar o checklist template.',\n 'error.checklist.search': 'Não foi possível carregar a lista de checklist template, tente novamente ou contate um administrador.',\n 'error.checklist.search.template': 'Não foi possível carregar o checklist template, tente novamente ou contate um administrador.',\n 'checklist.template.save.error': 'Ocorreu um erro ao salvar o checklist template.',\n 'checklist.template.save.success': 'Checklist template salvo com sucesso.',\n 'checklist.btn.new': 'Novo Checklist',\n 'new.checklist.cmb.template': 'Template',\n 'button.copy': 'Copiar',\n 'checklist.template.new.version': 'Você estará criando uma nova versão deste Checklist Template, descreva as alterações realizadas:',\n 'checklist.modal.new.version': 'Você estará criando uma nova versão deste Checklist, descreva as alterações realizadas:',\n 'checklist.template.save.title.failed': 'Título de template já cadastrado.',\n 'checklist.template.deleted.failed': 'Não foi possível deletar esse template. Existe um checklist associado.',\n 'checklist.template.statusEnable': 'Ativo',\n 'checklist.template.statusDisable': 'Inativo',\n 'checklist.template.allStatus': 'Todos as situações',\n 'checklist.template.allmodels': 'Todos os modelos',\n 'checklist.template.search.version': 'Pesquisar por versão',\n 'checklist.template.list.activate': 'Ativar',\n 'checklist.template.list.inactivate': 'Inativar',\n 'checklist.template.list.active': 'Ativo',\n 'checklist.template.list.inactive': 'Inativo',\n 'new.checklist.cmb.template.hint': 'Selecione o template do checklist...',\n 'new.checklist.cmb.model.hint': 'Selecione o modelo para o checklist...',\n 'new.checklist.save.success': 'Checklist salvo com sucesso.',\n 'new.checklist.save.error': 'Ocorreu um erro ao cadastrar o checklist, entre em contato com o administrador.',\n 'checklist.copy.dialog.title': 'Observação de Alteração',\n 'newchecklist.validation.template.required': 'Você precisa selecionar um template.',\n 'newchecklist.validation.startdate.required': 'Data de início é obrigatório.',\n 'newchecklist.validation.model.required': 'Você precisa selecionar um modelo.',\n 'newchecklist.validation.reference1': 'Valor informado não corresponde ao valor de referência.',\n 'newchecklist.reference.value': 'Valor de referência: ',\n 'load.all.checklist.error': 'Erro ao tentar carregar os checklists.',\n 'load.all.checklist.notFound': 'Nenhum Checklist encontrado.',\n 'checklist.delete.error': 'Ocorreu um erro ao tentar remover o checklist.',\n 'checklist.delete.success': 'Checklist removido com sucesso.',\n 'error.msg.checklist.send.approval': 'A situação do checklist não está correta, o checklist precisa ser submetido para aprovação.',\n 'error.msg.template.process.parameters.invalid': 'É preciso adicionar pelo menos um processo e um parâmetro.',\n 'checklist.label.filter.ocorrences': 'Filtrar ocorrências',\n 'checklist.label.total.processes': 'Processos',\n 'checklist.label.total.complete': 'Completos',\n 'checklist.label.total.occurrences': 'Ocorrências',\n 'checklist.label.total.pendent': 'Itens pendentes',\n 'load.all.occurrences.notFound': 'Nenhuma Ocorrência encontrada.',\n 'checklist.report': 'Relatório_Checklist'\n });\n }\n})();\n\n(function() {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('ChecklistService', ChecklistService);\n\n /** @ngInject */\n function ChecklistService($window, $injector, $q, ConfigurationService) {\n var CHECKLIST_TEMPLATE_BASE = \"/checklist-template\";\n var CHECKLIST_BASE = \"/checklist\";\n return {\n\n listAllChecklistsTemplate: function(filtro) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + CHECKLIST_TEMPLATE_BASE + '/template/',\n {\n params: filtro\n })\n .then(\n function(response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function(error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n saveChecklistTemplate: function (template) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + CHECKLIST_TEMPLATE_BASE + \"/template/\", template)\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n }\n , function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n inactivateChecklistTemplate: function (template) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + CHECKLIST_TEMPLATE_BASE + \"/template/inactivate\", template, {headers: {'Authorization': $window.localStorage.aqmsToken}})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n }\n , function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n validateTemplateAssociated: function (templateId) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + CHECKLIST_TEMPLATE_BASE + '/template/validateAssociated/' + templateId,\n {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function(response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function(error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n validateTemplateSameTitle: function (templateId, templateTitle) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n var obj = {\n TemplateId: templateId,\n TemplateTitle: templateTitle\n }\n\n $http.get(ConfigurationService.getServiceHost() + CHECKLIST_TEMPLATE_BASE + '/template/validateTemplateSameTitle/', {\n params: obj\n })\n .then(\n function(response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function(error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n deleteTemplate: function(id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n var domain = \"/template/\";\n\n $http.delete(ConfigurationService.getServiceHost() + CHECKLIST_TEMPLATE_BASE + domain + id, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function(response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function(error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n\n //CHECKLIST Methods\n\n saveChecklist: function (checklist) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + CHECKLIST_BASE, checklist, {headers: {'Authorization': $window.localStorage.aqmsToken}})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n }\n , function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getChecklistById: function(Id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + CHECKLIST_BASE + '/byId/' + Id,\n {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function(response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function(error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getChecklistTemplateById: function(id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + CHECKLIST_TEMPLATE_BASE + '/template/' + id,\n {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function(response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function(error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n listAllChecklists: function(filterParams) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + CHECKLIST_BASE + '/',\n {\n params: filterParams\n })\n .then(\n function(response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function(error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n deleteChecklist: function(id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + CHECKLIST_BASE + \"/\" + id, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function(response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function(error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n export: function (Id, language) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + CHECKLIST_BASE + '/export/' + Id + '/' + language,\n {\n responseType: 'arraybuffer'\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n }\n , function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n\n };\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(ChecklistRouter);\n\n /** @ngInject */\n function ChecklistRouter($stateProvider) {\n\n\n $stateProvider.state('checklists', {\n url: '/checklist',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/checklist/checklists-list.html',\n controller: 'ChecklistsListController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'label.checklist'\n },\n authorize: true\n });\n\n $stateProvider.state('checklists-create', {\n url: '/checklist/create?template',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/checklist/checklists-edit.html',\n controller: 'ChecklistsEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'label.checklist'\n },\n authorize: true\n });\n\n $stateProvider.state('checklists-edit', {\n url: '/checklist/edit/:Id',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/checklist/checklists-edit.html',\n controller: 'ChecklistsEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'label.checklist'\n },\n\n authorize: true\n });\n\n $stateProvider.state('checklists-templates', {\n url: '/checklist/template',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/checklist/checklists-templates-list.html',\n controller: 'ChecklistsTemplatesListController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'label.checklist'\n },\n authorize: true\n });\n\n $stateProvider.state('templates-create', {\n url: '/checklist/template/create',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/checklist/checklists-templates-edit.html',\n controller: 'ChecklistsTemplatesEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'label.checklist'\n },\n authorize: true\n });\n\n $stateProvider.state('templates-edit', {\n url: '/checklist/template/edit/:Id',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/checklist/checklists-templates-edit.html',\n controller: 'ChecklistsTemplatesEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'label.checklist'\n },\n authorize: true\n });\n\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(BlockMaterialTranslate);\n\n /** @ngInject */\n function BlockMaterialTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'blockedmaterial.type.finishGood.label': 'Finish Good',\n 'blockedmaterial.type.rowMaterial.label': 'Row Material',\n 'blockedmaterial.type.material': 'Type Material',\n 'title.block.material': 'Blocked Material',\n 'label.new.block.material': 'New Blocked Material',\n 'label.edit.block.material': 'Blocked Material Editing',\n 'new.block.material.panel.identification': 'Block Material Identification',\n 'label.code': 'Code',\n 'label.material.description': 'Material',\n 'label.entry.date': 'Entry',\n 'label.vendor': 'Vendor',\n 'blockedmaterial.vendor.directive.placeholder': 'Input vendor name',\n 'blockedmaterial.search.status.placeholder': 'Search by status',\n 'label.stock.placeholder': 'Quantity In Stock',\n 'label.defect.placeholder': 'Ex:. Stained and deformed...',\n 'label.sap.placeholder': 'Ex:. ARB1',\n 'label.material.description.placeholder': 'Material Description associated with the code.',\n 'label.unit.value.placeholder': 'Enter the value without a semicolon or comma.',\n 'label.stock': 'Stock',\n 'label.sloc': 'SAP Location',\n 'label.claim': 'Claim Report Number',\n 'label.batch.materia': 'Batch of Material',\n 'label.location.bin': 'Physical Location In Stock',\n 'label.unit.value': 'Unit Value',\n 'label.total.value': 'Total Value',\n 'label.batch': 'Batch',\n 'label.days.after.sent': 'Days after sent',\n 'label.material.totalvalue': 'Total Amount',\n 'label.bin': 'Bin',\n 'search.list.description.label': 'Search by description',\n 'search.list.code.label': 'Search by code',\n 'search.list.bin.label': 'Search by bin',\n 'search.list.vendor.label': 'Search by vendor name',\n 'search.list.sloc.label': 'Search by SAP location',\n 'search.list.clean.btn.label': 'Clean',\n 'search.list.search.btn.label': 'Search',\n 'blockedmaterial.list.error': 'Error on load blocked material list',\n 'blockedmaterial.list.notfound': 'Blocked Material not found.',\n 'blockedmaterial.code.directive.placeholder': 'Input code material.',\n 'blockedmaterial.code.directive.required.msg': 'Code field is required.',\n 'blockedmaterial.code.confirm.dialog.title': 'Edit Blocked Material',\n 'blockedmaterial.code.confirm.dialog.message': 'When you select the item (#description), you are editing it.',\n 'blockedmaterial.stock.informations.label': 'Stock Informations',\n 'blockedmaterial.stock.quantity.label': 'Stock',\n 'blockedmaterial.stock.unitvalue.label': 'Unit Value (R$)',\n 'blockedmaterial.stock.currency.select.placeholder': 'Select a currency',\n 'blockedmaterial.stock.currency.label': 'Currency',\n 'blockedmaterial.stock.batch.label': 'Batch',\n 'blockedmaterial.stock.defect.label': 'Defect',\n 'blockedmaterial.stock.edit.update.label': 'Update',\n 'blockedmaterial.stock.status.label': 'Status',\n 'blockedmaterial.stock.status.active.label': 'Opened',\n 'blockedmaterial.stock.status.open.label': 'Open',\n 'blockedmaterial.stock.status.inactive.label': 'Closed',\n 'blockedmaterial.stock.status.close.label': 'Close',\n 'blockedmaterial.save.success.msg': 'Blocked material saved with success.',\n 'blockedmaterial.save.error.msg': 'An error occurred when try to save blocked material.',\n 'blockedmaterial.load.byid.error.msg': 'An error occurred when try to load blocked material.',\n 'blockedmaterial.delete.error.msg': 'An error occurred when try to remove blocked material.',\n 'blockedmaterial.delete.success.msg': 'Blocked material successfully removed.',\n 'blockedmaterial.edit.description.required.msg': 'Description field is required.',\n 'blockedmaterial.edit.sloc.required.msg': 'Sloc field is required.',\n 'blockedmaterial.edit.bin.required.msg': 'Bin field is required.',\n 'blockedmaterial.edit.quantity.required.msg': 'Quantity field is required.',\n 'blockedmaterial.edit.unityvalue.required.msg': 'Unity Value field is required.',\n 'blockedmaterial.edit.currence.required.msg': 'Currence field is required.',\n 'blockedmaterial.edit.batch.required.msg': 'Batch field is required.',\n 'blockedmaterial.edit.entrydate.required.msg': 'Entry Date field is required.',\n 'blockedmaterial.edit.vendor.required.msg': 'Vendor field is required.',\n 'blockedmaterial.edit.defect.required.msg': 'Defect field is required.',\n 'blockedmaterial.edit.d8.required.msg': '8D field is required.',\n 'blockedmaterial.report.name': 'blocked_material_',\n 'blockedmaterial.email.group.tab.label': 'Email Group',\n 'blockedmaterial.email.group.description.label.finish.good': 'Blocked Material Notification Emails Finish Good',\n 'blockedmaterial.email.group.description.label.row.material': 'Blocked Material Notification Emails Row Material',\n 'blockedmaterial.email.group.filterby.email.placeholder': 'Filter by email...',\n 'blockedmaterial.email.group.email.label': 'Email',\n 'blockedmaterial.load.group.email.error.msg': 'An error occurred when try to load emails.',\n 'blockedmaterial.remove.email.group.error.msg': 'An error occurred when try to remove email.',\n 'blockedmaterial.stock.attachments.label': 'Picture',\n 'blockedmaterial.list.total.items.label': 'Total items: ',\n 'blockedmaterial.list.total.amount.label': 'Total amount: ',\n 'blockedmaterial.list.change.status.modal.title.label': 'Remark',\n 'blockedmaterial.list.change.status.modal.msg.label': 'You are closing a stock item, please insert a remark.',\n 'blockedmaterial.label.remark': 'Remark',\n 'blockedmaterial.stock.closed.date.label': 'Closed Date',\n 'msg.same.code.description.error': 'There is already a registration registered with this Code or Material',\n 'blockedmaterial.search.type.material.placeholder': 'Search by Type Material'\n });\n\n $translateProvider.translations('pt', {\n 'blockedmaterial.type.finishGood.label': 'Finish Good',\n 'blockedmaterial.type.rowMaterial.label': 'Row Material',\n 'blockedmaterial.type.material': 'Tipo de Material',\n 'title.block.material': 'Material Bloqueado',\n 'label.new.block.material': 'Novo Material Bloqueado',\n 'label.edit.block.material': 'Edição de Material Bloqueado',\n 'new.block.material.panel.identification': 'Identificação do Material Bloqueado',\n 'label.code': 'Código',\n 'label.material.description': 'Material',\n 'label.entry.date': 'Entrada',\n 'label.vendor': 'Fornecedor',\n 'blockedmaterial.vendor.directive.placeholder': 'Insira o nome do fornecedor',\n 'blockedmaterial.code.directive.required.msg': 'O campo Código é obrigatório.',\n 'blockedmaterial.code.confirm.dialog.title': 'Editar Material Bloqueado',\n 'blockedmaterial.code.confirm.dialog.message': 'Ao selecionar o item (#description), você está editando o mesmo.',\n 'blockedmaterial.search.status.placeholder': 'Buscar pelo status',\n 'label.stock.placeholder': 'Quantidade em Estoque',\n 'label.defect.placeholder': 'Ex:. Manchado e deformado...',\n 'label.material.description.placeholder': 'Descrição do Material associado ao código.',\n 'label.sap.placeholder': 'Ex:. ARB1',\n 'label.unit.value.placeholder': 'Digite o valor sem ponto ou vírgula.',\n 'label.stock': 'Estoque',\n 'label.sloc': 'Localização SAP',\n 'label.claim': 'Número do Relatório de Reclamação',\n 'label.batch.materia': 'Lote do Material',\n 'label.location.bin': 'Locação Física no Estoque',\n 'label.unit.value': 'Valor unitário',\n 'label.total.value': 'Valor total',\n 'label.batch': 'Lote',\n 'label.days.after.sent': 'Dias após o envio',\n 'label.material.totalvalue': 'Valor Total',\n 'label.bin': 'Bin',\n 'search.list.description.label': 'Buscar pela descrição',\n 'search.list.code.label': 'Buscar pelo código',\n 'search.list.bin.label': 'Buscar pelo bin',\n 'search.list.vendor.label': 'Buscar pelo nome do fornecedor',\n 'search.list.sloc.label': 'Buscar pela localização SAP',\n 'search.list.clean.btn.label': 'Limpar',\n 'search.list.search.btn.label': 'Buscar',\n 'blockedmaterial.list.error': 'Erro ao carregar a lista de materiais bloqueados',\n 'blockedmaterial.list.notfound': 'Nenhum Material Bloqueado encontrado.',\n 'blockedmaterial.code.directive.placeholder': 'Insira o código do material.',\n 'blockedmaterial.stock.informations.label': 'Informações de Estoque',\n 'blockedmaterial.stock.quantity.label': 'Estoque',\n 'blockedmaterial.stock.unitvalue.label': 'Valor Unitário (R$)',\n 'blockedmaterial.stock.currency.select.placeholder': 'Selecione uma moeda',\n 'blockedmaterial.stock.currency.label': 'Moeda',\n 'blockedmaterial.stock.batch.label': 'Lote',\n 'blockedmaterial.stock.defect.label': 'Defeito',\n 'blockedmaterial.stock.edit.update.label': 'Atualizar',\n 'blockedmaterial.stock.status.label': 'Status',\n 'blockedmaterial.stock.status.active.label': 'Aberto',\n 'blockedmaterial.stock.status.open.label': 'Abrir',\n 'blockedmaterial.stock.status.inactive.label': 'Fechado',\n 'blockedmaterial.stock.status.close.label': 'Fechar',\n 'blockedmaterial.save.success.msg': 'Material bloqueado salvo com sucesso.',\n 'blockedmaterial.save.error.msg': 'Ocorreu um erro ao tentar salvar o material bloqueado.',\n 'blockedmaterial.load.byid.error.msg': 'Ocorreu um erro ao tentar carregar o material bloqueado.',\n 'blockedmaterial.delete.error.msg': 'Ocorreu um erro ao tentar remover o material bloqueado.',\n 'blockedmaterial.delete.success.msg': 'Material bloqueado removido com sucesso.',\n 'blockedmaterial.edit.description.required.msg': 'O campo Descrição é obrigatório.',\n 'blockedmaterial.edit.sloc.required.msg': 'O campo Sloc é obrigatório.',\n 'blockedmaterial.edit.bin.required.msg': 'O campo Bin é obrigatório.',\n 'blockedmaterial.edit.quantity.required.msg': 'O campo Quantidade é obrigatório.',\n 'blockedmaterial.edit.unityvalue.required.msg': 'O campo Valor Unitário é obrigatório.',\n 'blockedmaterial.edit.currence.required.msg': 'O campo Moeda é obrigatório.',\n 'blockedmaterial.edit.batch.required.msg': 'O campo Lote é obrigatório.',\n 'blockedmaterial.edit.entrydate.required.msg': 'O campo Data de Entrada é obrigatório.',\n 'blockedmaterial.edit.vendor.required.msg': 'O campo Fornecedor é obrigatório.',\n 'blockedmaterial.edit.defect.required.msg': 'O campo Defeito é obrigatório.',\n 'blockedmaterial.edit.d8.required.msg': 'O campo 8D é obrigatório.',\n 'blockedmaterial.report.name': 'material_bloqueado_',\n 'blockedmaterial.email.group.tab.label': 'Grupo de e-mail',\n 'blockedmaterial.email.group.description.label.finish.good': 'E-mails para notificação de Materiais Bloqueados Finish Good',\n 'blockedmaterial.email.group.description.label.row.material': 'E-mails para notificação de Materiais Bloqueados Row Material',\n 'blockedmaterial.email.group.filterby.email.placeholder': 'Filtrar pelo e-mail...',\n 'blockedmaterial.email.group.email.label': 'E-mail',\n 'blockedmaterial.load.group.email.error.msg': 'Ocorreu um erro ao tentar carregar os e-mails.',\n 'blockedmaterial.remove.email.group.error.msg': 'Ocorreu um erro ao tentar remover o email.',\n 'blockedmaterial.stock.attachments.label': 'Figura',\n 'blockedmaterial.list.total.items.label': 'Total de itens: ',\n 'blockedmaterial.list.total.amount.label': 'Valor total: ',\n 'blockedmaterial.list.change.status.modal.title.label': 'Observação',\n 'blockedmaterial.list.change.status.modal.msg.label': 'Você está fechando um item de estoque, por favor insira uma observação.',\n 'blockedmaterial.label.remark': 'Observação',\n 'blockedmaterial.stock.closed.date.label': 'Data de Fechamento',\n 'msg.same.code.description.error': 'Já existe um registro cadastrado com esse Código ou Material',\n 'blockedmaterial.search.type.material.placeholder': 'Buscar por Tipo de Material'\n });\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('BlockedMaterialService', BlockedMaterialService);\n\n var BLOCKED_MATERIAL_BASE = '/blocked-material/';\n /** @ngInject */\n function BlockedMaterialService($window, $injector, $q, ConfigurationService, AuthService) {\n return {\n\n listWithParams: function (filterParams) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BLOCKED_MATERIAL_BASE, {\n params: filterParams\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n listAll: function () {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BLOCKED_MATERIAL_BASE + \"listAll/\" + AuthService.getBusinessId(), {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n save: function (blockedMaterial) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + BLOCKED_MATERIAL_BASE, blockedMaterial, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n changeStatus: function (item) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + BLOCKED_MATERIAL_BASE + \"changeStatus/\", item, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getById: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BLOCKED_MATERIAL_BASE + 'byId/' + id, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n delete: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + BLOCKED_MATERIAL_BASE + \"/\" + id, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n exportXlsReport: function (filterParams, language) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BLOCKED_MATERIAL_BASE + '/export/' + language, {\n params: filterParams,\n responseType: 'arraybuffer'\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n isBlockedMaterialApprover: function () {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BLOCKED_MATERIAL_BASE + \"isApprover/\", {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n listAllBlockedMaterialEmails: function (type) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n var email = {};\n email.BusinessId = AuthService.getBusinessId();\n email.TypeMaterial = type;\n $http.get(ConfigurationService.getServiceHost() + BLOCKED_MATERIAL_BASE + '/getBlockedMaterialEmail/', {\n params: email\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n };\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(BlockMaterialRouter);\n\n /** @ngInject */\n function BlockMaterialRouter($stateProvider) {\n\n\n $stateProvider.state('block-material-list', {\n url: '/block-material',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/block_material/block-material-list.html',\n controller: 'BlockMaterialListController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.block.material'\n },\n authorize: true\n });\n\n $stateProvider.state('block-material-create', {\n url: '/block-material/create',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/block_material/block-material-edit.html',\n controller: 'BlockMaterialEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.block.material'\n },\n authorize: true\n });\n\n $stateProvider.state('block-material-edit', {\n url: '/block_material/edit/:Id',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/block_material/block-material-edit.html',\n controller: 'BlockMaterialEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.block.material'\n },\n authorize: true\n });\n\n $stateProvider.state('block-material-email-group', {\n url: '/block_material/email_group/',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/block_material/emailGroup/blocked-material-email-group.html',\n controller: 'BlockMaterialEmailGroupController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.block.material'\n },\n authorize: true\n });\n\n }\n})();\n\n/*eslint angular/json-functions: 0*/\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('BlockMaterialListController', BlockMaterialListController);\n\n function BlockMaterialListController(BlockedMaterialService, ToastUtil, $state, $translate, AuthService, $log,\n DialogControllerTemplate, moment, $scope, DefaultService, $window, $document) {\n\n var vm = this;\n\n vm.itensPerPageList = [\n {name: '5', value: 5, before: 0, after: 6}, \n {name: '10', value: 10, before: 5, after: 11}, \n {name: '20', value: 20, before: 10, after: 21}, \n {name: '30', value: 30, before: 20, after: 31}, \n {name: '40', value: 40, before: 30, after: 41}, \n {name: '50', value: 50, before: 40, after: 51}];\n \n vm.itemPerPage = vm.itensPerPageList[0];\n\n var profilePermission = {\n CanAdd: false,\n CanEdit: false,\n CanDelete: false,\n CanView: false,\n CanApprove: false,\n CanExport: false,\n CanConsult: false\n }\n\n vm.searchParams = {\n IdOrDescription: '',\n Code: '',\n SLOC: '',\n Bin: '',\n EntryDate: '',\n EntryDateEnd: '',\n VendorId: '',\n CsActive: '-1',\n TypeMaterial: \"-1\",\n BusinessId: AuthService.getBusinessId(),\n Page: 1,\n MaxPerPage: vm.itemPerPage.value\n };\n\n var userIsBlockedMaterialApprover = false;\n\n vm.blockedMaterialList = [];\n vm.totalList = 0;\n vm.totalValue = 0;\n vm.itemToChangeStatus = {};\n\n vm.shouldShow = function (item) {\n if(vm.totalList > 0 && item != undefined) {\n return vm.totalList >= item.value || (vm.totalList < item.after && vm.totalList > item.before);\n }\n return false;\n }\n \n vm.changeItemsPerPage = function() {\n if ( vm.itemPerPage == null ) {\n vm.itemPerPage = vm.itensPerPageList[0];\n }\n vm.searchParams.Page = 1;\n vm.searchParams.MaxPerPage = vm.itemPerPage.value;\n vm.searchBlockedMaterials()\n }\n\n function init() {\n loadProfileModules();\n vm.searchBlockedMaterials();\n }\n\n function loadProfileModules() {\n var profileModule = {};\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.moduleBlockedMaterial;\n DefaultService.loadModules(profileModule).then(function (response) {\n profilePermission = angular.copy(response);\n userIsBlockedMaterialApprover = profileModule.CanApprove;\n validateViewPermission();\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n });\n }\n\n \n function validateViewPermission() {\n if (!profilePermission.CanView) {\n $state.go('not-authorized', {}, {});\n }\n }\n\n /**\n * Return true if user is approver.\n * @returns {*}\n */\n vm.userIsApprover = function () {\n return (AuthService.isSysAdmin() || userIsBlockedMaterialApprover);\n }\n\n vm.search = function() {\n vm.itemPerPage = vm.itensPerPageList[0];\n vm.searchParams.Page = 1;\n vm.searchParams.MaxPerPage = vm.itemPerPage.value;\n vm.searchBlockedMaterials();\n }\n\n vm.searchBlockedMaterials = function () {\n if (sessionStorage.getItem(\"searchParams\")) {\n vm.searchParams = JSON.parse(sessionStorage.getItem(\"searchParams\"));\n sessionStorage.removeItem(\"searchParams\");\n vm.itensPerPageList.forEach(function(element) {\n if (element.value == vm.searchParams.MaxPerPage) {\n vm.itemPerPage = element;\n return;\n }\n });\n }\n\n var originalEntryDate = \"\";\n var originalEntryDateEnd = \"\";\n if (vm.searchParams.EntryDate != undefined && vm.searchParams.EntryDate != '') {\n\n originalEntryDate = angular.copy(vm.searchParams.EntryDate);\n vm.searchParams.EntryDate = moment(vm.searchParams.EntryDate).format('DD/MM/YYYY');\n }\n\n if (vm.searchParams.EntryDateEnd != undefined && vm.searchParams.EntryDateEnd != '') {\n\n originalEntryDateEnd = angular.copy(vm.searchParams.EntryDateEnd);\n vm.searchParams.EntryDateEnd = moment(vm.searchParams.EntryDateEnd).format('DD/MM/YYYY');\n }\n\n if (vm.searchParams.Project) {\n vm.searchParams.ProjectId = vm.searchParams.Project.Id;\n } else {\n vm.searchParams.ProjectId = undefined;\n }\n\n if (vm.searchParams.Client) {\n vm.searchParams.ClientId = vm.searchParams.Client.Id;\n } else {\n vm.searchParams.ClientId = undefined;\n }\n\n if (vm.searchParams.Vendor) {\n vm.searchParams.VendorId = vm.searchParams.Vendor.Id;\n } else {\n vm.searchParams.VendorId = undefined;\n }\n\n var result = angular.copy(vm.searchParams);\n BlockedMaterialService.listWithParams(result).then(function (response) {\n vm.blockedMaterialList = angular.copy(response.BlockedMaterials);\n vm.totalList = response.TotalItems;\n vm.totalValue = response.TotalValue;\n\n }).catch(function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"blockedmaterial.list.error\"), ToastUtil.ToastType.ERROR);\n }\n });\n\n if (originalEntryDate != \"\") {\n vm.searchParams.EntryDate = originalEntryDate;\n }\n\n if (originalEntryDateEnd != \"\") {\n vm.searchParams.EntryDateEnd = originalEntryDateEnd;\n }\n };\n\n vm.clearSearchFields = function () {\n vm.searchParams.IdOrDescription = '';\n vm.searchParams.Code = '';\n vm.searchParams.SLOC = '';\n vm.searchParams.Bin = '';\n vm.searchParams.EntryDate = '';\n vm.searchParams.EntryDateEnd = '';\n vm.searchParams.Vendor = null;\n vm.searchParams.VendorId = '';\n vm.searchParams.CsActive = '-1';\n vm.searchParams.TypeMaterial = \"-1\";\n vm.searchParams.Project = null;\n vm.searchParams.Client = null;\n };\n\n vm.edit = function (id) {\n if (profilePermission.CanEdit) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('block-material-edit', {\n Id: id\n });\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n };\n\n vm.delete = function (id) {\n if (profilePermission.CanDelete) {\n BlockedMaterialService.delete(id).then(function () {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n vm.searchBlockedMaterials();\n ToastUtil.showToastMessage($translate.instant(\"blockedmaterial.delete.success.msg\"), ToastUtil.ToastType.SUCCESS);\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"blockedmaterial.list.error\"), ToastUtil.ToastType.ERROR);\n });\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n };\n\n vm.changeStatus = function (item) {\n if (profilePermission.CanEdit) {\n vm.itemToChangeStatus = angular.copy(item);\n if (item.CsActive === true || item.CsActive == \"true\") {\n DialogControllerTemplate.showWithCloseListener('blockedmaterial.list.change.status.modal.title.label', 'blockedmaterial.list.change.status.modal.msg.label', '', vm.confirmChangeStatus);\n } else {\n vm.confirmChangeStatus({\n value: ''\n });\n }\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n };\n\n function getCurrentUser() {\n var createdBy = {\n Name: $window.localStorage.aliasAqms,\n Id: $window.localStorage.userID\n };\n\n return createdBy;\n }\n\n vm.confirmChangeStatus = function (item) {\n if (profilePermission.CanEdit) {\n vm.itemToChangeStatus.ClosedBy = getCurrentUser();\n vm.itemToChangeStatus.Remark = item.value;\n vm.itemToChangeStatus.CsActive = vm.getInverseCsActive(vm.itemToChangeStatus);\n vm.itemToChangeStatus.ClosedDate = vm.itemToChangeStatus.CsActive ? null : moment(new Date().toString()).format('DD/MM/YYYY');\n BlockedMaterialService.changeStatus(vm.itemToChangeStatus).then(function () {\n vm.searchBlockedMaterials();\n ToastUtil.showToastMessage($translate.instant(\"blockedmaterial.save.success.msg\"), ToastUtil.ToastType.SUCCESS);\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"blockedmaterial.save.error.msg\"), ToastUtil.ToastType.ERROR);\n });\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n };\n\n vm.getInverseCsActive = function (item) {\n var csActive = false;\n if (item.CsActive == true || item.CsActive == 'true') {\n csActive = false;\n } else {\n csActive = true;\n }\n\n return csActive;\n };\n\n vm.getStatusDescription = function (item) {\n var msg = \"\";\n if (item.CsActive === true || item.CsActive == \"true\") {\n msg = \"blockedmaterial.stock.status.active.label\";\n } else {\n msg = \"blockedmaterial.stock.status.inactive.label\";\n }\n return msg;\n };\n\n vm.getTypeMaterialDescription = function (item) {\n var msg = \"\";\n if (item.TypeMaterial == 1) {\n msg = \"blockedmaterial.type.rowMaterial.label\";\n } else {\n msg = \"blockedmaterial.type.finishGood.label\";\n }\n return msg;\n };\n\n vm.getRemarkToHint = function (item) {\n if (item.CsActive === false) {\n var closedBy = $translate.instant(\"label.closedby\") + \": (\" + item.ClosedByName + \") \";\n var closedDate = $translate.instant(\"blockedmaterial.stock.closed.date.label\") + \": (\" + item.ClosedDate + \") \";\n return closedBy + closedDate + item.Remark;\n }\n };\n\n vm.create = function () {\n if (profilePermission.CanAdd) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('block-material-create', {});\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n }\n\n vm.createGroup = function () {\n if (profilePermission.CanApprove) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('block-material-email-group', {});\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n }\n\n vm.blockMaterialList = function () {\n if (profilePermission.CanApprove) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('block-material-list', {});\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n }\n\n vm.exportXlsReport = function () {\n if (profilePermission.CanExport) {\n if (!vm.disableExport) {\n vm.disableExport = true;\n\n BlockedMaterialService.exportXlsReport(vm.searchParams, $translate.use())\n .then(function (response) {\n\n var date = moment().format(\"DD_MM_YYYY_HH_mm_ss\");\n\n var newFIle = new Blob([response], {\n type: 'application/vnd.ms-excel'\n });\n var fileURL = URL.createObjectURL(newFIle);\n var a = $document[0].createElement(\"a\");\n $document[0].body.appendChild(a);\n a.style = \"display: none\";\n a.href = fileURL;\n a.download = $translate.instant('blockedmaterial.report.name') + AuthService.getBusinessName() + \"_\" + date + \".xls\";\n a.click();\n vm.disableExport = false;\n\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"service.load.error\"), ToastUtil.ToastType.ERROR);\n vm.disableExport = false;\n });\n }\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n };\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('BlockMaterialEditController', BlockMaterialEditController);\n\n function BlockMaterialEditController(BlockedMaterialService, ToastUtil, $stateParams, $state,\n $translate, $scope, $log, moment, AuthService, DefaultService, $window) {\n\n var vm = this;\n\n var rowMaterial = '1';\n\n var profilePermission = {\n CanAdd: false,\n CanEdit: false,\n CanDelete: false,\n CanView: false,\n CanApprove: false,\n CanExport: false,\n CanConsult: false\n }\n\n vm.stockObj = {};\n\n vm.isEditStockObj = false;\n\n vm.blockedMaterial = {\n BlockedMaterialStocks: []\n };\n\n vm.idToEdit = undefined;\n\n function init() {\n loadProfileModules();\n }\n\n function loadProfileModules() {\n var profileModule = {};\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.moduleBlockedMaterial;\n DefaultService.loadModules(profileModule).then(function (response) {\n profilePermission = angular.copy(response);\n\n vm.cleanStockObj();\n vm.idToEdit = $stateParams.Id;\n\n if (vm.idToEdit) {\n if (!profilePermission.CanEdit) {\n $state.go('not-authorized', {});\n } else {\n getBlockedMaterialToEdit();\n }\n } else {\n if (!profilePermission.CanAdd) {\n $state.go('not-authorized', {});\n }\n vm.blockedMaterial.TypeMaterial = rowMaterial;\n }\n vm.stockObj.CreatedBy = getCurrentUser();\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n });\n }\n\n function getCurrentUser() {\n var createdBy = {\n Name: $window.localStorage.aliasAqms,\n Id: $window.localStorage.userID\n };\n\n return createdBy;\n }\n\n vm.statusChange = function (item) {\n if (item === \"false\") {\n vm.stockObj.ClosedBy = getCurrentUser();\n } else {\n vm.stockObj.ClosedBy = undefined;\n }\n }\n\n function getBlockedMaterialToEdit() {\n BlockedMaterialService.getById(vm.idToEdit).then(function (response) {\n vm.blockedMaterial = angular.copy(response);\n vm.blockedMaterial.TypeMaterial = vm.blockedMaterial.TypeMaterial.toString();\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"blockedmaterial.load.byid.error.msg\"), ToastUtil.ToastType.ERROR);\n });\n }\n\n vm.save = function () {\n if (vm.canSave()) {\n if (angular.isUndefined(vm.blockedMaterial.Business)) {\n vm.blockedMaterial.Business = {};\n }\n\n if (angular.isObject(vm.blockedMaterial.Code)) {\n vm.blockedMaterial.Code = vm.blockedMaterial.Code.Code;\n }\n\n vm.blockedMaterial.Business.Id = AuthService.getBusinessId();\n\n BlockedMaterialService.save(angular.copy(vm.blockedMaterial)).then(function () {\n $state.go('block-material-list');\n ToastUtil.showToastMessage($translate.instant(\"blockedmaterial.save.success.msg\"), ToastUtil.ToastType.SUCCESS);\n }).catch(function (error) {\n $log.log(error);\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if (error.status === $scope.HttpStatusCodeConflict) {\n $state.go('block-material-list');\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n } else {\n if (error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(\"blockedmaterial.save.error.msg\"), ToastUtil.ToastType.ERROR);\n }\n }\n });\n }\n };\n\n vm.addStock = function () {\n if (vm.stockObj != undefined && vm.stockObj != null) {\n vm.handleStockBeforeAdd();\n vm.blockedMaterial.BlockedMaterialStocks.unshift(angular.copy(vm.stockObj));\n $scope.blockedMaterialForm.$setUntouched();\n vm.cleanStockObj();\n vm.stockObj.CreatedBy = getCurrentUser();\n }\n };\n\n vm.editStock = function (item) {\n vm.isEditStockObj = true;\n if (!item.IdTemp) {\n item.IdTemp = new Date().getTime();\n }\n\n var date = moment(item.EntryDate, 'DD/MM/YYYY');\n\n var copyOfItem = angular.copy(item);\n copyOfItem.CsActive = copyOfItem.CsActive === true || copyOfItem.CsActive == \"true\" ? \"true\" : \"false\";\n copyOfItem.EntryDate = new Date(date.year(), date.month(), date.date());\n vm.stockObj = copyOfItem;\n };\n\n vm.updateStockEdited = function () {\n angular.forEach(vm.blockedMaterial.BlockedMaterialStocks, function (stock) {\n if (stock.IdTemp == vm.stockObj.IdTemp) {\n vm.handleStockBeforeAdd();\n var index = vm.blockedMaterial.BlockedMaterialStocks.indexOf(stock);\n vm.blockedMaterial.BlockedMaterialStocks.splice(index, 1);\n vm.blockedMaterial.BlockedMaterialStocks.unshift(angular.copy(vm.stockObj));\n }\n });\n\n vm.isEditStockObj = false;\n vm.cleanStockObj();\n };\n\n vm.removeStockItem = function (item) {\n var index = vm.blockedMaterial.BlockedMaterialStocks.indexOf(item);\n vm.blockedMaterial.BlockedMaterialStocks.splice(index, 1);\n };\n\n /**\n * Handles stockObj before Add or update.\n */\n vm.handleStockBeforeAdd = function () {\n vm.stockObj.IdTemp = new Date().getTime();\n vm.stockObj.EntryDate = moment(vm.stockObj.EntryDate).format('DD/MM/YYYY');\n if (typeof vm.stockObj.Vendor == \"string\") {\n vm.stockObj.Vendor = {\n Id: null,\n Name: vm.stockObj.Vendor\n }\n }\n };\n\n /**\n * Event fired when an item from blockedMaterialCodeDirective\n * is selected.\n * @param item\n */\n vm.codeSelectedEvent = function (item) {\n vm.blockedMaterial = angular.copy(item);\n };\n\n vm.getStatusDescription = function (item) {\n var msg = \"\";\n if (item.CsActive === true || item.CsActive == \"true\") {\n msg = \"blockedmaterial.stock.status.active.label\";\n } else {\n msg = \"blockedmaterial.stock.status.inactive.label\";\n }\n return msg;\n };\n\n vm.getClosedDate = function () {\n if (vm.stockObj.ClosedDate == null || vm.stockObj.ClosedDate == undefined || vm.stockObj.ClosedDate == \"\") {\n vm.stockObj.ClosedDate = moment(new Date().toString()).format('DD/MM/YYYY');\n }\n };\n\n vm.getRemarkToHint = function (item) {\n if (item.CsActive === false || item.CsActive === 'false') {\n var closedBy = $translate.instant(\"label.closedby\") + \": (\" + item.ClosedBy.Name + \") \";\n var closedDate = $translate.instant(\"blockedmaterial.stock.closed.date.label\") + \": (\" + item.ClosedDate + \") \";\n return closedBy + closedDate + item.Remark;\n }\n };\n\n vm.cleanStockObj = function () {\n vm.stockObj = {\n CsActive: \"true\"\n };\n };\n\n /** Validations */\n vm.canSave = function () {\n return (vm.isCodeValid() && vm.isDescriptionValid()) && vm.blockedMaterial.BlockedMaterialStocks.length > 0 && vm.isModelValid();\n };\n\n vm.isModelValid = function () {\n return (vm.blockedMaterial.Models != undefined && vm.blockedMaterial.Models.length > 0);\n };\n\n /**\n * Validation to show required msg.\n * @returns {*|boolean}\n * @constructor\n */\n vm.ValidateModels = function () {\n return (vm.blockedMaterial.Models && vm.blockedMaterial.Models.length <= 0);\n };\n\n vm.isCodeValid = function () {\n var isValid = false;\n if (vm.blockedMaterial.Code != undefined && vm.blockedMaterial.Code != \"\") {\n isValid = true;\n }\n return isValid;\n };\n\n vm.isDescriptionValid = function () {\n var isValid = false;\n if (vm.blockedMaterial.Description != undefined && vm.blockedMaterial.Description != \"\") {\n isValid = true;\n }\n return isValid;\n };\n\n vm.isSlocValid = function () {\n var isValid = false;\n if (vm.stockObj.SLOC != undefined && vm.stockObj.SLOC != \"\") {\n isValid = true;\n }\n return isValid;\n\n };\n\n //Stock validations\n vm.isBinValid = function () {\n var isValid = false;\n if (vm.stockObj.Bin != undefined && vm.stockObj.Bin != \"\") {\n isValid = true;\n }\n return isValid;\n };\n\n vm.isQuantityValid = function () {\n var isValid = false;\n if (vm.stockObj.Quantity != undefined && vm.stockObj.Quantity != \"\") {\n isValid = true;\n }\n return isValid;\n };\n\n vm.isUnityValueValid = function () {\n var isValid = false;\n if (vm.stockObj.UnityValue != undefined && vm.stockObj.UnityValue != \"\") {\n isValid = true;\n }\n return isValid;\n };\n\n vm.isBatchValid = function () {\n var isValid = false;\n if (vm.stockObj.Batch != undefined && vm.stockObj.Batch != \"\") {\n isValid = true;\n }\n return isValid;\n };\n\n vm.isEntryDateValid = function () {\n var isValid = false;\n if (vm.stockObj.EntryDate != undefined && vm.stockObj.EntryDate != \"\") {\n isValid = true;\n }\n return isValid;\n };\n\n vm.isD8Valid = function () {\n var isValid = false;\n if (vm.stockObj.D8 != undefined && vm.stockObj.D8 != \"\") {\n isValid = true;\n }\n return isValid;\n };\n\n vm.isRemarkInvalid = function () {\n var isInvalid = false;\n if ((vm.stockObj.CsActive === false || vm.stockObj.CsActive == \"false\") && (vm.stockObj.Remark == undefined || vm.stockObj.Remark == \"\")) {\n isInvalid = true;\n }\n\n return isInvalid;\n }\n\n vm.isDefectValid = function () {\n var isValid = false;\n if (vm.stockObj.Defect != undefined && vm.stockObj.Defect != \"\") {\n isValid = true;\n }\n return isValid;\n };\n\n vm.isVendorValid = function () {\n var isValid = false;\n if (vm.stockObj.Vendor != undefined && vm.stockObj.Vendor != \"\") {\n isValid = true;\n }\n return isValid;\n };\n\n vm.canAddStockItem = function () {\n return vm.isBinValid() && vm.isQuantityValid() && vm.isUnityValueValid() && vm.isBatchValid() &&\n vm.isEntryDateValid() && vm.isVendorValid() && vm.isD8Valid() && vm.isDefectValid() && vm.isSlocValid() &&\n !vm.isRemarkInvalid();\n };\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(BasicTranslate);\n\n /** @ngInject */\n function BasicTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'title.basic': 'Basic Types',\n 'title.create.item': 'New Basic Type: {{ type }}',\n 'title.update.item': 'Edit Basic Type: {{ type }}',\n 'title.edit.item': 'Edit {{ type }}',\n 'placeholder.type.name': 'Write a name...',\n 'placeholder.type.value': 'Write a value...',\n 'basic.placeholder.search.name': 'Search by Name',\n 'label.new': 'New Basic Type',\n 'label.name': 'Name',\n 'label.value': 'Value',\n 'label.select.type': 'Type',\n 'item.not.found': 'Item not found',\n 'validation.name.required': 'Name is required.',\n 'basic.header.status.label': 'Status',\n 'basic.header.status.active.label': 'Active',\n 'basic.header.status.inactive.label': 'Inactive',\n\n 'basic.defect.save.success': 'Defect was successfully saved',\n 'basic.defect.save.error': 'An error occurred when try to save defect',\n 'basic.defect.load.all.error': 'An error occurred when try to load defects list',\n 'basic.defect.load.byid.error': 'An error occurred when try to load the defect',\n 'basic.defect.remove.success': 'Defect was successfully removed',\n 'basic.defect.remove.error': 'An error occurred when try to remove defect',\n 'basic.save.same.name.error': 'A record with the same name already exists.',\n 'basic.save.same.code.error': 'A record with the same code already exists.',\n\n 'basic.defect.action.save.success': 'Defect Action was successfully saved',\n 'basic.defect.action.save.error': 'An error occurred when try to save defect action',\n 'basic.defect.action.load.all.error': 'An error occurred when try to load defect action list',\n 'basic.defect.action.load.byid.error': 'An error occurred when try to load the defect action',\n 'basic.defect.action.remove.success': 'Defect Action was successfully removed',\n 'basic.defect.action.remove.error': 'An error occurred when try to remove defect action',\n\n 'basic.defect.type.save.success': 'Defect Type was successfully saved',\n 'basic.defect.type.save.error': 'An error occurred when try to save defect type',\n 'basic.defect.type.load.all.error': 'An error occurred when try to load defect type list',\n 'basic.defect.type.load.byid.error': 'An error occurred when try to load the defect type',\n 'basic.defect.type.remove.success': 'Defect Type was successfully removed',\n 'basic.defect.type.remove.error': 'An error occurred when try to remove defect type',\n\n 'basic.defect.root.cause.save.success': 'Root Cause was successfully saved',\n 'basic.defect.root.cause.save.error': 'An error occurred when try to save root cause.',\n 'basic.defect.root.cause.load.all.error': 'An error occurred when try to load root cause list.',\n 'basic.defect.root.cause.load.byid.error': 'An error occurred when try to load the root cause',\n 'basic.defect.root.cause.remove.success': 'Root Cause was successfully removed.',\n 'basic.defect.root.cause.remove.error': 'An error occurred when try to remove root cause.',\n\n 'basic.defect.occurrence.save.success': 'Defect Occurrence was successfully saved',\n 'basic.defect.occurrence.save.error': 'An error occurred when try to save defect occurrence.',\n 'basic.defect.occurrence.load.all.error': 'An error occurred when try to load defect occurrence list.',\n 'basic.defect.occurrence.load.byid.error': 'An error occurred when try to load the defect occurrence',\n 'basic.defect.occurrence.remove.success': 'Defect Occurrence was successfully removed.',\n 'basic.defect.occurrence.remove.error': 'An error occurred when try to remove defect occurrence.',\n\n 'basic.model.save.success': 'Model was successfully saved',\n 'basic.model.save.error': 'An error occurred when try to save Model',\n 'basic.model.load.all.error': 'An error occurred when try to load model list',\n 'basic.model.load.byid.error': 'An error occurred when try to load the model',\n 'basic.model.remove.success': 'Model was successfully removed',\n 'basic.model.remove.error': 'An error occurred when try to remove model',\n\n 'basic.type.save.success': 'Type was successfully saved',\n 'basic.type.save.error': 'An error occurred when try to save Type',\n 'basic.type.load.all.error': 'An error occurred when try to load type list',\n 'basic.type.load.byid.error': 'An error occurred when try to load the type',\n 'basic.type.remove.success': 'Type was successfully removed',\n 'basic.type.remove.error': 'An error occurred when try to remove type',\n\n 'basic.area.save.success': 'Area was successfully saved',\n 'basic.area.save.error': 'An error occurred when try to save Area',\n 'basic.area.load.all.error': 'An error occurred when try to load area list',\n 'basic.area.load.byid.error': 'An error occurred when try to load the area',\n 'basic.area.remove.success': 'Area was successfully removed',\n 'basic.area.remove.error': 'An error occurred when try to remove area',\n\n 'basic.licensetype.save.success': 'License was successfully saved',\n 'basic.licensetype.save.error': 'An error occurred when try to save license',\n 'basic.licensetype.load.all.error': 'An error occurred when try to load license list',\n 'basic.licensetype.load.byid.error': 'An error occurred when try to load the license',\n 'basic.licensetype.remove.success': 'License was successfully removed',\n 'basic.licensetype.remove.error': 'An error occurred when try to remove license',\n 'basic.licensetype.deleted.failed': 'This license can not be deleted. There are one or more associated records.',\n\n 'basic.effect.type.save.success': 'Effect Type was successfully saved',\n 'basic.effect.type.save.error': 'An error occurred when try to save Effect Type',\n 'basic.effect.type.load.all.error': 'An error occurred when try to load area list',\n 'basic.effect.type.load.byid.error': 'An error occurred when try to load the effect type',\n 'basic.effect.type.remove.success': 'Effect Type was successfully removed',\n 'basic.effect.type.remove.error': 'An error occurred when try to remove effect type',\n\n 'basic.section.save.success': 'Section was successfully saved',\n 'basic.section.save.error': 'An error occurred when try to save Section',\n 'basic.section.load.all.error': 'An error occurred when try to load section list',\n 'basic.section.load.byid.error': 'An error occurred when try to load the section',\n 'basic.section.remove.success': 'Section was successfully removed',\n 'basic.section.remove.error': 'An error occurred when try to remove section',\n\n 'placeholder.section.Code': 'Write a code...',\n\n 'basic.station.save.success': 'Station was successfully saved',\n 'basic.station.save.error': 'An error occurred when try to save Station',\n 'basic.station.load.all.error': 'An error occurred when try to load Station list',\n 'basic.station.load.byid.error': 'An error occurred when try to load the Station',\n 'basic.station.remove.success': 'Station was successfully removed',\n 'basic.station.remove.error': 'An error occurred when try to remove Station',\n\n 'basic.synthesis.save.success': 'Synthesis was successfully saved',\n 'basic.synthesis.save.error': 'An error occurred when try to save Synthesis',\n 'basic.synthesis.load.all.error': 'An error occurred when try to load Synthesis list',\n 'basic.synthesis.load.byid.error': 'An error occurred when try to load the Synthesis',\n 'basic.synthesis.remove.success': 'Synthesis was successfully removed',\n 'basic.synthesis.remove.error': 'An error occurred when try to remove Synthesis',\n\n 'basic.vendor.save.success': 'Vendor was successfully saved',\n 'basic.vendor.save.error': 'An error occurred when try to save Vendor',\n 'basic.vendor.load.all.error': 'An error occurred when try to load vendor list',\n 'basic.vendor.load.byid.error': 'An error occurred when try to load the vendor',\n 'basic.vendor.remove.success': 'Vendor was successfully removed',\n 'basic.vendor.remove.error': 'An error occurred when try to remove vendor',\n\n 'basic.request.type.save.success': 'Request Type was successfully saved',\n 'basic.request.type.save.error': 'An error occurred when try to save Request Type',\n 'basic.request.type.load.all.error': 'An error occurred when try to load Request Type list',\n 'basic.request.type.load.byid.error': 'An error occurred when try to load the Request Type',\n 'basic.request.type.remove.success': 'Request Type was successfully removed',\n 'basic.request.type.remove.error': 'An error occurred when try to remove Request Type',\n\n\n 'basic.parttype.save.success': 'Part Type was successfully saved',\n 'basic.parttype.save.error': 'An error occurred when try to save Part Type',\n 'basic.parttype.load.all.error': 'An error occurred when try to load Part Type list',\n 'basic.parttype.load.byid.error': 'An error occurred when try to load the Part Type',\n 'basic.parttype.remove.success': 'Part Type was successfully removed',\n 'basic.parttype.remove.error': 'An error occurred when try to remove Part Type',\n\n\n 'basic.part.inspection.type.save.success': 'Part Inspection Type was successfully saved',\n 'basic.part.inspection.type.save.error': 'An error occurred when try to save Part Inspection Type',\n 'basic.part.inspection.type.load.all.error': 'An error occurred when try to load Part Inspection Type list',\n 'basic.part.inspection.type.load.byid.error': 'An error occurred when try to load the Part Inspection Type',\n 'basic.part.inspection.type.remove.success': 'Part Inspection Type was successfully removed',\n 'basic.part.inspection.type.remove.error': 'An error occurred when try to remove Part Inspection Type',\n 'basic.part.inspection.type.deleted.failed': 'This part inspection type can not be deleted. There are one or more associated records.',\n\n 'basic.part.inspection.sub.type.save.success': 'Part Inspection Sub Type was successfully saved',\n 'basic.part.inspection.sub.type.save.error': 'An error occurred when try to save Part Inspection Sub Type',\n 'basic.part.inspection.sub.type.load.all.error': 'An error occurred when try to load Part Inspection Sub Type list',\n 'basic.part.inspection.sub.type.load.byid.error': 'An error occurred when try to load the Part Inspection Sub Type',\n 'basic.part.inspection.sub.type.remove.success': 'Part Inspection Sub Type was successfully removed',\n 'basic.part.inspection.sub.type.remove.error': 'An error occurred when try to remove Part Inspection Sub Type',\n 'basic.part.inspection.sub.type.deleted.failed': 'This part inspection subtype can not be deleted. There are one or more associated records.',\n\n 'basic.part.inspection.rule.save.success': 'Part Inspection Rule was successfully saved',\n 'basic.part.inspection.rule.save.error': 'An error occurred when try to save Part Inspection Rule',\n 'basic.part.inspection.rule.load.all.error': 'An error occurred when try to load Part Inspection Rule list',\n 'basic.part.inspection.rule.load.byid.error': 'An error occurred when try to load the Part Inspection Rule',\n 'basic.part.inspection.rule.remove.success': 'Part Inspection Rule was successfully removed',\n 'basic.part.inspection.rule.remove.error': 'An error occurred when try to remove Part Inspection Rule',\n 'basic.part.inspection.rule.deleted.failed': 'This part inspection rule can not be deleted. There are one or more associated records.',\n\n 'basic.testtype.save.success': 'Test Type was successfully saved',\n 'basic.testtype.save.error': 'An error occurred when try to save Test Type',\n 'basic.testtype.load.all.error': 'An error occurred when try to load Test Type list',\n 'basic.testtype.load.byid.error': 'An error occurred when try to load the Test Type',\n 'basic.testtype.remove.success': 'Test Type was successfully removed',\n 'basic.testtype.remove.error': 'An error occurred when try to remove Test Type',\n\n 'basic.test.inspection.type.save.success': 'Test Inspection Type was successfully saved',\n 'basic.test.inspection.type.save.error': 'An error occurred when try to save Test Inspection Type',\n 'basic.test.inspection.type.load.all.error': 'An error occurred when try to load Test Inspection Type list',\n 'basic.test.inspection.type.load.byid.error': 'An error occurred when try to load the Test Inspection Type',\n 'basic.test.inspection.type.remove.success': 'Test Inspection Type was successfully removed',\n 'basic.test.inspection.type.remove.error': 'An error occurred when try to remove Test Inspection Type',\n 'basic.test.inspection.type.deleted.failed': 'This test inspection type can not be deleted. There are one or more associated records.',\n\n 'basic.test.inspection.sub.type.save.success': 'Test Inspection Sub Type was successfully saved',\n 'basic.test.inspection.sub.type.save.error': 'An error occurred when try to save Test Inspection Sub Type',\n 'basic.test.inspection.sub.type.load.all.error': 'An error occurred when try to load Test Inspection Sub Type list',\n 'basic.test.inspection.sub.type.load.byid.error': 'An error occurred when try to load the Test Inspection Sub Type',\n 'basic.test.inspection.sub.type.remove.success': 'Test Inspection Sub Type was successfully removed',\n 'basic.test.inspection.sub.type.remove.error': 'An error occurred when try to remove Test Inspection Sub Type',\n 'basic.test.inspection.sub.type.deleted.failed': 'This test inspection subtype can not be deleted. There are one or more associated records.',\n\n 'basic.test.inspection.rule.save.success': 'Test Inspection Rule was successfully saved',\n 'basic.test.inspection.rule.save.error': 'An error occurred when try to save Test Inspection Rule',\n 'basic.test.inspection.rule.load.all.error': 'An error occurred when try to load Test Inspection Rule list',\n 'basic.test.inspection.rule.load.byid.error': 'An error occurred when try to load the Test Inspection Rule',\n 'basic.test.inspection.rule.remove.success': 'Test Inspection Rule was successfully removed',\n 'basic.test.inspection.rule.remove.error': 'An error occurred when try to remove Test Inspection Rule',\n 'basic.inspection.rule.deleted.failed': 'This test inspection rule can not be deleted. There are one or more associated records.',\n\n 'defect.deleted.failed': 'Defect can not be deleted. There are one or more associated records.',\n 'defect.type.deleted.failed': 'Defect type can not be deleted. There are one or more associated records.',\n 'defect.action.deleted.failed': 'Defect action can not be deleted. There are one or more associated records.',\n 'root.cause.deleted.failed': 'Root cause can not be deleted. There are one or more associated records.',\n 'basic.area.deleted.failed': 'Support area can not be deleted. There are one or more associated records.',\n 'effect.type.deleted.failed': 'Effect type can not be deleted. There are one or more associated records.',\n 'basic.section.deleted.failed': 'Section can not be deleted. There are one or more associated records.',\n 'basic.station.deleted.failed': 'Station type can not be deleted. There are one or more associated records.',\n 'basic.synthesis.deleted.failed': 'Synthesis of occurrences can not be deleted. There are one or more associated records.',\n 'basic.vendor.deleted.failed': 'Vendor can not be deleted. There are one or more associated records.',\n\n 'basic.request.type.deleted.failed': 'Request Type can not be deleted. There are one or more associated records.',\n\n 'basic.part.type.deleted.failed': 'Part type can not be deleted. There are one or more associated records.',\n 'basic.test.type.deleted.failed': 'Test type can not be deleted. There are one or more associated records.',\n 'basic.task.type.deleted.failed': 'Task type can not be deleted. There are one or more associated records.',\n 'basic.defect': 'Defect',\n 'basic.vendor': 'Vendor',\n 'basic.request.type': 'Request Type',\n 'basic.defect.type': 'Defect Type',\n 'basic.defect.action': 'Defect - Action',\n 'basic.defect.root.cause': 'Defect - Root Cause',\n 'basic.defect.occurrence': 'Defect - Origin',\n 'basic.model': 'Model',\n 'basic.type': 'Task Type',\n 'basic.area': 'Support Area',\n 'basic.effect.type': 'Effect Type',\n 'basic.section': 'Section/Line',\n 'basic.station': 'Station',\n 'basic.synthesis': 'Synthesis of Occurrences',\n 'basic.parttype': 'Part Type',\n 'basic.part.inspection.type': 'Part Inspection Type',\n 'basic.part.inspection.sub.type': 'Part Inspection Sub Type',\n 'basic.part.inspection.rule': 'Part Inspection Rule',\n 'basic.testtype': 'Test Type',\n 'basic.test.inspection.type': 'Test Inspection Type',\n 'basic.test.inspection.sub.type': 'Test Inspection Sub Type',\n 'basic.test.inspection.rule': 'Test Inspection Rule',\n 'basic.synthesis.name.pt.label': 'Name(Pt)',\n 'basic.synthesis.name.en.label': 'Name (En)',\n 'basic.defect.group.label': 'Defect',\n 'basic.task.group.label': 'Task',\n 'basic.part.group.label': 'IQC',\n 'basic.test.group.label': 'ORT',\n 'basic.sgi.group.label': 'SGI',\n 'basic.sgi.license.type': 'License Type',\n 'basic.other.group.label': 'Others',\n 'basic.vendor.origin': 'Vendor - Origin',\n 'basic.vendor.origin.save.success': 'Vendor - Origin was successfully saved',\n 'basic.vendor.origin.remove.success': 'vendor - Origin was successfully removed',\n 'error.section.code.can.not.be.changed': 'Section code can not be changed because it is being used in other registers.',\n 'basic.category': 'Category',\n 'basic.category.financial': 'Financial',\n 'basic.category.fiscal': 'Fiscal',\n 'basic.category.it': 'IT',\n 'basic.category.acquisition': 'Acquisition',\n 'basic.category.hr': 'HR',\n 'basic.category.sourcing': 'Sourcing',\n 'basic.category.others': 'Others'\n });\n\n $translateProvider.translations('pt', {\n 'title.basic': 'Tipos Básicos',\n 'title.create.item': 'Novo Tipo Básico: {{ type }}',\n 'title.update.item': 'Editar Tipo Básico: {{ type }}',\n 'title.edit.item': 'Editar {{ type }}',\n 'placeholder.type.name': 'Escreva um nome...',\n 'placeholder.type.value': 'Insira um valor...',\n 'basic.placeholder.search.name': 'Pesquisar por Nome',\n 'label.new': 'Novo Tipo Básico',\n 'label.name': 'Nome',\n 'label.value': 'Valor',\n 'label.select.type': 'Tipo',\n 'item.not.found': 'Item não encontrado',\n 'validation.name.required': 'Nome é obrigatório.',\n 'basic.header.status.label': 'Situação',\n 'basic.header.status.active.label': 'Ativo',\n 'basic.header.status.inactive.label': 'Inativo',\n\n 'basic.defect.save.success': 'Defeito salvo com sucesso',\n 'basic.defect.save.error': 'Ocorreu um erro ao tentar salvar o defeito',\n 'basic.defect.load.all.error': 'Ocorreu um erro ao tentar carregar a lista de defeitos',\n 'basic.defect.load.byid.error': 'Ocorreu um erro ao tentar carregar o defeito',\n 'basic.defect.remove.success': 'Defeito removido com sucesso',\n 'basic.defect.remove.error': 'Ocorreu um erro ao tentar remover o defeito',\n 'basic.save.same.name.error': 'Já existe um registro com o mesmo nome.',\n 'basic.save.same.code.error': 'Já existe um registro com o mesmo código.',\n\n 'basic.defect.action.save.success': 'Ação para defeito salvo com sucesso',\n 'basic.defect.action.save.error': 'Ocorreu um erro ao tentar salvar a ação para defeito',\n 'basic.defect.action.load.all.error': 'Ocorreu um erro ao tentar carregar a lista de ações para defeito',\n 'basic.defect.action.load.byid.error': 'Ocorreu um erro ao tentar carregar a ação para defeito',\n 'basic.defect.action.remove.success': 'A ação para defeito foi removida com sucesso',\n 'basic.defect.action.remove.error': 'Ocorreu um erro ao tentar remover a ação para defeito',\n\n 'basic.defect.type.save.success': 'Tipo de Defeito salvo com sucesso',\n 'basic.defect.type.save.error': 'Ocorreu um erro ao tentar salvar o tipo de defeito',\n 'basic.defect.type.load.all.error': 'Ocorreu um erro ao tentar carregar a lista de tipo de defeitos',\n 'basic.defect.type.load.byid.error': 'Ocorreu um erro ao tentar carregar o tipo de defeito',\n 'basic.defect.type.remove.success': 'Tipo de defeito removido com sucesso',\n 'basic.defect.type.remove.error': 'Ocorreu um erro ao tentar remover o tipo de defeito',\n\n 'basic.defect.root.cause.save.success': 'Causa Raiz salvo com sucesso',\n 'basic.defect.root.cause.save.error': 'Ocorreu um erro ao tentar salvar a causa raiz.',\n 'basic.defect.root.cause.load.all.error': 'Ocorreu um erro ao tentar carregar a lista de causa raiz.',\n 'basic.defect.root.cause.load.byid.error': 'Ocorreu um erro ao tentar carregar a causa raiz.',\n 'basic.defect.root.cause.remove.success': 'Causa raiz removida com sucesso.',\n 'basic.defect.root.cause.remove.error': 'Ocorreu um erro ao tentar remover a causa raiz.',\n\n 'basic.defect.occurrence.save.success': 'Ocorrência de Defeito salvo com sucesso',\n 'basic.defect.occurrence.save.error': 'Ocorreu um erro ao tentar salvar a ocorrência de defeito.',\n 'basic.defect.occurrence.load.all.error': 'Ocorreu um erro ao tentar carregar a lista de ocorrência de defeito.',\n 'basic.defect.occurrence.load.byid.error': 'Ocorreu um erro ao tentar carregar a ocorrência de defeito',\n 'basic.defect.occurrence.remove.success': 'Ocorrência de Defeito removida com sucesso.',\n 'basic.defect.occurrence.remove.error': 'Ocorreu um erro ao tentar remover a ocorrência de defeito.',\n\n 'basic.model.save.success': 'Modelo salvo com sucesso',\n 'basic.model.save.error': 'Ocorreu um erro ao tentar salvar o modelo',\n 'basic.model.load.all.error': 'Ocorreu um erro ao tentar carregar a lista de modelos',\n 'basic.model.load.byid.error': 'Ocorreu um erro ao tentar carregar o modelo',\n 'basic.model.remove.success': 'Modelo removido com sucesso',\n 'basic.model.remove.error': 'Ocorreu um erro ao tentar remover o modelo',\n\n 'basic.type.save.success': 'Tipo salvo com sucesso',\n 'basic.type.save.error': 'Ocorreu um erro ao tentar salvar o tipo',\n 'basic.type.load.all.error': 'Ocorreu um erro ao tentar carregar a lista de tipo',\n 'basic.type.load.byid.error': 'Ocorreu um erro ao tentar carregar o tipo',\n 'basic.type.remove.success': 'Tipo removido com sucesso',\n 'basic.type.remove.error': 'Ocorreu um erro ao tentar remover o tipo',\n\n 'basic.area.save.success': 'Área salvo com sucesso',\n 'basic.area.save.error': 'Ocorreu um erro ao tentar salvar a área',\n 'basic.area.load.all.error': 'Ocorreu um erro ao tentar carregar a lista de área',\n 'basic.area.load.byid.error': 'Ocorreu um erro ao tentar carregar a área',\n 'basic.area.remove.success': 'Área removida com sucesso',\n 'basic.area.remove.error': 'Ocorreu um erro ao tentar remover a área',\n\n 'basic.licensetype.save.success': 'Licença salvo com sucesso',\n 'basic.licensetype.save.error': 'Ocorreu um erro ao tentar salvar o licença',\n 'basic.licensetype.load.all.error': 'Ocorreu um erro ao tentar carregar a lista de licença',\n 'basic.licensetype.load.byid.error': 'Ocorreu um erro ao tentar carregar o licença',\n 'basic.licensetype.remove.success': 'Licença removida com sucesso',\n 'basic.licensetype.remove.error': 'Ocorreu um erro ao tentar remover a licença',\n 'basic.licensetype.deleted.failed': 'Licença não pode ser excluída. Há um ou mais registros associados.',\n\n 'basic.effect.type.save.success': 'Tipo de Efeito salvo com sucesso',\n 'basic.effect.type.save.error': 'Ocorreu um erro ao tentar salvar o tipo de efeito',\n 'basic.effect.type.load.all.error': 'Ocorreu um erro ao tentar carregar a lista de área',\n 'basic.effect.type.load.byid.error': 'Ocorreu um erro ao tentar carregar o tipo de efeito',\n 'basic.effect.type.remove.success': 'Tipo de Efeito removido com sucesso',\n 'basic.effect.type.remove.error': 'Ocorreu um erro ao tentar remover o tipo de efeito',\n\n 'basic.section.save.success': 'Seção salva com sucesso',\n 'basic.section.save.error': 'Ocorreu um erro ao tentar salvar a Seção',\n 'basic.section.load.all.error': 'Ocorreu um erro ao tentar carregar a lista de seção',\n 'basic.section.load.byid.error': 'Ocorreu um erro ao tentar carregar a seção',\n 'basic.section.remove.success': 'Seção removida com sucesso',\n 'basic.section.remove.error': 'Ocorreu um erro ao tentar remover a seção',\n\n 'placeholder.section.Code': 'Escreva um código...',\n\n 'basic.station.save.success': 'Estação salva com sucesso',\n 'basic.station.save.error': 'Ocorreu um erro ao tentar salvar a Estação',\n 'basic.station.load.all.error': 'Ocorreu um erro ao tentar carregar a lista de Estação',\n 'basic.station.load.byid.error': 'Ocorreu um erro ao tentar carregar a Estação',\n 'basic.station.remove.success': 'Estação removida com sucesso',\n 'basic.station.remove.error': 'Ocorreu um erro ao tentar remover a Estação',\n\n 'basic.synthesis.save.success': 'Síntese salva com sucesso',\n 'basic.synthesis.save.error': 'Ocorreu um erro ao tentar salvar a Síntese',\n 'basic.synthesis.load.all.error': 'Ocorreu um erro ao tentar carregar a lista de Síntese',\n 'basic.synthesis.load.byid.error': 'Ocorreu um erro ao tentar carregar a Síntese',\n 'basic.synthesis.remove.success': 'Síntese removida com sucesso',\n 'basic.synthesis.remove.error': 'Ocorreu um erro ao tentar remover a Síntese',\n\n 'basic.vendor.save.success': 'Fornecedor salvo com sucesso',\n 'basic.vendor.save.error': 'Ocorreu um erro ao tentar salvar o fornecedor',\n 'basic.vendor.load.all.error': 'Ocorreu um erro ao tentar carregar a lista de fornecedor',\n 'basic.vendor.load.byid.error': 'Ocorreu um erro ao tentar carregar o fornecedor',\n 'basic.vendor.remove.success': 'Fornecedor removido com sucesso',\n 'basic.vendor.remove.error': 'Ocorreu um erro ao tentar remover o fornecedor',\n\n 'basic.request.type.save.success': 'Tipo de Solicitação salvo com sucesso',\n 'basic.request.type.save.error': 'Ocorreu um erro ao tentar salvar o Tipo de Solicitação',\n 'basic.request.type.load.all.error': 'Ocorreu um erro ao tentar carregar a lista de Tipo de Solicitação',\n 'basic.request.type.load.byid.error': 'Ocorreu um erro ao tentar carregar o Tipo de Solicitação',\n 'basic.request.type.remove.success': 'Tipo de Solicitação removido com sucesso',\n 'basic.request.type.remove.error': 'Ocorreu um erro ao tentar remover o Tipo de Solicitação',\n\n 'basic.parttype.save.success': 'Tipo de Peça salvo com sucesso',\n 'basic.parttype.save.error': 'Ocorreu um erro ao tentar salvar o Tipo de Peça',\n 'basic.parttype.load.all.error': 'Ocorreu um erro ao tentar carregar a lista de Tipo de Peça',\n 'basic.parttype.load.byid.error': 'Ocorreu um erro ao tentar carregar o Tipo de Peça',\n 'basic.parttype.remove.success': 'Tipo de Peça removido com sucesso',\n 'basic.parttype.remove.error': 'Ocorreu um erro ao tentar remover o Tipo de Peça',\n\n 'basic.part.inspection.type.save.success': 'Tipo de Inspeção de Peça salvo com sucesso',\n 'basic.part.inspection.type.save.error': 'Ocorreu um erro ao tentar salvar o Tipo de Inspeção de Peça',\n 'basic.part.inspection.type.load.all.error': 'Ocorreu um erro ao tentar carregar a lista de Tipo de Inspeção de Peça',\n 'basic.part.inspection.type.load.byid.error': 'Ocorreu um erro ao tentar carregar o Tipo de Inspeção de Peça',\n 'basic.part.inspection.type.remove.success': 'Tipo de Inspeção de Peça removido com sucesso',\n 'basic.part.inspection.type.remove.error': 'Ocorreu um erro ao tentar remover o Tipo de Inspeção de Peça',\n 'basic.part.inspection.type.deleted.failed': 'Este tipo de inspeção de peça não pode ser excluído. Há um ou mais registros associados.',\n\n 'basic.part.inspection.sub.type.save.success': 'Subtipo de Inspeção de Peça salvo com sucesso',\n 'basic.part.inspection.sub.type.save.error': 'Ocorreu um erro ao tentar salvar o Subtipo de Inspeção de Peça',\n 'basic.part.inspection.sub.type.load.all.error': 'Ocorreu um erro ao tentar carregar a lista de Subtipo de Inspeção de Peça',\n 'basic.part.inspection.sub.type.load.byid.error': 'Ocorreu um erro ao tentar carregar o Subtipo de Inspeção de Peça',\n 'basic.part.inspection.sub.type.remove.success': 'Subtipo de Inspeção de Peça removido com sucesso',\n 'basic.part.inspection.sub.type.remove.error': 'Ocorreu um erro ao tentar remover o Subtipo de Inspeção de Peça',\n 'basic.part.inspection.sub.type.deleted.failed': 'Este subtipo de inspeção de peça não pode ser excluído. Há um ou mais registros associados.',\n\n 'basic.part.inspection.rule.save.success': 'Regra de Inspeção de Peça salvo com sucesso',\n 'basic.part.inspection.rule.save.error': 'Ocorreu um erro ao tentar salvar a Regra de Inspeção de Peça',\n 'basic.part.inspection.rule.load.all.error': 'Ocorreu um erro ao tentar carregar a lista de Regra de Inspeção de Peça',\n 'basic.part.inspection.rule.load.byid.error': 'Ocorreu um erro ao tentar carregar a Regra de Inspeção de Peça',\n 'basic.part.inspection.rule.remove.success': 'Regra de Inspeção de Peça removida com sucesso',\n 'basic.part.inspection.rule.remove.error': 'Ocorreu um erro ao tentar remover a Regra de Inspeção de Peça',\n 'basic.inspection.rule.deleted.failed': 'Essa regra de inspeção de teste não pode ser excluída. Há um ou mais registros associados.',\n\n 'basic.testtype.save.success': 'Tipo de Teste salvo com sucesso',\n 'basic.testtype.save.error': 'Ocorreu um erro ao tentar salvar o Tipo de Teste',\n 'basic.testtype.load.all.error': 'Ocorreu um erro ao tentar carregar a lista de Tipo de Teste',\n 'basic.testtype.load.byid.error': 'Ocorreu um erro ao tentar carregar o Tipo de Teste',\n 'basic.testtype.remove.success': 'Tipo de Teste removido com sucesso',\n 'basic.testtype.remove.error': 'Ocorreu um erro ao tentar remover o Tipo de Teste',\n\n 'basic.test.inspection.type.save.success': 'Tipo de Inspeção de Teste salvo com sucesso',\n 'basic.test.inspection.type.save.error': 'Ocorreu um erro ao tentar salvar o Tipo de Inspeção de Teste',\n 'basic.test.inspection.type.load.all.error': 'Ocorreu um erro ao tentar carregar a lista de Tipo de Inspeção de Teste',\n 'basic.test.inspection.type.load.byid.error': 'Ocorreu um erro ao tentar carregar o Tipo de Inspeção de Teste',\n 'basic.test.inspection.type.remove.success': 'Tipo de Inspeção de Teste removido com sucesso',\n 'basic.test.inspection.type.remove.error': 'Ocorreu um erro ao tentar remover o Tipo de Inspeção de Teste',\n 'basic.test.inspection.type.deleted.failed': 'Este tipo de inspeção de teste não pode ser excluído. Há um ou mais registros associados.',\n\n 'basic.test.inspection.sub.type.save.success': 'Subtipo de Inspeção de Teste salvo com sucesso',\n 'basic.test.inspection.sub.type.save.error': 'Ocorreu um erro ao tentar salvar o Subtipo de Inspeção de Teste',\n 'basic.test.inspection.sub.type.load.all.error': 'Ocorreu um erro ao tentar carregar a lista de Subtipo de Inspeção de Teste',\n 'basic.test.inspection.sub.type.load.byid.error': 'Ocorreu um erro ao tentar carregar o Subtipo de Inspeção de Teste',\n 'basic.test.inspection.sub.type.remove.success': 'Subtipo de Inspeção de Teste removido com sucesso',\n 'basic.test.inspection.sub.type.remove.error': 'Ocorreu um erro ao tentar remover o Subtipo de Inspeção de Teste',\n 'basic.test.inspection.sub.type.deleted.failed': 'Este subtipo de inspeção de teste não pode ser excluído. Há um ou mais registros associados.',\n\n 'basic.test.inspection.rule.save.success': 'Regra de Inspeção de Teste salvo com sucesso',\n 'basic.test.inspection.rule.save.error': 'Ocorreu um erro ao tentar salvar a Regra de Inspeção de Teste',\n 'basic.test.inspection.rule.load.all.error': 'Ocorreu um erro ao tentar carregar a lista de Regra de Inspeção de Teste',\n 'basic.test.inspection.rule.load.byid.error': 'Ocorreu um erro ao tentar carregar a Regra de Inspeção de Teste',\n 'basic.test.inspection.rule.remove.success': 'Regra de Inspeção de Teste removida com sucesso',\n 'basic.test.inspection.rule.remove.error': 'Ocorreu um erro ao tentar remover a Regra de Inspeção de Teste',\n\n 'defect.deleted.failed': 'Defeito não pode ser excluído. Há um ou mais registros associados.',\n 'defect.type.deleted.failed': 'Tipo de defeito não pode ser excluído. Há um ou mais registros associados.',\n 'defect.action.deleted.failed': 'Defeito ação não pode ser excluído. Há um ou mais registros associados.',\n 'root.cause.deleted.failed': 'Causa raiz não pode ser excluído. Há um ou mais registros associados.',\n 'basic.area.deleted.failed': 'Área de suporte não pode ser excluído. Há um ou mais registros associados.',\n 'effect.type.deleted.failed': 'Tipo de efeito não pode ser excluído. Há um ou mais registros associados.',\n 'basic.section.deleted.failed': 'Seção não pode ser excluído. Há um ou mais registros associados.',\n 'basic.station.deleted.failed': 'Estação não pode ser excluído. Há um ou mais registros associados.',\n 'basic.synthesis.deleted.failed': 'Síntese de ocorrências não pode ser excluído. Há um ou mais registros associados.',\n 'basic.vendor.deleted.failed': 'Fornecedor não pode ser excluído. Há um ou mais registros associados.',\n\n 'basic.request.type.deleted.failed': 'Tipo de Solicitação não pode ser excluído. Há um ou mais registros associados.',\n\n 'basic.part.type.deleted.failed': 'Tipo de peça não pode ser excluído. Há um ou mais registros associados.',\n 'basic.test.type.deleted.failed': 'Tipo de teste não pode ser excluído. Há um ou mais registros associados.',\n 'basic.task.type.deleted.failed': 'Tipo de tarefa não pode ser excluído. Há um ou mais registros associados.',\n 'basic.defect': 'Defeito',\n 'basic.vendor': 'Fornecedor',\n 'basic.request.type': 'Tipo de Solicitação',\n 'basic.defect.type': 'Tipo de Defeito',\n 'basic.defect.action': 'Defeito - Ação',\n 'basic.defect.root.cause': 'Defeito - Causa Raiz',\n 'basic.defect.occurrence': 'Defeito - Origem',\n 'basic.model': 'Modelo',\n 'basic.type': 'Tipo de Tarefa',\n 'basic.area': 'Área de Suporte',\n 'basic.effect.type': 'Tipo de Efeito',\n 'basic.section': 'Seção/Linha',\n 'basic.station': 'Estação',\n 'basic.synthesis': 'Síntese de Ocorrências',\n 'basic.parttype': 'Tipo de Peça',\n 'basic.part.inspection.type': 'Tipo de Inspeção de Peça',\n 'basic.part.inspection.sub.type': 'Subtipo de Inspeção de Peça',\n 'basic.part.inspection.rule': 'Regra de Inspeção de Peça',\n 'basic.testtype': 'Tipo de Teste',\n 'basic.test.inspection.type': 'Tipo de Inspeção de Teste',\n 'basic.test.inspection.sub.type': 'Subtipo de Inspeção de Teste',\n 'basic.test.inspection.rule': 'Regra de Inspeção de Teste',\n 'basic.synthesis.name.pt.label': 'Nome (Pt)',\n 'basic.synthesis.name.en.label': 'Nome (En)',\n 'basic.defect.group.label': 'Defeito',\n 'basic.task.group.label': 'Tarefa',\n 'basic.part.group.label': 'IQC',\n 'basic.test.group.label': 'ORT',\n 'basic.sgi.license.type': 'Tipo de Licença',\n 'basic.sgi.group.label': 'SGI',\n 'basic.other.group.label': 'Outros',\n 'basic.vendor.origin': 'Fornecedor - Origem',\n 'basic.vendor.origin.save.success': 'Fornecedor - Origem salvo com sucesso',\n 'basic.vendor.origin.remove.success': 'A origem de fornecedor foi excluída com sucesso',\n 'error.section.code.can.not.be.changed': 'Código da seção não pode ser alterado pois esta sendo usado em outros registros.',\n 'basic.category': 'Categoria',\n 'basic.category.financial': 'Financeiro',\n 'basic.category.it': 'TI',\n 'basic.category.acquisition': 'Compras',\n 'basic.category.hr': 'RH',\n 'basic.category.sourcing': 'Sourcing',\n 'basic.category.others': 'Outros',\n 'basic.category.fiscal': 'Fiscal',\n });\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(BasicRouter);\n\n /** @ngInject */\n function BasicRouter($stateProvider) {\n\n\n $stateProvider.state('basic-list', {\n url: '/basic/:type',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/basic/basic-list.html',\n controller: 'BasicListController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n type: null,\n menuName: 'label.basic'\n },\n authorize: true\n });\n\n\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('BasicListController', BasicListController)\n .service('BasicEventConstant', BasicEventConstant);\n\n function BasicEventConstant() {\n var vm = this;\n\n vm.saveDefect = \"save_defect_event\";\n vm.removeDefect = \"remove_defect_event\";\n vm.listDefect = \"list_defect_event\";\n vm.getByIdDefect = \"get_by_id_defect_event\";\n\n vm.saveDefectType = \"save_defect_type_event\";\n vm.removeDefectType = \"remove_defect_type_event\";\n vm.listDefectType = \"list_defect_type_event\";\n vm.getByIdDefectType = \"get_by_id_defect_type_event\";\n\n vm.saveDefectAction = \"save_defect_action_event\";\n vm.removeDefectAction = \"remove_defect_action_event\";\n vm.listDefectAction = \"list_defect_action_event\";\n vm.getByIdDefectAction = \"get_by_id_defect_action_event\";\n\n vm.saveRootCause = \"save_root_cause_event\";\n vm.removeRootCause = \"remove_root_cause_event\";\n vm.listRootCause = \"list_root_cause_event\";\n vm.getByIdRootCause = \"get_by_id_root_cause_event\";\n\n vm.saveDefectOccurrence = \"save_occurrence_event\";\n vm.removeDefectOccurrence = \"remove_occurrence_event\";\n vm.listDefectOccurrence = \"list_occurrence_event\";\n vm.getByIdDefectOccurrence = \"get_by_id_occurrence_event\";\n\n vm.saveType = \"save_type_event\";\n vm.removeType = \"remove_type_event\";\n vm.listType = \"list_type_event\";\n vm.getByIdType = \"get_by_id_type_event\";\n\n vm.saveArea = \"save_area_event\";\n vm.removeArea = \"remove_area_event\";\n vm.listArea = \"list_area_event\";\n vm.getByIdArea = \"get_by_id_area_event\";\n\n vm.saveEffectType = \"save_effect_type_event\";\n vm.removeEffectType = \"remove_effect_type_event\";\n vm.listEffectType = \"list_effect_type_event\";\n vm.getByIdEffectType = \"get_by_id_effect_type_event\";\n\n vm.saveSection = \"save_section_event\";\n vm.removeSection = \"remove_section_event\";\n vm.listSection = \"list_section_event\";\n vm.getByIdSection = \"get_by_id_section_event\";\n\n vm.saveStation = \"save_station_event\";\n vm.removeStation = \"remove_station_event\";\n vm.listStation = \"list_station_event\";\n vm.getByIdStation = \"get_by_id_station_event\";\n \n vm.saveVendorOrigin = \"save_vendor_origin_event\";\n vm.removeVendorOrigin = \"remove_vendor_origin_event\";\n vm.listVendorOrigin = \"list_vendor_origin_event\";\n vm.getByIdVendorOrigin = \"get_by_id_vendor_origin_event\";\n\n vm.saveSynthesis = \"save_synthesis_event\";\n vm.removeSynthesis = \"remove_synthesis_event\";\n vm.listSynthesis = \"list_synthesis_event\";\n vm.getByIdSynthesis = \"get_by_id_synthesis_event\";\n\n vm.updateBasicListItems = \"update_basic_list_items\";\n vm.updateItemToEdit = \"update_item_to_edit\";\n\n vm.savePartType = \"save_part_type_event\";\n vm.removePartType = \"remove_part_type_event\";\n vm.listPartType = \"list_part_type_event\";\n vm.getByIdPartType = \"get_by_id_part_type_event\";\n\n vm.savePartInspectionType = \"save_part_inspection_type_event\";\n vm.removePartInspectionType = \"remove_part_inspection_type_event\";\n vm.listPartInspectionType = \"list_part_inspection_type_event\";\n vm.getByIdPartInspectionType = \"get_by_id_part_inspection_type_event\";\n\n vm.savePartInspectionSubType = \"save_part_inspection_sub_type_event\";\n vm.removePartInspectionSubType = \"remove_part_inspection_sub_type_event\";\n vm.listPartInspectionSubType = \"list_part_inspection_sub_type_event\";\n vm.getByIdPartInspectionSubType = \"get_by_id_part_inspection_sub_type_event\";\n\n vm.savePartInspectionRule = \"save_part_inspection_rule_event\";\n vm.removePartInspectionRule = \"remove_part_inspection_rule_event\";\n vm.listPartInspectionRule = \"list_part_inspection_rule_event\";\n vm.getByIdPartInspectionRule = \"get_by_id_part_inspection_rule_event\";\n\n vm.saveTestType = \"save_test_type_event\";\n vm.removeTestType = \"remove_test_type_event\";\n vm.listTestType = \"list_test_type_event\";\n vm.getByIdTestType = \"get_by_id_test_type_event\";\n\n vm.saveTestInspectionType = \"save_test_inspection_type_event\";\n vm.removeTestInspectionType = \"remove_test_inspection_type_event\";\n vm.listTestInspectionType = \"list_test_inspection_type_event\";\n vm.getByIdTestInspectionType = \"get_by_id_test_inspection_type_event\";\n\n vm.saveTestInspectionSubType = \"save_test_inspection_sub_type_event\";\n vm.removeTestInspectionSubType = \"remove_test_inspection_sub_type_event\";\n vm.listTestInspectionSubType = \"list_test_inspection_sub_type_event\";\n vm.getByIdTestInspectionSubType = \"get_by_id_test_inspection_sub_type_event\";\n\n vm.saveTestInspectionRule = \"save_test_inspection_rule_event\";\n vm.removeTestInspectionRule = \"remove_test_inspection_rule_event\";\n vm.listTestInspectionRule = \"list_test_inspection_rule_event\";\n vm.getByIdTestInspectionRule = \"get_by_id_test_inspection_rule_event\";\n\n vm.setSelectedType = \"set_selected_type\";\n vm.editItemEvent = \"edit_item_event\";\n\n vm.saveRequestType = \"save_request_type\";\n vm.removeRequestType = \"remove_request_type\";\n vm.listRequestType = \"list_request_type\";\n vm.getByIdRequestType = \"get_by_id_request_type\";\n\n vm.saveLicenseType = \"save_license_type\";\n vm.removeLicenseType = \"remove_license_type\";\n vm.listLicenseType = \"list_license_type\";\n vm.getByIdLicenseType = \"get_by_id_license_type\";\n\n vm.typeDefect = 0;\n vm.typeDefectType = 1;\n vm.typeDefectAction = 2;\n vm.typeDefectRootCause = 3;\n vm.typeDefectOccurrence = 4;\n vm.typeType = 5;\n vm.typeArea = 6;\n vm.typeEffectType = 7;\n vm.typeSection = 8;\n vm.typeStation = 9;\n vm.typeSynthesis = 10;\n vm.typePartType = 11;\n vm.typePartInspectionType = 12;\n vm.typePartInspectionSubType = 13;\n vm.typePartInspectionRule = 14;\n vm.typeTestType = 15;\n vm.typeTestInspectionType = 16;\n vm.typeTestInspectionSubType = 17;\n vm.typeTestInspectionRule = 18;\n vm.typeRequestType = 19;\n vm.typeVendorOrigin = 20;\n vm.typeLicenseType = 21;\n\n vm.categoryOptions = [{\n id: 7,\n Name: 'basic.category.fiscal'\n }, {\n id: 1,\n Name: 'basic.category.financial'\n }, {\n id: 2,\n Name: 'basic.category.it'\n }, {\n id: 3,\n Name: 'basic.category.acquisition'\n }, {\n id: 4,\n Name: 'basic.category.hr'\n }, {\n id: 5,\n Name: 'basic.category.sourcing'\n }, {\n id: 6,\n Name: 'basic.category.others'\n }];\n }\n\n //NOTE: Do not remove \"unused services\" they need startup here.\n function BasicListController($state, $translate, $filter, $interval, $scope, $rootScope, $stateParams, BasicEventConstant, BasicDefectService,\n BasicDefectActionService, BasicDefectOccurrenceService, BasicDefectRootCauseService, BasicDefectTypeService, BasicTypesService,\n BasicAreaService, BasicEffectTypeService, BasicSectionService, BasicStationService, BasicSynthesisService, \n BasicRequestTypeService, BasicPartTypeService, BasicPartInspectionTypeService, BasicPartInspectionSubTypeService,\n BasicPartInspectionRuleService, BasicTestTypeService, BasicTestInspectionTypeService, BasicTestInspectionSubTypeService,\n BasicTestInspectionRuleService, BasicVendorOriginService, BasicLicenseTypeService, ListModel, $document) {\n\n var vm = this;\n \n vm.totalList = 0;\n \n vm.types = [{\n Type: BasicEventConstant.typeDefect,\n Name: \"basic.defect\",\n GroupName: \"basic.defect.group.label\",\n SaveEvent: BasicEventConstant.saveDefect,\n RemoveEvent: BasicEventConstant.removeDefect,\n ListEvent: BasicEventConstant.listDefect,\n GetByIdEvent: BasicEventConstant.getByIdDefect\n },\n\n //DefectType is now static on database\n /*{\n Type: BasicEventConstant.typeDefectType,\n Name: \"basic.defect.type\",\n GroupName: \"basic.defect.group.label\",\n SaveEvent: BasicEventConstant.saveDefectType,\n RemoveEvent: BasicEventConstant.removeDefectType,\n ListEvent: BasicEventConstant.listDefectType,\n GetByIdEvent: BasicEventConstant.getByIdDefectType\n },*/\n\n {\n Type: BasicEventConstant.typeDefectAction,\n Name: \"basic.defect.action\",\n GroupName: \"basic.defect.group.label\",\n SaveEvent: BasicEventConstant.saveDefectAction,\n RemoveEvent: BasicEventConstant.removeDefectAction,\n ListEvent: BasicEventConstant.listDefectAction,\n GetByIdEvent: BasicEventConstant.getByIdDefectAction\n },\n\n\n {\n Type: BasicEventConstant.typeDefectRootCause,\n Name: \"basic.defect.root.cause\",\n GroupName: \"basic.defect.group.label\",\n SaveEvent: BasicEventConstant.saveRootCause,\n RemoveEvent: BasicEventConstant.removeRootCause,\n ListEvent: BasicEventConstant.listRootCause,\n GetByIdEvent: BasicEventConstant.getByIdRootCause\n },\n\n //DefectOrigin/DefectOccurrence is now static on database\n /*{\n Type: BasicEventConstant.typeDefectOccurrence,\n Name: \"basic.defect.occurrence\",\n GroupName: \"basic.defect.group.label\",\n SaveEvent: BasicEventConstant.saveDefectOccurrence,\n RemoveEvent: BasicEventConstant.removeDefectOccurrence,\n ListEvent: BasicEventConstant.listDefectOccurrence,\n GetByIdEvent: BasicEventConstant.getByIdDefectOccurrence\n },*/\n\n\n {\n Type: BasicEventConstant.typeType,\n Name: \"basic.type\",\n GroupName: \"basic.task.group.label\",\n SaveEvent: BasicEventConstant.saveType,\n RemoveEvent: BasicEventConstant.removeType,\n ListEvent: BasicEventConstant.listType,\n GetByIdEvent: BasicEventConstant.getByIdType\n },\n\n {\n Type: BasicEventConstant.typeArea,\n Name: \"basic.area\",\n GroupName: \"basic.other.group.label\",\n SaveEvent: BasicEventConstant.saveArea,\n RemoveEvent: BasicEventConstant.removeArea,\n ListEvent: BasicEventConstant.listArea,\n GetByIdEvent: BasicEventConstant.getByIdArea\n },\n\n {\n Type: BasicEventConstant.typeEffectType,\n Name: \"basic.effect.type\",\n GroupName: \"basic.other.group.label\",\n SaveEvent: BasicEventConstant.saveEffectType,\n RemoveEvent: BasicEventConstant.removeEffectType,\n ListEvent: BasicEventConstant.listEffectType,\n GetByIdEvent: BasicEventConstant.getByIdEffectType\n },\n\n {\n Type: BasicEventConstant.typeSection,\n Name: \"basic.section\",\n GroupName: \"basic.other.group.label\",\n SaveEvent: BasicEventConstant.saveSection,\n RemoveEvent: BasicEventConstant.removeSection,\n ListEvent: BasicEventConstant.listSection,\n GetByIdEvent: BasicEventConstant.getByIdSection\n },\n\n {\n Type: BasicEventConstant.typeStation,\n Name: \"basic.station\",\n GroupName: \"basic.other.group.label\",\n SaveEvent: BasicEventConstant.saveStation,\n RemoveEvent: BasicEventConstant.removeStation,\n ListEvent: BasicEventConstant.listStation,\n GetByIdEvent: BasicEventConstant.getByIdStation\n },\n \n {\n Type: BasicEventConstant.typeVendorOrigin,\n Name: \"basic.vendor.origin\",\n GroupName: \"basic.other.group.label\",\n SaveEvent: BasicEventConstant.saveVendorOrigin,\n RemoveEvent: BasicEventConstant.removeVendorOrigin,\n ListEvent: BasicEventConstant.listVendorOrigin,\n GetByIdEvent: BasicEventConstant.getByIdVendorOrigin\n },\n\n {\n Type: BasicEventConstant.typeSynthesis,\n Name: \"basic.synthesis\",\n GroupName: \"basic.other.group.label\",\n SaveEvent: BasicEventConstant.saveSynthesis,\n RemoveEvent: BasicEventConstant.removeSynthesis,\n ListEvent: BasicEventConstant.listSynthesis,\n GetByIdEvent: BasicEventConstant.getByIdSynthesis\n },\n\n {\n Type: BasicEventConstant.typeRequestType,\n Name: \"basic.request.type\",\n GroupName: \"basic.other.group.label\",\n SaveEvent: BasicEventConstant.saveRequestType,\n RemoveEvent: BasicEventConstant.removeRequestType,\n ListEvent: BasicEventConstant.listRequestType,\n GetByIdEvent: BasicEventConstant.getByIdRequestType\n },\n\n {\n Type: BasicEventConstant.typePartType,\n Name: \"basic.parttype\",\n GroupName: \"basic.part.group.label\",\n SaveEvent: BasicEventConstant.savePartType,\n RemoveEvent: BasicEventConstant.removePartType,\n ListEvent: BasicEventConstant.listPartType,\n GetByIdEvent: BasicEventConstant.getByIdPartType\n },\n\n {\n Type: BasicEventConstant.typePartInspectionType,\n Name: \"basic.part.inspection.type\",\n GroupName: \"basic.part.group.label\",\n SaveEvent: BasicEventConstant.savePartInspectionType,\n RemoveEvent: BasicEventConstant.removePartInspectionType,\n ListEvent: BasicEventConstant.listPartInspectionType,\n GetByIdEvent: BasicEventConstant.getByIdPartInspectionType\n },\n\n\n {\n Type: BasicEventConstant.typePartInspectionSubType,\n Name: \"basic.part.inspection.sub.type\",\n GroupName: \"basic.part.group.label\",\n SaveEvent: BasicEventConstant.savePartInspectionSubType,\n RemoveEvent: BasicEventConstant.removePartInspectionSubType,\n ListEvent: BasicEventConstant.listPartInspectionSubType,\n GetByIdEvent: BasicEventConstant.getByIdPartInspectionSubType\n },\n\n\n {\n Type: BasicEventConstant.typePartInspectionRule,\n Name: \"basic.part.inspection.rule\",\n GroupName: \"basic.part.group.label\",\n SaveEvent: BasicEventConstant.savePartInspectionRule,\n RemoveEvent: BasicEventConstant.removePartInspectionRule,\n ListEvent: BasicEventConstant.listPartInspectionRule,\n GetByIdEvent: BasicEventConstant.getByIdPartInspectionRule\n },\n\n {\n Type: BasicEventConstant.typeTestType,\n Name: \"basic.testtype\",\n GroupName: \"basic.test.group.label\",\n SaveEvent: BasicEventConstant.saveTestType,\n RemoveEvent: BasicEventConstant.removeTestType,\n ListEvent: BasicEventConstant.listTestType,\n GetByIdEvent: BasicEventConstant.getByIdTestType\n },\n\n {\n Type: BasicEventConstant.typeTestInspectionType,\n Name: \"basic.test.inspection.type\",\n GroupName: \"basic.test.group.label\",\n SaveEvent: BasicEventConstant.saveTestInspectionType,\n RemoveEvent: BasicEventConstant.removeTestInspectionType,\n ListEvent: BasicEventConstant.listTestInspectionType,\n GetByIdEvent: BasicEventConstant.getByIdTestInspectionType\n },\n\n\n {\n Type: BasicEventConstant.typeTestInspectionSubType,\n Name: \"basic.test.inspection.sub.type\",\n GroupName: \"basic.test.group.label\",\n SaveEvent: BasicEventConstant.saveTestInspectionSubType,\n RemoveEvent: BasicEventConstant.removeTestInspectionSubType,\n ListEvent: BasicEventConstant.listTestInspectionSubType,\n GetByIdEvent: BasicEventConstant.getByIdTestInspectionSubType\n },\n\n\n {\n Type: BasicEventConstant.typeTestInspectionRule,\n Name: \"basic.test.inspection.rule\",\n GroupName: \"basic.test.group.label\",\n SaveEvent: BasicEventConstant.saveTestInspectionRule,\n RemoveEvent: BasicEventConstant.removeTestInspectionRule,\n ListEvent: BasicEventConstant.listTestInspectionRule,\n GetByIdEvent: BasicEventConstant.getByIdTestInspectionRule\n },\n\n {\n Type: BasicEventConstant.typeLicenseType,\n Name: \"basic.sgi.license.type\",\n GroupName: \"basic.sgi.group.label\",\n SaveEvent: BasicEventConstant.saveLicenseType,\n RemoveEvent: BasicEventConstant.removeLicenseType,\n ListEvent: BasicEventConstant.listLicenseType,\n GetByIdEvent: BasicEventConstant.getByIdLicenseType\n }\n ];\n\n vm.basicItemList = [];\n var originalBasicList = [];\n \n vm.searchParams = {\n Title: \"\",\n CsActive: \"\",\n orderById: 1,\n MaxPerPage: 5,\n Page: 1\n };\n\n vm.clearFields = function() {\n vm.searchParams.Title = \"\";\n vm.searchParams.CsActive = \"\";\n vm.searchParams.orderById = 1;\n }\n\n vm.listModelValues = {};\n\n vm.resetPageParams = function() {\n vm.searchParams.MaxPerPage = 5;\n vm.searchParams.Page = 1;\n }\n\n vm.doFilter = function () {\n if (vm.selectedType.Type == BasicEventConstant.typeSynthesis) {\n vm.listModelValues.items = filterSynthesis(vm.titleFilter);\n } else {\n vm.listModelValues.items = $filter('filter')(originalBasicList, {\n 'Title': vm.titleFilter\n });\n }\n };\n\n function filterSynthesis(titleFilter) {\n var list = [];\n angular.forEach(originalBasicList, function (item) {\n if (item.NamePt.toLowerCase().indexOf(titleFilter.toLowerCase()) != -1 || item.NameEn.toLowerCase().indexOf(titleFilter.toLowerCase()) != -1) {\n list.push(item);\n }\n });\n\n return list;\n }\n\n\n function init() {\n setScopeInServices();\n\n var updateBasicListItemsEvent = $rootScope.$on(BasicEventConstant.updateBasicListItems, updateBasicListItems, vm.searchParams);\n $rootScope.$on('$destroy', updateBasicListItemsEvent);\n\n if ($stateParams.type && $stateParams.type != -1) {\n var itemFound = false;\n var typeId = $stateParams.type;\n for (var i = 0; i < vm.types.length; i++) {\n if (vm.types[i].Type == typeId) {\n vm.selectedType = vm.types[i];\n itemFound = true;\n break;\n }\n }\n if (!itemFound)\n vm.selectedType = $filter('orderBy')(vm.types, 'GroupName')[0];\n } else {\n vm.selectedType = $filter('orderBy')(vm.types, 'GroupName')[0];\n }\n vm.typeChanged();\n\n }\n\n function setScopeInServices() {\n BasicDefectService.Scope = $scope;\n BasicDefectActionService.Scope = $scope;\n BasicDefectOccurrenceService.Scope = $scope; \n BasicDefectRootCauseService.Scope = $scope;\n BasicDefectTypeService.Scope = $scope;\n BasicTypesService.Scope = $scope;\n BasicAreaService.Scope = $scope;\n BasicEffectTypeService.Scope = $scope;\n BasicSectionService.Scope = $scope;\n BasicStationService.Scope = $scope;\n BasicSynthesisService.Scope = $scope;\n BasicPartTypeService.Scope = $scope;\n BasicPartInspectionTypeService.Scope = $scope;\n BasicPartInspectionSubTypeService.Scope = $scope;\n BasicPartInspectionRuleService.Scope = $scope;\n BasicTestTypeService.Scope = $scope;\n BasicTestInspectionTypeService.Scope = $scope;\n BasicTestInspectionSubTypeService.Scope = $scope;\n BasicTestInspectionRuleService.Scope = $scope;\n BasicVendorOriginService.Scope = $scope;\n BasicRequestTypeService.Scope = $scope;\n BasicLicenseTypeService.Scope = $scope;\n }\n\n\n function updateBasicListItems(event, items) {\n if (vm.selectedType.Type == BasicEventConstant.typeSynthesis) {\n getListToSynthesis(items.resultList, items.total);\n } else if (vm.selectedType.Type == BasicEventConstant.typePartInspectionRule) {\n getListToPartInspectionRule(items.resultList, items.total);\n } else if (vm.selectedType.Type == BasicEventConstant.typeSection) {\n getListToSection(items.resultList, items.total);\n } else if (vm.selectedType.Type == BasicEventConstant.typeRequestType) {\n getListToRequestType(items.resultList, items.total);\n } else {\n getListToBasicType(items.resultList, items.total);\n }\n\n }\n \n function getListToRequestType(items, total) {\n originalBasicList = angular.copy(items);\n vm.basicItemList = items;\n var idStyle = \"width: 5%;\";\n var nameStyle = \"width: 35%;\";\n var properties = [\n ListModel.getProperties(\"label.id\", \"Id\", false, null, idStyle, null, null),\n ListModel.getProperties(\"basic.category\", \"Category\", true, getCategory, nameStyle, null, null),\n ListModel.getProperties(\"label.name\", \"Title\", true, null, nameStyle, null, null),\n ListModel.getProperties(\"basic.header.status.label\", \"CsActive\", false, getCsActiveLabel, \"\", null, getCsActiveCss)\n ];\n //Build menu\n var actionMenuItems = [\n ListModel.getActionMenuItem(ListModel.ActionMenuEnum.EDIT, \"Id\", null, vm.edit),\n ListModel.getActionMenuItem(ListModel.ActionMenuEnum.DELETE, \"Id\", \"Title\", vm.delete)\n ];\n var actionMenu = ListModel.getActionMenu(actionMenuItems, ListModel.ActionMenuTypeEnum.INLINE)\n vm.listModelValues = ListModel.getListModel(properties, items, actionMenu);\n vm.totalList = total;\n }\n\n function getListToSynthesis(items, total) {\n originalBasicList = angular.copy(items);\n vm.basicItemList = items;\n var idStyle = \"width: 5%;\";\n var nameStyle = \"width: 25%;\";\n var properties = [\n ListModel.getProperties(\"label.id\", \"Id\", false, null, idStyle, null, null),\n ListModel.getProperties(\"basic.synthesis.name.pt.label\", \"NamePt\", true, null, nameStyle, null, null),\n ListModel.getProperties(\"basic.synthesis.name.en.label\", \"NameEn\", true, null, nameStyle, null, null),\n ListModel.getProperties(\"basic.header.status.label\", \"CsActive\", false, getCsActiveLabel, \"\", null, getCsActiveCss)\n ];\n //Build menu\n var actionMenuItems = [\n ListModel.getActionMenuItem(ListModel.ActionMenuEnum.EDIT, \"Id\", null, vm.edit),\n ListModel.getActionMenuItem(ListModel.ActionMenuEnum.DELETE, \"Id\", \"Title\", vm.delete)\n ];\n var actionMenu = ListModel.getActionMenu(actionMenuItems, ListModel.ActionMenuTypeEnum.INLINE)\n vm.listModelValues = ListModel.getListModel(properties, items, actionMenu);\n vm.totalList = total;\n }\n\n function getListToPartInspectionRule(items, total) {\n originalBasicList = angular.copy(items);\n vm.basicItemList = items;\n var idStyle = \"width: 5%;\";\n var nameStyle = \"width: 25%;\";\n var properties = [\n ListModel.getProperties(\"label.id\", \"Id\", false, null, idStyle, null, null),\n ListModel.getProperties(\"label.name\", \"Title\", true, null, nameStyle, null, null),\n ListModel.getProperties(\"label.value\", \"Value\", true, null, nameStyle, null, null),\n ListModel.getProperties(\"basic.header.status.label\", \"CsActive\", false, getCsActiveLabel, \"\", null, getCsActiveCss)\n ];\n //Build menu\n var actionMenuItems = [\n ListModel.getActionMenuItem(ListModel.ActionMenuEnum.EDIT, \"Id\", null, vm.edit),\n ListModel.getActionMenuItem(ListModel.ActionMenuEnum.DELETE, \"Id\", \"Title\", vm.delete)\n ];\n var actionMenu = ListModel.getActionMenu(actionMenuItems, ListModel.ActionMenuTypeEnum.INLINE)\n vm.listModelValues = ListModel.getListModel(properties, items, actionMenu);\n vm.totalList = total;\n }\n\n function getListToSection(items, total) {\n originalBasicList = angular.copy(items);\n\n angular.forEach(items, function(item){\n if(angular.isUndefined(item.Code) || item.Code == null){\n item.Code = \"N/A\";\n }\n });\n\n vm.basicItemList = items;\n var idStyle = \"width: 5%;\";\n var nameStyle = \"width: 25%;\";\n var properties = [\n ListModel.getProperties(\"label.id\", \"Id\", false, null, idStyle, null, null),\n ListModel.getProperties(\"label.name\", \"Title\", true, null, nameStyle, null, null),\n ListModel.getProperties(\"label.code\", \"Code\", true, null, nameStyle, null, null),\n ListModel.getProperties(\"basic.header.status.label\", \"CsActive\", false, getCsActiveLabel, \"\", null, getCsActiveCss)\n ];\n //Build menu\n var actionMenuItems = [\n ListModel.getActionMenuItem(ListModel.ActionMenuEnum.EDIT, \"Id\", null, vm.edit),\n ListModel.getActionMenuItem(ListModel.ActionMenuEnum.DELETE, \"Id\", \"Title\", vm.delete)\n ];\n var actionMenu = ListModel.getActionMenu(actionMenuItems, ListModel.ActionMenuTypeEnum.INLINE)\n vm.listModelValues = ListModel.getListModel(properties, items, actionMenu);\n vm.totalList = total;\n }\n\n function getListToBasicType(items, total) {\n originalBasicList = angular.copy(items);\n vm.basicItemList = items;\n var idStyle = \"width: 5%;\";\n var nameStyle = \"width: 70%;\";\n var properties = [\n ListModel.getProperties(\"label.id\", \"Id\", false, null, idStyle, null, null),\n ListModel.getProperties(\"label.name\", \"Title\", true, null, nameStyle, null, null),\n ListModel.getProperties(\"basic.header.status.label\", \"CsActive\", false, getCsActiveLabel, \"\", null, getCsActiveCss)\n ];\n //Build menu\n var actionMenuItems = [\n ListModel.getActionMenuItem(ListModel.ActionMenuEnum.EDIT, \"Id\", null, vm.edit),\n ListModel.getActionMenuItem(ListModel.ActionMenuEnum.DELETE, \"Id\", \"Title\", vm.delete)\n ];\n var actionMenu = ListModel.getActionMenu(actionMenuItems, ListModel.ActionMenuTypeEnum.INLINE);\n vm.listModelValues = ListModel.getListModel(properties, items, actionMenu);\n vm.totalList = total;\n }\n\n\n function getCsActiveLabel(csActive) {\n var statusKey = \"label.inactive\";\n if (csActive == true || csActive == \"true\") {\n statusKey = \"label.active\";\n }\n\n return statusKey;\n }\n\n function getCategory(category) {\n var cat = BasicEventConstant.categoryOptions.filter(function( elm ) { return elm.id == category });\n return $translate.instant(cat[0].Name);\n }\n\n function getCsActiveCss(csActive) {\n var result = \"\";\n if (csActive == true || csActive == \"true\") {\n result = 'ng-binding label aqms-label-active';\n } else {\n result = 'ng-binding label aqms-label-inactive';\n }\n\n return result;\n }\n\n function sendSelectedTypeBroadcast() {\n $rootScope.$broadcast(BasicEventConstant.setSelectedType, vm.selectedType);\n }\n\n function resetFocus() {\n $interval(executeResetFocus, 300, 1);\n }\n\n function executeResetFocus() {\n $document[0].getElementById(\"btnScroll\").click();\n var idToFocus = vm.selectedType.Type == BasicEventConstant.typeSynthesis ? \"typeNamePtId\" : vm.selectedType.Type == BasicEventConstant.typePartInspectionRule ? \"ruleName\" : \"typeId\";\n if (idToFocus != null) {\n var elem = $document[0].getElementById(idToFocus);\n if (elem != null)\n elem.focus();\n }\n }\n\n vm.typeChanged = function () {\n vm.resetPageParams();\n vm.searchParams.Title = \"\";\n $rootScope.$broadcast(vm.selectedType.ListEvent, vm.searchParams);\n $interval(sendSelectedTypeBroadcast, 300, 1);\n resetFocus();\n };\n\n vm.search = function () {\n vm.itemPerPage = { name: '5', value: 5, before: 0, after: 6 };\n vm.searchParams.MaxPerPage = vm.itemPerPage.value;\n vm.searchParams.Page = 1;\n vm.searchBasicTypes();\n };\n\n vm.searchBasicTypes = function () {\n $rootScope.$broadcast(vm.selectedType.ListEvent, vm.searchParams);\n };\n\n vm.edit = function (id) {\n resetFocus();\n $rootScope.$broadcast(BasicEventConstant.editItemEvent, id);\n };\n\n vm.delete = function (id) {\n if (id) {\n $rootScope.$broadcast(vm.selectedType.RemoveEvent, id);\n }\n };\n\n init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('BasicEditController', BasicEditController);\n\n function BasicEditController($scope, $state, $rootScope, BasicEventConstant) {\n\n var vm = this;\n\n vm.newItem = true;\n\n vm.synthesisType = BasicEventConstant.typeSynthesis;\n vm.partInspectionRuleType = BasicEventConstant.typePartInspectionRule;\n vm.testInspectionRuleType = BasicEventConstant.typeTestInspectionRule;\n vm.sectionType = BasicEventConstant.typeSection;\n vm.requestType = BasicEventConstant.typeRequestType;\n\n vm.statusList = [{\n id: 1,\n Name: 'basic.header.status.active.label'\n }, {\n id: 0,\n Name: 'basic.header.status.inactive.label'\n }];\n\n vm.categoryOptions = BasicEventConstant.categoryOptions;\n\n vm.changeStatus = function () {\n vm.item.CsActive = vm.Status.id;\n };\n\n vm.changeCategory = function () {\n vm.item.Category = vm.Category.id;\n };\n\n function init() {\n resetFields();\n var unregister1 = $rootScope.$on(BasicEventConstant.setSelectedType, setSelectedType);\n var unregister2 = $rootScope.$on(BasicEventConstant.editItemEvent, editItem);\n var unregister3 = $rootScope.$on(BasicEventConstant.updateItemToEdit, updateItemToEdit);\n $scope.$on('$destroy', unregister1);\n $scope.$on('$destroy', unregister2);\n $scope.$on('$destroy', unregister3);\n }\n\n\n function editItem(event, itemId) {\n vm.newItem = false;\n\n if (itemId) {\n $rootScope.$broadcast(vm.type.GetByIdEvent, itemId);\n }\n }\n\n /**\n * Update type accord it is selected in combo box.\n * @param event\n * @param type\n */\n function setSelectedType(event, type) {\n resetFields();\n vm.type = type;\n }\n\n function updateItemToEdit(event, obj) {\n vm.item = angular.copy(obj);\n vm.Status = obj.CsActive ? vm.statusList[0] : vm.statusList[1];\n vm.Category = obj.Category ? vm.categoryOptions[obj.Category - 1] : vm.categoryOptions[0];\n }\n\n function resetFields(){\n vm.newItem = true;\n vm.Status = vm.statusList[0];\n vm.Category = vm.categoryOptions[0];\n vm.item = {\n Title: \"\",\n CsActive: vm.Status.id\n }\n }\n\n\n vm.save = function (formIsValid) {\n if (formIsValid) {\n if ( vm.type.Type == vm.requestType ) {\n vm.item.Category = vm.Category.id;\n }\n $rootScope.$broadcast(vm.type.SaveEvent, vm.item);\n resetFields();\n }\n };\n\n\n init();\n }\n})();\n\n(function () {\n\n function ExpireFormController() {\n\n var vm = this;\n\n vm.initView = function () {};\n\n vm.initView();\n }\n\n function ExpireFormDirective() {\n return {\n restrict: 'E',\n replace: true,\n templateUrl: \"app/auth/expire.html\",\n controllerAs: 'ctrl',\n controller: 'ExpireFormController'\n };\n }\n \n angular.module('aqmsFrontend')\n .controller('ExpireFormController', ExpireFormController)\n .directive('expireForm', ExpireFormDirective);\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(AuthTranslate);\n\n /** @ngInject */\n function AuthTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'title.signin': 'Sign In',\n 'title.signout': 'Sign Out',\n 'title.signup': 'Sign Up',\n 'title.forgot': 'Forgot Password',\n 'label.userID': 'User ID',\n 'label.password': 'Password',\n 'label.signin': 'Sign in',\n 'label.signup': 'Sign up',\n 'label.forgot': 'Forgot password',\n 'label.keepAuth': 'Keep me sign in',\n 'label.forgotPassword': 'Forgot your ID or password?',\n 'label.newAccount': 'Sign up for an account',\n 'label.fullName': 'Full name',\n 'label.email': 'Work email',\n 'label.confirmPasswd': 'Confirm password',\n 'label.haveAccount': 'I have an account',\n 'msg.error.signin': 'User or password are not valid',\n 'msg.error.signin.active': 'User inactivated. Contact your system administrator.',\n 'changepwd.error.pwd.not.match': \"Wrong password.\",\n 'changepwd.error.new.pwd.not.match': \"The passwords reported are different.\",\n 'changepwd.success.msg': \"Password changed, sign in again.\",\n 'changepwd.user.label': \"User:\",\n 'changepwd.login.label': \"Login:\",\n 'changepwd.profile.label': \"Profile:\",\n 'changepwd.changepassword.label': \"Change password\",\n 'changepwd.password.label': \"Password\",\n 'forgotpwd.success': \"An email was sent to (#Email) with the new password.\",\n 'forgotpwd.error.email.notfound': \"Email (#Email) could not be found. Please contact an Administrator.\",\n 'forgotpwd.error.email.company.notfound' : 'Email (#Email) was not found for this company. Please contact an Administrator.',\n 'forgotpwd.error.generic': \"An error has occurred.\",\n 'label.expire' : 'You\\'re idle.',\n 'label.logged' : 'You will be logged out in a few seconds. ',\n 'label.seconds' : ' seconds left.',\n 'label.company' : 'Company',\n 'msg.error.company': 'User does not have access to the company.',\n 'msg.not.authorized': 'You are not authorized to view this page',\n 'label.go.dashboard': 'Go to Dashboard',\n 'label.slogan': 'Excellence in Execution'\n });\n $translateProvider.translations('pt', {\n 'title.signin': 'Entrar',\n 'title.signout': 'Sair',\n 'title.signup': 'Cadastro',\n 'title.forgot': 'Recuperar senha',\n 'label.userID': 'Usuário',\n 'label.password': 'Senha',\n 'label.signin': 'Entrar',\n 'label.signup': 'Cadastrar',\n 'label.forgot': 'Recuperar',\n 'label.keepAuth': 'Mantenha-me conectado',\n 'label.forgotPassword': 'Esqueceu usuário ou senha?',\n 'label.newAccount': 'Criar uma conta',\n 'label.fullName': 'Nome completo',\n 'label.email': 'Email',\n 'label.confirmPasswd': 'Confirmar senha?',\n 'label.haveAccount': 'Já possuo conta',\n 'msg.error.signin': 'Usuário ou senha inválidos',\n 'msg.error.signin.active': 'Usuário inativado. Entre em contato com o administrador do sistema.',\n 'changepwd.error.pwd.not.match': \"Senha incorreta.\",\n 'changepwd.error.new.pwd.not.match': \"As senhas informadas são diferentes.\",\n 'changepwd.success.msg': \"Senha alterada, realize o login novamente.\",\n 'changepwd.user.label': \"Usuário:\",\n 'changepwd.login.label': \"Login:\",\n 'changepwd.profile.label': \"Perfil:\",\n 'changepwd.changepassword.label': \"Alterar senha\",\n 'changepwd.password.label': \"Senha\",\n 'forgotpwd.invalid.email': \"Insira um e-mail válido.\",\n 'forgotpwd.success': \"Foi enviado um e-mail para (#Email) com a nova senha.\",\n 'forgotpwd.error.email.notfound': \"O email (#Email) não foi encontrado. Entre em contato com o Administrador do sistema.\",\n 'forgotpwd.error.email.company.notfound' : 'O email (#Email) não foi encontrado para essa empresa. Entre em contato com o Administrador do sistema.',\n 'forgotpwd.error.generic': \"Ocorreu um erro.\",\n 'label.expire' : 'Você está ocioso!',\n 'label.logged' : 'Você será desconectado em alguns segundos. ',\n 'label.seconds' : ' segundos restantes.',\n 'label.company' : 'Empresa',\n 'msg.error.company': 'Usuário não possui acesso à empresa.',\n 'msg.not.authorized': 'Você não tem autorização para acessar esta página.',\n 'label.go.dashboard': 'Ir para o Painel',\n 'label.slogan': 'Excelência em Execução'\n });\n }\n})();\n\n/*eslint angular/json-functions: 0*/\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('AuthService', AuthService);\n\n /** @ngInject */\n function AuthService($window, $injector, $q, ConfigurationService) {\n return {\n getToken: function () {\n return $window.localStorage.aqmsToken;\n },\n\n getBusinessMenu: function () {\n if ($window.localStorage.businessMenu) {\n return JSON.parse($window.localStorage.businessMenu);\n }\n\n return \"\";\n },\n getCompanyName: function () {\n return $window.localStorage.companyName;\n },\n getCompanyId: function () {\n return $window.localStorage.companyId;\n },\n getLastBusiness: function () {\n return $window.localStorage.lastBusiness;\n },\n getBusinessId: function () {\n return $window.localStorage.businessId;\n },\n getBusinessName: function () {\n return $window.localStorage.businessName;\n },\n getUserProfileBusiness: function () {\n return $window.localStorage.userProfileBusiness;\n },\n isPreferences: function () {\n return $window.localStorage.isPreferences;\n },\n isSettings: function () {\n return $window.localStorage.isSettings == 'true';\n },\n isPermission: function () {\n return $window.localStorage.isPermission == 'true';\n },\n isBasicTypes: function () {\n return $window.localStorage.isBasicTypes == 'true';\n },\n isSysAdmin: function () {\n return ($window.localStorage.isSysAdmin == 'true');\n },\n getAliasName: function () {\n return $window.localStorage.aliasAqms;\n },\n getLoginName: function () {\n return $window.localStorage.loginAqms;\n },\n getUserID: function () {\n return $window.localStorage.userID;\n },\n isActive: function () {\n return $window.localStorage.active;\n },\n getProfileName: function () {\n return $window.localStorage.profileName;\n },\n\n setToken: function (token) {\n $window.localStorage.aqmsToken = token;\n },\n setUserId: function (userId) {\n $window.localStorage.userID = userId;\n },\n signIn: function (data) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + '/authentication', data)\n .then(\n function (response) {\n deferred.resolve(response.data);\n $window.localStorage.loginAqms = response.data.Login;\n $window.localStorage.aliasAqms = response.data.Name;\n $window.localStorage.photoAqms = response.data.Photo;\n $window.localStorage.userInitiais = response.data.UserInitials;\n\n $window.localStorage.lastBusiness = response.data.LastBusiness;\n $window.localStorage.businessMenu = JSON.stringify(response.data.BusinessMenu);\n $window.localStorage.userProfileBusiness = response.data.UserProfileBusiness;\n $window.localStorage.isSettings = response.data.IsSettings;\n $window.localStorage.isPreferences = response.data.IsPreferences;\n $window.localStorage.isPermission = response.data.IsPermission;\n $window.localStorage.isBasicTypes = response.data.IsBasicTypes;\n $window.localStorage.companyName = response.data.CompanyName;\n $window.localStorage.companyId = response.data.CompanyId;\n $window.localStorage.isSysAdmin = response.data.IsSysAdmin;\n $window.localStorage.profileName = response.data.ProfileName;\n\n $window.localStorage.active = response.data.CsActive;\n $window.location.href = \"/\";\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n });\n return deferred.promise;\n },\n\n changePassword: function (data) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + '/authentication/change-password/', data)\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n });\n return deferred.promise;\n },\n\n forgotPassword: function (data) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + '/authentication/forgot-password/', data)\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n });\n return deferred.promise;\n },\n loadCompanys: function () {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n var domain = \"/authentication/listCompanys\";\n\n $http.get(ConfigurationService.getServiceHost() + domain + '/',\n {\n headers: {'Authorization': $window.localStorage.aqmsToken}\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n signUp: function (data) {\n var $http = $injector.get(\"$http\");\n $http.post('api/signup', data);\n },\n logout: function () {\n var currentLang = $window.localStorage.defaultLanguage;\n $window.localStorage.clear();\n $window.localStorage.defaultLanguage = currentLang;\n },\n\n getUserProfileBusinessByUserAndBusiness: function (searchParams) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n var domain = \"/authentication/userProfileBusiness\";\n\n $http.get(ConfigurationService.getServiceHost() + domain + '/',\n {\n params: searchParams,\n headers: {'Authorization': $window.localStorage.aqmsToken}\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n };\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(authRouterConfig);\n\n /** @ngInject */\n function authRouterConfig($stateProvider) {\n \n $stateProvider\n .state('signin', {\n url: '/signin',\n views: {\n 'main-view' : {},\n 'signin-view' : {\n templateUrl: 'app/auth/signin.html',\n controller: 'AuthController',\n controllerAs: 'ctrl'\n }\n },\n authorize: false\n })\n .state('signup', {\n url: '/signup',\n views: {\n 'main-view' : {},\n 'signin-view' : {\n templateUrl: 'app/auth/signup.html',\n controller: 'AuthController',\n controllerAs: 'ctrl'\n }\n },\n authorize: false\n })\n .state('forgot', {\n url: '/forgot',\n views: {\n 'main-view' : {},\n 'signin-view' : {\n templateUrl: 'app/auth/forgot.html',\n controller: 'AuthController',\n controllerAs: 'ctrl'\n }\n },\n authorize: false\n })\n .state('not-authorized', {\n url: '/not-authorized',\n views: {\n 'signin-view' : {},\n 'main-view' : {\n templateUrl: 'app/auth/not-authorized.html',\n controller: 'AuthController',\n controllerAs: 'ctrl'}\n },\n authorize: false\n });\n }\n\n})();\nangular.module('aqmsFrontend')\n .factory('AuthInterceptor', AuthInterceptor)\n .config(function ($httpProvider) {\n $httpProvider.interceptors.push('AuthInterceptor');\n });\n\nfunction AuthInterceptor($location, AuthService, $q) {\n\n return {\n request: function (config) {\n config.headers = config.headers || {};\n if (AuthService.getToken()) {\n config.headers['Authorization'] = AuthService.getToken();\n }\n return config;\n },\n responseError: function (response) {\n\n if (response.status === 401 || response.status === 403) {\n $location.path('/not-authorized');\n }\n return $q.reject(response);\n }\n }\n}\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('AuthController', AuthController);\n\n /** @ngInject */\n function AuthController(AuthService, ToastUtil, $translate, $log, $cookies, $window, $timeout) {\n\n var vm = this;\n\n vm.companys = [];\n vm.errorMsg = undefined;\n vm.user = {}\n vm.user.FullName = '';\n vm.user.Login = '';\n vm.user.Email = '';\n vm.user.Password = '';\n vm.user.ConfirmPasswod = '';\n vm.userEmail = \"\";\n\n vm.forgotPassword = function () {\n if (vm.userEmail != undefined && vm.userEmail != \"\") {\n var data = {\n Email: vm.userEmail,\n CompanyId: vm.company.Id\n };\n\n AuthService.forgotPassword(data).then(function () {\n ToastUtil.showToastMessage($translate.instant('forgotpwd.success').replace(\"#Email\", vm.userEmail), ToastUtil.ToastType.SUCCESS);\n $timeout(function(){ $window.location.href = '/'; }, 2000);\n })\n .catch(function (error) {\n $log.log(error);\n var errorMsg = \"\";\n if (error.data) {\n errorMsg = $translate.instant(error.data.Message).replace(\"#Email\", vm.userEmail);\n } else {\n errorMsg = $translate.instant('forgotpwd.error.generic');\n }\n\n ToastUtil.showToastMessage($translate.instant(errorMsg), ToastUtil.ToastType.WARN);\n });\n }\n };\n\n vm.doLogin = function () {\n vm.errorMsg = undefined;\n\n vm.user.companyId = vm.company.Id;\n AuthService.signIn(vm.user)\n\n .then(function (response) {\n\n $cookies.put('company', vm.user.companyId);\n\n AuthService.setToken(response.ApiKey);\n AuthService.setUserId(response.Id)\n })\n\n .catch(function (error) {\n $log.log(error);\n if (error.data) {\n vm.errorMsg = $translate.instant(error.data.Message);\n } else {\n vm.errorMsg = 'msg.error.generic'\n }\n });\n };\n\n vm.createUser = function () {\n AuthService.signUp(vm.user);\n }\n\n function loadAllNamesCompanys() {\n AuthService.loadCompanys().then(function (response) {\n vm.companys = angular.copy(response);\n if (vm.companys.length > 0) {\n var companyId = $cookies.get('company');\n if (companyId) {\n angular.forEach(vm.companys, function (value) {\n if (value.Id == companyId) {\n vm.company = value;\n }\n });\n } else {\n vm.company = vm.companys[0];\n }\n }\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant('msg.error.generic'), ToastUtil.ToastType.ERROR);\n });\n }\n\n loadAllNamesCompanys();\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('AreaService', AreaService);\n\n var AREA_BASE = '/area/';\n /** @ngInject */\n function AreaService($window, $injector, $q, ConfigurationService) {\n return {\n\n\n listAreas: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + AREA_BASE + \"list\", {\n params: filter,\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n list: function (filter) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + \"/default/area/list\", {\n params: filter\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n\n save: function (area) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + AREA_BASE, area, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n\n getById: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + AREA_BASE + 'byId/' + id, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n delete: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + AREA_BASE + \"/\" + id, {\n headers: {\n 'Authorization': $window.localStorage.aqmsToken\n }\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n\n };\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(AlertTranslate);\n\n /** @ngInject */\n function AlertTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'title.alert': 'Alerts',\n 'new.title.alert': 'New Alert',\n 'label.alert.type': 'Alert Type',\n 'label.alert.title': 'Title',\n 'label.alert.next': 'Next Alert',\n 'label.alert.createdby': 'Created By',\n 'label.alert.status': 'Status',\n 'label.alert.createddate': 'Created Date',\n 'alert.status.search.placeholder': 'Search by status',\n 'label.alert.start.createddate': 'Start (Created Date)',\n 'label.alert.end.createddate': 'End (Created Date)',\n 'label.alert.start.duedate': 'Start (Due Date)',\n 'label.alert.end.duedate': 'End (Due Date)',\n 'label.alert.duedate': 'Due Date',\n 'label.alert.daysToAlert': 'Days Before',\n 'label.alert.day': 'Alert Day',\n 'label.alert.hour': 'Hour',\n 'label.alert.alertHour': 'Alert Hour',\n 'label.alert.notes': 'Notes', \n 'alert.deleted.failed': 'This Alert can not be deleted. There are one or more associated records.',\n 'error.alert.not.found': 'Alert not found',\n 'error.alert.calendar.empty': 'The Alert Day list is required.',\n 'error.alert.target.empty': 'The Target list is required.',\n 'alert.type.label.environmental.license': 'Environmental License',\n 'alert.type.label.general': 'Common',\n 'alert.type.label.anatel': 'Anatel',\n 'alert.type.label.contract': 'Contract',\n 'alert.start.createdDate.less.end.createdDate' : 'Start Created Date must be less than or equal to End Created Date.',\n 'alert.start.duedate.less.end.duedate' : 'Start Due Date must be less than or equal to End Due Date.',\n 'error.alerts.search': 'An error occurred when trying to load a list of Alerts.',\n 'alert.remove.success': 'Alert was successfully removed',\n 'alert.remove.error': 'An error occurred when try to remove alert',\n 'alert.remove.error.conflict': 'The Alert can not be removed because it is being used by the system.' ,\n 'placeholder.search.alert': 'Search by title or id',\n 'alert.list.notfound': 'No alert found',\n 'alert.status.active.label': 'Active',\n 'alert.status.inactive.label': 'Inactive',\n 'alert.select.type': 'Select Alert Type',\n 'alert.type.common': 'Common',\n 'alert.type.anatel': 'Anatel',\n 'alert.type.environmental.license': 'Environmental License',\n 'alert.type.contract': 'Contract',\n 'alert.duedate': 'Due Date',\n 'alert.identification': 'Alert identification',\n 'alert.daystoalert': 'Days Before',\n 'alert.alertdescription': 'Description',\n 'alert.alertday': 'Alert Day',\n 'alert.hour': 'Hour',\n 'alert.target': 'Targets',\n 'alert.datealerthouralert': 'Alert Date - Alert hour',\n 'alert.target.name': 'Name',\n 'alert.notes': 'Notes',\n 'alert.save.success': 'Alert was successfully saved',\n 'alert.save.error.duplicated': 'There is already a registered alert for the given data',\n 'target.add.error.duplicated': 'Target already inserted in notified list',\n 'alert.error.duedate': 'Due Date must be greather than or equal to current date',\n 'alert.error.days.to.alert': 'Days to alert is required and need to be less than or equal to 1000',\n 'alert.error.days.to.alert.anatel': 'Days to alert is required',\n 'alert.error.hour.to.alert.required': 'Hour to alert not informed or invalid',\n 'alert.update.success': 'Alert was successfully updated',\n 'label.edit.alert': 'Alert Edit',\n 'alert.remark.title': 'Alteration Remark',\n 'alert.remark': 'Remark',\n 'alert.change.duedate.confirm.dialog.title': 'Alteration Due Date',\n 'alert.change.duedate.confirm.dialog.text': 'When you change the due date, all alerts will be discarded',\n 'alert.enddate': 'End Date',\n 'alert.error.createdby.target': 'Alert creator can not be added to target',\n 'label.alert.emissiondate': 'Emission Date',\n 'alert.error.emissiondate': 'Emission Date must be less than or equal to due date',\n 'alert.error.enddate' : 'Final Date must be higher than or equal to the Alert Date and lower than or equal to the Due Date',\n 'alert.calendar.duplicated': 'There is already alert to the given day',\n 'alert.alertdate.invalid': 'The alert day must be in a period between the issue date and the due date',\n 'alert.remark.required': 'The remark field is required',\n 'alert.creator.remove.error': 'The alert can only be removed by the user who created it and who has permission to remove',\n 'alert.anatel.select.alertday': 'Select the description',\n 'alert.anatel.safetytest': 'Safety Test',\n 'alert.anatel.eletricaltest': 'Electrical Test',\n 'alert.anatel.requestsamples': 'Request Samples',\n 'alert.anatel.assemblesamples': 'Assemble Samples',\n 'alert.anatel.sendsamples': 'Send Samples',\n 'alert.anatel.error': ' It is not allowed to create more than one alert for Safety and Electrical Test',\n 'alert.days.identification': 'Alerts',\n 'alert.target.identification': 'Targets',\n 'alert.anatel.identification': 'Anatel Information',\n 'alert.anatel.model': 'Model',\n 'alert.anatel.variant': 'Variant',\n 'alert.anatel.business': 'Business',\n 'alert.anatel.partnumber': 'Part Number',\n 'alert.anatel.partnumber.name': 'Part',\n 'select.anatel.model': 'Select model',\n 'select.anatel.variant': 'Select variant',\n 'select.anatel.business': 'Select business',\n 'alert.select.alerttype': 'Select a Alert Type to show in chart',\n 'alert.select.contrac': 'Contract',\n 'label.alert.last.remark': 'Remark',\n 'alert.contract.object': 'Object by Contract',\n 'alert.contract.contains': 'An alert for the selected contract already exists',\n 'alert.license.contains': 'An alert for the selected license already exists',\n 'auto.complete.contract.directive.load.error': 'An error occurred while trying to load the contract list'\n });\n\n $translateProvider.translations('pt', {\n 'title.alert': 'Alertas',\n 'new.title.alert': 'Novo Alerta',\n 'label.alert.type': 'Tipo de Alerta',\n 'label.alert.title': 'Título',\n 'label.alert.createdby': 'Criado Por',\n 'label.alert.next': 'Próximo Alerta',\n 'label.alert.status': 'Situação',\n 'alert.status.search.placeholder': 'Buscar pela situação',\n 'label.alert.duedate': 'Data de Vencimento',\n 'label.alert.createddate': 'Data de Criação',\n 'label.alert.start.createddate': 'Início (Data de Criação)',\n 'label.alert.end.createddate': 'Fim (Data de Criação)',\n 'label.alert.start.duedate': 'Início (Data de Vencimento)',\n 'label.alert.end.duedate': 'Fim (Data de Vencimento)',\n 'label.alert.daysToAlert': 'Dias Antes',\n 'label.alert.day': 'Dia do Alerta',\n 'label.alert.hour': 'Hora',\n 'label.alert.alertHour': 'Hora do Alerta',\n 'label.alert.notes': 'Notas', \n 'alert.deleted.failed': 'Este Alerta não pode ser removido.Existe um ou mais associações salvas.',\n 'error.alert.not.found': 'Alerta não encontrado.',\n 'error.alert.calendar.empty': 'A lista de dias de alerta é obrigatória.',\n 'error.alert.target.empty': 'A lista de notificados é obrigatória.',\n 'alert.type.label.environmental.license': 'Licença Ambiental',\n 'alert.type.label.general': 'Comum',\n 'alert.type.label.anatel': 'Anatel',\n 'alert.type.label.contract': 'Contrato',\n 'alert.start.createdDate.less.end.createdDate' : 'A data de criação inicial deve ser menor ou igual à data de criação final.',\n 'alert.start.duedate.less.end.duedate' : 'A data de vencimento inicial deve ser menor ou igual à data de vencimento final.',\n 'error.alerts.search': 'Não foi possível carregar a lista de Alertas, tente novamente ou contate um administrador.',\n 'alert.remove.success': 'Alerta removido com sucesso',\n 'alert.remove.error': 'Ocorreu um erro ao tentar remover um alerta',\n 'alert.remove.error.conflict': 'O Alerta não pode ser removido pois está sendo usado pelo sistema',\n 'placeholder.search.alert': 'Buscar por nome ou id',\n 'alert.list.notfound': 'Nenhum alerta encontrado',\n 'alert.status.active.label': 'Ativo',\n 'alert.status.inactive.label': 'Inativo',\n 'alert.select.type': 'Selecionar Tipo de Alerta',\n 'alert.type.common': 'Comum',\n 'alert.type.anatel': 'Anatel',\n 'alert.type.environmental.license': 'Licença Ambiental',\n 'alert.type.contract': 'Contrato',\n 'alert.duedate': 'Data de Vencimento',\n 'alert.identification': 'Identificação do alerta',\n 'alert.alertdescription': 'Descrição',\n 'alert.daystoalert': 'Dias Antes',\n 'alert.alertday': 'Dia do Alerta',\n 'alert.hour': 'Hora',\n 'alert.target': 'Notificados',\n 'alert.datealerthouralert': 'Data Alerta - Hora Alerta',\n 'alert.target.name': 'Nome',\n 'alert.notes': 'Notas',\n 'alert.save.success': 'Alerta salvo com sucesso',\n 'alert.save.error.duplicated': 'Já existe um alerta cadastrado para os dados fornecidos',\n 'target.add.error.duplicated': 'Usuário já inserido na lista de notificados',\n 'alert.error.duedate': 'A data de vencimento deve ser uma data maior ou igual a data de hoje',\n 'alert.error.days.to.alert': 'Dias para o alerta é obrigatório e precisa ser menor ou igual a 1000',\n 'alert.error.days.to.alert.anatel': 'Dias para o alerta é obrigatório',\n 'alert.error.hour.to.alert.required': 'Hora para o alerta não informada ou inválida',\n 'alert.error.description.to.alert.anatel': 'Selecionar Descrição do Alerta',\n 'alert.update.success': 'Alerta atualizado com sucesso',\n 'label.edit.alert': 'Edição de Alerta',\n 'alert.remark.title': 'Observação de Alteração',\n 'alert.remark': 'Observação',\n 'alert.change.duedate.confirm.dialog.title': 'Alteração da Data de Vencimento',\n 'alert.change.duedate.confirm.dialog.text': 'Ao alterar a data de vencimento, todos os alertas serão descartados.',\n 'alert.enddate': 'Data Final',\n 'alert.error.createdby.target': 'Criador do alerta não poderá ser adicionado a lista de notificados',\n 'label.alert.emissiondate': 'Data de Emissão',\n 'alert.error.emissiondate': 'A data de emissão deve ser uma data menor ou igual a data de vencimento',\n 'alert.error.enddate' : 'Data Final precisa ser maior ou igual ao Dia do Alerta e menor ou igual a Data de Vencimento',\n 'alert.calendar.duplicated': 'Já existe alerta para o dia informado',\n 'alert.alertdate.invalid': 'O dia do alerta deve estar num período entre a data de emissão e a data de vencimento',\n 'alert.remark.required': 'O campo observação é obrigatório',\n 'alert.creator.remove.error': 'O alerta só pode ser removido pelo usuário que o criou e que tenha permissão para remover',\n 'alert.anatel.select.alertday': 'Selecione descrição',\n 'alert.anatel.safetytest': 'Teste de Segurança',\n 'alert.anatel.eletricaltest': 'Teste Elétrico',\n 'alert.anatel.requestsamples': 'Solicitar Amostras',\n 'alert.anatel.assemblesamples': 'Montar Amostras',\n 'alert.anatel.sendsamples': 'Enviar Amostras',\n 'alert.anatel.error': 'Não é permitido criar mais de um alerta para Teste elétrico e teste de segurança',\n 'alert.days.identification': 'Alertas',\n 'alert.target.identification': 'Alvos',\n 'alert.anatel.identification': 'Informação Anatel',\n 'alert.anatel.model': 'Modelo',\n 'alert.anatel.variant': 'Variante',\n 'alert.anatel.business': 'Negócio',\n 'alert.anatel.partnumber': 'Número da Peça',\n 'alert.anatel.partnumber.name': 'Peça',\n 'select.anatel.model': 'Selecione o modelo',\n 'select.anatel.variant': 'Selecione a variante',\n 'select.anatel.business': 'Selecione o negócio',\n 'alert.select.alerttype': 'Escolha o tipo de alerta para exibir no gráfico',\n 'alert.select.contrac': 'Contrato',\n 'label.alert.last.remark': 'Observação',\n 'alert.contract.object': 'Objeto do Contrato',\n 'alert.contract.contains': 'Já existe um alerta para o Contrato selecionado',\n 'alert.license.contains': 'Já existe um alerta para a Licença selecionado',\n 'auto.complete.contract.directive.load.error': 'Ocorreu um erro ao carregar a lista de contratos'\n });\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('AlertService', AlertService);\n\n var BASE = '/alert/';\n\n /** @ngInject */\n function AlertService($state, $translate, $injector, $q, $log, ToastUtil, AuthService, DefaultService, ConfigurationService) {\n\n var types = {COMMON: 1, ANATEL: 2, ENVIRONMENTAL_LICENSE: 3, CONTRACT: 4}, typeOptions = [], statusOptions,\n anatelDaysToAlertOptions = [];\n\n typeOptions = [{\n id: types.COMMON,\n Name: 'alert.type.common'\n }, {\n id: types.ANATEL,\n Name: 'alert.type.anatel'\n }, {\n id: types.ENVIRONMENTAL_LICENSE,\n Name: 'alert.type.environmental.license'\n }, {\n id: types.CONTRACT,\n Name: 'alert.type.contract'\n }];\n\n statusOptions = [{\n id: 1,\n Name: 'basic.header.status.active.label'\n }, {\n id: 0,\n Name: 'basic.header.status.inactive.label'\n }];\n\n anatelDaysToAlertOptions = [\n {\n Name: 'alert.anatel.safetytest',\n Value: \"Safety Test\"\n },\n {\n Name: 'alert.anatel.eletricaltest',\n Value: \"Electrical Test\"\n },\n {\n Name: 'alert.anatel.requestsamples',\n Value: \"Request Samples\"\n },\n {\n Name: 'alert.anatel.assemblesamples',\n Value: \"Assemble Samples\"\n },\n {\n Name: 'alert.anatel.sendsamples',\n Value: \"Send Samples\"\n }\n ];\n\n function validateEditOrConsultPermission(profile) {\n if (profile.CanConsult || profile.CanEdit) {\n return true;\n }\n\n return false;\n }\n\n function validateDeletePermission(vm) {\n if (vm.profile.hasLoad && !vm.profile.CanDelete) {\n return false;\n }\n\n return true;\n }\n\n function validateAddPermission(vm) {\n if (vm.profile.hasLoad && !vm.profile.CanAdd) {\n return false;\n }\n\n return true;\n }\n\n function validateViewPermission(vm) {\n if (vm.profile.hasLoad && !vm.profile.CanView) {\n ToastUtil.showToastMessage($translate.instant(\"msg.not.authorized\"), ToastUtil.ToastType.WARN);\n $state.go('not-authorized', {}, {});\n return false;\n }\n\n return true;\n }\n\n function deleteAlert(id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + BASE + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n\n function searchAlerts(vm, filterParams) {\n if (validateViewPermission(vm)) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n $http.get(ConfigurationService.getServiceHost() + BASE + 'list', {\n params: filterParams\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n } else {\n return $q.reject('not authorized');\n }\n }\n\n function searchCountAlerts(vm, filterParams) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n $http.get(ConfigurationService.getServiceHost() + BASE + 'countAlerts', {\n params: filterParams\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n\n function createAlert(vm) {\n if (validateAddPermission(vm)) {\n $state.go('alert-create');\n } else {\n ToastUtil.showToastMessage($translate.instant(\"msg.not.authorized\"), ToastUtil.ToastType.WARN);\n }\n }\n\n function searchAlertsToTimeline(vm, filterParams) {\n if (validateViewPermission(vm)) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n $http.get(ConfigurationService.getServiceHost() + BASE + 'list/graphic', {\n params: filterParams\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n } else {\n return $q.reject('not authorized');\n }\n }\n\n return {\n\n Types: types,\n\n getAlertTypeOptions: function (sourcingCanApprove, sgiCanApprove) {\n if (sourcingCanApprove && sgiCanApprove)\n return typeOptions.filter(function (type) {\n return type.id === types.COMMON || type.id === types.ANATEL || type.id === types.CONTRACT || type.id === types.ENVIRONMENTAL_LICENSE;\n }); \n else if (sourcingCanApprove)\n return typeOptions.filter(function (type) {\n return type.id === types.COMMON || type.id === types.ANATEL || type.id === types.CONTRACT;\n });\n else if (sgiCanApprove)\n return typeOptions.filter(function (type) {\n return type.id === types.COMMON || type.id === types.ANATEL || type.id === types.ENVIRONMENTAL_LICENSE;\n }); \n else\n return typeOptions.filter(function (type) {\n return type.id === types.COMMON || type.id === types.ANATEL;\n });\n },\n\n getAnatelDaysToAlertOptions: function () {\n return anatelDaysToAlertOptions;\n },\n\n createAlert: function (vm, $scope) {\n if (vm.profile.hasLoad) {\n createAlert(vm);\n } else {\n this.loadProfileModules(vm, $scope)\n .then(function () {\n createAlert(vm);\n })\n .catch(function (error) {\n $log.log(error);\n })\n }\n\n },\n editAlertDashboard: function (id) {\n $state.go('alert-edit', {\n Id: id\n });\n },\n\n editAlert: function (id, profile) {\n if (validateEditOrConsultPermission(profile)) {\n $state.go('alert-edit', {\n Id: id\n });\n } else {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n }\n },\n\n removeAlert: function (vm, alertId) {\n if (validateDeletePermission(vm)) {\n return deleteAlert(alertId);\n } else {\n return $q.reject('not authorized');\n }\n },\n\n loadProfileModules: function (vm, $scope) {\n var profileModule = {};\n\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.moduleAlert;\n\n return DefaultService.loadModules(profileModule)\n .then(function (response) {\n vm.profile = angular.copy(response);\n vm.profile.hasLoad = true;\n });\n },\n\n searchAlerts: function (vm, filtro, $scope) {\n if (vm.profile.hasLoad) {\n return searchAlerts(vm, filtro);\n } else {\n return this.loadProfileModules(vm, $scope)\n .then(function () {\n return searchAlerts(vm, filtro);\n })\n .catch(function () {\n return $q.reject();\n })\n }\n },\n\n searchCountAlerts: function (vm, filtro) {\n return searchCountAlerts(vm, filtro);\n },\n\n save: function (alert) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + BASE, alert, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getById: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + 'byId/' + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n\n update: function (id, alert) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.patch(ConfigurationService.getServiceHost() + BASE + id, alert)\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n searchAlertsToTimeline: function (vm, filtro, $scope) {\n if (vm.profile.hasLoad) {\n return searchAlertsToTimeline(vm, filtro);\n } else {\n return this.loadProfileModules(vm, $scope)\n .then(function () {\n return searchAlertsToTimeline(vm, filtro);\n })\n .catch(function () {\n return $q.reject();\n })\n }\n },\n\n hasViewPermission: function (vm) {\n return validateViewPermission(vm);\n },\n\n getStatusOptions: function () {\n return statusOptions;\n },\n\n hasViewOrEditPermission: function (profile) {\n return validateEditOrConsultPermission(profile);\n }\n\n };\n\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(AlertRouter);\n\n /** @ngInject */\n function AlertRouter($stateProvider) {\n\n\n $stateProvider.state('alert-list', {\n url: '/alert',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/alert/alert-list.html',\n controller: 'AlertListController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.alert'\n },\n authorize: true\n });\n\n $stateProvider.state('alert-create', {\n url: '/alert/create',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/alert/alert.html',\n controller: 'AlertController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.alert'\n },\n authorize: true\n });\n\n $stateProvider.state('alert-edit', {\n url: '/alert/edit/:Id',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/alert/alert.html',\n controller: 'AlertController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.alert'\n },\n authorize: true\n });\n\n }\n})();\n\n/*eslint no-undef: 0*/\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('AlertController', AlertController);\n\n function AlertController(AlertService, $window, $scope, $sce, MessageUtil, ToastUtil, $translate, $state, moment, JsonPatchUtil, DialogControllerTemplate, DefaultService, SourcingService, ContractService, EnvironmentalService) {\n var vm = this, _patch = null, patch = null, NOW = new Date(),\n USER = {Id: parseInt($window.localStorage.userID), Name: $window.localStorage.aliasAqms},\n alertId = parseInt($state.params.Id), states = {};\n\n var DefaultState = {\n canEdit: true,\n canEditAlertType: true,\n canEditEmissionDate: true,\n canEditDueDate: true\n };\n\n vm.State = DefaultState;\n\n vm.businessList = [];\n\n vm.variantList = [];\n\n vm.modelList = [];\n\n vm.PartNumber = null;\n\n vm.License = null;\n\n vm.profileSourcing = null;\n\n vm.profileSGI = null;\n\n vm.AlertServiceTypes = AlertService.Types;\n\n vm.Contract = null;\n\n vm.ContractEditCopy = null;\n\n vm.today = new Date();\n\n vm.editorConfig = {\n sanitize: false,\n toolbar: [{\n name: 'basicStyling',\n items: ['bold', 'italic', 'underline', 'strikethrough', 'subscript', 'superscript', '-', 'leftAlign', 'centerAlign', 'rightAlign', 'blockJustify', '-']\n },\n {\n name: 'paragraph',\n items: ['orderedList', 'unorderedList', 'outdent', 'indent', '-']\n },\n {\n name: 'doers',\n items: ['removeFormatting', 'undo', 'redo', '-']\n },\n {\n name: 'colors',\n items: ['fontColor', 'backgroundColor', '-']\n },\n {\n name: 'styling',\n items: ['font', 'size']\n }\n ]\n };\n\n vm.saveOrUpdate = function () {\n if (alertId && alertId > 0) {\n update();\n } else {\n save();\n }\n }\n\n vm.onConfirmUpdate = function (remark) {\n var filtered = patch.filter(function (p) {\n return p.op === \"add\" && p.path.startsWith(\"/Attachments\");\n });\n\n filtered.forEach(function (item) {\n item.value.Alert = {Id: alertId};\n });\n\n patch.push({\"op\": \"add\", \"path\": \"/AlertHistory/0\", \"value\": {Alert: {Id: alertId}, Remark: remark}});\n patch.push({\"op\": \"replace\", \"path\": \"/UpdatedBy\", \"value\": {Id: USER.Id, Name: USER.Name}});\n\n AlertService.update(alertId, patch)\n .then(function () {\n _patch = null;\n patch = null;\n ToastUtil.showToastMessage($translate.instant(\"alert.update.success\"), ToastUtil.ToastType.SUCCESS);\n $state.go('alert-list');\n })\n .catch(onSaveAlertError);\n }\n\n vm.onAlertTypeOptionChanged = function () {\n vm.Alert.Type = vm.Type.id;\n vm.AlertCalendar = initAlertCalendar();\n\n if (vm.Type.id === AlertService.Types.ANATEL) {\n vm.Alert.Title = null;\n vm.Alert.AnatelInformation = initAnatelInformationModel();\n vm.Alert.DueDate = moment(vm.Alert.EmissionDate).add(1, 'days').toDate();\n initModelList();\n initBusinessList();\n vm.Alert.License = null;\n vm.License = null;\n vm.Alert.Contract = null;\n vm.Contract = null;\n } else if (vm.Type.id === AlertService.Types.CONTRACT) {\n vm.Alert.Title = null;\n vm.State.canEditEmissionDate = false;\n vm.State.canEditDueDate = false;\n vm.Alert.AnatelInformation = null;\n vm.PartNumber = null;\n vm.Alert.License = null;\n vm.License = null;\n vm.Alert.Contract = null;\n vm.Contract = null;\n } else if (vm.Type.id === AlertService.Types.ENVIRONMENTAL_LICENSE) {\n vm.Alert.Title = null;\n vm.State.canEditEmissionDate = false;\n vm.State.canEditDueDate = false;\n vm.Alert.AnatelInformation = null;\n vm.PartNumber = null;\n vm.Alert.Contract = null;\n vm.Contract = null;\n vm.Alert.License = null;\n vm.License = null;\n } else {\n vm.Alert.Title = null;\n vm.Alert.DueDate = moment(vm.Alert.EmissionDate).add(1, 'days').toDate();\n vm.Alert.AnatelInformation = null;\n vm.PartNumber = null;\n vm.Alert.Contract = null;\n vm.Contract = null;\n vm.Alert.License = null;\n vm.License = null;\n }\n };\n\n vm.confirmSelectType = function () {\n vm.Alert.Type = vm.Type.id;\n vm.AlertCalendar = initAlertCalendar();\n }\n\n vm.onLicenseSelected = function () {\n if(vm.License === null || vm.License === \"\") {\n vm.Alert.License = null;\n vm.Alert.EmissionDate = null;\n vm.Alert.DueDate = null;\n vm.Alert.Title = null;\n return;\n }\n\n var license = angular.copy(vm.License);\n\n if (alertId && alertId > 0) {\n return;\n }\n\n var searchParams = {\n LicenseId: license.Id\n };\n\n AlertService.searchCountAlerts(vm, searchParams).then(function (response) {\n if (response > 0) {\n vm.License = null;\n ToastUtil.showToastMessage($translate.instant(\"alert.license.contains\"), ToastUtil.ToastType.WARN);\n } else {\n vm.Alert.License = {Id: license.Id};\n vm.Alert.EmissionDate = setDateViewModel(license.EmissionDate);\n vm.Alert.DueDate = setDateViewModel(license.ExpirationDate);\n vm.Alert.Title = license.LicenseType + ' - ' + license.Number;\n }\n });\n };\n\n vm.addAlertDay = function () {\n if (!isEmissionDateValid()) {\n ToastUtil.showToastMessage($translate.instant(\"alert.error.emissiondate\"), ToastUtil.ToastType.WARN);\n return;\n }\n\n var alertCalendar = angular.copy(vm.AlertCalendar);\n\n if (alertCalendar.Days == null || angular.isUndefined(alertCalendar.Days) || alertCalendar.Days > 1000) {\n if (vm.Alert.Type === AlertService.Types.ANATEL) {\n ToastUtil.showToastMessage($translate.instant(\"alert.error.days.to.alert.anatel\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"alert.error.days.to.alert\"), ToastUtil.ToastType.WARN);\n }\n return;\n }\n\n if (vm.Alert.Type === AlertService.Types.ANATEL) {\n if (vm.Alert.AlertCalendars.some(function (calendar) {\n return calendar.Days === alertCalendar.Days;\n })) {\n ToastUtil.showToastMessage($translate.instant(\"alert.anatel.error\"), ToastUtil.ToastType.WARN);\n return;\n }\n\n if (alertCalendar.Description === null || angular.isUndefined(alertCalendar.Description)) {\n ToastUtil.showToastMessage($translate.instant(\"alert.anatel.select.alertday\"), ToastUtil.ToastType.WARN);\n return;\n }\n }\n\n if (!alertCalendar.AlertDate || !alertCalendar.Hour) {\n ToastUtil.showToastMessage($translate.instant(\"alert.error.hour.to.alert.required\"), ToastUtil.ToastType.WARN);\n return;\n }\n\n if (!isAlertDateValid(alertCalendar.AlertDate)) {\n ToastUtil.showToastMessage($translate.instant(\"alert.alertdate.invalid\"), ToastUtil.ToastType.WARN);\n return;\n }\n\n if (!isEndDateValid(alertCalendar.EndDate)) {\n ToastUtil.showToastMessage($translate.instant(\"alert.error.enddate\"), ToastUtil.ToastType.WARN);\n return;\n }\n\n if (alertCalendarExists(alertCalendar)) {\n ToastUtil.showToastMessage($translate.instant(\"alert.calendar.duplicated\"), ToastUtil.ToastType.WARN);\n } else {\n setAlertDate(alertCalendar);\n vm.Alert.AlertCalendars.push(alertCalendar);\n }\n vm.AlertCalendar = initAlertCalendar();\n setAlertDateAfterDueDateChanged();\n disableAlertIdentificationEditing();\n };\n\n vm.deleteAlertDay = function (index) {\n vm.Alert.AlertCalendars.splice(index, 1);\n disableAlertIdentificationEditing();\n }\n\n vm.deleteTarget = function (index) {\n vm.Alert.AlertTargets.splice(index, 1);\n }\n\n vm.addTarget = function () {\n var target = angular.copy(vm.AlertTarget);\n\n if (angular.isUndefined(target)) {\n return;\n }\n\n if (target.Id === vm.Alert.CreatedBy.Id) {\n ToastUtil.showToastMessage($translate.instant(\"alert.error.createdby.target\"), ToastUtil.ToastType.WARN);\n return;\n }\n\n if (targetExists(target.Id)) {\n vm.AlertTarget = null;\n ToastUtil.showToastMessage($translate.instant(\"target.add.error.duplicated\"), ToastUtil.ToastType.WARN);\n return;\n }\n\n var index = target.Name.indexOf(\"(@\");\n var newAlert = {\n User: {\n Id: target.Id,\n Name: target.Name.substring(0, index - 1),\n Email: target.Email\n }\n };\n\n if (alertId && alertId > 0) {\n newAlert.Alert = {Id: alertId};\n }\n\n vm.Alert.AlertTargets.push(newAlert);\n vm.AlertTarget = null;\n }\n\n vm.onDueDateChanged = function () {\n setAlertDateAfterDueDateChanged();\n }\n\n vm.resetAlertDate = function () {\n setAlertDateAfterDueDateChanged();\n }\n\n vm.getHTML = function (text) {\n return $sce.trustAsHtml(text);\n };\n\n vm.onChangeStatus = function () {\n vm.Alert.CsActive = !vm.Status ? vm.Status : vm.Status.id === 1 ? true : false;\n };\n\n vm.isAnatelFieldRequired = function () {\n return vm.State.canEdit && vm.Alert.Type === AlertService.Types.ANATEL;\n }\n\n vm.isPartNumberRequired = function () {\n return vm.State.canEdit && vm.Alert.Type === AlertService.Types.ANATEL && vm.Alert.AnatelInformation.Parts.length === 0;\n }\n\n vm.addPartNumber = function () {\n var parts = vm.Alert.AnatelInformation.Parts;\n if ((vm.PartNumber && vm.PartNumber.length > 0) && !parts.some(function (part) {\n return part.PartNumber === vm.PartNumber;\n })) {\n var partNumber = {PartNumber: angular.copy(vm.PartNumber)};\n if (vm.Alert.AnatelInformation.Id) {\n partNumber.AnatelInformation = {Id: vm.Alert.AnatelInformation.Id};\n vm.Alert.Title = vm.Model.Title;\n }\n parts.push(partNumber);\n }\n\n if (vm.Type.id === AlertService.Types.ANATEL) {\n vm.Alert.Title = vm.Model.Title;\n }\n\n vm.PartNumber = null;\n };\n\n vm.deletePartNumber = function (index) {\n vm.Alert.AnatelInformation.Parts.splice(index, 1);\n };\n\n vm.onSelectModel = function () {\n loadVariantByModel();\n };\n\n vm.onSelectVariant = function () {\n vm.Alert.AnatelInformation.Variant = vm.Variant;\n };\n\n vm.onContractSelected = function () {\n var contract = vm.Contract;\n\n if (alertId && alertId > 0 && vm.ContractEditCopy.Id == contract.Id) {\n vm.Contract = vm.ContractEditCopy.Id + ' - ' + vm.ContractEditCopy.Vendor.FantasyName;\n return;\n }\n\n var searchParams = {\n ContractId: contract.Id\n };\n\n AlertService.searchCountAlerts(vm, searchParams).then(function (response) {\n if (response == 0) {\n ContractService.getById(contract.Id)\n .then(\n function (response) {\n vm.Alert.Contract = angular.copy(response);\n vm.Alert.EmissionDate = setDateViewModel(vm.Alert.Contract.StartDate);\n vm.Alert.DueDate = setDateViewModel(vm.Alert.Contract.ExpirationDate);\n }\n );\n } else if (response > 0) {\n vm.Contract = null;\n ToastUtil.showToastMessage($translate.instant(\"alert.contract.contains\"), ToastUtil.ToastType.WARN);\n }\n });\n };\n\n vm.isNotesInvalid = function () {\n var notes = vm.Alert.Notes;\n return notes === null || notes.replace(/ /gi, '').trim() === \"\";\n }\n\n function loadVariantByModel() {\n var model = vm.Model;\n DefaultService.loadVariantByModel(model.Id)\n .then(function (response) {\n vm.variantList = response;\n vm.variantList.forEach(function (variant) {\n variant.Model = model;\n });\n if (vm.Variant) {\n vm.Variant = vm.variantList.filter(function (v) {\n return v.Id === vm.Variant.Id;\n })[0];\n }\n });\n }\n\n function initBusinessList() {\n if (vm.businessList.length === 0) {\n DefaultService.loadBussiness()\n .then(function (response) {\n vm.businessList = response;\n if (vm.Alert.AnatelInformation && vm.Alert.AnatelInformation.Business) {\n vm.Alert.AnatelInformation.Business = vm.businessList.filter(function (b) {\n return b.Id === vm.Alert.AnatelInformation.Business.Id;\n })[0];\n }\n });\n }\n }\n\n function initModelList() {\n if (vm.modelList.length === 0) {\n DefaultService.loadModels({CSActive: 1})\n .then(function (response) {\n vm.modelList = response;\n if (vm.Model) {\n vm.Model = vm.modelList.filter(function (m) {\n return m.Id === vm.Model.Id;\n })[0];\n loadVariantByModel();\n }\n });\n }\n }\n\n function initAnatelInformationModel() {\n return {\n Variant: {\n Model: null\n },\n Business: null,\n Parts: []\n }\n }\n\n function disableAlertIdentificationEditing() {\n var alertIdentificationDisabled = vm.Alert.AlertCalendars.length > 0;\n\n if (vm.Type.id === AlertService.Types.CONTRACT) {\n vm.State.canEditEmissionDate = false;\n vm.State.canEditDueDate = false;\n } else if (vm.Type.id === AlertService.Types.ENVIRONMENTAL_LICENSE) {\n vm.State.canEditEmissionDate = false;\n vm.State.canEditDueDate = false;\n } else {\n vm.State.canEditAlertType = !alertIdentificationDisabled;\n vm.State.canEditEmissionDate = !alertIdentificationDisabled;\n vm.State.canEditDueDate = !alertIdentificationDisabled;\n }\n }\n\n function initStates() {\n states = {\n Default: DefaultState,\n Consult: initConsultState(),\n Anatel: initAnatelState()\n }\n }\n\n function initAnatelState() {\n var anatel = angular.copy(vm.State);\n anatel.isAnatel = true;\n return anatel;\n }\n\n function initConsultState() {\n var consult = angular.copy(vm.State);\n consult.canEdit = false,\n consult.canEditAlertType = false,\n consult.canEditEmissionDate = false,\n consult.canEditDueDate = false\n return consult;\n }\n\n function canSave() {\n var notes = vm.Alert.Notes;\n\n if (!isEmissionDateValid()) {\n ToastUtil.showToastMessage($translate.instant(\"alert.error.emissiondate\"), ToastUtil.ToastType.WARN);\n return false;\n }\n\n if (vm.Alert.AlertCalendars.length === 0) {\n ToastUtil.showToastMessage($translate.instant(\"error.alert.calendar.empty\"), ToastUtil.ToastType.WARN);\n return false;\n }\n\n if (vm.Alert.AlertTargets.length === 0) {\n ToastUtil.showToastMessage($translate.instant(\"error.alert.target.empty\"), ToastUtil.ToastType.WARN);\n return false;\n }\n\n return $scope.alertForm.$valid && notes !== null && notes.replace(/ /gi, '').trim() !== \"\";\n }\n\n function save() {\n if (canSave()) {\n if (!isDueDateValid()) {\n ToastUtil.showToastMessage($translate.instant(\"alert.error.duedate\"), ToastUtil.ToastType.WARN);\n return false;\n }\n var alert = angular.copy(vm.Alert);\n\n if(alert.Type == AlertService.Types.ENVIRONMENTAL_LICENSE) {\n alert.License = {Id: alert.License.Id};\n }\n\n AlertService.save(alert)\n .then(onSaveAlertSuccess)\n .catch(onSaveAlertError);\n }\n }\n\n function update() {\n if (canSave()) {\n patch = formatAlertToUpdate();\n if (patchIsNotEmpty(patch)) {\n var dueDateChanged = patch.some(hasReplaceDueDateOperation),\n dueDateValid = !dueDateChanged || isDueDateValid();\n\n if (dueDateValid) {\n DialogControllerTemplate.showWithCloseListener('alert.remark.title', 'alert.remark',\n '', vm.onConfirmUpdate);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"alert.error.duedate\"), ToastUtil.ToastType.WARN);\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(\"alert.update.success\"), ToastUtil.ToastType.SUCCESS);\n $state.go('alert-list');\n }\n }\n }\n\n function hasReplaceDueDateOperation(item) {\n return item.op === \"replace\" && item.path === \"/DueDate\";\n }\n\n function patchIsNotEmpty(patch) {\n return patch && patch.length > 0;\n }\n\n function formatAlertToUpdate() {\n var updated = vm.Alert.UpdatedBy;\n\n vm.Alert.UpdatedBy = {\n Id: updated.Id, Name: updated.Name\n }\n\n var patch = generatePatch();\n\n handleFieldDate(patch, \"DueDate\");\n handleFieldDate(patch, \"CreatedDate\");\n handleFieldDate(patch, \"UpdatedDate\");\n handleFieldDate(patch, \"EmissionDate\");\n\n return patch;\n }\n\n function handleFieldDate(patch, field) {\n if (patch.length > 0) {\n var filtered = patch.filter(function (p) {\n return p.op == \"replace\" && p.path === \"/\" + field;\n });\n if (filtered && filtered.length > 0) {\n var currentPatch = filtered[0];\n if (angular.equals(new Date(currentPatch.value), vm.alertCopy[field])) {\n patch.splice(patch.indexOf(currentPatch), 1);\n }\n }\n }\n }\n\n function generatePatch() {\n var patch = JsonPatchUtil.generate(vm.Alert, vm.alertCopy, vm.observer, _patch);\n patch = patchAnatelInformation(patch);\n _patch = angular.copy(patch);\n return patch;\n }\n\n function patchAnatelInformation(patch) {\n if (vm.Type.id === AlertService.Types.ANATEL) {\n JsonPatchUtil.generatePatchArray(vm.Alert.AnatelInformation, \"Parts\", vm.alertCopy.AnatelInformation, patch);\n patch = patch.reduce(function (operations, item) {\n if (item.path.startsWith(\"/Parts\")) {\n item.path = \"/AnatelInformation\" + item.path;\n }\n if (!item.path.startsWith(\"/AnatelInformation/Variant/Model\")\n && !item.path.startsWith(\"/AnatelInformation/Business/CompanyId\")) {\n operations.push(item);\n }\n return operations;\n }, []);\n }\n return patch;\n }\n\n function isAlertDateValid(alertDate) {\n var date = moment(alertDate), due = moment(vm.Alert.DueDate), emission = moment(vm.Alert.EmissionDate);\n return (date.isSame(emission, 'day') || date.isAfter(emission, 'day')) && (date.isSame(due, 'day') || date.isBefore(due, 'day'));\n }\n\n function isEmissionDateValid() {\n var emission = moment(vm.Alert.EmissionDate), due = moment(vm.Alert.DueDate);\n if (emission.isAfter(due, 'day')) {\n return false;\n }\n\n return true\n }\n\n function setAlertDateAfterDueDateChanged() {\n var dueDate = angular.copy(vm.Alert.DueDate), daysToAlert = vm.AlertCalendar.Days ? vm.AlertCalendar.Days : 0;\n dueDate.setDate(dueDate.getDate() - daysToAlert);\n vm.AlertCalendar.AlertDate = dueDate;\n }\n\n function isDueDateValid() {\n var dueDate = moment(vm.Alert.DueDate);\n if (!(dueDate.isSame(NOW, 'day') || dueDate.isAfter(NOW, 'day'))) {\n if (alertId && vm)\n return false;\n }\n return true;\n }\n\n function setAlertDate(alertCalendar) {\n var hours = alertCalendar.Hour.split(\":\")[0], minutes = alertCalendar.Hour.split(\":\")[1];\n alertCalendar.AlertDate = moment(alertCalendar.AlertDate)\n .utc(alertCalendar.AlertDate)\n .hours(hours)\n .minutes(minutes)\n .seconds(0)\n .format();\n }\n\n function isEndDateValid(endDate) {\n if (endDate != null) {\n var end = moment(endDate), alertDate = moment(vm.AlertCalendar.AlertDate), dueDate = moment(vm.Alert.DueDate);\n\n if ((end.isSame(alertDate, 'day') || end.isAfter(alertDate, 'day')) && (end.isSame(dueDate, 'day') || end.isBefore(dueDate, 'day'))) {\n return true;\n }\n }\n return false;\n }\n\n function onSaveAlertSuccess() {\n ToastUtil.showToastMessage($translate.instant(\"alert.save.success\"), ToastUtil.ToastType.SUCCESS);\n $state.go('alert-list');\n }\n\n function onSaveAlertError(error) {\n patch = null;\n MessageUtil.onSaveError(error, 'alert.save.error.duplicated');\n }\n\n function alertCalendarExists(alertCalendar) {\n var result = vm.Alert.AlertCalendars.filter(function (item) {\n return item.Days === alertCalendar.Days;\n });\n return result && result.length > 0;\n }\n\n function targetExists(userId) {\n var result = vm.Alert.AlertTargets.filter(function (target) {\n return target.User.Id === userId;\n });\n return result && result.length > 0;\n }\n\n function initAlertCalendar() {\n vm.State.canEditEmissionDate = true;\n vm.State.canEditDueDate = true;\n var endDate = moment(new Date());\n var newAlertCalendar = {\n Days: null,\n AlertDate: new Date(),\n EndDate: new Date(endDate.year(), endDate.month(), endDate.date()),\n Hour: null\n };\n\n if (alertId && alertId > 0) {\n newAlertCalendar.Alert = {Id: alertId};\n }\n\n vm.AnatelDaysToAlert = null;\n\n return newAlertCalendar;\n }\n\n function init() {\n var profileAlert = angular.copy(vm.profile);\n\n SourcingService.loadProfileContractModules(vm, $scope)\n .then(function () {\n vm.profileSourcing = vm.profile;\n\n EnvironmentalService.loadProfileModules(vm, $scope).then(function() {\n vm.profileSGI = vm.profile;\n\n vm.profile = profileAlert;\n\n vm.alertTypeOptions = AlertService.getAlertTypeOptions(vm.profileSourcing.CanApprove, vm.profileSGI.CanApprove);\n vm.anatelDaysToAlertOptions = AlertService.getAnatelDaysToAlertOptions();\n vm.statusOptions = AlertService.getStatusOptions();\n var COMMON = vm.alertTypeOptions[0];\n initAlertViewModel(COMMON);\n vm.AlertCalendar = initAlertCalendar();\n vm.Type = COMMON;\n\n if (alertId && alertId > 0) {\n vm.label = \"label.edit.alert\";\n AlertService.loadProfileModules(vm, $scope)\n .then(validateViewOrEditPermission)\n .catch(function () {\n AlertService.getById(alertId)\n .then(setViewModel);\n });\n } else {\n vm.label = \"new.title.alert\";\n }\n });\n });\n }\n\n function validateViewOrEditPermission() {\n if (AlertService.hasViewOrEditPermission(vm.profile)) {\n if (!vm.profile.CanEdit) {\n vm.State = states.Consult;\n }\n getAlert();\n } else {\n $state.go('not-authorized', {}, {});\n }\n }\n\n function getAlert() {\n AlertService.getById(alertId)\n .then(setViewModel);\n }\n\n function initAlertViewModel(COMMON) {\n var emissionDate = moment(), dueDate = moment().add(1, 'd');\n vm.Alert = {\n Type: COMMON.id,\n Title: null,\n CreatedBy: USER,\n CreatedDate: NOW,\n UpdatedBy: USER,\n UpdatedDate: NOW,\n DueDate: dueDate.toDate(),\n CsActive: null,\n Attachments: [],\n AlertCalendars: [],\n AlertTargets: [],\n AlertEmailNotification: [],\n Notes: null,\n EmissionDate: emissionDate.toDate(),\n AnatelInformation: null,\n Contract: null\n };\n }\n\n function setViewModel(alert) {\n\n if(alert.Type === AlertService.Types.CONTRACT && !vm.profileSourcing.CanApprove) {\n $state.go('not-authorized', {}, {});\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n return;\n }\n\n if(alert.Type === AlertService.Types.ENVIRONMENTAL_LICENSE && !vm.profileSGI.CanApprove) {\n $state.go('not-authorized', {}, {});\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n return;\n }\n\n vm.Alert.Id = alert.Id;\n vm.Alert.Type = alert.Type;\n vm.Alert.Title = alert.Title;\n vm.Alert.CreatedBy = mapUser(alert.CreatedBy);\n vm.Alert.UpdatedBy = mapUser(alert.UpdatedBy);\n vm.Alert.CreatedDate = setDateViewModel(alert.CreatedDate);\n vm.Alert.UpdatedDate = setDateViewModel(alert.UpdatedDate);\n vm.Alert.DueDate = setDateViewModel(alert.DueDate);\n vm.Alert.EmissionDate = setDateViewModel(alert.EmissionDate);\n vm.Alert.CsActive = alert.CsActive;\n vm.Alert.Attachments = alert.Attachments;\n vm.Alert.AlertCalendars = alert.AlertCalendars.map(convertAlertCalendar);\n vm.Alert.AlertTargets = alert.AlertTargets.map(convertAlertTarget);\n vm.Alert.AlertEmailNotification = alert.AlertEmailNotification;\n vm.Alert.Notes = alert.Notes;\n vm.Type = vm.alertTypeOptions.filter(function (option) {\n return option.id === vm.Alert.Type;\n })[0];\n vm.Status = vm.statusOptions.filter(function (option) {\n return option.id === (alert.CsActive === true ? 1 : 0);\n })[0];\n setReadOnlyViewModel();\n setAlertAnatelViewModel(alert);\n setAlertContractViewModel(alert);\n disableAlertIdentificationEditing();\n\n if(alert.License != null)\n vm.License = {Id: alert.License.Id, Title: alert.License.EnvironmentalService.Vendor === null ? alert.License.EnvironmentalService.Area.Title + ' - ' + alert.License.Number : alert.License.EnvironmentalService.Vendor.FantasyName + ' - ' + alert.License.Number };\n\n vm.alertCopy = angular.copy(vm.Alert);\n vm.ContractEditCopy = angular.copy(alert.Contract);\n vm.observer = jsonpatch.observe(vm.Alert);\n }\n\n function setAlertContractViewModel(alert) {\n if (vm.Type.id === AlertService.Types.CONTRACT) {\n ContractService.getById(alert.Contract.Id)\n .then(\n function (response) {\n vm.Alert.Contract = angular.copy(response);\n vm.Contract = vm.Alert.Contract.Id + ' - ' + vm.Alert.Contract.Vendor.FantasyName;\n }\n );\n }\n }\n\n function setAlertAnatelViewModel(alert) {\n if (vm.Type.id === AlertService.Types.ANATEL) {\n setAnatelState();\n if (alert.AnatelInformation) {\n var anatelInformation = alert.AnatelInformation;\n vm.Alert.AnatelInformation = mapAnatelInformation(anatelInformation);\n vm.Model = anatelInformation.Variant.Model;\n vm.Variant = anatelInformation.Variant;\n initModelList();\n initBusinessList();\n }\n }\n }\n\n function mapAnatelInformation(anatelInformation) {\n var variant = anatelInformation.Variant;\n return {\n Id: anatelInformation.Id,\n Business: anatelInformation.Business,\n Parts: anatelInformation.Parts,\n Variant: variant\n };\n }\n\n function setAnatelState() {\n var anatelState = angular.copy(states.Anatel);\n anatelState.canEdit = vm.State.canEdit;\n vm.State = anatelState;\n }\n\n function setReadOnlyViewModel() {\n if (vm.Alert.CreatedBy.Id !== USER.Id) {\n if (!vm.Alert.AlertTargets.some(function (target) {\n return target.User.Id === USER.Id;\n })) {\n vm.State = states.Consult;\n }\n }\n }\n\n function setDateViewModel(date) {\n var momentDate = moment(date, 'YYYY/MM/DD');\n return new Date(momentDate.year(), momentDate.month(), momentDate.date());\n }\n\n function mapUser(user) {\n return {Id: user.Id, Name: user.Name};\n }\n\n function convertAlertTarget(alertTarget) {\n var user = alertTarget.User;\n return {\n Id: alertTarget.Id,\n User: {\n Id: user.Id,\n Name: user.Name,\n Email: user.Email\n }\n }\n }\n\n function convertAlertCalendar(alertCalendar) {\n var date = moment(alertCalendar.AlertDate, 'YYYY/MM/DD'),\n hour = moment(angular.copy(alertCalendar.AlertDate)).utc();\n var endDate = moment(alertCalendar.EndDate, 'YYYY/MM/DD');\n alertCalendar.AlertDate = new Date(date.year(), date.month(), date.date());\n alertCalendar.EndDate = new Date(endDate.year(), endDate.month(), endDate.date());\n alertCalendar.Hour = new Date(date.year(), date.month(), date.date(), hour.hour(), hour.minutes(), 0, 0);\n return alertCalendar;\n }\n\n initStates();\n init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('AlertRemarkController', AlertRemarkController)\n .directive('alertRemark', AlertRemarkDirective);\n\n function AlertRemarkDirective() {\n return {\n bindToController: true,\n restrict: 'E',\n replace: true,\n templateUrl: \"app/alert/alert-remark.html\",\n controllerAs: 'ctrl',\n controller: 'AlertRemarkController',\n scope: {\n isOptional: '=?'\n }\n };\n\n }\n /* @ngInject */\n function AlertRemarkController($scope) {\n var vm = this;\n vm.value = \"\";\n vm.remarkInvalid = false;\n\n vm.getSize = function () {\n return $scope.parentDialogSize;\n };\n\n vm.isConfirmDisabled = function () {\n return !vm.value || vm.value.length < 3;\n };\n\n vm.close = function () {\n $scope.$parent.$close('cancel');\n $scope.$parent.$dismiss();\n };\n\n vm.confirm = function () {\n var optional = angular.isDefined(vm.isOptional) && vm.isOptional === true;\n if (!optional && (vm.value === null || angular.isUndefined(vm.value) || vm.value === \"\")) {\n vm.remarkInvalid = true;\n return;\n }\n\n $scope.$parent.parentDialog(vm.value);\n $scope.$parent.$close('ok');\n\n };\n\n vm.onRemarkChanged = function () {\n vm.remarkInvalid = false;\n }\n\n }\n})();\n/*eslint no-undef: 0*/\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('AlertListController', AlertListController);\n\n function AlertListController($scope, $window, $translate, $state, AuthService, AlertService, ToastUtil, moment, SourcingService, EnvironmentalService) {\n\n var vm = this, USER = { Id: parseInt($window.localStorage.userID), Name: $window.localStorage.aliasAqms };\n\n vm.isOpen = true;\n\n vm.view = \"list\";\n\n vm.data = [];\n\n vm.AlertTypeList = [\n { name: 'alert.type.label.general', value: AlertService.Types.COMMON },\n { name: 'alert.type.label.anatel', value: AlertService.Types.ANATEL },\n { name: 'alert.type.label.environmental.license', value: AlertService.Types.ENVIRONMENTAL_LICENSE },\n { name: 'alert.type.label.contract', value: AlertService.Types.CONTRACT }\n ];\n\n vm.statusList = [{\n id: true,\n name: 'alert.status.active.label'\n }, {\n id: false,\n name: 'alert.status.inactive.label'\n }];\n\n vm.AlertType = -1;\n\n vm.profileSourcing = null;\n vm.profileSGI = null;\n\n var HTTP_STATUS_CONFLICT = 409;\n vm.alerts = [];\n vm.itensPerPageList = [\n { name: '5', value: 5, before: 0, after: 6 },\n { name: '10', value: 10, before: 5, after: 11 },\n { name: '20', value: 20, before: 10, after: 21 },\n { name: '30', value: 30, before: 20, after: 31 },\n { name: '40', value: 40, before: 30, after: 41 },\n { name: '50', value: 50, before: 40, after: 51 }];\n\n vm.itemPerPage = vm.itensPerPageList[0];\n\n vm.totalLista = 0;\n vm.searchParams = {\n Title: '',\n StartCreatedDate: '',\n EndCreatedDate: '',\n StartDueDate: '',\n EndDueDate: '',\n Type: '-1',\n CsActive: '-1',\n SourcingApprove: false,\n SGIApprove: false,\n UserId: AuthService.getUserID(),\n Page: 1,\n MaxPerPage: vm.itemPerPage.value\n };\n\n vm.clearSearchFields = function () {\n vm.AlertType = '-1';\n vm.searchParams.Title = '';\n vm.searchParams.StartCreatedDate = '';\n vm.searchParams.EndCreatedDate = '';\n vm.searchParams.StartDueDate = '';\n vm.searchParams.EndDueDate = '';\n vm.searchParams.Type = '-1';\n vm.searchParams.CsActive = '-1';\n }\n\n vm.shouldShow = function (item) {\n if (vm.totalLista > 0 && item != undefined) {\n return vm.totalLista >= item.value || (vm.totalLista < item.after && vm.totalLista > item.before);\n }\n return false;\n }\n\n vm.changeItemsPerPage = function () {\n if (vm.itemPerPage == null) {\n vm.searchParams.MaxPerPage = vm.itensPerPageList[0].value;\n }\n search(1, vm.searchParams.MaxPerPage);\n };\n\n vm.onPageChange = function () {\n search(vm.searchParams.Page, vm.searchParams.MaxPerPage);\n };\n\n vm.viewAsGraphic = function () {\n if (vm.searchParams.Type && vm.searchParams.Type != \"-1\") {\n vm.view = \"graphic\";\n vm.alerts = [];\n vm.searchTimelineAlert();\n } else {\n vm.view = \"list\";\n ToastUtil.showToastMessage($translate.instant(\"alert.select.alerttype\"), ToastUtil.ToastType.WARN);\n }\n }\n\n vm.viewAsList = function () {\n vm.view = \"list\";\n vm.alerts = [];\n if (vm.itemPerPage == null) {\n vm.itemPerPage = vm.itensPerPageList[0];\n }\n search(1, vm.itemPerPage.value);\n }\n\n vm.searchTimelineAlert = function () {\n vm.data = [];\n vm.options = undefined;\n\n validStartCreatedDateEndCreatedDate();\n validStartDueDateEndDueDate();\n if (sessionStorage.getItem(\"searchParams\")) {\n vm.searchParams = JSON.parse(sessionStorage.getItem(\"searchParams\"));\n sessionStorage.removeItem(\"searchParams\");\n vm.itensPerPageList.forEach(function(element) {\n if (element.value == vm.searchParams.MaxPerPage) {\n vm.itemPerPage = element;\n return;\n }\n });\n }\n\n var searchParamsCopy = buildSearchParam();\n AlertService.searchAlertsToTimeline(vm, searchParamsCopy, $scope)\n .then(function (response) {\n vm.alerts = response;\n vm.generateTimelineData();\n })\n .catch(function (error) {\n if (error && error.status) {\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"error.alerts.search\"), ToastUtil.ToastType.ERROR);\n }\n }\n });\n };\n\n vm.headersFormats = {\n month: function(column) {\n return column.date.format('[P]MM' + '[-Y]YY');\n },\n year: function(column) {\n return column.date.format('[Y]YY');\n }\n };\n\n vm.generateTimelineData = function() {\n var data = [];\n var fromEmissionDate, toDate;\n\n vm.alerts.forEach(function (element) {\n var emissionDate = moment(element.EmissionDate, \"YYYY-MM-DD\");\n var dueDate = moment(element.DueDate, \"YYYY-MM-DD\");\n\n if ( fromEmissionDate ) {\n fromEmissionDate = fromEmissionDate > emissionDate ? emissionDate : fromEmissionDate;\n } else {\n fromEmissionDate = emissionDate;\n }\n\n if ( toDate ) {\n toDate = toDate < dueDate ? dueDate : toDate;\n } else {\n toDate = dueDate;\n }\n\n var childrens = element.AlertCalendars;\n var listChildrens = [];\n\n childrens.forEach(function (child) { listChildrens.push(child.DaysToAlert) });\n\n var groups = {\n enabled: true,\n from: emissionDate,\n to: dueDate\n }\n\n var body = {\n header: $translate.instant('title.alert'),\n name: element.Title,\n start: emissionDate,\n end: dueDate,\n groups: groups,\n content: ' {{row.model.name}}'\n };\n\n data.push(body);\n\n childrens.forEach(function (child) {\n var alertDate = moment(child.AlertDate, \"YYYY-MM-DD\");\n var endDate = moment(child.EndDate, \"YYYY-MM-DD\");\n var nameChild = element.Type == \"2\" ? $translate.instant(child.Name) : $translate.instant(child.Name) + \" - \" + alertDate.format($translate.instant(\"date_format_options\")) + \" - \" + endDate.format($translate.instant(\"date_format_options\"));\n var varChild = {\n header: $translate.instant('title.alert'),\n name: nameChild,\n start: child.AlertDate,\n end: child.EndDate,\n parent: body.name,\n tooltips: true,\n tasks: [{ id: child.Id,\n name: nameChild,\n color: '#F1C232',\n from: alertDate,\n to: endDate\n }]\n }\n data.push(varChild);\n });\n\n });\n vm.data = data;\n vm.options = {\n header: $translate.instant('title.alert'),\n classes: 'gantt-row-alertas',\n currentDate:'line',\n currentDateValue: moment(),\n daily: false,\n scale: 'month',\n date: moment().add(-1,'d'),\n showSide: true,\n fromDate: fromEmissionDate,\n toDate: toDate,\n content: ' {{row.model.name}}',\n dateFormat: $translate.instant('date_format_options'),\n columnWidth: 50,\n allowSideResizing: true,\n columnMagnet: '1 month',\n autoExpand: 'both',\n maxHeight: 1500\n };\n }\n\n vm.searchFullAlert = function() {\n if ( vm.view == \"graphic\" ) {\n vm.viewAsGraphic();\n } else {\n vm.searchAlert();\n }\n }\n\n vm.searchAlert = function () {\n vm.itemPerPage = vm.itensPerPageList[0];\n search(1, vm.itemPerPage.value);\n }\n\n vm.search = function () {\n validStartCreatedDateEndCreatedDate();\n validStartDueDateEndDueDate();\n if (sessionStorage.getItem(\"searchParams\")) {\n vm.searchParams = JSON.parse(sessionStorage.getItem(\"searchParams\"));\n sessionStorage.removeItem(\"searchParams\");\n vm.itensPerPageList.forEach(function(element) {\n if (element.value == vm.searchParams.MaxPerPage) {\n vm.itemPerPage = element;\n return;\n }\n });\n }\n var searchParamsCopy = buildSearchParam();\n\n AlertService.searchAlerts(vm, searchParamsCopy, $scope)\n .then(function (response) {\n vm.alerts = response.resultList;\n vm.totalLista = response.total;\n })\n .catch(function (error) {\n if (error && error.status) {\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"error.alerts.search\"), ToastUtil.ToastType.ERROR);\n }\n }\n });\n };\n\n vm.getTypeDescription = function (item) {\n var msg = \"\";\n var typeDescription = vm.AlertTypeList.filter(function( elm ) { return elm.value == item.Type });\n\n if ( typeDescription.length > 0 ) {\n msg = typeDescription[0].name;\n }\n return msg;\n };\n\n vm.getStatusDescription = function (item) {\n var msg = \"\";\n if (item.CsActive === true || item.CsActive == \"true\") {\n msg = \"alert.status.active.label\";\n } else {\n msg = \"alert.status.inactive.label\";\n }\n return msg;\n };\n\n function buildSearchParam() {\n var searchParamsCopy = angular.copy(vm.searchParams);\n\n if (vm.searchParams.StartCreatedDate == undefined || vm.searchParams.StartCreatedDate == '') {\n searchParamsCopy.StartCreatedDate = '';\n }\n\n if (vm.searchParams.EndCreatedDate == undefined || vm.searchParams.EndCreatedDate == '') {\n searchParamsCopy.EndCreatedDate = '';\n }\n\n if (vm.searchParams.StartDueDate == undefined || vm.searchParams.StartDueDate == '') {\n searchParamsCopy.StartDueDate = '';\n }\n\n if (vm.searchParams.EndDueDate == undefined || vm.searchParams.EndDueDate == '') {\n searchParamsCopy.EndDueDate = '';\n }\n\n if (angular.isUndefined(vm.searchParams.CsActive) || vm.searchParams.CsActive == null || vm.searchParams.CsActive == -1) {\n searchParamsCopy.CsActive = -1;\n } else {\n searchParamsCopy.CsActive = vm.searchParams.CsActive;\n }\n\n if (angular.isUndefined(vm.searchParams.Type) || vm.searchParams.Type == null || vm.searchParams.Type == -1) {\n searchParamsCopy.Type = -1;\n } else {\n searchParamsCopy.Type = vm.searchParams.Type;\n }\n\n searchParamsCopy.SourcingApprove = vm.profileSourcing.CanApprove;\n searchParamsCopy.SGIApprove = vm.profileSGI.CanApprove;\n searchParamsCopy.UserId = AuthService.getUserID();\n\n return searchParamsCopy;\n }\n\n function validStartCreatedDateEndCreatedDate() {\n if ((vm.searchParams.StartCreatedDate && vm.searchParams.EndCreatedDate) && (vm.searchParams.EndCreatedDate < vm.searchParams.StartCreatedDate)) {\n ToastUtil.showToastMessage($translate.instant(\"alert.start.createdDate.less.end.createdDate\"), ToastUtil.ToastType.WARN);\n }\n }\n\n function validStartDueDateEndDueDate() {\n if ((vm.searchParams.StartDueDate && vm.searchParams.EndDueDate) && (vm.searchParams.EndDueDate < vm.searchParams.StartDueDate)) {\n ToastUtil.showToastMessage($translate.instant(\"alert.start.duedate.less.end.duedate\"), ToastUtil.ToastType.WARN);\n }\n }\n\n function search(page, max) {\n vm.searchParams.Page = page;\n vm.searchParams.MaxPerPage = max;\n vm.search();\n }\n\n function init() {\n AlertService.loadProfileModules(vm, $scope)\n .then(function () {\n var profileAlert = angular.copy(vm.profile);\n\n SourcingService.loadProfileContractModules(vm, $scope)\n .then(function () {\n vm.profileSourcing = vm.profile;\n\n if(!vm.profileSourcing.CanApprove)\n vm.AlertTypeList.splice(3,1);\n\n EnvironmentalService.loadProfileModules(vm, $scope).then(function() {\n vm.profileSGI = vm.profile;\n\n if(!vm.profileSGI.CanApprove)\n vm.AlertTypeList.splice(2,1);\n\n vm.profile = profileAlert;\n if (AlertService.hasViewPermission(vm)) {\n vm.search();\n }\n });\n });\n })\n .catch(function (error) {\n var msg = error.data && error.data.Message ? error.data.Message : $filter('translate')('error.alerts.search');\n ToastUtil.showToastMessage($translate.instant(msg), ToastUtil.ToastType.ERROR);\n });\n }\n\n init();\n\n vm.create = function () {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n\n AlertService.createAlert(vm);\n };\n\n vm.delete = function (alert) {\n if(alert.CreatedById !== USER.Id){\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n return;\n }\n AlertService.removeAlert(vm, alert.Id)\n .then(function () {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n\n $state.go($state.current, {}, {\n reload: true\n });\n ToastUtil.showToastMessage($translate.instant(\"alert.remove.success\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(function (error) {\n if (error === 'not authorized') {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n } else {\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if (error.status === HTTP_STATUS_CONFLICT) {\n ToastUtil.showToastMessage($translate.instant(\"alert.remove.error.conflict\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"alert.remove.error\"), ToastUtil.ToastType.ERROR);\n }\n }\n\n });\n };\n\n vm.edit = function(alert){\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n\n AlertService.editAlert(alert.Id, vm.profile);\n }\n\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(AcquisitionTranslate);\n\n /** @ngInject */\n function AcquisitionTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'acquisition.tab.label': 'Acquisition',\n 'title.acquisition': 'Acquisition',\n 'acquisition.label.quotes': 'Quotes',\n 'acquisition.label.quotes.selected': 'Quote Selected',\n 'acquisition.label.quotation.protocol': 'Quotation Protocol',\n 'acquisition.label.protocol': 'Protocol',\n 'acquisition.label.quotation.id': 'Quotation Id',\n 'acquisition.label.protocol.id': 'Protocol Id',\n 'acquisition.label.approval.id': 'Approval Id',\n 'acquisition.label.approval.requestby': 'Request By',\n 'acquisition.label.created': 'Created Date',\n 'acquisition.label.created.initial': 'Created Date Initial',\n 'acquisition.label.created.final': 'Created Date Final',\n 'acquisition.label.deadline.initial': 'Deadline Date Initial',\n 'acquisition.label.deadline.final': 'Deadline Date Final',\n 'acquisition.label.deadline': 'Deadline Date',\n 'acquisition.placeholder.material': 'Search Material Description Key',\n 'acquisition.label.hide.quotation.approved': 'Hide Quotation Approved',\n 'acquisition.label.approval.description': 'Approval Description',\n 'acquisition.label.created.approval': 'Created Date Approval',\n 'acquisition.label.deadline.approval': 'Deadline Approval',\n 'acquisition.label.item.completeness': 'Item Completeness',\n 'acquisition.label.approval.solicitation': 'Solicitation',\n 'acquisition.label.quotationby': 'Quotation By',\n 'acquisition.label.status': 'Status',\n 'acquisition.label.updatedby': 'Updated By',\n 'acquisition.label.material': 'Material Description',\n 'acquisition.label.quotation.quantity': 'Quantity',\n 'acquisition.label.quotation.measure.unit': 'Unit of Measure',\n 'acquisition.label.quotation.number': 'No.',\n 'acquisition.label.hide.quotation.done': 'Hide Quotation Done',\n 'acquisition.label.quotation.processing.date': 'Processing Date',\n 'acquisition.label.status.inprogress': 'In Progress',\n 'acquisition.label.status.done': 'Done',\n 'acquisition.label.btn.done': 'Done',\n 'acquisition.label.btn.save': 'Save',\n 'acquisition.label.btn.copy.selected.to.clipboard': 'Copy selected(s) to clipboard',\n 'acquisition.label.copied': 'Copied!',\n 'error.acquisition.search': 'An error occurred when trying to load a list of Acquisition.',\n 'acquisition.remove.success': 'Quotation was successfully removed',\n 'acquisition.remove.error.conflict': 'The Quotation can not be removed because it is being used by the system.',\n 'acquisition.remove.error': 'An error occurred when try to remove quotation',\n 'acquisition.msg.save.success': 'Quotation successfully saved.',\n 'acquisition.msg.save.error': 'An error occurred when try to save quotation.',\n 'acquisition.msg.load.error': 'An error occurred while trying to load the quotation.',\n 'acquisition.label.new': 'New Quotation',\n 'acquisition.label.edit': 'Quotation Editing',\n 'error.protocol.not.found': 'Quotation Protocol not found.',\n 'acquisition.lavel.deadline.payment': 'Deadline Payment',\n 'acquisition.lavel.deadline.delivery': 'Deadline Delivery',\n 'acquisition.list.notfound': 'No protocol found',\n 'acquisition.pending.list.notfound': 'No acquisition pending found',\n 'acquisition.select.item.to.done': 'Select a quote and enter the payment and delivery deadline.',\n 'acquisition.update.success': 'Quotation Protocol was successfully updated.',\n 'acquisition.report.labels.filename': 'Report_Approval_Acquisition'\n });\n\n $translateProvider.translations('pt', {\n 'acquisition.tab.label': 'Aquisição',\n 'title.acquisition': 'Aquisição',\n 'acquisition.label.quotes': 'Cotações',\n 'acquisition.label.quotes.selected': 'Cotação Selecionada',\n 'acquisition.label.quotation.protocol': 'Protocolo da Cotação',\n 'acquisition.label.protocol': 'Protocolo',\n 'acquisition.label.protocol.id': 'Id Protocolo',\n 'acquisition.label.quotation.id': 'Id Cotação',\n 'acquisition.label.approval.id': 'Id Aprovação',\n 'acquisition.label.approval.requestby': 'Solicitado Por',\n 'acquisition.label.created': 'Data da Criação',\n 'acquisition.label.created.initial': 'Data da Criação Inicial',\n 'acquisition.label.created.final': 'Data da Criação Final',\n 'acquisition.label.deadline.initial': 'Data do Prazo Inicial',\n 'acquisition.label.deadline.final': 'Data do Prazo Final',\n 'acquisition.label.deadline': 'Data do Prazo',\n 'acquisition.placeholder.material': 'Busca por Descrição do Material',\n 'acquisition.label.hide.quotation.approved': 'Ocultar Aprovações Cotadas',\n 'acquisition.label.hide.quotation.done': 'Ocultar Cotações finalizadas',\n 'acquisition.label.approval.description': 'Descrição da Aprovação',\n 'acquisition.label.created.approval': 'Criação Aprovação',\n 'acquisition.label.deadline.approval': 'Prazo da Aprovação',\n 'acquisition.label.item.completeness': 'Completude',\n 'acquisition.label.approval.solicitation': 'Solicitação',\n 'acquisition.label.quotationby': 'Cotado Por',\n 'acquisition.label.status': 'Situação',\n 'acquisition.label.updatedby': 'Atualizado Por',\n 'acquisition.label.material': 'Descrição do Material',\n 'acquisition.label.quotation.quantity': 'Quantidade',\n 'acquisition.label.quotation.measure.unit': 'Unidade de Medida',\n 'acquisition.label.quotation.number': 'No.',\n 'acquisition.label.quotation.processing.date': 'Data de Processamento',\n 'acquisition.label.status.inprogress': 'Em Progresso',\n 'acquisition.label.status.done': 'Concluído',\n 'acquisition.label.btn.done': 'Concluír',\n 'acquisition.label.btn.save': 'Salvar',\n 'acquisition.label.btn.copy.selected.to.clipboard': 'Copiar selecionado(s) para área de transferência',\n 'acquisition.label.copied': 'Copiado!',\n 'error.acquisition.search': 'Não foi possível carregar a lista de cotações, tente novamente ou contate um administrador.',\n 'acquisition.remove.success': 'Cotação removida com sucesso',\n 'acquisition.remove.error': 'Ocorreu um erro ao tentar remover uma cotação',\n 'acquisition.msg.save.success': 'Cotação salva com sucesso.',\n 'acquisition.msg.save.error': 'Ocorreu um erro ao tentar salvar a cotação.',\n 'acquisition.msg.load.error': 'Ocorreu um erro ao tentar carregar a cotação.',\n 'acquisition.label.new': 'Nova Cotação',\n 'acquisition.label.edit': 'Edição de Cotação',\n 'error.protocol.not.found': 'Protocolo de Cotação não encontrado.',\n 'acquisition.lavel.deadline.payment': 'Prazo de Pagamento',\n 'acquisition.lavel.deadline.delivery': 'Prazo de Entrega',\n 'acquisition.list.notfound': 'Nenhum protocolo de cotação encontrado',\n 'acquisition.pending.list.notfound': 'Nenhuma aquidição pendente encontrada',\n 'acquisition.select.item.to.done': 'Selecione uma cotação e informe o prazo de pagamento e entrega.',\n 'acquisition.update.success': 'Protocolo de Cotação atualizado com sucesso.',\n 'acquisition.report.labels.filename': 'Relatório_Aprovação_Compras'\n });\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .factory('AcquisitionService', AcquisitionService);\n\n var BASE = '/acquisition/';\n\n /** @ngInject */\n function AcquisitionService($state, $window, $injector, $q, $log, ToastUtil, $translate, ConfigurationService, AuthService, DefaultService) {\n var Status = [];\n\n Status = [\n {Id: 0, Title: 'acquisition.label.status.inprogress'},\n {Id: 1, Title: 'acquisition.label.status.done'}\n ];\n \n function validateViewPermission(vm) {\n return (vm.profile.CanView);\n }\n\n function validateEditOrConsultPermission(vm) {\n return (vm.profile.CanEdit || vm.profile.CanConsult);\n }\n\n function validateDeletePermission(vm) {\n return (vm.profile.hasLoad && vm.profile.CanDelete);\n }\n\n function validateAddPermission(vm) {\n return (vm.profile.hasLoad && vm.profile.CanAdd);\n }\n \n function validateApprovePermission(vm) {\n return (vm.profile.hasLoad && vm.profile.CanApprove);\n }\n\n function createAcquisition(vm, lista) {\n if (validateAddPermission(vm)) {\n $state.go('acquisition-create', {approvals: lista});\n } else {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.access.unauthorized\"), ToastUtil.ToastType.WARN);\n }\n }\n\n return {\n hasApprovePermission: validateApprovePermission,\n\n getStatus: function () {\n return Status;\n },\n\n loadProfileModules: function (vm, $scope) {\n var profileModule = {};\n\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.moduleAcquisition;\n\n return DefaultService.loadModules(profileModule)\n .then(function (response) {\n vm.profile = angular.copy(response);\n vm.profile.hasLoad = true;\n });\n },\n\n editProtocol: function (id, approvalIds, profile) {\n if (validateEditOrConsultPermission(profile)) {\n $state.go('acquisition-create', {Id: id, approvals: approvalIds});\n }\n },\n\n getProtocolById: function (id, approvalsId) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + 'protocolById/' + id + '/' + approvalsId, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getByLisIdApproval: function (id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n $http.get(ConfigurationService.getServiceHost() + BASE + 'getByLisIdApproval/' + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n save: function (acquisition) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.post(ConfigurationService.getServiceHost() + BASE, acquisition, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n getById: function (Id) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + 'byId/' + Id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n list: function (vm, searchParams) {\n if (!validateViewPermission(vm)) {\n return $q.reject('not authorized');\n }\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + \"list/approval-quotation\", {\n params: searchParams\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n listProtocol: function (vm, searchParams) {\n if (!validateViewPermission(vm)) {\n return $q.reject('not authorized');\n }\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.get(ConfigurationService.getServiceHost() + BASE + \"list/protocol\", {\n params: searchParams\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n listDocumentsFlows: function (searchParams) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n $http.get(ConfigurationService.getServiceHost() + BASE + \"list/quotation-pending\", {\n params: searchParams\n })\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n createAcquisition: function (vm, lista, $scope) {\n if (vm.profile.hasLoad) {\n createAcquisition(vm, lista);\n } else {\n this.loadProfileModules(vm, $scope)\n .then(function () {\n createAcquisition(vm, lista);\n })\n .catch(function (error) {\n $log.log(error);\n })\n }\n },\n\n delete: function (vm, id) {\n if (!validateDeletePermission(vm)) {\n return $q.reject('not authorized');\n }\n\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.delete(ConfigurationService.getServiceHost() + BASE + \"/\" + id, {})\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n },\n\n update: function (id, acquisition) {\n var $http = $injector.get(\"$http\");\n var deferred = $q.defer();\n\n $http.patch(ConfigurationService.getServiceHost() + BASE + \"/\" + id, acquisition)\n .then(\n function (response) {\n deferred.resolve(response.data);\n return deferred.promise;\n },\n function (error) {\n deferred.reject(error);\n return deferred.promise;\n }\n );\n return deferred.promise;\n }\n\n };\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(AcquisitionRouter);\n\n /** @ngInject */\n function AcquisitionRouter($stateProvider) {\n\n $stateProvider.state('acquisition-pending-approval', {\n url: '/acquisition-approval',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/acquisition/acquisition-pending-approval.html',\n controller: 'AcquisitionPendingApprovalController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.acquisition',\n internal: false\n },\n authorize: true\n });\n\n $stateProvider.state('acquisition-create', {\n url: '/acquisition/acquisition-protocol/:Id',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/acquisition/acquisition-protocol-edit.html',\n controller: 'AcquisitionProtocolEditController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.acquisition',\n internal: false,\n approvals: null\n },\n authorize: true\n });\n\n $stateProvider.state('acquisition-list', {\n url: '/acquisition/acquisition-protocol',\n views: {\n 'signin-view': {},\n 'main-view': {\n templateUrl: 'app/acquisition/acquisition-protocol-list.html',\n controller: 'AcquisitionProtocolListController',\n controllerAs: 'ctrl'\n }\n },\n params: {\n menuName: 'title.acquisition',\n internal: false,\n approvals: null\n },\n authorize: true\n });\n\n }\n})();\n\n/*eslint no-undef: 0*/\n/*eslint angular/controller-as-vm: 0*/\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('AcquisitionProtocolListController', AcquisitionProtocolListController);\n\n function AcquisitionProtocolListController($scope, $translate, $filter, $state, AcquisitionService,\n DialogController, ToastUtil, moment, $stateParams) {\n\n var vm = this;\n var HTTP_STATUS_CONFLICT = 409;\n\n vm.hideDone = true;\n vm.protocols = [];\n vm.itensPerPageList = [\n {name: '5', value: 5, before: 0, after: 6},\n {name: '10', value: 10, before: 5, after: 11},\n {name: '20', value: 20, before: 10, after: 21},\n {name: '30', value: 30, before: 20, after: 31},\n {name: '40', value: 40, before: 30, after: 41},\n {name: '50', value: 50, before: 40, after: 51}];\n vm.itemPerPage = vm.itensPerPageList[0];\n vm.totalLista = 0;\n vm.searchParams = {\n ApprovalId: '',\n QuotationProtocolId: '',\n ProtocolCreatedDateInitial: '',\n ProtocolCreatedDateEnd: '',\n Material: '',\n StatusProtocol: '0',\n Vendor: '',\n Page: 1,\n MaxPerPage: vm.itemPerPage.value\n };\n\n vm.clearFields = function () {\n vm.searchParams.ApprovalId = '';\n vm.searchParams.QuotationProtocolId = '';\n vm.searchParams.ProtocolCreatedDateInitial = '';\n vm.searchParams.ProtocolCreatedDateEnd = '';\n vm.searchParams.Vendor = '';\n vm.searchParams.StatusProtocol = '0';\n vm.searchParams.Material = '';\n };\n\n vm.statusList = AcquisitionService.getStatus();\n\n vm.shouldShow = function (item) {\n if (vm.totalLista > 0 && item != undefined) {\n return vm.totalLista >= item.value || (vm.totalLista < item.after && vm.totalLista > item.before);\n }\n return false;\n };\n\n vm.changeItemsPerPage = function () {\n if (vm.itemPerPage == null) {\n vm.itemPerPage = vm.itensPerPageList[0];\n }\n search(1, vm.itemPerPage.value);\n };\n\n vm.onPageChange = function () {\n search(vm.searchParams.Page, vm.searchParams.MaxPerPage);\n };\n\n vm.searchProtocol = function () {\n vm.itemPerPage = vm.itensPerPageList[0];\n search(1, vm.itemPerPage.value);\n };\n\n vm.search = function () {\n if (sessionStorage.getItem(\"searchParams\")) {\n vm.searchParams = JSON.parse(sessionStorage.getItem(\"searchParams\"));\n sessionStorage.removeItem(\"searchParams\");\n vm.itensPerPageList.forEach(function (element) {\n if (element.value == vm.searchParams.MaxPerPage) {\n vm.itemPerPage = element;\n return;\n }\n });\n }\n\n vm.searchParams.StatusProtocol = vm.hideDone ? 0 : -1;\n\n var searchParams = buildSearchParam();\n\n AcquisitionService.listProtocol(vm, searchParams)\n .then(function (response) {\n vm.protocols = response.resultList;\n vm.totalLista = response.total;\n setViewModel();\n })\n .catch(function (error) {\n if (error && error.status) {\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.access.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"error.acquisition.search\"), ToastUtil.ToastType.ERROR);\n }\n } else if (error == \"not authorized\" ) {\n $state.go('not-authorized', {}, {});\n }\n });\n };\n\n function setViewModel() {\n if (vm.protocols) {\n\n for (var i = 0, len = vm.protocols.length; i < len; i++) {\n var protocol = vm.protocols[i], approvalIds = '';\n\n for (var j = 0, lenj = protocol.ApprovalIds.length; j < lenj; j++) {\n approvalIds = approvalIds + protocol.ApprovalIds[j].toString() + ' / '\n }\n protocol.ApprovalId = approvalIds.substring(0, approvalIds.length - 3)\n }\n }\n }\n\n vm.edit = function (protocol) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n AcquisitionService.editProtocol(protocol.Id, protocol.ApprovalIds, vm);\n };\n\n vm.viewPendingApproval = function (acquisition) {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go('acquisition-pending-approval');\n }\n\n function buildSearchParam() {\n var searchParams = {\n ApprovalId: vm.searchParams.ApprovalId,\n QuotationProtocolId: vm.searchParams.QuotationProtocolId,\n Vendor: vm.searchParams.Vendor,\n ProtocolCreatedDateInitial: null,\n ProtocolCreatedDateEnd: null,\n Material: vm.searchParams.Material,\n StatusProtocol: vm.searchParams.StatusApproval,\n Page: vm.searchParams.Page,\n MaxPerPage: vm.searchParams.MaxPerPage\n };\n\n angular.forEach(searchParams, function (value, key) {\n searchParams[key] = copy(vm.searchParams[key]);\n });\n\n searchParams.ProtocolCreatedDateInitial = searchParams.ProtocolCreatedDateInitial ? moment(searchParams.ProtocolCreatedDateInitial).format('DD/MM/YYYY') : searchParams.ApprovalCreatedDateInitial;\n searchParams.ProtocolCreatedDateEnd = searchParams.ProtocolCreatedDateEnd ? moment(searchParams.ProtocolCreatedDateEnd).format('DD/MM/YYYY') : searchParams.ApprovalCreatedDateEnd;\n\n return searchParams;\n }\n\n function copy(value) {\n return !value ? null : angular.copy(value);\n }\n\n function search(page, max) {\n vm.searchParams.Page = page;\n vm.searchParams.MaxPerPage = max;\n vm.search();\n }\n\n function init() {\n AcquisitionService.loadProfileModules(vm, $scope)\n .then(function () {\n vm.search();\n })\n .catch(function (error) {\n var msg = error.data && error.data.Message ? error.data.Message : $filter('translate')('error.acquisition.search');\n ToastUtil.showToastMessage($translate.instant(msg), ToastUtil.ToastType.ERROR);\n });\n }\n\n init();\n }\n})();\n\n/*eslint no-undef: 0*/\n/*eslint angular/controller-as-vm: 0*/\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('AcquisitionProtocolEditController', AcquisitionProtocolEditController);\n\n function AcquisitionProtocolEditController($scope, $translate, $filter, $state, $stateParams, AcquisitionService, DocumentFlowService,\n JsonPatchUtil, DialogController, ToastUtil, moment, $window) {\n\n var vm = this, USER = {Id: parseInt($window.localStorage.userID), Name: $window.localStorage.aliasAqms}, NOW = new Date();\n var DefaultState = {\n canConsult: true,\n canEdit: true\n };\n\n var _patch = null;\n var HTTP_STATUS_CONFLICT = 409;\n vm.unitMeasureList = DocumentFlowService.getUnitMeasureList();\n vm.totalSelected = 0;\n vm.acquisitions = [];\n vm.Quotations = [];\n vm.ApprovalsId = [];\n vm.Items = [];\n vm.Protocol = null;\n vm.QuotationProtocolItems = null;\n\n vm.statusList = AcquisitionService.getStatus();\n\n function formatDateToViewModel(date) {\n var momentDate = moment(date, 'YYYY/MM/DD');\n return new Date(momentDate.year(), momentDate.month(), momentDate.date());\n }\n\n function setViewModel(Protocol) {\n vm.Protocol.Id = Protocol.Id;\n vm.Protocol.CreatedBy = Protocol.CreatedBy ? {Id: Protocol.CreatedBy.Id, Name: Protocol.CreatedBy.Name} : {Id: USER.Id, Name: USER.Name};\n vm.Protocol.UpdatedBy = Protocol.UpdatedBy ? {Id: Protocol.UpdatedBy.Id, Name: Protocol.UpdatedBy.Name} : {Id: USER.Id, Name: USER.Name};\n vm.Protocol.CreatedDate = Protocol.CreatedDate ? formatDateToViewModel(Protocol.CreatedDate) : NOW;\n vm.Protocol.UpdatedDate = Protocol.UpdatedDate ? formatDateToViewModel(Protocol.UpdatedDate) : NOW;\n vm.Protocol.Status = Protocol.Status ? Protocol.Status : 0;\n vm.Quotations = angular.copy(Protocol.Quotations);\n vm.Items = [];\n vm.Protocol.QuotationProtocolItems = [];\n vm.QuotationProtocolItems = [];\n\n if ( Protocol.QuotationProtocolItems && Protocol.QuotationProtocolItems.length > 0) {\n Protocol.QuotationProtocolItems.forEach(setViewItemModel);\n } else {\n vm.Quotations.forEach(function (item) {\n item.SelectAll = false;\n item.Select = false;\n })\n }\n vm.ProtocolCopy = angular.copy(vm.Protocol);\n vm.observer = jsonpatch.observe(vm.Protocol);\n\n }\n\n function containsObjectItem(idSolicitationQuotation, idProtocol, idVendor, list) {\n var x;\n for (x in list) {\n if ( idVendor ) {\n if (list.hasOwnProperty(x) && list[x].SolicitationQuotation.Id === idSolicitationQuotation\n && list[x].QuotationProtocol.Id === idProtocol\n && list[x].Vendor.Id === idVendor) {\n return true;\n }\n } else {\n if (list.hasOwnProperty(x) && list[x].SolicitationQuotation.Id === idSolicitationQuotation\n && list[x].QuotationProtocol.Id === idProtocol) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n function setViewItemModel(element) {\n vm.Protocol.QuotationProtocolItems.push({\n Id: element.IdItem,\n QuotationProtocol: {Id: element.IdProtocol},\n SolicitationQuotation: {Id: element.IdSolicitationQuotation, Material: element.Material, Quantity: element.Quantity, UnitMeasure: element.UnitMeasure},\n IdDocumentFlow: element.IdDocumentFlow,\n Vendor: {Id: element.IdVendor},\n UnitValue: element.UnitValue,\n DeadLinePayment: element.DeadLinePayment,\n DeadLineDelivery: element.DeadLineDelivery,\n Selected: element.Selected\n });\n vm.QuotationProtocolItems = angular.copy(vm.Protocol.QuotationProtocolItems);\n\n if ( !containsObjectItem(element.IdSolicitationQuotation, element.IdProtocol, null, vm.Items)) {\n vm.Items.push({\n IdItem: element.IdItem,\n QuotationProtocol: {Id: element.IdProtocol},\n SolicitationQuotation: {Id: element.IdSolicitationQuotation, Material: element.Material, Quantity: element.Quantity, UnitMeasure: element.UnitMeasure},\n IdDocumentFlow: element.IdDocumentFlow,\n Material: element.Material,\n Quantity: element.Quantity,\n UnitMeasure: element.UnitMeasure,\n Vendors: [],\n Selected: 0\n });\n }\n\n if ( element.IdVendor != null && element.IdVendor > 0) {\n vm.addNewVendor({Id: element.IdVendor, FantasyName: element.VendorName, CodeSAP: element.CodeSAP},\n element.UnitValue, element.DeadLinePayment, element.DeadLineDelivery, element.Selected == 1);\n }\n\n vm.Items.forEach(function (item) {\n var vendorSelected = item.Vendors.filter(function (itemVendor) {\n return itemVendor.Selected == true;\n })\n if (vendorSelected.length > 0 ) {\n item.Selected = vendorSelected[0].Vendor.Id;\n }\n });\n checkQuotation(element.IdSolicitationQuotation);\n }\n\n vm.ApprovalClicked = function(item) {\n if ( item.Selected ) {\n addItemSelected(item);\n } else {\n removeItemSelected(item);\n }\n countTotalSelected();\n vm.checkall = isAllSelected();\n };\n\n function countTotalSelected() {\n var itensSelected = vm.Quotations.filter(function (item) {\n if ( item.Selected ) {\n return item;\n }\n });\n vm.totalSelected = itensSelected.length;\n }\n\n function isAllSelected() {\n var allSelected = vm.Quotations.filter(function (item) {\n if ( item.Selected ) {\n return item;\n }\n });\n return allSelected.length == vm.Quotations.length;\n }\n\n function removeItemSelected(item) {\n var itensSelected = vm.Items.filter(function (itemProtocol) {\n if ( itemProtocol.SolicitationQuotation.Id != item.Id) {\n return itemProtocol\n }\n });\n\n vm.Items = angular.copy(itensSelected);\n\n if ( item.Id != undefined && item.Id > 0) {\n var list = vm.QuotationProtocolItems.filter(function(t) {\n return t.SolicitationQuotation.Id != item.Id;\n });\n vm.QuotationProtocolItems = angular.copy(list);\n if ( vm.QuotationProtocolItems.length == 0 ) {\n for (var i = 0, aLen = vm.Protocol.QuotationProtocolItems.length; i < aLen; i++) {\n vm.Protocol.QuotationProtocolItems.splice(0, 1);\n i--;\n aLen = vm.Protocol.QuotationProtocolItems.length;\n }\n } else {\n for (var j = 0, bLen = vm.Protocol.QuotationProtocolItems.length; j < bLen; j++) {\n if ( item.Id == vm.Protocol.QuotationProtocolItems[j].SolicitationQuotation.Id ) {\n vm.Protocol.QuotationProtocolItems.splice(j, 1);\n j--;\n bLen = vm.Protocol.QuotationProtocolItems.length;\n }\n }\n }\n\n }\n }\n\n function addItemSelected(item) {\n var itensSelected = vm.Items.filter(function (itemProtocol) {\n if ( itemProtocol.SolicitationQuotation.Id == item.Id) {\n return itemProtocol\n }\n });\n if ( itensSelected.length == 0) {\n vm.Items.push({\n SolicitationApproval: item.SolicitationApprovalId,\n IdDocumentFlow: item.IdDocumentFlow,\n QuotationProtocol: {Id: vm.Protocol.Id},\n SolicitationQuotation: {\n Id: item.Id,\n Material: item.Material,\n Quantity: item.Quantity,\n UnitMeasure: item.UnitMeasure\n },\n Vendors: []\n })\n }\n if ( vm.Items[0].Vendors.length > 0) {\n vm.Items.forEach(addVendorItemProtocol);\n }\n }\n\n function addVendorItemProtocol(item) {\n if ( item.Vendors.length == 0 ) {\n vm.Items[0].Vendors.forEach(function (vendor) {\n item.Vendors.push({\n Vendor: {Id: vendor.Vendor.Id, FantasyName: vendor.Vendor.FantasyName, CodeSAP: vendor.Vendor.CodeSAP},\n UnitValue: 0,\n DeadLinePayment: vendor.DeadLinePayment,\n DeadLineDelivery: vendor.DeadLinePayment,\n Selected: 0\n })\n });\n }\n }\n\n function checkQuotation(id) {\n var quotationIndex = vm.Quotations.findIndex(function(t) {\n return t.Id == id;\n });\n if ( quotationIndex >= 0 ) {\n vm.Quotations[quotationIndex].Selected = true;\n }\n\n countTotalSelected();\n vm.checkall = isAllSelected();\n }\n\n vm.getClassVendor = function(header) {\n if ( header ) {\n return \"header-vendor-container\" + vm.Items[0].Vendors.length;\n }\n return \"vendor-container\" + vm.Items[0].Vendors.length;\n };\n\n vm.copyToClipboard = function() {\n var str = document.getElementById('emailContent').innerHTML;\n function listener(e) {\n e.clipboardData.setData(\"text/html\", str);\n e.clipboardData.setData(\"text/plain\", str);\n e.preventDefault();\n }\n document.addEventListener(\"copy\", listener);\n document.execCommand(\"copy\");\n document.removeEventListener(\"copy\", listener);\n };\n\n vm.addNewVendor = function(vendor, unitValue, deadLinePayment, deadLineDelivery, selected) {\n if ( vendor != undefined && vendor != '') {\n vm.Items.forEach(function (item) {\n if (item.Vendors == undefined ) {\n item.Vendors = [];\n }\n if ( !containsObject(vendor, item.Vendors) ) {\n item.Vendors.push({\n Vendor: {Id: vendor.Id, FantasyName: vendor.FantasyName, CodeSAP: vendor.CodeSAP},\n UnitValue: unitValue,\n DeadLinePayment: deadLinePayment,\n DeadLineDelivery: deadLineDelivery,\n Selected: selected\n })\n }\n });\n }\n vm.Vendor = undefined;\n };\n\n vm.selectVendorValue = function(item, vendor) {\n item.Vendors.forEach(function (itemVendor) {\n itemVendor.Selected = (itemVendor.Vendor.Id === vendor.Vendor.Id);\n })\n }\n\n vm.onChangeValueVendor = function(vendor) {\n vm.Items.forEach(function (item) {\n item.Vendors.forEach(function (itemVendor, index) {\n if ( vendor.Vendor.Id == itemVendor.Vendor.Id ) {\n item.Vendors[index].DeadLinePayment = vendor.DeadLinePayment;\n item.Vendors[index].DeadLineDelivery = vendor.DeadLineDelivery;\n }\n })\n });\n };\n\n vm.deleteVendor = function(vendorId) {\n for (var i = 0, aLen = vm.QuotationProtocolItems.length; i < aLen; i++) {\n if ( vendorId == vm.QuotationProtocolItems[i].Vendor.Id ) {\n vm.QuotationProtocolItems.splice(i, 1);\n i--;\n aLen = vm.QuotationProtocolItems.length;\n }\n };\n for (var i = 0, bLen = vm.Protocol.QuotationProtocolItems.length; i 0 ) {\n var ListApprovals = {\n Approvals: []\n };\n var DocumentFlow = {\n Id: undefined\n };\n var ids = '';\n vm.ApprovalsId.forEach( function(item) {\n DocumentFlow.Id = item;\n ListApprovals.Approvals.push(angular.copy(DocumentFlow));\n ids += item + \",\";\n });\n\n AcquisitionService.getByLisIdApproval(ids).then(setViewModel).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"acquisition.msg.load.error\"), ToastUtil.ToastType.ERROR);\n });\n }\n }\n\n vm.isDisabled = function(){\n if(vm.Protocol && vm.Protocol.Id > 0 && vm.Protocol.Status === 1) {\n return true;\n }\n return false;\n };\n\n function getProtocolToEdit() {\n AcquisitionService.getProtocoloById(vm.protocolId).then(setViewModel).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"acquisition.msg.load.error\"), ToastUtil.ToastType.ERROR);\n });\n }\n\n function validateEditPermission() {\n vm.disableButton = !vm.profile.CanEdit;\n if (vm.profile.CanEdit || vm.profile.CanConsult) {\n getProtocolToEdit();\n } else {\n $state.go('not-authorized', {}, {});\n }\n }\n\n function validateAddPermission() {\n vm.disableButton = !vm.profile.CanAdd;\n if (!vm.profile.CanAdd) {\n $state.go('not-authorized', {}, {});\n } else {\n loadApprovalsByListId();\n }\n }\n\n function loadProfileModules() {\n var profileModule = {};\n\n profileModule.UserProfileModule = AuthService.getUserProfileBusiness();\n profileModule.ModuleName = $scope.moduleAcquisition;\n\n DefaultService.loadModules(profileModule)\n .then(\n function (response) {\n vm.profile = angular.copy(response);\n DefaultState.canConsult = vm.profile.CanConsult;\n DefaultState.canEdit = vm.profile.CanEdit;\n if (vm.protocolId) {\n validateEditPermission();\n } else {\n validateAddPermission();\n }\n })\n .catch(\n function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.ERROR);\n });\n }\n\n vm.isAddVendorDisable = function() {\n return vm.Protocol.Status == 1 || vm.Vendor === undefined || vm.totalSelected == 0\n || (vm.Item && vm.Item.length > 0 && vm.Item[0].Vendors && vm.Item[0].Vendors.length == 3);\n };\n\n vm.getUnitMeasure = function(item) {\n var result = vm.unitMeasureList.filter(function(t) {\n return t.Id == item;\n })[0];\n return result.Name;\n };\n\n vm.saveProtocol = function () {\n if (validateSave()) {\n loadProtocolItens();\n if (vm.Protocol.Id && vm.Protocol.Id > 0) {\n if (!vm.profile.CanEdit && !vm.profile.CanConsult) {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n vm.Protocol.QuotationProtocolItems = angular.copy(vm.ProtocolCopy.QuotationProtocolItems);\n return false;\n } else if (!vm.profile.CanEdit && vm.profile.CanConsult) {\n $state.go('acquisition-list');\n return;\n }\n\n vm.update();\n } else {\n AcquisitionService.save(vm.Protocol).then(function () {\n ToastUtil.showToastMessage($translate.instant(\"acquisition.msg.save.success\"), ToastUtil.ToastType.SUCCESS);\n $state.go('acquisition-list', {});\n }).catch(function (error) {\n $log.log(error);\n ToastUtil.showToastMessage($translate.instant(\"acquisition.msg.save.error\"), ToastUtil.ToastType.WARN);\n vm.Protocol.QuotationProtocolItems = angular.copy(vm.ProtocolCopy.QuotationProtocolItems);\n });\n }\n }\n };\n\n vm.doneProtocol = function() {\n if ( validDone() ) {\n loadProtocolItens();\n if (vm.Protocol.Id && vm.Protocol.Id > 0) {\n if (!vm.profile.CanEdit && !vm.profile.CanConsult) {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n vm.Protocol.QuotationProtocolItems = angular.copy(vm.ProtocolCopy.QuotationProtocolItems);\n return false;\n } else if (!vm.profile.CanEdit && vm.profile.CanConsult) {\n $state.go('acquisition-list');\n return;\n }\n vm.Protocol.Status = 1;\n vm.update();\n } else {\n vm.Protocol.Status = 1;\n AcquisitionService.save(vm.Protocol).then(function () {\n ToastUtil.showToastMessage($translate.instant(\"acquisition.msg.save.success\"), ToastUtil.ToastType.SUCCESS);\n $state.go('acquisition-list', {});\n }).catch(function (error) {\n $log.log(error);\n vm.Protocol.Status = 0;\n ToastUtil.showToastMessage($translate.instant(\"acquisition.msg.save.error\"), ToastUtil.ToastType.WARN);\n vm.Protocol.QuotationProtocolItems = angular.copy(vm.ProtocolCopy.QuotationProtocolItems);\n });\n }\n } else {\n ToastUtil.showToastMessage($translate.instant(\"acquisition.select.item.to.done\"), ToastUtil.ToastType.WARN);\n vm.Protocol.QuotationProtocolItems = angular.copy(vm.ProtocolCopy.QuotationProtocolItems);\n vm.Protocol.Status = 0;\n return;\n }\n };\n\n function validDone() {\n var itensSelected = vm.Items.filter(function (item) {\n return item.Selected;\n });\n\n var selectedOk = itensSelected.length > 0;\n if ( selectedOk ) {\n var deadlineOk = itensSelected.filter(function (item) {\n var deadlines = item.Vendors.filter(function (itemVendor) {\n return itemVendor.DeadLineDelivery != '' && itemVendor.DeadLineDelivery != undefined && itemVendor.DeadLinePayment != '' && itemVendor.DeadLinePayment != undefined;\n })\n return deadlines.length > 0;\n });\n return deadlineOk.length == itensSelected.length;\n }\n return false;\n\n }\n\n vm.update = function () {\n var patch = generatePatch();\n\n if (patch && patch.length > 0) {\n\n AcquisitionService.update(vm.Protocol.Id, patch)\n .then(function () {\n _patch = null;\n ToastUtil.showToastMessage($translate.instant(\"acquisition.update.success\"), ToastUtil.ToastType.SUCCESS);\n $state.go('acquisition-list');\n })\n .catch(onSaveVendorError);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"acquisition.update.success\"), ToastUtil.ToastType.SUCCESS);\n $state.go('acquisition-list');\n }\n };\n\n\n function onSaveVendorError(error) {\n var serverMsg = error.data ? error.data.Message : 'Network error';\n var errorMsg;\n\n if (error.data && error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n return;\n }\n } else if (serverMsg.indexOf(\"#errorMessage\") !== -1) {\n serverMsg = serverMsg.replace(\"#errorMessage\", \"\");\n var message = $translate.instant('vendor.save.error.duplicated');\n message = message.replace(\"$description\", serverMsg);\n errorMsg = message;\n } else {\n errorMsg = $translate.instant(serverMsg)\n }\n\n ToastUtil.showToastMessage($translate.instant(errorMsg), ToastUtil.ToastType.ERROR);\n }\n\n function generatePatch() {\n var patch = JsonPatchUtil.generate(vm.Protocol, vm.ProtocolCopy, vm.observer, _patch);\n patch = patch.reduce(function (newPatch, item) {\n if (item.path.startsWith('/QuotationProtocolItems')) {\n newPatch.push(item);\n } else {\n newPatch.push(item);\n }\n return newPatch;\n }, []);\n _patch = angular.copy(patch);\n return patch;\n }\n\n\n function loadProtocolItens() {\n vm.Items.forEach(function (element) {\n element.Vendors.forEach(function (vendor) {\n if ( !containsObjectItem(element.SolicitationQuotation.Id, element.QuotationProtocol.Id, vendor.Vendor.Id, vm.QuotationProtocolItems)) {\n\n vm.QuotationProtocolItems.push({\n Id: undefined,\n QuotationProtocol: {Id: element.QuotationProtocol.Id},\n SolicitationQuotation: {Id: element.SolicitationQuotation.Id},\n Vendor: {Id: vendor.Vendor.Id},\n UnitValue: vendor.UnitValue,\n DeadLinePayment: vendor.DeadLinePayment,\n DeadLineDelivery: vendor.DeadLineDelivery,\n Selected: vendor.Selected ? 1 : 0\n })\n } else {\n var listProtocolItemVendor = vm.QuotationProtocolItems.filter(function (itemVendor) {\n return itemVendor.Vendor.Id == vendor.Vendor.Id;\n });\n if ( listProtocolItemVendor.length > 0) {\n listProtocolItemVendor.forEach(function (item) {\n if (item.SolicitationQuotation.Id === element.SolicitationQuotation.Id && item.QuotationProtocol.Id === element.QuotationProtocol.Id) {\n item.Vendor = {Id: vendor.Vendor.Id};\n item.UnitValue = vendor.UnitValue;\n item.DeadLinePayment = vendor.DeadLinePayment;\n item.DeadLineDelivery = vendor.DeadLineDelivery;\n item.Selected = vendor.Selected ? 1 : 0;\n }\n });\n } else {\n vm.QuotationProtocolItems.push({\n Id: element.IdItem,\n QuotationProtocol: {Id: element.QuotationProtocol.Id},\n SolicitationQuotation: {Id: element.SolicitationQuotation.Id},\n Vendor: {Id: vendor.Vendor.Id},\n UnitValue: vendor.UnitValue,\n DeadLinePayment: vendor.DeadLinePayment,\n DeadLineDelivery: vendor.DeadLineDelivery,\n Selected: vendor.Selected ? 1 : 0\n })\n }\n }\n })\n\n });\n\n var toAdd = [];\n vm.QuotationProtocolItems.forEach(function(item, index) {\n if (vm.Protocol.QuotationProtocolItems.length == 0) {\n toAdd.push(index);\n } else {\n vm.Protocol.QuotationProtocolItems.forEach(function (protocolItem, indexProtocolo) {\n if ( item.Id != undefined) {\n if ( item.Id === protocolItem.Id\n && item.SolicitationQuotation.Id === protocolItem.SolicitationQuotation.Id\n && item.Vendor.Id === protocolItem.Vendor.Id ) {\n vm.Protocol.QuotationProtocolItems[indexProtocolo].UnitValue = angular.copy(item.UnitValue);\n vm.Protocol.QuotationProtocolItems[indexProtocolo].DeadLinePayment = angular.copy(item.DeadLinePayment);\n vm.Protocol.QuotationProtocolItems[indexProtocolo].DeadLineDelivery = angular.copy(item.DeadLineDelivery);\n vm.Protocol.QuotationProtocolItems[indexProtocolo].Selected = item.Selected ? 1 : 0;\n }\n } else {\n var exist = toAdd.filter(function (add) {\n return add == index;\n });\n if (exist.length == 0) {\n toAdd.push(index);\n }\n }\n });\n }\n });\n\n if ( toAdd.length > 0) {\n toAdd.forEach(function(add) {\n vm.Protocol.QuotationProtocolItems.push(angular.copy(vm.QuotationProtocolItems[add]))\n });\n }\n\n }\n\n function validateSave() {\n return ( vm.Protocol.Status === 0 && vm.Items && vm.Items.length > 0 && vm.Items[0].Vendors && vm.Items[0].Vendors.length > 0 );\n }\n\n vm.checkUncheckAll = function () {\n var check = angular.copy(vm.checkall);\n angular.forEach(vm.Quotations, function (item) {\n item.Selected = check;\n vm.ApprovalClicked(item);\n });\n vm.checkall = isAllSelected();\n };\n\n function init() {\n vm.protocolId = $state.params.Id;\n vm.ApprovalsId = $stateParams.approvals;\n\n if (vm.protocolId && vm.protocolId > 0) {\n vm.label = 'label.edit.vendor';\n AcquisitionService.loadProfileModules(vm, $scope)\n .then(function () {\n validateEditOrConsultPermission();\n getProtocolById();\n })\n .catch(function (error) {\n var msg = error.data && error.data.Message ? error.data.Message : $filter('translate')('error.vendor.search');\n ToastUtil.showToastMessage($translate.instant(msg), ToastUtil.ToastType.ERROR);\n });\n } else {\n AcquisitionService.loadProfileModules(vm, $scope)\n .then(function () {\n validateSavePermission();\n vm.Protocol = {\n Id: 0,\n CreatedBy: USER,\n CreatedDate: NOW,\n UpdatedBy: USER,\n UpdatedDate: NOW,\n Status: 0,\n Items: []\n };\n loadApprovalsByListId()\n })\n .catch(function (error) {\n var msg = error.data && error.data.Message ? error.data.Message : $filter('translate')('error.vendor.search');\n ToastUtil.showToastMessage($translate.instant(msg), ToastUtil.ToastType.ERROR);\n });\n\n }\n }\n\n function getProtocolById() {\n AcquisitionService.getProtocolById(vm.protocolId, vm.ApprovalsId)\n .then(function (response) {\n setViewModel(response);\n });\n }\n\n function validateSavePermission() {\n if (!vm.profile.CanAdd) {\n $state.go('not-authorized', {}, {});\n }\n }\n\n function validateEditOrConsultPermission() {\n if (!vm.profile.CanEdit && !vm.profile.CanConsult) {\n $state.go('not-authorized', {}, {});\n }\n }\n\n init();\n }\n})();\n\n/*eslint no-undef: 0*/\n/*eslint angular/controller-as-vm: 0*/\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('AcquisitionPendingApprovalController', AcquisitionPendingApprovalController);\n\n function AcquisitionPendingApprovalController($scope, $translate, $filter, $state, AcquisitionService, DocumentFlowService,\n DialogController, ToastUtil, moment, $stateParams) {\n\n var vm = this; \n var HTTP_STATUS_CONFLICT = 409;\n\n vm.totalSelected = 0;\n vm.hideApprove = true;\n vm.acquisitions = [];\n vm.itensPerPageList = [\n {name: '5', value: 5, before: 0, after: 6},\n {name: '10', value: 10, before: 5, after: 11},\n {name: '20', value: 20, before: 10, after: 21},\n {name: '30', value: 30, before: 20, after: 31},\n {name: '40', value: 40, before: 30, after: 41},\n {name: '50', value: 50, before: 40, after: 51}];\n vm.itemPerPage = vm.itensPerPageList[0];\n vm.totalLista = 0;\n vm.searchParams = {\n ApprovalId: '',\n ApprovalCreatedDateInitial: '',\n ApprovalCreatedDateEnd: '',\n ApprovalDeadLineDateInitial: '',\n ApprovalDeadLineDateEnd: '',\n Material: '',\n StatusApproval: '1',\n Page: 1,\n MaxPerPage: vm.itemPerPage.value\n };\n \n vm.clearFields = function () {\n vm.searchParams.ApprovalId = '';\n vm.searchParams.ApprovalCreatedDateInitial = '';\n vm.searchParams.ApprovalCreatedDateEnd = '';\n vm.searchParams.ApprovalDeadLineDateInitial = '';\n vm.searchParams.ApprovalDeadLineDateEnd = '';\n vm.searchParams.StatusApproval = '1';\n vm.searchParams.Material = '';\n };\n\n vm.statusList = AcquisitionService.getStatus();\n\n vm.shouldShow = function (item) {\n if (vm.totalLista > 0 && item != undefined) {\n return vm.totalLista >= item.value || (vm.totalLista < item.after && vm.totalLista > item.before);\n }\n return false;\n };\n\n vm.changeItemsPerPage = function () {\n if (vm.itemPerPage == null) {\n vm.itemPerPage = vm.itensPerPageList[0];\n }\n search(1, vm.itemPerPage.value);\n };\n\n vm.onPageChange = function () {\n search(vm.searchParams.Page, vm.searchParams.MaxPerPage);\n };\n\n vm.getLabelBtn = function() {\n return $translate.instant(\"acquisition.label.quotes.selected\") + \"(\" + vm.totalSelected + \")\";\n }\n\n vm.searchAcquisition = function () {\n vm.itemPerPage = vm.itensPerPageList[0];\n search(1, vm.itemPerPage.value);\n };\n\n vm.viewQuotationProtocol = function() {\n $state.go('acquisition-list');\n }\n\n vm.goToDocumentFlow = function (item) {\n $state.go('document-flow-edit', {\n Id: item.ApprovalId\n });\n };\n\n vm.search = function () {\n if (sessionStorage.getItem(\"searchParams\")) {\n vm.searchParams = JSON.parse(sessionStorage.getItem(\"searchParams\"));\n sessionStorage.removeItem(\"searchParams\");\n vm.itensPerPageList.forEach(function (element) {\n if (element.value == vm.searchParams.MaxPerPage) {\n vm.itemPerPage = element;\n return;\n }\n });\n }\n if ( vm.hideApprove ) {\n vm.searchParams.StatusApproval = 1;\n } else {\n vm.searchParams.StatusApproval = -1;\n }\n\n var searchParams = buildSearchParam();\n\n AcquisitionService.list(vm, searchParams)\n .then(function (response) {\n vm.acquisitions = response.resultList;\n vm.totalLista = response.total;\n setViewModel();\n })\n .catch(function (error) {\n if (error && error.status) {\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.access.unauthorized\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"error.acquisition.search\"), ToastUtil.ToastType.ERROR);\n }\n } else if (error == \"not authorized\" ) {\n $state.go('not-authorized', {}, {});\n }\n });\n };\n\n\n vm.openSolicitation = function (solicitacion) {\n DialogController.show('acquisition.label.approval.solicitation', '', solicitacion, !vm.State, null, 'lg');\n };\n\n vm.openSolicitationApproval = function(id) {\n DocumentFlowService.getHtmlSolicitation(id).then(function (response) {\n var html = angular.copy(response);\n vm.openSolicitation(html);\n });\n };\n\n vm.checkUncheckAll = function () {\n angular.forEach(vm.acquisitions, function (item) {\n if ( item.StatusApproval == 1 && item.TotalItemSolicitation > item.TotalItemQuotation) {\n item.Selected = vm.checkall;\n }\n });\n vm.ApprovalClicked();\n };\n\n function setViewModel() {\n if (vm.acquisitions) {\n for (var i = 0, len = vm.acquisitions.length; i < len; i++) {\n var acquisition = vm.acquisitions[i], status = null;\n\n status = vm.statusList.find(function (s) {\n return s.Id === acquisition.StatusProtocol;\n });\n\n if (status) {\n acquisition.StatusDescription = $translate.instant(status.Title);\n }\n acquisition.Selected = false;\n }\n }\n }\n\n vm.ApprovalClicked = function() {\n var itensSelected = vm.acquisitions.filter(function (item) {\n if ( item.Selected ) {\n return item;\n }\n });\n vm.totalSelected = itensSelected.length;\n };\n\n vm.viewPendingApproval = function () {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n AcquisitionService.viewPendingApproval(vm);\n };\n \n vm.create = function () {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n var itensSelected = vm.acquisitions.filter(function (item) {\n if ( item.Selected ) {\n return item.ApprovalId;\n }\n });\n var listParams = [];\n itensSelected.forEach(function (element) {\n listParams.push(element.ApprovalId);\n });\n AcquisitionService.createAcquisition(vm, listParams);\n };\n\n vm.delete = function (acquisition) {\n AcquisitionService.delete(vm, acquisition.Id)\n .then(function () {\n var searchParams = JSON.stringify(vm.searchParams);\n sessionStorage.setItem(\"searchParams\", searchParams);\n $state.go($state.current, {}, {\n reload: true\n });\n ToastUtil.showToastMessage($translate.instant(\"acquisition.remove.success\"), ToastUtil.ToastType.SUCCESS);\n })\n .catch(function (error) {\n if (error === 'not authorized') {\n ToastUtil.showToastMessage($translate.instant('msg.error.access.unauthorized'), ToastUtil.ToastType.WARN);\n } else {\n if (error.status === $scope.HttpStatusUnauthorized) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.login.unauthorized\"), ToastUtil.ToastType.WARN);\n } else if (error.status === HTTP_STATUS_CONFLICT) {\n ToastUtil.showToastMessage($translate.instant(\"acquisition.remove.error.conflict\"), ToastUtil.ToastType.WARN);\n } else {\n ToastUtil.showToastMessage($translate.instant(\"acquisition.remove.error\"), ToastUtil.ToastType.ERROR);\n }\n }\n\n });\n\n };\n\n function buildSearchParam() {\n var searchParams = {\n ApprovalId: vm.searchParams.ApprovalId,\n ApprovalCreatedDateInitial: null,\n ApprovalCreatedDateEnd: null,\n ApprovalDeadLineDateInitial: null,\n ApprovalDeadLineDateEnd: null,\n Material: vm.searchParams.Material,\n StatusApproval: vm.searchParams.StatusApproval,\n Page: vm.searchParams.Page,\n MaxPerPage: vm.searchParams.MaxPerPage\n };\n\n angular.forEach(searchParams, function (value, key) {\n searchParams[key] = copy(vm.searchParams[key]);\n });\n\n searchParams.ApprovalCreatedDateInitial = searchParams.ApprovalCreatedDateInitial ? moment(searchParams.ApprovalCreatedDateInitial).format('DD/MM/YYYY') : searchParams.ApprovalCreatedDateInitial;\n searchParams.ApprovalCreatedDateEnd = searchParams.ApprovalCreatedDateEnd ? moment(searchParams.ApprovalCreatedDateEnd).format('DD/MM/YYYY') : searchParams.ApprovalCreatedDateEnd;\n searchParams.ApprovalDeadLineDateInitial = searchParams.ApprovalDeadLineDateInitial ? moment(searchParams.ApprovalDeadLineDateInitial).format('DD/MM/YYYY') : searchParams.ApprovalDeadLineDateInitial;\n searchParams.ApprovalDeadLineDateEnd = searchParams.ApprovalDeadLineDateEnd ? moment(searchParams.ApprovalDeadLineDateEnd).format('DD/MM/YYYY') : searchParams.ApprovalDeadLineDateEnd;\n\n return searchParams;\n }\n\n function copy(value) {\n return !value ? null : angular.copy(value);\n }\n\n function search(page, max) {\n vm.searchParams.Page = page;\n vm.searchParams.MaxPerPage = max;\n vm.search();\n }\n\n function init() {\n AcquisitionService.loadProfileModules(vm, $scope)\n .then(function () {\n vm.search();\n })\n .catch(function (error) {\n var msg = error.data && error.data.Message ? error.data.Message : $filter('translate')('error.acquisition.search');\n ToastUtil.showToastMessage($translate.instant(msg), ToastUtil.ToastType.ERROR);\n });\n }\n\n init();\n }\n})();\n\n(function () {\n\n 'use strict';\n\n /**\n * \n * \n * @param {any} toastr \n */\n function ToastUtil(toastr) {\n var vm = this;\n\n vm.ToastType = {\n SUCCESS: 0,\n WARN: 1,\n ERROR: 2\n }\n\n vm.constants = new(function () {\n var x = 1500;\n var y = 2000;\n this.getTime1 = function () {\n return x;\n };\n this.getTime2 = function () {\n return y;\n };\n })();\n\n vm.showToastMessageTime = function (message, type, time) {\n toastr.clear();\n switch (type) {\n case vm.ToastType.SUCCESS:\n toastr.success(message, {\n closeButton: true,\n timeOut: time\n });\n break;\n case vm.ToastType.WARN:\n toastr.warning(message, {\n closeButton: true,\n timeOut: time\n });\n break;\n case vm.ToastType.ERROR:\n toastr.error(message, {\n closeButton: true,\n timeOut: time\n });\n break;\n }\n };\n\n vm.showToastMessage = function (message, type) {\n toastr.clear();\n switch (type) {\n case vm.ToastType.SUCCESS:\n toastr.success(message, {\n closeButton: true\n });\n break;\n case vm.ToastType.WARN:\n toastr.warning(message, {\n closeButton: true\n });\n break;\n\n case vm.ToastType.ERROR:\n toastr.error(message, {\n closeButton: true\n });\n break;\n }\n };\n }\n\n angular.module('aqmsFrontend')\n .service('ToastUtil', ToastUtil)\n})();\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .service('MessageUtil', MessageUtil)\n\n function MessageUtil(ToastUtil, $translate) {\n var vm = this;\n\n vm.onSaveError = function (error, duplicatedErrorMessage) {\n if (error.status === 404) {\n ToastUtil.showToastMessage($translate.instant(\"msg.error.generic\"), ToastUtil.ToastType.ERROR);\n return;\n }\n var serverMsg = error.data ? error.data.Message : 'Network error';\n var errorMsg;\n\n if (error.data && error.data.ToastType) {\n if (error.data.ToastType == 1) {\n ToastUtil.showToastMessage($translate.instant(error.data.Message), ToastUtil.ToastType.WARN);\n return;\n }\n } else if (serverMsg.indexOf(\"#errorMessage\") !== -1) {\n serverMsg = serverMsg.replace(\"#errorMessage\", \"\");\n var message = $translate.instant(duplicatedErrorMessage);\n message = message.replace(\"$description\", serverMsg);\n errorMsg = message;\n } else {\n errorMsg = $translate.instant(serverMsg)\n }\n\n ToastUtil.showToastMessage($translate.instant(errorMsg), ToastUtil.ToastType.ERROR);\n }\n\n }\n})();\n(function () {\n\n 'use strict';\n\n /**\n * \n */\n function ListUtil() {\n var vm = this;\n\n vm.updateItem = function (list, data, key) {\n if (list == undefined) {\n list = [];\n }\n for (var i = 0; i < list.length; i++) {\n if (list[i][key] === data[key]) {\n var dtAux = list[i];\n var index = list.indexOf(dtAux);\n list.splice(index, 1);\n list.splice(index, 0, data);\n return list;\n }\n }\n list.push(data);\n return list;\n };\n\n vm.removeItem = function (list, data) {\n var idx = list.indexOf(data);\n if (idx > -1) {\n list.splice(idx, 1);\n }\n };\n\n }\n\n angular.module('aqmsFrontend')\n .service('ListUtil', ListUtil)\n})();\n\n/* eslint no-undef: 0, no-redeclare: 0 */\n\n(function () {\n\n 'use strict';\n\n /**\n * A utility class that contains a method that generates a JSON Patch Object, \n * removes the original operations done on the array properties made by the Observer, \n * and generates removal and addition operations, ignoring replace operations.\n */\n function JsonPatchUtil() {\n var vm = this;\n vm.generate = generate;\n vm.generatePatchArray = generatePatchArray;\n }\n\n /**\n * Generates a JSON Patch Object.\n * @param {*} model Object containing the current data. Undefined property values will be ignored.\n * @param {*} copy Object containing an original copy of the data.\n * @param {*} observer Observer object that contains the changes that were made to the original object.\n */\n function generate(model, copy, observer, _patch) {\n var patch = null;\n\n if (angular.isDefined(_patch) && _patch !== null && _patch.length > 0) {\n patch = angular.copy(_patch).concat(jsonpatch.generate(observer));\n } else {\n patch = jsonpatch.generate(observer);\n }\n\n deleteHashKeyProperties(patch);\n deleteArrayOperations(patch);\n\n if (!model) return patch;\n if (!copy) return patch\n\n for (var key in model) {\n if (angular.isArray(model[key])) {\n generatePatchArray(model, key, copy, patch);\n }\n }\n\n return patch;\n }\n\n function generatePatchArray(model, key, copy, patch) {\n var current = model[key], original = copy[key];\n if (!original)\n original = [];\n var originalLength = original.length;\n // Items that have not been modified. Intersection between the original list and the current list.\n var kept = intersection(original, current);\n // Items that have been removed. Difference between the original list and the current list. \n var removed = difference(original, current);\n // Items added. Difference between the current list and the kept list.\n var added = difference(angular.copy(current), kept);\n // Applies the removal patch and removes the item from the original list.\n if (removed && removed.length > 0) {\n for (var i = 0, len = removed.length; i < len; i++) {\n applyRemoveOperation(patch, original, key, removed[i]);\n }\n }\n // Apply the addition patch.\n var index = (originalLength - removed.length);\n for (var i = 0, len = added.length; i < len; i++) {\n applyAddOperation(patch, key, index, added[i]);\n index++;\n }\n }\n\n /**\n * Adds an item representing the removal operation to the JSON Patch.\n * @param {*} patch JSON Patch object.\n * @param {*} list The list where the item will be removed.\n * @param {*} key Field name in model.\n * @param {*} item Item to be removed.\n */\n function applyRemoveOperation(patch, list, key, item) {\n var index = list.indexOf(item);\n if (index !== -1) {\n patch.push({ \"op\": \"remove\", \"path\": \"/\" + key + \"/\" + index });\n list.splice(index, 1);\n }\n }\n\n /**\n * Adds an item representing the addition operation in the JSON Patch\n * @param {*} patch JSON Patch object.\n * @param {*} key Field name in model .\n * @param {*} index Index where the item will be included.\n * @param {*} item Item to add.\n */\n function applyAddOperation(patch, key, index, item) {\n patch.push({ \"op\": \"add\", \"path\": \"/\" + key + \"/\" + index, \"value\": item });\n }\n\n /**\n * Remove $$hashKey properties added by AngularJs.\n * @param {*} patch JSON Patch object.\n */\n function deleteHashKeyProperties(patch) {\n if (patch && patch.length > 0) {\n var i = patch.length;\n while (i--) {\n var op = patch[i];\n if (op.path.endsWith(\"$$hashKey\")) {\n patch.splice(i, 1);\n }\n }\n }\n }\n\n /**\n * Removes the operations made on the array properties that were added by OBSERVER.\n * @param {*} patch JSON Patch Object.\n */\n function deleteArrayOperations(patch) {\n if (patch && patch.length > 0) {\n var result = patch.filter(function (p) {\n return p.path.search(/\\/[0-9]/ig) !== -1;\n });\n if (result && result.length > 0) {\n for (var i = 0, len = result.length; i < len; i++) {\n var r = result[i];\n var index = patch.indexOf(r);\n if (index !== -1) {\n patch.splice(index, 1);\n }\n }\n }\n }\n }\n\n function intersection(a, b) {\n var filtered = [];\n\n for (var i = 0, aLen = a.length; i < aLen; i++) {\n var itemA = a[i];\n for (var j = 0, bLen = b.length; j < bLen; j++) {\n var itemB = b[j];\n if (angular.equals(itemA, itemB)) {\n filtered.push(itemA);\n break;\n }\n }\n }\n\n return filtered;\n }\n\n function difference(a, b) {\n var filtered = [];\n\n for (var i = 0, aLen = a.length; i < aLen; i++) {\n var itemA = a[i], found = false;\n for (var j = 0, bLen = b.length; j < bLen; j++) {\n var itemB = b[j];\n if (angular.equals(itemA, itemB)) {\n found = true;\n break;\n }\n }\n if (!found) {\n filtered.push(itemA);\n }\n }\n\n return filtered;\n }\n\n angular.module('aqmsFrontend')\n .service('JsonPatchUtil', JsonPatchUtil)\n})();\n\nangular.module(\"server.config\", [])\n.constant(\"constanteRotas\", {\"API_ENDPOINT\":\"https://msb.fpf.br\"})\n.constant(\"DATA_GENERATE\", \"13/04/2020\")\n.constant(\"SYSTEM_VERSION\", \"2.0-local-test\");\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(IndexTranslate);\n\n /** @ngInject */\n function IndexTranslate($translateProvider) {\n\n $translateProvider.translations('en', {\n 'title.iqcpart': 'IQC',\n 'generic.error.msg': 'An error occurred while trying to perform the operation.',\n 'msg.error.generic': 'Service unavailable. Please contact an administrator.',\n 'msg.error.delete.generic': 'There was an error deleting this record. Please contact an administrator.',\n 'msg.error.list.generic': 'There was an error while listing the records.',\n 'msg.error.login.unauthorized': 'Unauthorized user, try to login or contact an administrator.',\n 'msg.error.access.unauthorized': 'Unauthorized user, you are not allowed to access. Contact an administrator.',\n 'error.unauthorized.rote': 'Unauthorized user, you are not allowed to access. Contact an administrator.',\n 'msg.error.generic.remove.email.group.error.msg': 'An error occurred when try to remove email.',\n 'validation.area.required': 'You need to select one area.',\n 'validation.model.required': 'You need to select one model.',\n 'label.continue': 'Continue',\n 'label.add': 'Add',\n 'label.play': 'View presentation',\n 'label.createdby': 'Created by',\n 'label.updatedby': 'Updated by',\n 'label.closedby': 'Closed by',\n 'label.status.header': 'Status',\n 'label.active': 'Active',\n 'label.inactive': 'Inactive',\n 'label.company': 'Company',\n 'label.business': 'Business',\n 'label.main': 'Main',\n 'label.admin': 'Administration',\n 'label.help': 'Help',\n 'label.user.account': 'Account',\n 'label.user.preferences': 'Preferences',\n 'label.user.logout': 'Logout',\n 'label.dashboard': 'Dashboard',\n 'label.task.control': 'Task Control',\n 'label.checklist': 'Checklist',\n 'label.reports': 'Reports',\n 'label.faca': 'FA/CA',\n 'label.basic': 'Basic Types',\n 'label.permission': 'Permissions',\n 'label.defects': 'Defects',\n 'label.oqc.oba': 'OQC / OBA',\n 'label.notifications': 'Notifications',\n 'label.users': 'Users',\n 'label.title': 'Title',\n 'label.translate.portuguese': 'Portuguese-BR',\n 'label.translate.english': 'English-US',\n 'toast.info.title': 'Hello,',\n 'toast.info.function.not.implemented': 'Still we will work on it :)',\n 'label.save': 'Save',\n 'label.edit': 'Edit',\n 'label.update': 'Update',\n 'label.delete': 'Deletar',\n 'label.cancel': 'Cancel',\n 'title.remove': 'Remove',\n 'label.confirm': 'Confirm',\n 'label.close': 'Close',\n 'label.clear': 'Clear',\n 'label.search': 'Search',\n 'label.remark': 'Remark',\n 'label.ongoing': 'Ongoing',\n 'msg.confirm.remove': 'Do you want to remove the item ($description) ?',\n 'msg.confirm.remove.item': 'Do you want to remove the item?',\n 'item.edit': 'Edit Item',\n 'item.delete': 'Delete Item',\n 'uploadoptions.label.camera': 'Camera',\n 'uploadoptions.dialog.title': 'Attach files...',\n 'uploadoptions.label.file.manager': 'My Documents',\n 'uploadoptions.label.back': 'Back',\n 'uploadoptions.label.take.picture': 'Capture image',\n 'uploadoptions.label.picture.discard': 'Discard',\n 'uploadoptions.label.picture.confirm': 'Confirm',\n 'uploadoptions.save.image.fail': 'An error occurred when try to send the image.',\n 'label.footer.development': 'Developed by',\n 'label.footer.allrights': 'All rights reserved.',\n 'label.footer.version': 'Version',\n 'placeholder.current.password': 'Current Password',\n 'placeholder.NewPassword1.password': 'New Password',\n 'placeholder.NewPassword2.password': 'Confirm Password',\n 'validation.password.field': 'There are required empty fields.',\n 'validation.password.equal': 'Invalid password. New password must be different than the older password.',\n 'validation.password.notequal': 'Invalid password. New password and confirmation password are differents.',\n 'validation.password.min': 'Invalid password. New password must be at least 6 characters.',\n 'label.search.filter': 'Search filter',\n 'input.email.directive.placeholder': 'Insert an email...',\n 'input.email.directive.invalidmail': 'Please input a valid email',\n 'input.email.directive.duplicatedmail': 'Email already inserted.',\n 'input.email.directive.toolongemail': 'The email address is to long.',\n 'input.email.directive.error.remove.msg': 'An error occurred when try to remove email.',\n 'record.has.already.been.updated': 'This record has already been updated.',\n 'msg.error.datetime.get.fail': 'There was an error fetching the date.',\n 'msg.error.listTurns': 'An error occurred when trying to load a list of turns.',\n 'msg.error.listAreas': 'An error occurred when trying to load a list of areas.',\n 'msg.error.listSynthesis': 'An error occurred when trying to load a list of synthesis.',\n 'msg.error.listModels': 'An error occurred when trying to load a list of models.',\n 'msg.error.listTaskTypes': 'An error occurred when trying to load a list of task types.',\n 'msg.error.listSession': 'An error occurred when trying to load a list of sections.',\n 'label.area': 'Area',\n 'label.section': 'Section/Line',\n 'select.default.area': 'Select a area...',\n 'production.plan.email.failed': 'There was an error sending your email',\n 'synthesis.section.meeting': 'Section meeting',\n 'synthesis.general.meeting': 'General meeting',\n 'synthesis.cleaning.and.5s': 'Cleaning and 5S',\n 'synthesis.machine.initialization': 'Machine initialization',\n 'synthesis.machine.finishing': 'Machine Finishing',\n 'synthesis.labor.gymnastics': 'Labor gymnastics',\n 'synthesis.preventive.maintenance': 'Preventive maintenance',\n 'synthesis.predictive.maintenance.cpk': 'Predictive Maintenance (CPK)',\n 'synthesis.daily.maintenance': 'Daily maintenance',\n 'synthesis.waiting.for.previous.sector': 'Waiting for previous sector',\n 'synthesis.program.adjustment.in.process': 'Program adjustment in process',\n 'synthesis.shortage.material': 'Shortage Material',\n 'synthesis.waiting.component.preparation': 'Waiting component Preparation',\n 'synthesis.waiting.component.materials': 'Waiting component Materials',\n 'synthesis.corrective.maintenance': 'Corrective maintenance',\n 'synthesis.production.order.divergence': 'Production Order Divergence',\n 'synthesis.engineering.divergence': 'Engineering Divergence',\n 'synthesis.waiting.for.batch.distribution.materials': 'Waiting for batch distribution Materials',\n 'synthesis.power.andor.compressed.air.falling': 'Power and/or compressed air falling',\n 'synthesis.lack.of.tray.carrie': 'Lack of tray /carrie',\n 'synthesis.lack.of.manpower': 'Lack of manpower',\n 'synthesis.route.delay': 'Route Delay',\n 'synthesis.waiting.for.documentation': 'Waiting for documentation',\n 'synthesis.component.exchange': 'Component exchange',\n 'synthesis.other.causes.specify.reason': 'Other causes (Specify reason)',\n 'synthesis.total.model.change': 'Total model change',\n 'synthesis.partial.model.exchange': 'Partial model exchange',\n 'synthesis.total.model.change.quantity': 'Total model change quantity',\n 'synthesis.partial.model.exchange.quantity': 'Partial model exchange quantity',\n 'synthesis.profile.of.oven': 'Profile of oven',\n 'synthesis.npi.development': 'NPI Development',\n 'synthesis.without.planning': 'Without Planning',\n 'task.back.error': 'Could not go back to task list, please try again.',\n 'label.minutes': 'minutes',\n 'label.thousands': 'Thousands',\n 'label.tonne': 'Tonne',\n 'fullscreen.error': 'Your browser does not support full screen.',\n 'listview.directive.no.items.found': 'No items found.',\n 'label.settings': 'Settings',\n 'input.model.directive.placeholder': 'Insert a model...',\n 'input.model.directive.model.required.msg': 'Model field is required.',\n 'input.model.directive.model.variants.title': 'Variants:',\n 'input.model.directive.model.alread.inlist.warn': 'Model already inserted',\n 'input.model.directive.table.header.model': 'Model',\n 'input.model.directive.model.load.error': 'An error occurred when try to load model list.',\n 'input.model.directive.model.invalid.error': 'Model is not valid.',\n 'input.model.directive.table.header.variant': 'Variants',\n 'title.business': 'Business',\n 'input.client.directive.client.alread.inlist.warn': 'Client already inserted',\n 'project.input.client.label': 'Client',\n 'input.client.directive.placeholder': 'Enter a client...',\n 'input.datetime.start': 'Initial date',\n 'input.datetime.final': 'Final date',\n 'msg.same.name.error': 'A record with the same name already exists.',\n 'msg.error.delete.register': 'There was an error deleting the registry.',\n 'msg.error.delete.user.association': 'User can only be disabled. There are one or more associated records.',\n 'msg.error.attachment.file.not.found': 'One or more attachments could not be found. Check the attachments.',\n 'msg.change.business.warn.dialog': 'When changing the business the data will be lost. Do you wish to continue?',\n 'modal.change.business.dialog.title': 'Change Business',\n 'title.shift': 'Shift',\n 'project.association.deleted.failed': 'Client can not be removed because it is associated with other records.',\n 'label.created.date': 'Created Date',\n 'label.updated.date': 'Updated Date',\n 'label.itemsPerPage': 'Items per page',\n \"with_month_day\": \"{{date|date:'MM/dd'}}\",\n \"with_date\": \"{{date|date:'yyyy/MM/dd'}}\",\n \"with_date_acquisition\": \"{{date|date:'dd-MMM-yy'}}\",\n 'error.dashboardUser.not.found': 'Dashboard not found.',\n 'label.keyword': 'Keyword',\n 'label.quality': 'Quality',\n 'label.technology': 'Technology',\n 'label.price': 'Price',\n 'label.logistics': 'Logistics',\n 'label.total': 'Total',\n 'label.attachment': 'Attachment',\n \"date_format_options\": 'YYYY/MM/DD',\n \"with_date_time\": \"{{date|date:'yyyy/MM/dd HH:mm'}}\",\n 'label.inprogress': 'In Progress',\n 'search.hint.status.label': 'All status',\n 'search.name.hint.msg': 'Search by name',\n 'label.name': 'Name',\n 'label.status': 'Status',\n 'label.order': 'Order',\n 'placeholder.add.user.name': 'Add a name...',\n 'input.user.directive.invalid.error': 'Invalid user.',\n 'input.user.directive.alread.inlist.warn': 'User already included.',\n 'label.all': 'All',\n 'label.description': 'Description'\n });\n\n $translateProvider.translations('pt', {\n 'title.iqcpart': 'IQC',\n 'generic.error.msg': 'Ocorreu um erro ao tentar realizar a operação.',\n 'msg.error.generic': 'Serviço indisponível. Por favor contate um administrador.',\n 'msg.error.delete.generic': 'Ocorreu um erro ao excluir esse registro. Por favor contate um administrador.',\n 'msg.error.list.generic': 'Ocorreu um erro ao listar os registros.',\n 'msg.error.login.unauthorized': 'Usuário não autorizado, tente o login ou contate um administrador.',\n 'msg.error.access.unauthorized': 'Usuário não autorizado, você não tem permissão de acesso. Contate um administrador.',\n 'error.unauthorized.rote': 'Usuário não autorizado, você não tem permissão de acesso. Contate um administrador.',\n 'msg.error.generic.remove.email.group.error.msg': 'Ocorreu um erro ao tentar remover o email.',\n 'validation.area.required': 'Você precisa selecionar uma área.',\n 'validation.model.required': 'Você precisa selecionar um modelo.',\n 'label.continue': 'Continuar',\n 'label.add': 'Adicionar',\n 'label.play': 'Ver apresentação',\n 'label.createdby': 'Criado por',\n 'label.updatedby': 'Atualizado por',\n 'label.closedby': 'Fechado por',\n 'label.status.header': 'Situação',\n 'label.active': 'Ativo',\n 'label.inactive': 'Inativo',\n 'label.company': 'Empresa',\n 'label.business': 'Negócio',\n 'label.main': 'Principal',\n 'label.admin': 'Administração',\n 'label.help': 'Ajuda',\n 'label.user.account': 'Perfil',\n 'label.user.preferences': 'Preferências',\n 'label.user.logout': 'Sair',\n 'label.dashboard': 'Painel',\n 'label.task.control': 'Controle de Tarefas',\n 'label.checklist': 'Checklist',\n 'label.reports': 'Relatórios',\n 'label.faca': 'FA/CA',\n 'label.basic': 'Tipos Básicos',\n 'label.permission': 'Permissões',\n 'label.defects': 'Defeitos',\n 'label.oqc.oba': 'OQC / OBA',\n 'label.notifications': 'Notificações',\n 'label.users': 'Usuários',\n 'label.title': 'Título',\n 'label.translate.portuguese': 'Português-BR',\n 'label.translate.english': 'Inglês-US',\n 'toast.info.title': 'Olá,',\n 'toast.info.function.not.implemented': 'Ainda iremos trabalhar nisto :)',\n 'label.save': 'Salvar',\n 'label.edit': 'Editar',\n 'label.update': 'Atualizar',\n 'label.delete': 'Deletar',\n 'label.cancel': 'Cancelar',\n 'title.remove': 'Remover',\n 'label.confirm': 'Confirmar',\n 'label.close': 'Fechar',\n 'label.clear': 'Limpar',\n 'label.search': 'Buscar',\n 'label.remark': 'Observação',\n 'label.ongoing': 'Em andamento',\n 'msg.confirm.remove': 'Você deseja remover o item ($description) ?',\n 'msg.confirm.remove.item': 'Você deseja remover o item?',\n 'item.edit': 'Editar Item',\n 'item.delete': 'Deletar Item',\n 'uploadoptions.dialog.title': 'Upload de Arquivo',\n 'uploadoptions.label.camera': 'Câmera',\n 'uploadoptions.label.file.manager': 'Meus Documentos',\n 'uploadoptions.label.back': 'Voltar',\n 'uploadoptions.label.take.picture': 'Capturar imagem',\n 'uploadoptions.label.picture.discard': 'Descartar',\n 'uploadoptions.label.picture.confirm': 'Confirmar',\n 'uploadoptions.save.image.fail': 'Ocorreu um erro ao enviar a imagem.',\n 'label.footer.development': 'Desenvolvido por',\n 'label.footer.allrights': 'Todos os direitos reservados.',\n 'label.footer.version': 'Versão',\n 'label.search.filter': 'Filtro da busca',\n 'placeholder.current.password': 'Senha atual',\n 'placeholder.NewPassword1.password': 'Nova senha',\n 'placeholder.NewPassword2.password': 'Confirmar senha',\n 'validation.password.field': 'Existem campos obrigatórios vazios.',\n 'validation.password.equal': 'Senha inválida. A nova senha deve ser diferente da senha antiga.',\n 'validation.password.notequal': 'Senha inválida. A Nova senha e senha de confirmação são diferentes.',\n 'validation.password.min': 'Senha inválida. A nova senha deve ter pelo menos 6 caracteres.',\n 'input.email.directive.placeholder': 'Insira um e-mail...',\n 'input.email.directive.invalidmail': 'Por favor, insira um e-mail válido',\n 'input.email.directive.duplicatedmail': 'E-mail já inserido.',\n 'input.email.directive.toolongemail': 'O endereço de email é muito longo.',\n 'input.email.directive.error.remove.msg': 'Ocorreu um erro ao tentar remover o email.',\n 'record.has.already.been.updated': 'Este registro já foi atualizado.',\n 'msg.error.datetime.get.fail': 'Ocorreu um erro ao obter a data.',\n 'msg.error.listTurns': 'Ocorreu um erro ao tentar carregar uma lista de turnos.',\n 'msg.error.listAreas': 'Ocorreu um erro ao tentar carregar uma lista de áreas.',\n 'msg.error.listSynthesis': 'Ocorreu um erro ao tentar carregar uma lista de sínteses.',\n 'msg.error.listModels': 'Ocorreu um erro ao tentar carregar uma lista de modelos.',\n 'msg.error.listTaskTypes': 'Ocorreu um erro ao tentar carregar a lista de tipos de tarefa.',\n 'msg.error.listSession': 'Ocorreu um erro ao tentar carregar a lista de seções.',\n 'label.area': 'Área',\n 'label.section': 'Seção/Linha',\n 'select.default.area': 'Selecione uma área...',\n 'production.plan.email.failed': 'Ocorreu um erro ao enviar o e-mail',\n 'synthesis.section.meeting': 'Reunião da seção',\n 'synthesis.general.meeting': 'Reunião geral',\n 'synthesis.cleaning.and.5s': 'Limpeza e 5S',\n 'synthesis.machine.initialization': 'Inicialização máquina',\n 'synthesis.machine.finishing': 'Finalização máquina',\n 'synthesis.labor.gymnastics': 'Ginástica laboral',\n 'synthesis.preventive.maintenance': 'Manutenção preventiva',\n 'synthesis.predictive.maintenance.cpk': 'Manutenção preditiva (CPK)',\n 'synthesis.daily.maintenance': 'Manutenção diária',\n 'synthesis.waiting.for.previous.sector': 'Aguardando setor anterior',\n 'synthesis.program.adjustment.in.process': 'Ajuste programa no processo',\n 'synthesis.shortage.material': 'Material em Shortage',\n 'synthesis.waiting.component.preparation': 'Aguardando componente Preparação',\n 'synthesis.waiting.component.materials': 'Aguardando componente Materiais',\n 'synthesis.corrective.maintenance': 'Manutenção corretiva',\n 'synthesis.production.order.divergence': 'Divergência Ordem de Produção',\n 'synthesis.engineering.divergence': 'Divergência documentação Engenharia',\n 'synthesis.waiting.for.batch.distribution.materials': 'Aguardando distribuição lote Materiais',\n 'synthesis.power.andor.compressed.air.falling': 'Queda energia e/ou ar comprimido',\n 'synthesis.lack.of.tray.carrie': 'Falta de bandeja/carrie',\n 'synthesis.lack.of.manpower': 'Falta de mão-de-obra ',\n 'synthesis.route.delay': 'Atraso da rota',\n 'synthesis.waiting.for.documentation': 'Aguardando documentação',\n 'synthesis.component.exchange': 'Troca de componente',\n 'synthesis.other.causes.specify.reason': 'Outras causas (Especificar motivo)',\n 'synthesis.total.model.change': 'Troca de modelo total',\n 'synthesis.partial.model.exchange': 'Troca de modelo parcial',\n 'synthesis.total.model.change.quantity': 'Quantidade troca de modelo total',\n 'synthesis.partial.model.exchange.quantity': 'Quantidade troca de modelo parcial',\n 'synthesis.profile.of.oven': 'Perfil de forno',\n 'synthesis.npi.development': 'Desenvolvimento NPI',\n 'synthesis.without.planning': 'Sem Planejamento',\n 'task.back.error': 'Não foi possível voltar para lista de tarefa, por favor tente novamente.',\n 'label.minutes': 'minutos',\n 'label.thousands': 'Milhares',\n 'label.tonne': 'Tonelada',\n 'fullscreen.error': 'Seu navegador de internet não oferece suporte a tela cheia.',\n 'listview.directive.no.items.found': 'Nenhum item encontrado.',\n 'label.settings': 'Configurações',\n 'input.model.directive.placeholder': 'Insira um modelo...',\n 'input.model.directive.model.required.msg': 'O campo modelo é obrigatório.',\n 'input.model.directive.model.variants.title': 'Variantes:',\n 'input.model.directive.model.alread.inlist.warn': 'Modelo já inserido',\n 'input.model.directive.table.header.model': 'Modelo',\n 'input.model.directive.table.header.variant': 'Variantes',\n 'input.model.directive.model.load.error': 'Ocorreu um erro ao tentar carregar a lista de modelos.',\n 'input.model.directive.model.invalid.error': 'O modelo inserido não é válido.',\n 'title.business': 'Negócio',\n 'input.client.directive.client.alread.inlist.warn': 'Cliente já inserido',\n 'project.input.client.label': 'Cliente',\n 'input.client.directive.placeholder': 'Insira um cliente...',\n 'input.datetime.start': 'Data inicial',\n 'input.datetime.final': 'Date final',\n 'msg.same.name.error': 'Já existe um registro com o mesmo nome.',\n 'msg.error.delete.register': 'Ocorreu um erro ao deletar o registro.',\n 'msg.error.delete.user.association': 'Usuário so poderá ser inativado. Há um ou mais registros associados.',\n 'msg.error.attachment.file.not.found': 'Um ou mais anexos não foram encontrados. Verifique os anexos.',\n 'msg.change.business.warn.dialog': 'Ao alterar o negócio os dados serão perdidos. Você deseja continuar?',\n 'modal.change.business.dialog.title': 'Alterar Negócio',\n 'title.shift': 'Turno',\n 'project.association.deleted.failed': 'Cliente não pode ser removido, pois esta associado a outros registros.',\n 'label.created.date': 'Data de criação',\n 'label.updated.date': 'Data de atualização',\n 'label.itemsPerPage': 'Itens por página',\n \"with_month_day\": \"{{date|date:'dd/MM'}}\",\n \"with_date\": \"{{date|date:'dd/MM/yyyy'}}\",\n \"with_date_acquisition\": \"{{date|date:'dd-MMM-yy'}}\",\n 'error.dashboardUser.not.found': 'Dashboard não foi encontrado.',\n 'label.keyword': 'Palavra-chave',\n 'label.quality': 'Qualidade',\n 'label.technology': 'Tecnologia',\n 'label.price': 'Preço',\n 'label.logistics': 'Entrega',\n 'label.total': 'Total',\n 'label.attachment': 'Anexo',\n \"date_format_options\": 'DD/MM/YYYY',\n \"with_date_time\": \"{{date|date:'dd/MM/yyyy HH:mm'}}\",\n 'label.inprogress': 'Em Andamento',\n 'search.hint.status.label': 'Todas as situações',\n 'search.name.hint.msg': 'Pesquisar por nome',\n 'label.name': 'Nome',\n 'label.status': 'Situação',\n 'label.order': 'Ordem',\n 'placeholder.add.user.name': 'Insira um nome...',\n 'input.user.directive.invalid.error': 'O usuário inserido não é válido.',\n 'input.user.directive.alread.inlist.warn': 'Usuário já inserido.',\n 'label.all': 'Tudo',\n 'label.description': 'Description'\n });\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .run(runBlock);\n\n /** @ngInject */\n function runBlock() {\n\n }\n\n angular\n .module('aqmsFrontend')\n .run(function ($rootScope, $state, AuthService) {\n var routeCallBack = $rootScope.$on('$stateChangeStart', function (event, toState) {\n if (toState.authorize) {\n if (!AuthService.getToken()) {\n /* Ugly way\n event.preventDefault();\n $location.path('/signin');\n ==========================*/\n $rootScope.$evalAsync(function () {\n $state.go('signin');\n })\n }\n }\n });\n $rootScope.$on('$destroy', routeCallBack);\n })\n})();\n\n/*eslint angular/window-service: 0*/\n\n(function() {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .config(routerConfig);\n\n /** @ngInject */\n function routerConfig($urlRouterProvider) {\n\n if(window.localStorage.isSysAdmin == 'true'){\n $urlRouterProvider.otherwise('/basic/-1');\n } else {\n $urlRouterProvider.otherwise('/dashboard');\n }\n }\n\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend')\n .controller('IndexController', IndexController)\n .service('IndexConstant', IndexConstant);\n\n function IndexConstant() {\n var vm = this;\n\n /**\n * Event name to broadcast and listen.\n * @type {string}\n */\n vm.fullScreenEvent = \"full_screen_event\";\n vm.localeChangeEvent = \"locale_change_event\";\n\n }\n\n /** @ngInject */\n function IndexController(AuthService, $state, $translate, ToastUtil, $window, $scope, DialogController, $document,\n $rootScope, IndexConstant, Idle, $uibModalStack, toastr, $uibModal, DefaultService, moment, $log, SYSTEM_VERSION) {\n\n\n var vm = this;\n var scope = $scope;\n vm.isSettingsCollapsed = true;\n vm.accesscontrol = {};\n vm.version = SYSTEM_VERSION;\n\n // Code for UpdateRegisterException(\"This record has already been updated.\") using bank-end.\n // Code for ObjectAssociationException(\" There are one or more associated records.\") using bank-end.\n scope.HttpStatusCodeConflict = 409;\n\n // User unauthorized, using bank-end.\n scope.HttpStatusUnauthorized = 401;\n\n scope.NotAcceptable = 406;\n\n // Enum for search datetime types.\n scope.EDateTime = {\n HOUR: 0,\n HOURMINUTES: 1,\n DAY: 2,\n DATE: 3\n };\n\n vm.showTopButton = false;\n vm.authenticated = false;\n vm.currentUser = $window.localStorage.aliasAqms;\n vm.currentLoginAqms = $window.localStorage.loginAqms;\n vm.photoLoggedUser = $window.localStorage.photoAqms;\n vm.userInitiais = $window.localStorage.userInitiais;\n vm.currentLang = $window.localStorage.defaultLanguage;\n vm.showMenu = false;\n\n // List of modules used in the system, controls the access rules according to the settings in the database.\n scope.moduleProductionPlan = \"productionplan\";\n scope.moduleUser = \"user\";\n scope.moduleBasicTypes = \"basictypes\";\n scope.moduleDashboard = \"dashboard\";\n scope.moduleTaskControl = \"taskcontrol\";\n scope.moduleChecklist = \"checklist\";\n scope.moduleMainReport = \"mainreport\";\n scope.moduleFaca = \"faca\";\n scope.moduleDefects = \"defects\";\n scope.moduleOqcOba = \"oqcoba\";\n scope.moduleBlockedMaterial = \"blockedmaterial\";\n scope.modulePermission = \"permission\";\n scope.moduleSettings = \"settings\";\n scope.modulePreferences = \"preferences\";\n scope.iqcpart = \"iqcpart\";\n scope.ort = \"ort\";\n scope.modulePdca = \"pdca\";\n scope.moduleDocumentFlow = \"documentflow\";\n scope.kpi = \"kpi\";\n scope.moduleAlert = \"alert\";\n scope.moduleLogistics = \"logistics\";\n scope.moduleSgi = \"sgi\";\n scope.moduleFinancial = \"financial\";\n scope.moduleAcquisition = \"acquisition\";\n scope.moduleFiscal = \"fiscal\";\n\n scope.moduleSourcing = \"sourcing\";\n scope.moduleSupplierRegistration = \"supplierregistration\";\n scope.moduleTechnicalVisit = \"technicalvisit\";\n scope.moduleSupplierApprovalMilestones = \"supplierapprovalmilestones\";\n scope.moduleSupplierEvaluation = \"supplierevaluation\";\n scope.moduleContract = \"contract\";\n scope.moduleComponentDevelopment = \"componentdevelopment\";\n\n var lastBusiness = null;\n\n /** Hold last menu accessed to use in not-authorized page */\n $rootScope.$on('$stateChangeStart',\n function (event, toState, toParams) {\n if (toState.name != \"not-authorized\") {\n $window.localStorage.lastAccessedMenu = toParams.menuName;\n }\n });\n\n $scope.$watch(function () {\n return $window.localStorage.defaultLanguage;\n }, function () {\n $rootScope.$broadcast(IndexConstant.localeChangeEvent, $window.localStorage.defaultLanguage);\n });\n\n /** Returns last menu accessed to not-authorized page */\n vm.getNotAuthorizedPage = function () {\n return $window.localStorage.lastAccessedMenu;\n }\n\n // List of businesses in which the user has access.\n vm.listBusiness = AuthService.getBusinessMenu();\n findUserFavoriteBusiness();\n\n vm.companyName = AuthService.getCompanyName();\n\n loadViewPermissions();\n\n function loadViewPermissions() {\n var userProfileBusinessId = AuthService.getUserProfileBusiness();\n if(!userProfileBusinessId) return;\n return DefaultService.listViewPermissionsByUserProfileBusinessId(userProfileBusinessId)\n .then(function (permissions) {\n if (permissions && permissions.length > 0) {\n vm.accesscontrol = {};\n for (var i = 0, len = permissions.length; i < len; i++) {\n var permission = permissions[i];\n vm.accesscontrol[permission.ModuleName] = {\n \"CanView\": permission.CanView,\n \"CanAdd\": permission.CanAdd\n };\n }\n }\n })\n .catch(function (error) {\n $log.log(error);\n });\n }\n\n /**\n * Function to check if current url is create or edit.\n * @returns {boolean}\n */\n function isCreateOrEditUrl() {\n var isEditOrCreate = false;\n if ($state.current.url.indexOf(\"edit\") !== -1 || $state.current.url.indexOf(\"create\") !== -1) {\n isEditOrCreate = true;\n }\n\n return isEditOrCreate;\n }\n\n /**\n * Function called when business select changes.\n */\n vm.setBusiness = function () {\n if (isCreateOrEditUrl()) {\n showChangeBusinessConfirmationDialog();\n } else {\n vm.doBusinessChange();\n }\n };\n\n /**\n * Function called from modal change-business, to undo business select.\n */\n vm.undoBusinessChange = function () {\n if (lastBusiness != null && vm.listBusiness != null && vm.listBusiness.length > 0) {\n angular.forEach(vm.listBusiness, function (item) {\n if (item.Id == lastBusiness.Id) {\n vm.business = item;\n }\n });\n }\n }\n\n /**\n * Do business change.\n */\n vm.doBusinessChange = function () {\n var favoriteBusiness = {};\n favoriteBusiness.BusinessId = vm.business.Id;\n favoriteBusiness.UserId = AuthService.getUserID();\n\n DefaultService.setFavoriteBusinessUser(favoriteBusiness).then(function (response) {\n $window.localStorage.businessId = vm.business.Id;\n $window.localStorage.businessName = vm.business.Name;\n $window.localStorage.lastBusiness = vm.business.Id;\n $window.localStorage.userProfileBusiness = response.UserProfileBusinessId;\n lastBusiness = angular.copy(vm.business);\n\n loadViewPermissions()\n .then(function () {\n if (vm.isState('dashBoard')) {\n $state.reload();\n } else {\n vm.goToDashboard();\n }\n })\n\n\n\n }).catch(function () {\n //No need implementation.\n });\n }\n\n function showChangeBusinessConfirmationDialog() {\n\n DialogController.show($translate.instant('modal.change.business.dialog.title'), '', vm);\n }\n\n vm.getYear = function () {\n return moment().year();\n };\n\n if (angular.isDefined(AuthService.getToken())) {\n Idle.watch();\n } else {\n Idle.unwatch();\n }\n\n vm.isStateArray = function (params) {\n return params.indexOf($state.current.name) > -1;\n };\n\n vm.isState = function (stateName) {\n return $state.current.name === stateName;\n };\n\n var unregister = $rootScope.$on('UPDATE-USER-PHOTO', function (event, url) {\n vm.photoLoggedUser = url;\n });\n\n $scope.$on('$destroy', unregister);\n\n\n var updateLanguageWithLocalStorage = function () {\n if (vm.currentLang == 'en' || vm.currentLang != 'pt') {\n scope.toggleValue = true;\n vm.currentLang = $translate.use();\n $window.localStorage.defaultLanguage = vm.currentLang;\n } else {\n scope.toggleValue = false;\n vm.currentLang = $window.localStorage.defaultLanguage;\n }\n $translate.use(vm.currentLang);\n };\n\n updateLanguageWithLocalStorage();\n\n scope.changeLanguage = function () {\n if (vm.currentLang != 'en') {\n $translate.use('en');\n } else {\n $translate.use('pt');\n }\n vm.currentLang = $translate.use();\n $window.localStorage.defaultLanguage = vm.currentLang;\n $rootScope.$broadcast('CHANGE-LANGUAGE');\n $rootScope.$broadcast('CHANGE-LANGUAGE-DATA');\n }\n\n if (AuthService.getToken()) {\n vm.authenticated = true;\n }\n\n vm.logout = function () {\n AuthService.logout();\n vm.authenticated = false;\n $state.go('signin', {});\n updateLanguageWithLocalStorage();\n };\n\n function logoutIdle() {\n vm.authenticated = false;\n AuthService.logout();\n $window.location.href = '/';\n updateLanguageWithLocalStorage();\n }\n\n vm.goToDashboard = function () {\n $state.go('dashBoard', {});\n vm.menuClicked();\n };\n\n vm.goToTaskControl = function () {\n $state.go('taskControl', {});\n vm.menuClicked();\n };\n\n vm.goToBasicList = function () {\n $state.go('basic-list', {\n type: -1\n });\n vm.menuClicked();\n };\n\n vm.goToHelp = function () {\n $state.go('help-signin', {});\n vm.menuClicked();\n };\n\n vm.goToPreferences = function () {\n $state.go('preferences-edit', {});\n vm.menuClicked();\n };\n\n\n vm.getCompanyName = function () {\n return AuthService.getCompanyName();\n };\n\n vm.goToPermission = function () {\n $state.go('permissions-profile-list', {});\n vm.menuClicked();\n };\n\n vm.goToFaca = function () {\n sessionStorage.removeItem(\"searchParams\");\n $state.go('faca-list', {});\n vm.menuClicked();\n };\n\n vm.goToReport = function () {\n $state.go('main-report', {});\n vm.menuClicked();\n };\n\n vm.goToChecklist = function () {\n sessionStorage.removeItem(\"searchParams\");\n $state.go('checklists', {});\n vm.menuClicked();\n\n };\n\n vm.goToDefect = function () {\n sessionStorage.removeItem(\"searchParams\");\n $state.go('defects-list', {});\n vm.menuClicked();\n };\n\n vm.goToSgi = function () {\n sessionStorage.removeItem(\"searchParams\");\n $state.go('environmental-list', {});\n vm.menuClicked();\n };\n\n vm.goToFinancial = function () {\n sessionStorage.removeItem(\"searchParams\");\n $state.go('financial-pending', {});\n vm.menuClicked();\n };\n\n vm.goToAcquisition = function () {\n sessionStorage.removeItem(\"searchParams\");\n $state.go('acquisition-pending-approval', {});\n vm.menuClicked();\n };\n\n vm.goToOqcOba = function () {\n sessionStorage.removeItem(\"searchParams\");\n $state.go('oqc-oba-list', {});\n vm.menuClicked();\n };\n\n vm.goToBlockMaterial = function () {\n sessionStorage.removeItem(\"searchParams\");\n $state.go('block-material-list', {});\n vm.menuClicked();\n };\n\n vm.goToIqc = function () {\n sessionStorage.removeItem(\"searchParams\");\n $state.go('part-inspection-list', {});\n vm.menuClicked();\n };\n\n vm.goToOrt = function () {\n sessionStorage.removeItem(\"searchParams\");\n $state.go('ort-inspection-list', {});\n vm.menuClicked();\n };\n\n vm.goToProductionPlan = function () {\n sessionStorage.removeItem(\"searchParams\");\n $state.go('production-plan-list', {});\n vm.menuClicked();\n };\n\n vm.goToPDCA = function () {\n sessionStorage.removeItem(\"searchParams\");\n $state.go('pdca-list', {});\n vm.menuClicked();\n };\n\n vm.goToDocumentFlow = function () {\n sessionStorage.setItem(\"documentFlowInicial\", \"true\");\n sessionStorage.removeItem(\"searchParams\");\n $state.go('document-flow-list', {});\n vm.menuClicked();\n };\n\n vm.goToSettings = function () {\n if (AuthService.isSysAdmin()) {\n $state.go('company-list', {});\n } else {\n $state.go('settings-business-list', {});\n }\n vm.menuClicked();\n };\n\n vm.goToForgot = function () {\n $state.go('forgot', {});\n updateLanguageWithLocalStorage();\n };\n\n vm.goToSignIn = function () {\n $state.go('signin', {});\n updateLanguageWithLocalStorage();\n };\n\n vm.goToVendor = function () {\n $state.go('vendor-list', {});\n vm.menuClicked();\n };\n\n vm.goToAlert = function () {\n $state.go('alert-list', {});\n vm.menuClicked();\n };\n\n vm.goToLogisticsImport = function () {\n $state.go('import-freightcost-list', {});\n vm.menuClicked();\n }\n\n\n vm.goToFiscal = function () {\n sessionStorage.removeItem(\"searchParams\");\n $state.go('fiscal', {});\n vm.menuClicked();\n };\n\n vm.isSysAdmin = function () {\n return AuthService.isSysAdmin();\n };\n\n vm.menuClicked = function () {\n vm.showMenu = !vm.showMenu;\n };\n\n vm.showAccountModalDialog = function () {\n vm.menuClicked();\n DialogController.show($translate.instant('label.user.account'), '', vm);\n };\n\n vm.displayMessageFunctionNotImplemented = function () {\n toastr.clear();\n toastr.info($translate.instant('toast.info.function.not.implemented'), $translate.instant('toast.info.title'), {\n closeButton: true\n });\n };\n\n angular.element($window).bind(\"scroll\", function () {\n if ($window.pageYOffset >= 600) {\n scope.showTopButton = true;\n } else {\n scope.showTopButton = false;\n }\n $scope.$apply();\n });\n\n vm.goTop = function () {\n $document.scrollTopAnimated(0).then(function () {\n\n });\n };\n\n vm.isApprover = function () {\n return AuthService.isApproverRole();\n };\n\n vm.isBasicTypes = function () {\n return AuthService.isBasicTypes();\n };\n\n vm.isPermission = function () {\n return AuthService.isPermission();\n };\n\n vm.isSettings = function () {\n return AuthService.isSettings();\n };\n\n vm.isPreferences = function () {\n return AuthService.isPreferences();\n };\n\n vm.isMenuAdmin = function () {\n if (vm.isBasicTypes() || vm.isPermission() || vm.isSettings()) {\n return true;\n }\n\n return false;\n };\n\n $scope.$on('IdleEnd', function () {\n $uibModalStack.dismissAll();\n });\n\n $scope.$on('IdleTimeout', function () {\n Idle.unwatch();\n if (scope.warning) {\n scope.warning.dismiss();\n }\n logoutIdle();\n });\n\n $scope.$on('IdleStart', function () {\n if (angular.isDefined(AuthService.getToken())) {\n scope.warning = $uibModal.open({\n templateUrl: 'app/auth/expire.html',\n controller: 'ExpireFormController',\n controllerAs: 'ctrl',\n windowClass: 'modal-danger'\n });\n }\n });\n\n vm.fullScreen = function (idElement) {\n\n var element = $document[0].getElementById(idElement);\n\n if (angular.isDefined(element.mozRequestFullScreen)) {\n element.mozRequestFullScreen();\n } else if (angular.isDefined(element.webkitRequestFullscreen)) {\n element.webkitRequestFullscreen();\n } else if (angular.isDefined(element.msRequestFullscreen)) {\n element.msRequestFullscreen();\n } else {\n ToastUtil.showToastMessage($translate.instant('fullscreen.error'), ToastUtil.ToastType.ERROR);\n }\n }\n\n /**\n * Listeners to FullScreen event.\n */\n $document[0].addEventListener('webkitfullscreenchange', exitHandler, false);\n $document[0].addEventListener('mozfullscreenchange', exitHandler, false);\n $document[0].addEventListener('fullscreenchange', exitHandler, false);\n $document[0].addEventListener('MSFullscreenChange', exitHandler, false);\n\n var isFullScreenMode = false;\n\n function exitHandler() {\n if ($document[0].webkitIsFullScreen || $document[0].mozFullScreen || $document[0].msFullscreenElement !== null) {\n var fullscreenElement = $document[0].fullscreenElement || $document[0].mozFullScreenElement || $document[0].webkitFullscreenElement;\n isFullScreenMode = fullscreenElement == null ? false : true;\n //if fullscreenElement is null its an exit full screen event\n broadcastFullScreenEvent();\n }\n }\n\n /**\n * Broadcast Full Screen ON and Full Screen Off.\n */\n function broadcastFullScreenEvent() {\n $scope.$broadcast(IndexConstant.fullScreenEvent, isFullScreenMode);\n }\n\n vm.hideMenu = function () {\n var element = angular.element($document[0].querySelector('.show-menu'));\n if (element.attr(\"class\").indexOf(\"hide-menu\") > -1) {\n element.removeClass(\"hide-menu\");\n } else {\n element.addClass(\"hide-menu\");\n }\n }\n\n function findUserFavoriteBusiness() {\n if (vm.listBusiness) {\n\n if (AuthService.getLastBusiness() == -1) {\n vm.business = vm.listBusiness[0];\n } else {\n var index = vm.listBusiness.findIndex(function (item) {\n return item.Id == AuthService.getLastBusiness()\n });\n\n\n vm.business = vm.listBusiness[index];\n }\n\n $window.localStorage.businessId = vm.business.Id;\n $window.localStorage.businessName = vm.business.Name;\n lastBusiness = angular.copy(vm.business);\n }\n }\n\n }\n})();\n\n/*eslint no-undef: 0*/\n(function () {\n 'use strict';\n\n angular\n .module('aqmsFrontend').value('duScrollDuration', 300).value('duScrollOffset', 30)\n .config(config);\n\n\n /** @ngInject */\n function config($logProvider, toastrConfig, $translateProvider, KeepaliveProvider, IdleProvider, ChartConstants) {\n // Enable log\n $logProvider.debugEnabled(true);\n\n Chart.defaults.global.colors = ChartConstants.colors.map(function (color) {\n return { backgroundColor: color };\n });\n\n Chart.Legend.prototype.afterFit = function() {\n this.height = this.height + 15;\n };\n\n Chart.plugins.register({\n afterDatasetsDraw: function (chart) {\n var ctx = chart.ctx;\n\n chart.data.datasets.forEach(function (dataset, i) {\n var meta = chart.getDatasetMeta(i);\n if (!meta.hidden) {\n meta.data.forEach(function (element, index) {\n var model = element._model;\n // var model = dataset._meta[Object.keys(dataset._meta)[0]].data[i]._model;\n var textY = model.y + (dataset.type == \"line\" ? -3 : 15);\n\n // Draw the text in black, with the specified font\n ctx.fillStyle = 'rgb(0, 0, 0)';\n\n var fontSize = 16;\n var fontStyle = 'normal';\n var fontFamily = 'Helvetica Neue';\n ctx.font = Chart.helpers.fontString(fontSize, fontStyle, fontFamily);\n\n var dataString = dataset.data[index];\n // Just naively convert to string for now\n if (angular.isDefined(dataset.data[index]) && dataset.data[index] !== null) {\n dataString = dataset.data[index] != 0 ? dataset.data[index].toString() : '';\n }\n\n if (dataset.type !== \"bar\") {\n if (chart.ctx.canvas.id == 'landedCostChart' || chart.ctx.canvas.id == 'landedVariationChart') {\n dataString = dataString + \"%\";\n }\n } else if (chart.ctx.canvas.id == 'modeSpendChart' || chart.ctx.canvas.id == 'cargoRatioChart') {\n dataString = dataString + \"%\";\n } else if (chart.ctx.canvas.id == 'channelPerformanceChart') {\n dataString = dataset.data[index] != 0 ? dataset.data[index].toString() : '0';\n dataString = dataString + \"%\";\n }\n if (chart.ctx.canvas.id == 'rateVariationChart') {\n // Make sure alignment settings are correct\n ctx.textAlign = 'start';\n ctx.textBaseline = 'middle';\n ctx.fillStyle = 'rgb(0, 0, 0)';\n ctx.save();\n ctx.translate(model.x, textY - 15);\n ctx.rotate(4.7);\n\n ctx.fillText(dataString, 0, 0);\n } else if(chart.ctx.canvas.id == 'nationalFreightCostAir') {\n // Make sure alignment settings are correct\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n\n var padding = 5;\n var position = element.tooltipPosition();\n //ctx.fillText(dataString, position.x, position.y - (fontSize / 2) - padding);\n } else if(chart.ctx.canvas.id == 'nationalFreightCostAirInbound') {\n // Make sure alignment settings are correct\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n\n var padding = 5;\n var position = element.tooltipPosition();\n //ctx.fillText(dataString, position.x, position.y - (fontSize / 2) - padding);\n } else if(chart.ctx.canvas.id == 'nationalFreightCostRoadOutbound') {\n // Make sure alignment settings are correct\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n\n var padding = 5;\n var position = element.tooltipPosition();\n //ctx.fillText(dataString, position.x, position.y - (fontSize / 2) - padding);\n } else {\n // Make sure alignment settings are correct\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n\n var padding = 5;\n var position = element.tooltipPosition();\n ctx.fillText(dataString, position.x, position.y - (fontSize / 2) - padding);\n }\n ctx.restore();\n\n });\n }\n });\n }\n });\n\n // Set options Toast\n toastrConfig.allowHtml = true;\n toastrConfig.timeOut = 10000;\n toastrConfig.positionClass = 'toast-bottom-right';\n toastrConfig.maxOpened = 1,\n toastrConfig.updateTimerOnDuplicates = true,\n toastrConfig.preventDuplicates = false;\n toastrConfig.progressBar = true;\n\n // Set options user session in seconds\n IdleProvider.idle(3600);\n KeepaliveProvider.interval(3600);\n // Set time to alert user for expire session\n IdleProvider.timeout(10);\n\n\n // Set language default to system\n $translateProvider\n .useSanitizeValueStrategy('sanitizeParameters')\n .preferredLanguage('en');\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('aqmsFrontend')\n .constant('ChartConstants', {\n \"colors\": [\n 'rgb(80, 129, 188)', // Blue\n 'rgb(193, 82, 75)', // Red\n 'rgb(156, 186, 86)', // Green\n 'rgb(131, 118, 144)', // Wine\n 'rgb(134, 177, 186)', // Ciano\n 'rgb(255, 166, 77)', // Orange,\n 'rgb(102, 51, 0)',\n 'rgb(237, 224, 45)', \n 'rgb(247, 62, 59)',\n 'rgb(2, 79, 79)',\n 'rgb(96, 73, 188)',\n 'rgb(155, 4, 75)'\n ]\n });\n})();\nangular.module(\"aqmsFrontend\").run([\"$templateCache\", function($templateCache) {$templateCache.put(\"app/acquisition/acquisition-pending-approval.html\",\"

{{\\'title.acquisition\\' | translate }}

0\\\">
  • {{ item.RequestBy }}
    {{ \\'with_date\\'|translate:{date: item.CreatedApproval } }}
    {{ \\'with_date\\'|translate:{date: item.DeadLineApproval } }}
    {{ item.TotalItemQuotation }}/{{ item.TotalItemSolicitation }}
5\\\">
{{ctrl.totalLista}}
{{ctrl.totalLista}}

\\\"No

{{\\'acquisition.pending.list.notfound\\' | translate}}

\");\n$templateCache.put(\"app/acquisition/acquisition-protocol-edit.html\",\"

{{\\'acquisition.label.new\\' | translate }}

0\\\">{{\\'acquisition.label.edit\\' | translate }}

0\\\">
  • {{ index + 1 }}
    {{ item.Material }}
    {{ item.Quantity }}
    {{ctrl.getUnitMeasure(item.UnitMeasure)}}
Solicito uma cotação de acordo com a especificação abaixo.

ItemDescriçãoQuant.Un. Me.Val. Unit.
{{ index + 1 }}{{ item.SolicitationQuotation.Material }}{{ item.SolicitationQuotation.Quantity}}{{ctrl.getUnitMeasure(item.SolicitationQuotation.UnitMeasure)}}


OBS.: Este é um pedido de cotação, não estamos autorizando a produção ou faturamento desta solicitação.
0 && ctrl.Items[0].Vendors != undefined && ctrl.Items[0].Vendors.length > 0\\\">
{{ ctrl.Items[0].Vendors.length }} vendors added
{{vendor.Vendor.FantasyName}}
#{{ index + 1 }}
{{ item.SolicitationQuotation.Material }}
ID {{item.IdDocumentFlow}} — {{ item.SolicitationQuotation.Quantity}} • {{ctrl.getUnitMeasure(item.SolicitationQuotation.UnitMeasure)}}
R$

\\\"No

{{\\'financial.list.notfound\\' | translate}}

\");\n$templateCache.put(\"app/acquisition/acquisition-protocol-list.html\",\"

{{\\'title.acquisition\\' | translate }}

0\\\">
  • {{item.CreatedBy}}
    {{ \\'with_date\\'|translate:{date: item.UpdatedDate } }}
    {{item.ApprovalId}}
    {{\\'acquisition.label.status.inprogress\\' | translate}}
    {{\\'acquisition.label.status.done\\' | translate}}
5\\\">
{{ctrl.totalLista}}
{{ctrl.totalLista}}

\\\"No

{{\\'acquisition.list.notfound\\' | translate}}

\");\n$templateCache.put(\"app/acquisition/acquisition-tabs.html\",\"\");\n$templateCache.put(\"app/alert/alert-anatel.html\",\"
0\\\">
  • {{item.PartNumber}} {{\\\"N/A\\\"}}

\\\"No

\");\n$templateCache.put(\"app/alert/alert-contract-object.html\",\"
\");\n$templateCache.put(\"app/alert/alert-days.html\",\"
0\\\">
  • {{item.Days}} {{\\\"N/A\\\"}}
    {{item.Description}} {{\\\"N/A\\\"}}
    {{\\'with_date\\'|translate:{date: item.AlertDate } }} - {{ item.Hour | date :\\'HH:mm\\' }} {{\\\"N/A\\\"}}
    {{\\'with_date\\'|translate:{date: item.EndDate } }} {{\\\"N/A\\\"}}

\\\"No

\");\n$templateCache.put(\"app/alert/alert-list.html\",\"

{{\\'title.alert\\' | translate }}

0\\\">
  • {{item.Id}}
    {{item.Title}}
    {{item.CreatedBy}}
    {{ \\'with_date\\'|translate:{date: item.CreatedDate } }}
    {{ \\'with_date\\'|translate:{date: item.DueDate } }}
    {{ item.NextAlert === \\\"\\\" ? \\\"-\\\" : \\'with_date_time\\'|translate:{date: item.NextAlert } }}
    {{ctrl.getTypeDescription(item) | translate}}
    {{ctrl.getStatusDescription(item) | translate}}
5\\\">

\\\"No

{{\\'alert.list.notfound\\' | translate}}

0\\\">

\\\"No

{{\\'alert.list.notfound\\' | translate}}

\");\n$templateCache.put(\"app/alert/alert-notes.html\",\"
\");\n$templateCache.put(\"app/alert/alert-remark.html\",\"
\");\n$templateCache.put(\"app/alert/alert-targets.html\",\"
0\\\">
  • {{item.User.Name}} {{\\\"N/A\\\"}}

\\\"No

\");\n$templateCache.put(\"app/alert/alert.html\",\"

{{ctrl.label | translate}}

\");\n$templateCache.put(\"app/auth/expire.html\",\"
\");\n$templateCache.put(\"app/auth/forgot.html\",\"

{{\\'label.slogan\\' | translate}}

{{\\'title.forgot\\' | translate}}

\");\n$templateCache.put(\"app/auth/not-authorized.html\",\"

{{index.getNotAuthorizedPage()|translate}}

Ops Ops!

\");\n$templateCache.put(\"app/auth/signin.html\",\"

{{\\'label.slogan\\' | translate}}

\");\n$templateCache.put(\"app/auth/signup.html\",\"

{{\\'title.signup\\' | translate}}

\");\n$templateCache.put(\"app/basic/basic-edit.html\",\"
\");\n$templateCache.put(\"app/basic/basic-list.html\",\"

{{\\'title.basic\\' | translate }}

\");\n$templateCache.put(\"app/basic/basic-part-inspection-rule-edit.html\",\"
\");\n$templateCache.put(\"app/basic/basic-request-type-edit.html\",\"
\");\n$templateCache.put(\"app/basic/basic-section-edit.html\",\"
\");\n$templateCache.put(\"app/basic/basic-synthesis-edit.html\",\"
\");\n$templateCache.put(\"app/basic/basic-test-inspection-rule-edit.html\",\"
\");\n$templateCache.put(\"app/block_material/block-material-edit.html\",\"

{{\\'label.new.block.material\\' | translate }}

0\\\">{{\\'label.edit.block.material\\' | translate }}


0\\\">
0\\\">
Bin
Sloc
8D
  • Bin {{item.Bin}}
    SLOC {{item.SLOC}}
    {{item.Quantity}}
    {{item.UnityValue}}
    {{item.Batch}}
    {{item.EntryDate}}
    {{item.Vendor.Title}}
    8D {{item.D8}}
    {{item.Defect}}
    {{ctrl.getStatusDescription(item) | translate}}
    {{\\\"N/A\\\"}}
\");\n$templateCache.put(\"app/block_material/block-material-list.html\",\"

{{\\'title.block.material\\' | translate }}

0\\\">
Id
BIN
5, \\'blocked-material-20-bottom\\' : ctrl.totalList < 6}\\\" ng-show=\\\"ctrl.blockedMaterialList.length > 0\\\">
{{ctrl.totalList}}
5\\\">
{{ctrl.totalValue | currency:\\'R$ \\'}}

\\\"No

{{\\'blockedmaterial.list.notfound\\' | translate}}

\");\n$templateCache.put(\"app/checklist/checklists-edit.html\",\"

{{\\'checklist.title.new\\' | translate }}

{{\\'checklist.title.edit\\' | translate }}

{{ \\'checklist.title\\' | translate }}: {{ ctrl.checklist.Title }}
0\\\">
{{$select.selected.Title}} 0\\\" class=\\\"glyphicon glyphicon-remove\\\" style=\\\"color: red\\\"> {{$select.totalOcorrence}} / {{$select.totalResult}} / {{ctrl.selectedChecklistTemplateProcesses.ChecklistTemplateParameters.length}}
0\\\" class=\\\"glyphicon glyphicon-remove\\\" style=\\\"color: red\\\"> {{$templateProcessUiSelect[$index].totalOcorrence}} / {{$templateProcessUiSelect[$index].totalResult}} / {{templateProcess.ChecklistTemplateParameters.length}}
0\\\">
  • {{ctrl.getTotalCheckLists()}}: {{ctrl.checkListTotal.process}} : {{ctrl.checkListTotal.processComplete}} : {{ctrl.checkListTotal.ocorrence}} : {{ctrl.checkListTotal.processPendent}}
    {{ctrl.selectedChecklistTemplateProcesses.Title}}
    0\\\">
    {{param.Specification}}
    {{\\\" (\\\" + ctrl.getParamTypeReference(param.ValueReference1, param.ValueReference2, param.PatrolResultType) + \\\")\\\"}}
    {{\\\"OK\\\"}}

    \\\"No

    {{\\'load.all.occurrences.notFound\\' | translate}}

    \");\n$templateCache.put(\"app/checklist/checklists-list.html\",\"

    {{\\'checklist.title\\' | translate }}

    \\\"No

    {{\\'load.all.checklist.notFound\\' | translate}}

    0\\\">
    0\\\">
    • {{item.Id}}
      0 ? \\'label label-danger\\' : \\'\\'\\\">{{item.Occurrence}}
      {{ctrl.getFormatedDate(item.StartDate)}}
      {{item.Project}}
      {{item.Client}}
      {{item.Model}}
      {{item.Turn}}
      {{item.Version}}
      \\\"\\\" {{ctrl.getStatusName(item.Status) | translate}}
    5\\\">
    \");\n$templateCache.put(\"app/checklist/checklists-templates-edit.html\",\"

    {{\\'checklist.title.template\\' | translate }}

    {{\\'checklist.title.template.edit\\' | translate }}

    Checklist Template: {{ctrl.checklist.Title}}

    \\\"No

    {{\\'checklist.not.found.process\\' | translate}}

    0\\\">
    {{param.Inspection}}{{param.Specification}}{{param.Frequency}}{{ctrl.getParamTypeReference(param.ValueReference1, param.ValueReference2, param.PatrolResultType)}}
    \");\n$templateCache.put(\"app/checklist/checklists-templates-list.html\",\"

    {{\\'checklist.title\\' | translate }}

    0\\\">
    5\\\">

    \\\"No

    {{\\'checklist.notFoundTemplates\\' | translate}}

    \");\n$templateCache.put(\"app/checklist/copy-template.html\",\"
    \");\n$templateCache.put(\"app/checklist/remark-checklist-version.html\",\"
    \");\n$templateCache.put(\"app/dashboard/dashboard-checklist.html\",\"

    {{\\\"dashboard.panel.checklist.title\\\" | translate}}

    0\\\">

    \\\"No

    {{\\'load.all.checklist.notFound\\' | translate}}

    \");\n$templateCache.put(\"app/dashboard/dashboard-faca.html\",\"

    {{\\\"dashboard.panel.faca.title\\\" | translate}}

    0\\\">

    \\\"No

    {{\\'notFoundFaca\\' | translate}}

    \");\n$templateCache.put(\"app/dashboard/dashboard-future-approvals-documents.html\",\"

    {{\\\"dashboard.panel.future.approvals\\\" | translate}}

    \\\"No

    {{\\'dashboard.document.pending.approval.not.found.msg\\' | translate}}

    \");\n$templateCache.put(\"app/dashboard/dashboard-milestone.html\",\"
    \");\n$templateCache.put(\"app/dashboard/dashboard-next-alert.html\",\"
    \");\n$templateCache.put(\"app/dashboard/dashboard-pda-pending-activities.html\",\"\");\n$templateCache.put(\"app/dashboard/dashboard-pending-approval-documents.html\",\"

    {{\\\"dashboard.panel.document.pending.title\\\" | translate}}

    \\\"No

    {{\\'dashboard.document.pending.approval.not.found.msg\\' | translate}}

    \");\n$templateCache.put(\"app/dashboard/dashboard-pending-review-component.html\",\"
    \");\n$templateCache.put(\"app/dashboard/dashboard-taskcontrol-delay.html\",\"

    {{\\\"dashboard.panel.task.delay.title\\\" | translate}}

    0\\\">

    \\\"No

    {{\\'notFoundTaskDelay\\' | translate}}

    \");\n$templateCache.put(\"app/dashboard/dashboard-taskcontrol.html\",\"

    {{\\\"dashboard.panel.task.title\\\" | translate}} {{index.accesscontrol.teste}}

    0\\\">

    \\\"No

    {{\\'notFoundTask\\' | translate}}

    \");\n$templateCache.put(\"app/dashboard/dashboard-technical-visit.html\",\"
    \");\n$templateCache.put(\"app/dashboard/dashboard.acquisition-risk.html\",\"

    {{\\'title.header.dashboard\\'|translate}}

    \");\n$templateCache.put(\"app/dashboard/dashboard.html\",\"

    {{\\'title.header.dashboard\\'|translate}}

    \");\n$templateCache.put(\"app/dashboard/dashboard.production.filters.html\",\"
    \");\n$templateCache.put(\"app/dashboard/dashboard.production.html\",\"

    {{\\'title.header.dashboard\\'|translate}}

    0\\\">

    {{ctrl.getDailyOccurrenceTitle()}}

    {{daily.Hour}}{{daily.Turn}}{{daily.SectionName}}{{daily.ModelName}}{{daily.VariantCode}}{{ ctrl.currentLocale == \\'pt\\' ? daily.OccurrenceSynthesisPt : daily.OccurrenceSynthesisEn}}{{daily.CreatedByUser}}{{daily.CreatedByGroup}}{{ctrl.getDailyOccurrenceStatus(daily) | translate}}

    \\\"No

    {{\\'dashboard.production.hour.chart.data.not.found.msg\\' | translate}}

    \");\n$templateCache.put(\"app/defects/defects-edit.html\",\"

    {{\\'title.defect.new\\' | translate }}

    {{\\'title.defect.edit\\' | translate }}

    {{\\'title.defect.copy\\' | translate }}

    0\\\" id=copy-template action=ctrl.copyActionButton() icon-class=ic-copy button-text=button.copy> 0)\\\">







    \");\n$templateCache.put(\"app/defects/defects-list.html\",\"

    {{\\'title.defects\\' | translate }}

    0\\\">
    • {{item.Id}}
      {{item.StartDate | date : \\'dd/MM/yyyy\\'}}
      {{item.Week}}
      {{item.Project}}
      {{item.Section}}
      {{item.Station}}
      {{item.DefectType}}
      {{item.Turn}}
      {{\\'defect.status.ongoing\\' | translate}}
      {{\\'defect.status.close\\' | translate}}
      {{item.Quantity}}
    5\\\">

    \\\"No

    {{\\'notFoundDefect\\' | translate}}

    \");\n$templateCache.put(\"app/defects/dialog-close-defects.html\",\"
    0\\\">
    • {{item.Defect}}
      {{item.Week}}
      {{item.StartDate | date : \\'dd/MM/yyyy\\'}}
      {{item.Project}}
      {{item.Section}}
      {{item.Station}}
      {{item.DefectType}}
      {{item.Quantity}}
      {{item.Position}}

    \\\"No

    {{\\'notFoundDefect\\' | translate}}

    \");\n$templateCache.put(\"app/directives/file-upload-userphoto.html\",\"
    \");\n$templateCache.put(\"app/directives/file-upload.html\",\"
    \");\n$templateCache.put(\"app/document_flow/dialog-return-document-flow.html\",\"
    0\\\">
    0 && ctrl.returnTo == 0\\\">
    {{\\'document.flow.return.sub.title\\' | translate }}
    \");\n$templateCache.put(\"app/document_flow/document-flow-edit.html\",\"

    {{\\'document.flow.label.new\\' | translate }}

    0\\\">{{\\'document.flow.label.edit\\' | translate }}

    0\\\">
    • {{ctrl.Reference.Id}} - {{ctrl.Reference.Subject}}
    0\\\">
    • {{ctrl.ContractReference.Id}} - {{ctrl.ContractReference.Vendor}}
    0\\\">
    {{\\'comment.label\\' | translate}}
    {{\\'comment.previous\\' | translate}}
    {{comment.NameLetters}}
    {{ comment.Name }} {{ \\'with_date_time\\'|translate:{date: comment.CreatedDate} }}
    {{ summary.replace(\\'@\\',\\'\\') }} {{ summary }}
    \");\n$templateCache.put(\"app/document_flow/document-flow-list.html\",\"

    {{\\'document.flow.title\\' | translate }}

    0\\\">
    0\\\">
    • {{item.Id}}
      {{ctrl.resolveCategory(item.Category)}}
      {{item.RequestType}}
      {{item.RequestBy}}
      {{item.PendingBy}} -
      {{ctrl.resolveStatus(item.Status)}}
      {{item.DeadLine | date:\\'dd/MM/yyyy\\'}}
    5\\\">
    {{ctrl.totalList}}
    {{ctrl.totalList}}

    \\\"No

    \");\n$templateCache.put(\"app/document_flow/document-flow-solicitation.html\",\"
    \");\n$templateCache.put(\"app/document_flow/document_flow_bank.html\",\"

    \");\n$templateCache.put(\"app/document_flow/document_flow_solicitation_acquisition.html\",\"
    \");\n$templateCache.put(\"app/document_flow/document_flow_solicitation_acquisition_quotation.html\",\"
    0\\\">
    • {{index+1}}
      {{item.Material}}
      {{item.Quantity}}
      {{ctrl.getUnitMeasure(item)}}
      {{ctrl.getProtocol(item)}}
      {{\\'acquisition.label.status.inprogress\\' | translate}}
      {{\\'acquisition.label.status.done\\' | translate}}
      N/A
    \");\n$templateCache.put(\"app/document_flow/document_flow_solicitation_expense.html\",\"
    0\\\">
    • {{ctrl.getTypeExpense(item)}} {{\\\"N/A\\\"}}
      {{item.Quantity}}
      {{item.Value}}
    {{ctrl.SubTotalQtd}}
    {{ctrl.SubTotal}}
    {{ctrl.TotalExpense}}
    \");\n$templateCache.put(\"app/document_flow/document_flow_solicitation_expense_mileage.html\",\"
    0\\\">
    • {{\\'with_date\\'|translate:{date: item.SolicitationDate } }} {{ item.SolicitationHour }}
      {{item.Origin}}
      {{item.Destiny}}
      {{item.StartKm}}
      {{item.EndKm}}
      {{item.Total}}
    {{ctrl.SubTotal}} Km
    R$ {{ctrl.TotalExpense}}
    \");\n$templateCache.put(\"app/document_flow/document_flow_solicitation_financial.html\",\"
    {{\\'solicitation.alert.payment.day\\' | translate}}
    \");\n$templateCache.put(\"app/document_flow/document_flow_solicitation_financial_cash.html\",\"

  • \");\n$templateCache.put(\"app/document_flow/document_flow_solicitation_financial_mileage.html\",\"
    \");\n$templateCache.put(\"app/document_flow/document_flow_solicitation_financial_refund.html\",\"
    \");\n$templateCache.put(\"app/document_flow/document_flow_solicitation_fiscal.html\",\"

    \");\n$templateCache.put(\"app/document_flow/document_flow_solicitation_fiscal_customs_expenses.html\",\"
    \");\n$templateCache.put(\"app/document_flow/document_flow_solicitation_fiscal_customs_expenses_po.html\",\"
    0\\\">
    • {{item.Description}}
      {{item.NrProcess}}
      R$ {{ctrl.getValuePO(item)}}
    0\\\">
    R$ {{ctrl.document.SolicitationFiscal.ValueTotal}}
    \");\n$templateCache.put(\"app/document_flow/document_flow_solicitation_fiscal_service.html\",\"
    \");\n$templateCache.put(\"app/document_flow/document_flow_solicitation_fiscal_service_po.html\",\"
    0\\\">
    • {{item.Description}}
      R$ {{ctrl.getValuePO(item)}}
      {{item.PO}}
      {{item.Item}}
    0\\\">
    R$ {{ctrl.document.SolicitationFiscal.ValueTotal}}
    \");\n$templateCache.put(\"app/faca/faca-edit.html\",\"

    {{\\'title.newFaca\\' | translate }}

    {{\\'title.editFaca\\' | translate }}



    {{\\'header.problem.issue\\' | translate}}

    \\\"No

    {{\\'label.notfound.problem_issue\\' | translate}}

    0\\\">
    {{\\'header.problem.issue\\' | translate}}
    \");\n$templateCache.put(\"app/faca/faca-list.html\",\"

    {{\\'title.faca\\' | translate }}

    {{\\'label.faca\\' | translate }}

    0\\\">
    • {{item.Id}}
      {{item.StartDate | date : \\'dd/MM/yyyy\\'}}
      {{item.Week}}
      {{item.CreatedBy}}
    5\\\">

    \\\"No

    {{\\'notFoundFaca\\' | translate}}

    \");\n$templateCache.put(\"app/financial/financial-approval-attachments.html\",\"\");\n$templateCache.put(\"app/financial/financial-approval.html\",\"
    0\\\">
    • {{item.Subject}}
      {{item.RequestType}}
      {{item.RequestBy}}
      {{\\'with_date\\'|translate:{date: item.DeadLine } }}
      {{ \\'with_date\\'|translate:{date: item.SolicitationApproval.Expiration } }}
      {{ \\'with_date\\'|translate:{date: item.SolicitationApproval.PaymentDate } }}
      {{ \\'with_date_time\\'|translate:{date: item.DateApprovalProcessing } }}
      {{item.SolicitationApproval.Value | number:2}}

    \\\"No

    \");\n$templateCache.put(\"app/financial/financial-doc.html\",\"

    {{\\'financial.presentation.label\\' | translate }}

    \");\n$templateCache.put(\"app/financial/financial-edit.html\",\"

    {{ctrl.label | translate}}

    {{\\'title.financial.new\\' | translate }}

    0\\\">{{\\'title.financial.edit\\' | translate }}

    0\\\">
    \");\n$templateCache.put(\"app/financial/financial-list.html\",\"

    {{\\'title.financial\\' | translate }}

    0\\\">
    5\\\">
    {{ctrl.totalLista}}
    {{ctrl.totalLista}}

    \\\"No

    {{\\'financial.list.notfound\\' | translate}}

    \");\n$templateCache.put(\"app/financial/financial-pending-payments.html\",\"

    {{\\'title.financial\\' | translate }}

    0\\\" header=financial.title.approval.attachments is-open=true>
    \");\n$templateCache.put(\"app/fiscal/dialog-return-approval.html\",\"
    0\\\">
    0 && ctrl.returnTo == 0\\\">
    {{\\'document.flow.return.sub.title\\' | translate }}
    \");\n$templateCache.put(\"app/help/help-account-change-password.html\",\"

    Help

    {{\\'title.change.password\\' | translate}}


    \");\n$templateCache.put(\"app/help/help-account-change-photo.html\",\"

    Help

    {{\\'title.change.photo\\' | translate}}


    \");\n$templateCache.put(\"app/help/help-approval-create.html\",\"

    Help

    {{\\'document.flow.title\\' | translate}}


    \");\n$templateCache.put(\"app/help/help-basic-type-create.html\",\"

    Help

    {{\\'label.basic\\' | translate}}


    \");\n$templateCache.put(\"app/help/help-blocked-material-close.html\",\"

    Help

    {{\\'title.close.group.email.blocked.material\\' | translate}}


    \");\n$templateCache.put(\"app/help/help-blocked-material-create.html\",\"

    Help

    {{\\'title.create.blocked.material\\' | translate}}


    \");\n$templateCache.put(\"app/help/help-checklist-create.html\",\"

    Help

    {{\\'title.create.approve.checklist\\' | translate}}


    \");\n$templateCache.put(\"app/help/help-checklist-template.html\",\"

    Help

    {{\\'title.create.template.checklist\\' | translate}}


    \");\n$templateCache.put(\"app/help/help-create-alert.html\",\"

    Help

    {{\\'title.alert\\' | translate}}


    \");\n$templateCache.put(\"app/help/help-create-component-development.html\",\"

    Help

    {{\\'title.component.development\\' | translate}}


    \");\n$templateCache.put(\"app/help/help-create-contract.html\",\"

    Help

    {{\\'title.contract\\' | translate}}


    \");\n$templateCache.put(\"app/help/help-create-financial.html\",\"

    Help

    {{\\'title.financial\\' | translate}}


    \");\n$templateCache.put(\"app/help/help-create-milestone.html\",\"

    Help

    {{\\'milestone.label.milestone\\' | translate}}


    \");\n$templateCache.put(\"app/help/help-create-sgi.html\",\"

    Help

    {{\\'title.sgi\\' | translate}}


    \");\n$templateCache.put(\"app/help/help-create-sourcing.html\",\"

    Help

    {{\\'title.sourcing\\' | translate}}


    \");\n$templateCache.put(\"app/help/help-create-supplier-evaluation.html\",\"

    Help

    {{\\'vendor.avaliation.tab.label\\' | translate}}


    \");\n$templateCache.put(\"app/help/help-create-technical-visit.html\",\"

    Help

    {{\\'vendor.visit.tab.label\\' | translate}}


    \");\n$templateCache.put(\"app/help/help-dashboard.html\",\"

    Help

    {{\\'title.dashboard\\' | translate}}


    \");\n$templateCache.put(\"app/help/help-defect-create.html\",\"

    Help

    {{\\'label.defects\\' | translate}}


    \");\n$templateCache.put(\"app/help/help-faca-create.html\",\"

    Help

    FA/CA


    \");\n$templateCache.put(\"app/help/help-forgot.html\",\"

    Help

    {{\\'title.forgot\\' | translate}}


    \");\n$templateCache.put(\"app/help/help-iqc-create.html\",\"

    Help

    {{\\'title.create.approve.iqc\\' | translate}}


    \");\n$templateCache.put(\"app/help/help-iqc-template.html\",\"

    Help

    {{\\'title.create.template.iqc\\' | translate}}


    \");\n$templateCache.put(\"app/help/help-kpi-create.html\",\"

    Help

    {{\\'title.kpi\\' | translate}}


    \");\n$templateCache.put(\"app/help/help-logistics-import.html\",\"

    Help

    {{\\'title.logistics\\' | translate}}


    \");\n$templateCache.put(\"app/help/help-oqc-oba-create.html\",\"

    Help

    OQC/OBA


    \");\n$templateCache.put(\"app/help/help-ort-create.html\",\"

    Help

    {{\\'title.create.approve.ort\\' | translate}}


    \");\n$templateCache.put(\"app/help/help-ort-template.html\",\"

    Help

    {{\\'title.create.template.ort\\' | translate}}


    \");\n$templateCache.put(\"app/help/help-pdca-create.html\",\"

    Help

    {{\\'title.pdca\\' | translate}}


    \");\n$templateCache.put(\"app/help/help-preferences.html\",\"

    Help

    {{\\'title.preferences\\' | translate}}


    \");\n$templateCache.put(\"app/help/help-production-plan-create.html\",\"

    Help

    {{\\'title.production.plan\\' | translate}}


    \");\n$templateCache.put(\"app/help/help-profile-create.html\",\"

    Help

    {{\\'title.create.profile\\' | translate}}


    \");\n$templateCache.put(\"app/help/help-settings-create.html\",\"

    Help

    {{\\'label.settings\\' | translate}}


    \");\n$templateCache.put(\"app/help/help-signin.html\",\"

    Help

    {{\\'title.signin\\' | translate}}


    \");\n$templateCache.put(\"app/help/help-singout.html\",\"

    Help

    {{\\'title.signout\\' | translate}}


    \");\n$templateCache.put(\"app/help/help-task-approval.html\",\"

    Help

    {{\\'title.approval.task\\'| translate}}


    \");\n$templateCache.put(\"app/help/help-task-cancel.html\",\"

    Help

    {{\\'title.cancel.reject.task\\'| translate}}


    \");\n$templateCache.put(\"app/help/help-task-closed.html\",\"

    Help

    {{\\'title.close.task\\'| translate}}


    \");\n$templateCache.put(\"app/help/help-task-create.html\",\"

    Help

    {{\\'title.create.task\\'| translate}}


    \");\n$templateCache.put(\"app/help/help-users-create.html\",\"

    Help

    {{\\'title.create.user.group\\' | translate}}


    \");\n$templateCache.put(\"app/help/help-view-kpi.html\",\"

    Help

    {{\\'title.kpi\\' | translate}}


    \");\n$templateCache.put(\"app/help/menu-help.html\",\"\");\n$templateCache.put(\"app/iqc/iqc-tabs.html\",\"\");\n$templateCache.put(\"app/kpi/kpi-doc.html\",\"

    {{\\'kpi.presentation.label\\' | translate }}

    \");\n$templateCache.put(\"app/kpi/kpi-edit.html\",\"

    {{\\'kpi.new.label\\' | translate }}

    0\\\">{{\\'kpi.edit.label\\' | translate }}

    \");\n$templateCache.put(\"app/kpi/kpi-list.html\",\"

    {{\\'title.kpi.complete\\' | translate }}

    {{\\'title.kpi\\' | translate }}

    \");\n$templateCache.put(\"app/modal/info-modal.back.html\",\"
    \");\n$templateCache.put(\"app/modal/info-modal.html\",\"\");\n$templateCache.put(\"app/notification/notification-list.html\",\"

    {{\\'notifications.labels.title\\' | translate }}

    {{ \\'notifications.labels.empty\\' | translate }}
    0\\\">
    \");\n$templateCache.put(\"app/oqc_oba/oqc-oba-edit.html\",\"

    {{\\'title.oqc.oba.new\\' | translate }}

    {{\\'title.oqc.oba.edit\\' | translate }}

    {{(ctrl.oqcOba.OqcObaInspections | filter: {Type: ctrl.OqcObaType.OBA, Serial: ctrl.filterObaModel}).length}}
    {{(ctrl.oqcOba.OqcObaInspections | filter: {Type: ctrl.OqcObaType.OQC, Serial: ctrl.filterOqcModel}).length}}
    0\\\">
    • {{item.Serial}}
      {{item.Description}}
      {{ctrl.getInspectResultTypeLabel(item.Type) | translate}}
      {{\\\"N/A\\\"}}
    \");\n$templateCache.put(\"app/oqc_oba/oqc-oba-list.html\",\"

    {{\\'title.oqc.oba.complete\\' | translate }}

    {{\\'title.oqc.oba\\' | translate }}

    \");\n$templateCache.put(\"app/ort/ort-tabs.html\",\"\");\n$templateCache.put(\"app/pdca/pdca-list.html\",\"

    {{\\'title.pdca.complete\\' | translate }}

    {{\\'title.pdca\\' | translate }}

    \\\"No

    {{\\'label.pdca.load.all.notFound\\' | translate}}

    0\\\">
    0\\\">
    • {{item.Id}}
      {{ctrl.getFormatedDate(item.Date)}}
      \\\"\\\" {{ctrl.getStatusName(item.Status) | translate}}
    5\\\">
    \");\n$templateCache.put(\"app/permissions/permission-tabs.html\",\"\");\n$templateCache.put(\"app/preferences/approval-reservation-edit.html\",\"
    \");\n$templateCache.put(\"app/preferences/preferences-edit.html\",\"

    {{\\'title.preferences\\' | translate }}

    0\\\" dnd-draggable=dashboard dnd-effect-allowed=move dnd-moved=\\\"ctrl.listDashboard.splice($index, 1)\\\" dnd-disable-if=\\\"dashboard.Id == undefined\\\" dnd-dragend=ctrl.orderedDashboard() class=table-body dnd-dragstart=ctrl.dragstart()>
    • {{dashboard.OrderDashboard}}
      {{dashboard.Title | translate}}
    \");\n$templateCache.put(\"app/production_plan/production-plan-edit.html\",\"

    {{\\'label.new.production.plan\\' | translate }}

    0\\\">{{\\'label.edit.production.plan\\' | translate }}

    {{ctrl.productionPlan.Section.Title}} - {{ctrl.productionPlan.Turn.Title}}
    {{ctrl.productionPlan.Model.Title}}{{ctrl.productionPlan.Variant.Code}}{{ \\'with_date\\'|translate:{date: ctrl.productionPlan.StartDate } }}

    Scrap
    {{control.Hour}}{{control.Planned}} {{\\'button.add\\' | translate }} {{\\'button.add\\' | translate }}
    \");\n$templateCache.put(\"app/production_plan/production-plan-list.html\",\"

    {{\\'title.production.plan\\' | translate }}

    0\\\">
    0\\\">
    • Id {{item.Id}}
      {{item.Model}}
      {{item.Variant}}
      {{item.StartDate | date:\\'dd/MM/yyyy\\' }}
      {{item.Planned}}
      {{item.Realized}}
      {{item.Section}}
      {{item.Turn}}
      {{\\'production.plan.ongoing\\' | translate}}
      {{\\'production.plan.close\\' | translate}}
    5\\\">

    \\\"No

    {{\\'production.plan.not.found\\' | translate}}

    \");\n$templateCache.put(\"app/production_plan/production-plan-section.html\",\"

    {{\\'title.production.plan\\' | translate }}

    Choose the section

    Choose the shift

    \");\n$templateCache.put(\"app/report/main-report.html\",\"

    {{\\'title.main.report\\' | translate }}

    \");\n$templateCache.put(\"app/settings/settings-tabs.html\",\"\");\n$templateCache.put(\"app/sourcing/sourcing-tabs.html\",\"\");\n$templateCache.put(\"app/sourcing/vendor-tabs.html\",\"\");\n$templateCache.put(\"app/task/newtask.html\",\"











    0\\\">

    0\\\">

    {{\\'toDO\\'| translate}}

    {{\\'onGoing\\'| translate}}

    {{\\'closed\\'| translate}}

    {{\\'archived\\'| translate}}


    \");\n$templateCache.put(\"app/task/taskarchived.html\",\"

    {{\\'title.taskControl\\' | translate }}

    \\\"No

    {{\\'notFoundTask\\' | translate}}

    0\\\">
    5\\\">
    \");\n$templateCache.put(\"app/task/tasklist.html\",\"

    {{\\'title.taskControl\\' | translate }}

    {{controller.taskToDoTotalLista}} {{\\'toDO\\' | translate | uppercase}}

    \\\"No

    {{\\'notFoundTask\\' | translate}}

    5\\\">

    {{controller.taskOnGoingTotalLista}} {{\\'onGoing\\' | translate | uppercase}}

    \\\"No

    {{\\'notFoundTask\\' | translate}}

    5\\\">

    {{controller.taskClosedTotalLista}} {{\\'closed\\' | translate | uppercase}}

    \\\"No

    {{\\'notFoundTask\\' | translate}}

    5\\\">
    \");\n$templateCache.put(\"app/Util/directives/tag.html\",\"
    • {{item.Number}}
    \");\n$templateCache.put(\"app/acquisition/acquisition-risk/acquisition-risk-edit.html\",\"

    {{\\'acquisition.risk.label.new\\' | translate }}

    0\\\">{{\\'acquisition.risk.label.edit\\' | translate }}

    {{\\'comment.label\\' | translate}}

    \\\"No

    {{\\'acquisition.risk.msg.noCommentsFound\\' | translate}}

    0\\\">{{\\'comment.previous\\' | translate}}
    {{\\'acquisition.risk.label.filterByInvoice\\' | translate}}
    {{comment.NameLetters}}
    {{ comment.CreatedBy.Name }} {{ \\'with_date_time\\'|translate:{date: comment.CreatedDate} }}
    {{\\'acquisition.risk.label.invoice\\' | translate}} {{comment.Invoice}} - N/A ETD {{comment.EtdDateTemp}} - N/A ETA {{comment.EtaDateTemp}} - N/A ETAF {{comment.EtafDateTemp}} - N/A
    {{comment.Comments ? comment.Comments : \\'N/A\\'}}
    \");\n$templateCache.put(\"app/acquisition/acquisition-risk/acquisition-risk-list-data.html\",\"
    0\\\">
    {{ \\'acquisition.risk.label.id\\' | translate }}
    {{ \\'acquisition.risk.label.category\\' | translate }}
    {{ \\'acquisition.risk.label.material\\' | translate }}
    {{ \\'acquisition.risk.label.description\\' | translate }}
    {{ \\'acquisition.risk.label.purchaseOrder\\' | translate }}
    {{ \\'acquisition.risk.label.buyer\\' | translate }}
    {{ \\'acquisition.risk.label.project\\' | translate }}
    {{ \\'acquisition.risk.label.status\\' | translate }}
    • {{ \\'acquisition.risk.label.id\\' | translate }} {{item.Id}}
      {{ \\'acquisition.risk.label.category\\' | translate }} {{ctrl.resolveCategoryName(item.Category)}}
      {{ \\'acquisition.risk.label.material\\' | translate }} {{item.Material}} N/A
      {{ \\'acquisition.risk.label.description\\' | translate }} {{item.Description}} N/A
      {{ \\'acquisition.risk.label.purchaseOrder\\' | translate }} {{item.PurchaseOrder}} N/A
      {{ \\'acquisition.risk.label.buyer\\' | translate }} {{item.Buyer}}
      {{ \\'acquisition.risk.label.project\\' | translate }} {{ctrl.getProjectValue(item.Project)}}
      {{ \\'acquisition.risk.label.status\\' | translate }} {{\\'acquisition.risk.label.noresolved\\' | translate}} {{\\'acquisition.risk.label.resolved\\' | translate}}
      0\\\">
      {{\\'acquisition.risk.label.invoice\\' | translate}} {{comment.Invoice}} -
      {{\\'acquisition.risk.label.etd\\' | translate}} {{comment.EtdDateTemp}} -
      {{\\'acquisition.risk.label.eta\\' | translate}} {{ comment.EtaDateTemp }} -
      {{\\'acquisition.risk.label.etaf\\' | translate}} {{ comment.EtafDateTemp }} -
      {{comment.Comments}}
    5\\\">
    {{ctrl.totalLista}}
    {{ctrl.totalLista}}

    \\\"No

    {{\\'acquisition.risk.msg.noDataFound\\' | translate}}

    {{\\'acquisition.risk.msg.toCreateANewOne\\' | translate}}

    \");\n$templateCache.put(\"app/acquisition/acquisition-risk/acquisition-risk-list.html\",\"

    {{\\'title.acquisition\\' | translate }}

    \");\n$templateCache.put(\"app/acquisition/report/report-tabs.html\",\"\");\n$templateCache.put(\"app/acquisition/risks/acquisition-risks-edit.html\",\"

    {{\\'acquisition.risks.title\\' | translate }}

    \");\n$templateCache.put(\"app/acquisition/risks/risk-tabs.html\",\"\");\n$templateCache.put(\"app/alert/component/alert-email-notification.html\",\"
    ()\\\\[\\\\]\\\\\\\\.,;:\\\\s@\\\"]+(\\\\.[^<>()\\\\[\\\\]\\\\\\\\.,;:\\\\s@\\\"]+)*)|(\\\".+\\\"))@((\\\\[[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}])|(([a-zA-Z\\\\-0-9]+\\\\.)+[a-zA-Z]{2,}))$/\\' uib-typeahead=\\\"item as item.Email for item in ctrl.listEmail | filter:{Email:$viewValue}\\\" typeahead-template-url=typeHeadEmailTemplate.html typeahead-on-select=ctrl.itemClicked() typeahead-min-length=1 clearable clearable-model=ctrl.model ng-model=ctrl.model placeholder=\\\"{{\\'input.email.directive.placeholder\\' | translate}}\\\" autocomplete=off ng-required=ctrl.isRequired>
    0\\\">
    0\\\" class=table-body>
    • {{target.ExternalEmail.Email}}

    \\\"No

    \");\n$templateCache.put(\"app/block_material/directive/blocked-material-code.html\",\"
    \");\n$templateCache.put(\"app/block_material/directive/blocked-material-vendor.html\",\"
    \");\n$templateCache.put(\"app/block_material/emailGroup/blocked-material-email-group.html\",\"

    {{\\'title.block.material\\' | translate }}

    \");\n$templateCache.put(\"app/checklist/process/control-param-form.html\",\"
    • {{\\'checklist.label.lessThan\\' | translate}}
    • {{\\'checklist.label.greaterThan\\' | translate}}
    • {{\\'checklist.label.range\\' | translate}}
    • {{\\'checklist.label.equalTo\\' | translate}}
    • {{\\'checklist.label.okNok\\' | translate}}
    \");\n$templateCache.put(\"app/checklist/process/process-form.html\",\"
    \");\n$templateCache.put(\"app/dashboard/directive/prod-plan-chart-line.html\",\"

    \");\n$templateCache.put(\"app/document_flow/document_flow_notification/document-flow-notification.html\",\"
    ()\\\\[\\\\]\\\\\\\\.,;:\\\\s@\\\"]+(\\\\.[^<>()\\\\[\\\\]\\\\\\\\.,;:\\\\s@\\\"]+)*)|(\\\".+\\\"))@((\\\\[[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}])|(([a-zA-Z\\\\-0-9]+\\\\.)+[a-zA-Z]{2,}))$/\\' uib-typeahead=\\\"item as item.Email for item in ctrl.listEmail | filter:{Email:$viewValue}\\\" typeahead-template-url=typeHeadEmailTemplate.html typeahead-on-select=ctrl.itemClicked() typeahead-min-length=1 clearable clearable-model=ctrl.model ng-model=ctrl.model placeholder=\\\"{{\\'input.email.directive.placeholder\\' | translate}}\\\" autocomplete=off ng-required=ctrl.isRequired>
    0\\\">
    0\\\" class=table-body>
    • {{target.ExternalEmail.Email}}
      {{ctrl.getTitleRole(target.Role)}}
      {{target.ProcessingDate| date: \\'dd/MM/yyyy HH:mm\\'}}

    \\\"No

    \");\n$templateCache.put(\"app/document_flow/document_flow_remark/document-flow-remark.html\",\"
    \");\n$templateCache.put(\"app/document_flow/document_flow_target/document-flow-target.html\",\"
    0\\\">
    0\\\" dnd-draggable=target dnd-effect-allowed=move dnd-moved=\\\"ctrl.listTarget.splice($index, 1)\\\" dnd-disable-if=\\\"target.Status != 0\\\" dnd-dragend=ctrl.orderedList(target) class=table-body dnd-dragstart=ctrl.dragstart()>
    • {{target.OrderTarget}}
      {{target.User.Name}} ({{target.User.Email}})
      {{ctrl.getTitleRole(target.Role)}}
      {{ctrl.getTitleStatus(target.Status)}}
      {{target.ReceiveDate| date: \\'dd/MM/yyyy HH:mm\\'}}
      {{target.ProcessingDate| date: \\'dd/MM/yyyy HH:mm\\'}}
      {{target.LeadTime}}

    \\\"No

    \");\n$templateCache.put(\"app/faca/problem/problem-add.html\",\"

    \");\n$templateCache.put(\"app/faca/problem/problem-edit.html\",\"

    {{\\'title.faca.problem.new\\' | translate }}

    {{\\'title.faca.problem.edit\\' | translate }}

    {{ \\'editFaca.header.faca\\' | translate }} {{ ctrl.faca.Title }}
    {{ \\'editFaca.header.problem\\' | translate }} {{ ctrl.faca.Problem.Title }}
    \");\n$templateCache.put(\"app/financial/directives/financial-remark.html\",\"
    \");\n$templateCache.put(\"app/financial/directives/financial-solicitation.html\",\"
    \");\n$templateCache.put(\"app/financial/directives/financial-upload.html\",\"
    0\\\">
    \");\n$templateCache.put(\"app/fiscal/fiscal-main/fiscal-main.html\",\"

    {{\\'title.fiscal\\' | translate }}

    0\\\">
    • {{item.IdApproval}}
      {{item.ApprovalDescription}}
      {{ctrl.resolveStatus(item.StatusApproval)}}
      {{ \\'with_date\\'|translate:{date: item.CreatedDate } }}
      {{ \\'with_date\\'|translate:{date: item.DeadlineDate } }}
      {{\\'fiscal.table.status.peding\\' | translate}} {{\\'fiscal.table.status.registeredSap\\' | translate}}
    5\\\">
    {{ctrl.totalLista}}
    {{ctrl.totalLista}}

    \\\"No

    {{\\'fiscal.list.notfound\\' | translate}}

    \");\n$templateCache.put(\"app/fiscal/service-invoice/itens-customs-invoice.html\",\"
    • {{item.Description}}
      R$ {{ctrl.getValuePO(item)}}
      {{item.NrProcess}}
    0\\\">
    R$ {{ctrl.document.SolicitationFiscal.ValueTotal}}
    \");\n$templateCache.put(\"app/fiscal/service-invoice/itens-service-invoice.html\",\"
    • {{item.Description}}
      R$ {{ctrl.getValuePO(item)}}
      {{item.PO}}
      {{item.Item}}
    0\\\">
    R$ {{ctrl.document.SolicitationFiscal.ValueTotal}}
    \");\n$templateCache.put(\"app/fiscal/service-invoice/service-invoice.html\",\"

    {{\\'fiscal.invoice.title\\' | translate }}

    0\\\">
    0\\\">
    \");\n$templateCache.put(\"app/iqc/part/part-edit.html\",\"

    {{\\'part.new.label\\' | translate }}

    0\\\">{{\\'part.edit.label\\' | translate }}

    \\\" off=\\\"\\\" ng-model=ctrl.part.SafetyComponent onstyle=\\\"btn-default aqms-btn-default\\\" offstyle=\\\"btn-default aqms-btn-default\\\" size=btn-sm>
    0\\\">
    {{ctrl.part.CurrentPartInspectionTemplate.Version}}
    0\\\">

    \\\"No

    {{\\'listview.directive.no.items.found\\' | translate}}

    0)}}\\\" delete-action=ctrl.deleteInspectionType(templateType) add-action=ctrl.openAddSubtypes(templateType) add-btn-label=part.add.inspection.sub.type.label delete-btn-label=\\\"{{templateType.SequenceNumber + \\'. \\' + templateType.PartInspectionType.Title}}\\\">
    0\\\">
    • {{templateItem.SequenceNumber}}
      {{templateItem.PartInspectionTemplateSubType.Title}}
      {{templateItem.PartInspectionRule.Title}}
      {{templateItem.UnitMeasurement}}
      {{templateItem.Description}}
    \");\n$templateCache.put(\"app/iqc/part/part-list.html\",\"

    {{\\'title.iqc.complete\\' | translate }}

    {{\\'title.iqc\\' | translate }}

    0\\\">
    0\\\">
    • {{ctrl.resolveActive(item.CsActive)}}
    5\\\">

    \\\"No

    \");\n$templateCache.put(\"app/iqc/part-inspection/part-inspection-edit.html\",\"

    {{\\'part.inspection.new.label\\' | translate }}

    0\\\">{{\\'part.inspection.edit.label\\' | translate }}

    {{ctrl.inspection.IqcNumber}}
    0\\\">
    0\\\">
    • {{lotItem.Date}} {{\\\"N/A\\\"}}
      {{lotItem.Code}} {{\\\"N/A\\\"}}
    0\\\">
    0\\\">
    • {{item.Description}}
      {{item.PartInspectionRule.Value}}
      {{ctrl.getMetricValue(item, ctrl.MetricType.MeanMetric)}}
      {{ctrl.getMetricValue(item, ctrl.MetricType.StdevMetric)}}
      {{ctrl.getMetricValue(item, ctrl.MetricType.RangeMetric)}}
      {{ctrl.getMetricValue(item, ctrl.MetricType.CpMetric)}}
      {{ctrl.getMetricValue(item, ctrl.MetricType.CpkMetric)}}
      {{ctrl.getMetricValue(item, ctrl.MetricType.OK)}}%
      {{ctrl.getMetricValue(item, ctrl.MetricType.NOK)}}%

    \\\"No

    0\\\">
    \");\n$templateCache.put(\"app/iqc/part-inspection/part-inspection-list.html\",\"

    {{\\'title.iqc.complete\\' | translate }}

    {{\\'title.iqc\\' | translate }}

    0\\\">
    0\\\">
    • {{item.Date | date:\\'dd/MM/yyyy\\'}}
      {{(item.ApprovalDate != null && item.ApprovalDate != \\'0001-01-01T00:00:00\\') ? (item.ApprovalDate | date:\\'dd/MM/yyyy\\') : \\'N/A\\'}}
      {{ctrl.resolveStatus(item.Status)}}
    5\\\">

    \\\"No

    \");\n$templateCache.put(\"app/logistics/import/import-error.html\",\"
    • {{item.RowNum}}
      {{item.ColumnName}}
      {{item.ErrorMessage | translate}}
    {{ctrl.totalLista}}
    \");\n$templateCache.put(\"app/logistics/import/logistics-import-list.html\",\"

    {{\\'title.logistics\\' | translate }}

    0\\\">
    • {{item.Id}}
      {{ctrl.getType(item.Type).Title | translate}}
      {{item.Year}}
      {{item.UserName}}
      {{ \\'with_date_time\\'|translate:{date: item.Date } }}
      {{item.StatusDescription | translate}}
    5\\\">
    {{ctrl.totalLista}}
    {{ctrl.totalLista}}

    \\\"No

    {{\\'logistc.freight.cost.worksheet.notfound\\' | translate}}

    \");\n$templateCache.put(\"app/logistics/kpi/logistics-kpi-list.html\",\"

    {{\\'title.logistics\\' | translate }}

    0\\\">
    - {{ctrl.FrequencyTypeHeader | translate}}
    • {{ctrl.getFrequency(item.Frequency)}}
      {{item.FOBUSD | currency:\\\"\\\" }}
      {{item.FreightUSD | currency:\\\"\\\" }}
      {{item.FreightPercent}}
      {{item.ClearanceUSD | currency:\\\"\\\" }}
      {{item.ClearancePercent}}
      {{item.LandedUSD | currency:\\\"\\\" }}
      {{item.LandedPercent}}
    {{ctrl.Accumulated.FOBUSD | currency:\\\"\\\" }}
    {{ctrl.Accumulated.FreightUSD | currency:\\\"\\\" }}
    {{ctrl.Accumulated.FreightPercent}}
    {{ctrl.Accumulated.ClearanceUSD | currency:\\\"\\\" }}
    {{ctrl.Accumulated.ClearancePercent}}
    {{ctrl.Accumulated.LandedUSD | currency:\\\"\\\" }}
    {{ctrl.Accumulated.LandedPercent}}
    5\\\">
    {{ctrl.totalLista}}
    {{ctrl.totalLista}}

    \\\"No

    {{\\'logistic.kpi.list.notfound\\' | translate}}

    \");\n$templateCache.put(\"app/modal/change-business/change-business.html\",\"

    {{\\'msg.change.business.warn.dialog\\' | translate}}

    \");\n$templateCache.put(\"app/notification/notification-button/notification-button.html\",\"
  • \");\n$templateCache.put(\"app/oqc_oba/directive/div-input-list-oqc-oba.html\",\"
    0\\\">
    {{ctrl.valueToShow(item)}}
    \");\n$templateCache.put(\"app/ort/ort-inspection/ort-inspection-edit.html\",\"

    {{\\'ort.inspection.new.label\\' | translate }}

    0\\\">{{\\'ort.inspection.edit.label\\' | translate }}

    {{ctrl.inspection.OrtNumber}}
    0\\\">
    0\\\">
    • {{lotItem.Date}} {{\\\"N/A\\\"}}
      {{lotItem.Code}} {{\\\"N/A\\\"}}
    0\\\">
    0\\\">
    0\\\">
    • {{item.Description}}
      {{item.TestInspectionRule.Value}}
      {{::ctrl.getMetricValue(item, ctrl.MetricType.INSPECT)}}
      {{::ctrl.getMetricValue(item, ctrl.MetricType.OK)}}%
      {{::ctrl.getMetricValue(item, ctrl.MetricType.NOK)}}%
      {{::ctrl.getMetricValue(item, ctrl.MetricType.CONCLUSION)}}%

    \\\"No

    0\\\">
    \");\n$templateCache.put(\"app/ort/ort-inspection/ort-inspection-list.html\",\"

    {{\\'title.ort.complete\\' | translate }}

    {{\\'title.ort\\' | translate }}

    0\\\">
    0\\\">
    • {{ctrl.resolveStatus(item.Status)}}
    5\\\">

    \\\"No

    \");\n$templateCache.put(\"app/ort/ort-template/ort-edit.html\",\"

    {{\\'ort.new.label\\' | translate }}

    0\\\">{{\\'ort.edit.label\\' | translate }}

    0\\\">
    {{ctrl.ort.CurrentOrtInspectionTemplate.Version}}
    0\\\">

    \\\"No

    {{\\'listview.directive.no.items.found\\' | translate}}

    0)}}\\\" delete-action=ctrl.deleteInspectionType(templateType) add-action=ctrl.openAddSubtypes(templateType) add-btn-label=ort.add.inspection.sub.type.label delete-btn-label=\\\"{{templateType.SequenceNumber + \\'. \\' + templateType.TestInspectionType.Title}}\\\">
    0\\\">
    • {{templateItem.SequenceNumber}}
      {{templateItem.TestInspectionSubType.Title}}
      {{templateItem.TestInspectionRule.Title}}
      {{templateItem.UnitMeasurement}}
      {{templateItem.Description}}
    \");\n$templateCache.put(\"app/ort/ort-template/ort-list.html\",\"

    {{\\'title.ort.complete\\' | translate }}

    {{\\'title.ort\\' | translate }}

    0\\\">
    0\\\">
    5\\\">

    \\\"No

    \");\n$templateCache.put(\"app/pdca/check-act/pdca-edit-check.html\",\"

    {{\\'label.new.pdca\\' | translate }}

    0\\\">{{\\'label.edit.pdca\\' | translate }}

    PDCA - {{ctrl.pdca.Title}}
    {{\\\"label.pdca.cycle\\\" | translate}} - {{ctrl.pdca.Cycle}}
    0)\\\">
    \");\n$templateCache.put(\"app/pdca/do/pdca-edit-do.html\",\"

    {{\\'label.new.pdca\\' | translate }}

    0\\\">{{\\'label.edit.pdca\\' | translate }}

    PDCA - {{ctrl.pdca.Title}}
    {{\\\"label.pdca.cycle\\\" | translate}} - {{ctrl.pdca.Cycle}}
    0)\\\">
    0)\\\" form-obj=formPdcaPlan>
    \");\n$templateCache.put(\"app/pdca/identification/pdca-edit-identification.html\",\"

    {{\\'label.new.pdca\\' | translate }}

    0\\\">{{\\'label.edit.pdca\\' | translate }}

    PDCA - {{ctrl.pdca.Title}}
    {{\\\"label.pdca.cycle\\\" | translate}} - {{ctrl.pdca.Cycle}}
    0)\\\">

    \");\n$templateCache.put(\"app/pdca/task/pdca-task.html\",\"
    0\\\">
    • {{item.Title}}
      {{item.User.Name}}
      {{item.Deadline}}
      {{ctrl.getStatusDescription(item.Status) | translate}}
      {{item.Cycle}}
      {{\\\"N/A\\\"}}
    \");\n$templateCache.put(\"app/pdca/plan/pdca-edit-plan.html\",\"

    {{\\'label.new.pdca\\' | translate }}

    0\\\">{{\\'label.edit.pdca\\' | translate }}

    PDCA - {{ctrl.pdca.Title}}
    {{\\\"label.pdca.cycle\\\" | translate}} - {{ctrl.pdca.Cycle}}
    0)\\\">
    0)\\\" form-obj=formPdcaPlan>
    0)\\\" form-obj=formPdcaPlan>
    1
    2
    3
    4
    5
    1
    2
    3
    4
    5
    0\\\">
    0\\\">
    \");\n$templateCache.put(\"app/permissions/group/group-edit.html\",\"

    {{\\'dri.btn.new.group\\' | translate }}

    {{\\'dri.btn.edit.group\\' | translate }}

    \");\n$templateCache.put(\"app/permissions/group/group-list.html\",\"

    {{\\'label.permission\\' | translate }}

    \\\"No

    {{\\'dri.group.load.all.notFound\\' | translate}}

    0\\\">
    0\\\">
    5\\\">
    \");\n$templateCache.put(\"app/permissions/profile/profile-edit.html\",\"

    {{\\'permission.profile.btn.new.label\\' | translate }}

    {{\\'permission.profile.btn.edit.label\\' | translate }}

    0\\\">
    • {{item.Module.Placeholder | translate}}
      \\\" off=\\\"\\\" ng-model=item.SelectAll ng-change=ctrl.selectAllChanged(item) onstyle=\\\"btn-default aqms-btn-default\\\" offstyle=\\\"btn-default aqms-btn-default\\\" size=btn-sm>

    \\\"No

    {{\\'permission.profile.not.found\\' | translate}}

    \");\n$templateCache.put(\"app/permissions/profile/profile-list.html\",\"

    {{\\'label.permission\\' | translate }}

    \");\n$templateCache.put(\"app/permissions/user/user-edit.html\",\"

    {{\\'dri.btn.new\\' | translate }}

    {{\\'dri.label.edit.user\\' | translate }}

    0\\\">
    0\\\">
    • {{control.Business.Name}}
      {{control.Profile.Name}}

    \\\"{{\\'identification.not.found\\'

    {{\\'identification.not.found\\' | translate}}

    0\\\">
    0\\\">
    • {{area.Title}}

    \\\"{{\\'identification.not.found\\'

    {{\\'user.not.areas.found\\' | translate}}

    \");\n$templateCache.put(\"app/permissions/user/user-list.html\",\"

    {{\\'label.permission\\' | translate }}

    \\\"No

    {{\\'dri.load.all.notFound\\' | translate}}

    0\\\">
    5\\\">
    \");\n$templateCache.put(\"app/production_plan/emailGroup/production-plan-email-group.html\",\"

    {{\\'title.production.plan\\' | translate }}

    \");\n$templateCache.put(\"app/production_plan/occurrence/occurrence-form.html\",\"
    \");\n$templateCache.put(\"app/production_plan/occurrence/view-occurrence-form.html\",\"
    \");\n$templateCache.put(\"app/production_plan/scrap/scrap-form.html\",\"
    \");\n$templateCache.put(\"app/production_plan/scrap/view-scrap-form.html\",\"
    \");\n$templateCache.put(\"app/settings/approval_route/approval-route-edit.html\",\"

    {{\\'settings.approval_route.btn.new.label\\' | translate }}

    {{\\'settings.approval_route.edit.label\\' | translate }}

    \");\n$templateCache.put(\"app/settings/approval_route/approval-route-list.html\",\"

    {{\\'label.settings\\' | translate }}

    \");\n$templateCache.put(\"app/settings/business/business-edit.html\",\"

    {{\\'settings.business.btn.new.label\\' | translate }}

    {{\\'settings.business.edit.label\\' | translate }}

    \");\n$templateCache.put(\"app/settings/business/business-list.html\",\"

    {{\\'label.settings\\' | translate }}

    \");\n$templateCache.put(\"app/settings/calendar/calendar-edit.html\",\"

    {{\\'settings.calendar.btn.new.label\\' | translate }}

    {{\\'settings.calendar.edit.label\\' | translate }}

    \");\n$templateCache.put(\"app/settings/calendar/calendar-list.html\",\"

    {{\\'label.settings\\' | translate }}

    0\\\">
    0\\\">
    • {{\\'settings.label.fixed\\' | translate}} {{\\'settings.label.specific\\' | translate}}
      {{item.MonthDayPt}} (DD/MM) {{item.MonthDayEn}} (MM/DD) {{\\'with_date\\'|translate:{date: item.SpecificDate } }}
      {{item.Description}}
    5\\\">

    \\\"No

    {{\\'calendar.not.found\\' | translate}}

    \");\n$templateCache.put(\"app/settings/client/client-edit.html\",\"

    {{\\'settings.client.btn.new.label\\' | translate }}

    {{\\'settings.client.edit.label\\' | translate }}

    \");\n$templateCache.put(\"app/settings/client/client-list.html\",\"

    {{\\'label.settings\\' | translate }}

    \");\n$templateCache.put(\"app/settings/company/company-list.html\",\"

    {{\\'label.settings\\' | translate }}

    0\\\">
    0\\\">
    • Id {{item.Id}}
      {{item.Address}}
      {{ctrl.phoneFormat(item.Contact)}}
      {{\\'label.active\\' | translate}}
      {{\\'label.inactive\\' | translate}}
    5\\\">

    \\\"No

    {{\\'company.not.found\\' | translate}}

    \");\n$templateCache.put(\"app/settings/company/company.html\",\"

    {{\\'label.new.company\\' | translate }}

    0\\\">{{\\'label.edit.company\\' | translate }}

    0\\\" ng-model=ctrl.company.Business required>
    0\\\" ng-model=ctrl.company.Area required>
    0\\\" ng-model=ctrl.company.User.Login required>
    0\\\">
    \");\n$templateCache.put(\"app/settings/model/model-edit.html\",\"

    {{\\'title.model.new\\' | translate }}

    {{\\'title.model.edit\\' | translate }}

    0\\\">
    0\\\">
    • {{item.Code}}
    \");\n$templateCache.put(\"app/settings/model/model-list.html\",\"

    {{\\'label.settings\\' | translate }}

    0\\\">
    0\\\">
    • {{item.VariantNames}}
      {{\\'label.csActive\\' | translate}}
      {{\\'label.csInactive\\' | translate}}
    5\\\">

    \\\"No

    {{\\'msg.model.not.found\\' | translate}}

    \");\n$templateCache.put(\"app/settings/part_iqc_type/part-iqc-type-edit.html\",\"

    {{\\'part.iqc.type.new.label\\' | translate }}

    0\\\">{{\\'part.iqc.type.edit.label\\' | translate }}

    \");\n$templateCache.put(\"app/settings/part_iqc_type/part-iqc-type-list.html\",\"

    {{\\'label.settings\\' | translate }}

    \");\n$templateCache.put(\"app/settings/production_line/production-line-list.html\",\"

    {{\\'label.settings\\' | translate }}

    0\\\">
    0\\\">
    • Id {{item.Id}}
      {{item.Business}}
      {{\\'label.active\\' | translate}}
      {{\\'label.inactive\\' | translate}}
    5\\\">

    \\\"No

    {{\\'production.line.not.found\\' | translate}}

    \");\n$templateCache.put(\"app/settings/production_line/production-line.html\",\"

    {{\\'label.new.production.line\\' | translate }}

    0\\\">{{\\'label.edit.production.line\\' | translate }}

    \");\n$templateCache.put(\"app/settings/project/project-list.html\",\"

    {{\\'label.settings\\' | translate }}

    0\\\">
    0\\\">
    • Id {{item.Id}}
      {{item.BusinessName}}
      {{\\'label.active\\' | translate}}
      {{\\'label.inactive\\' | translate}}
    5\\\">

    \\\"No

    {{\\'project.not.found\\' | translate}}

    \");\n$templateCache.put(\"app/settings/project/project.html\",\"

    {{\\'label.new.project\\' | translate }}

    0\\\">{{\\'label.edit.project\\' | translate }}

    \");\n$templateCache.put(\"app/settings/shift/shift-edit.html\",\"

    {{\\'settings.shift.btn.new.label\\' | translate }}

    {{\\'settings.shift.edit.label\\' | translate }}

    \");\n$templateCache.put(\"app/settings/shift/shift-list.html\",\"

    {{\\'label.settings\\' | translate }}

    \");\n$templateCache.put(\"app/settings/test_ort_type/test-ort-type-edit.html\",\"

    {{\\'test.ort.type.new.label\\' | translate }}

    0\\\">{{\\'test.ort.type.edit.label\\' | translate }}

    \");\n$templateCache.put(\"app/settings/test_ort_type/test-ort-type-list.html\",\"

    {{\\'label.settings\\' | translate }}

    \");\n$templateCache.put(\"app/sgi/environmental/environmental-edit.html\",\"

    {{\\'title.sgi\\' | translate }} - {{ctrl.getTitlePage() | translate}}

    0\\\" is-required=$stateParams.internal filter-business=false>
    0\\\" is-required=!$stateParams.internal>
    \");\n$templateCache.put(\"app/sgi/environmental/environmental-list.html\",\"

    {{\\'title.sgi\\' | translate }}

    0\\\">
    0\\\">
    0\\\">
    5\\\">
    {{ctrl.totalLista}}
    {{ctrl.totalLista}}

    {{\\'listview.directive.no.items.found\\' | translate}}

    \");\n$templateCache.put(\"app/sourcing/avaliation/avaliation-chart-summary.html\",\"
    /
    {{avaliation.Vendor}}
    {{avaliation.Year}} / {{avaliation.Frequency}}
    {{avaliation.Remark}}
    5\\\">
    {{ctrl.totalLista}}
    {{ctrl.totalLista}}
    \");\n$templateCache.put(\"app/sourcing/avaliation/avaliation-edit.html\",\"

    {{ctrl.label | translate}}

    {{\\'avaliations.label.month\\' | translate}}{{\\'avaliations.label.price\\' | translate}}{{\\'avaliations.label.quality\\' | translate}}{{\\'avaliations.label.logistics\\' | translate}}{{\\'avaliations.label.technology\\' | translate}}{{\\'avaliations.label.total\\' | translate}}{{\\'avaliations.label.remark\\' | translate}}
    P{{item.Month}} {{item.Price}}
    {{item.Quality}}
    {{item.Logistics}}
    {{item.Technology}}
    {{item.Total = (item.Price + item.Quality + item.Logistics + item.Technology) | currency:\\\"\\\"}}{{item.Remark}}
    \");\n$templateCache.put(\"app/sourcing/avaliation/avaliation-list.html\",\"

    {{\\'title.sourcing\\' | translate }}

    0\\\">
    / {{ctrl.getFrequencyName() | translate }}
    • {{item.Id}}
      {{item.Vendor}}
      {{item.Year}}/{{item.Frequency}}
      {{item.Price}}
      {{item.Quality}}
      {{item.Logistics}}
      {{item.Technology}}
      {{item.Total}}
    5\\\">
    {{ctrl.totalLista}}
    {{ctrl.totalLista}}

    \\\"No

    {{\\'avaliations.list.notfound\\' | translate}}

    0\\\">

    \\\"No

    {{\\'avaliations.list.notfound\\' | translate}}

    \");\n$templateCache.put(\"app/sourcing/component_development/component-development-eco.html\",\"
    \");\n$templateCache.put(\"app/sourcing/component_development/component-development-ecr.html\",\"
    \");\n$templateCache.put(\"app/sourcing/component_development/component-development-edit.html\",\"

    {{ctrl.label | translate}}

  • \");\n$templateCache.put(\"app/sourcing/component_development/component-development-export-modal.html\",\"\");\n$templateCache.put(\"app/sourcing/component_development/component-development-labtests.html\",\"
  • \");\n$templateCache.put(\"app/sourcing/component_development/component-development-list.html\",\"

    {{\\'title.sourcing\\' | translate }}

    0\\\">
    • {{item.Id}}
      - {{item.PartNumber}}
      - {{ ctrl.getType(item.Type).Name | translate}}
      {{item.QtdDaysComponent}}
      {{\\'with_date\\'|translate:{date: item.DueDate } }}
      {{item.Requester}}
      - {{item.ProjectTitle}}
      {{\\'component.label.no\\' | translate}} {{\\'component.label.yes\\' | translate}}
      {{item.StatusDescription | translate}}
    5\\\">
    {{ctrl.totalLista}}
    {{ctrl.totalLista}}

    \\\"No

    {{\\'component.development.list.notfound\\' | translate}}

    \");\n$templateCache.put(\"app/sourcing/component_development/component-development-mco.html\",\"
    \");\n$templateCache.put(\"app/sourcing/component_development/component-development-value.html\",\"
    0\\\">
    • {{item.Vendor.Title}}
      {{item.Price}}
    \");\n$templateCache.put(\"app/sourcing/component_development/component-remark.html\",\"
    \");\n$templateCache.put(\"app/sourcing/contract/contract-actionstatus.html\",\"
    0\\\">
    • {{ \\'with_date\\'|translate:{date: item.Date } }}
      {{item.Description}}

    \\\"No

    \");\n$templateCache.put(\"app/sourcing/contract/contract-edit.html\",\"

    {{ctrl.label | translate}}


  • \");\n$templateCache.put(\"app/sourcing/contract/contract-list.html\",\"

    {{\\'title.sourcing\\' | translate }}

    0\\\">
    • {{item.Id}}
      {{item.CodeSap}} -
      {{item.ArchiveCode}}
      {{ \\'with_date\\'|translate:{date: item.StartDate } }}
      {{\\'with_date\\'|translate:{date: item.ExpirationDate } }}
      {{item.Aging}}
      {{item.TypeDescription}}
      {{item.Area}}
      {{item.Owner}}
      -
      {{item.StatusDescription}}
    5\\\">
    {{ctrl.totalLista}}
    {{ctrl.totalLista}}
    0\\\">
    0\\\">

    \\\"No

    {{\\'contract.list.notfound\\' | translate}}

    \");\n$templateCache.put(\"app/sourcing/contract/contract-object.html\",\"
    \");\n$templateCache.put(\"app/sourcing/contract/contract-value.html\",\"
    0\\\">
    {{item}}YTD
    {{item.Year }}{{contractValue.Value | currency:\\\"\\\" }}{{item.YTD | currency:\\\"\\\" }}
    {{item.Year}}{{contractValue.Value | currency:\\\"\\\" }}
    {{item.YTD | currency:\\\"\\\" }}

    \\\"{{\\'contract.financial.not.found\\'

    {{\\'contract.financial.not.found\\' | translate}}

    \");\n$templateCache.put(\"app/sourcing/kpi/kpi-import-list.html\",\"

    {{\\'title.sourcing\\' | translate }}

    0\\\">
    • {{item.Id}}
      {{ctrl.getType(item.Type).Title | translate}}
      {{item.Year}}
      {{item.UserName}}
      {{ \\'with_date_time\\'|translate:{date: item.Date } }}
      {{item.StatusDescription | translate}}
    5\\\">
    {{ctrl.totalLista}}
    {{ctrl.totalLista}}

    \\\"No

    {{\\'logistc.freight.cost.worksheet.notfound\\' | translate}}

    \");\n$templateCache.put(\"app/sourcing/milestone/milestone-edit.html\",\"

    {{ctrl.label | translate}}

    \");\n$templateCache.put(\"app/sourcing/milestone/milestone-list.html\",\"

    {{\\'title.sourcing\\' | translate }}

    0\\\">
    • {{item.Id}}
      {{item.VendorName}}
      {{ctrl.getMilestoneDescription(item.Milestone) | translate}}
      {{item.CreatedBy}}
      {{ \\'with_date\\'|translate:{date: item.CreatedDate } }}
      {{item.ApproverName}}
      {{ctrl.getStatusDescription(item.Status) | translate}}
    5\\\">
    {{ctrl.totalLista}}
    {{ctrl.totalLista}}

    \\\"No

    {{\\'vendor.list.notfound\\' | translate}}

    \");\n$templateCache.put(\"app/sourcing/technical_visit/technical-visit-edit.html\",\"

    {{ctrl.label | translate}}

    \");\n$templateCache.put(\"app/sourcing/technical_visit/visit-list.html\",\"

    {{\\'title.sourcing\\' | translate }}

    0\\\">
    • {{item.Id}}
      {{item.VendorName}}
      {{ \\'with_date\\'|translate:{date: item.Date } }}
      {{item.Accepted}}
      {{item.Points}}
      {{item.CreatedBy}}
      {{item.ApproverName}}
      {{ctrl.getStatusDescription(item.Status) | translate}}
    5\\\">
    {{ctrl.totalLista}}
    {{ctrl.totalLista}}

    \\\"No

    {{\\'visit.list.notfound\\' | translate}}

    \");\n$templateCache.put(\"app/sourcing/vendor/vendor-edit.html\",\"

    {{ctrl.label | translate}}

    0\\\">
    {{item.Title}}
    ()\\\\[\\\\]\\\\\\\\.,;:\\\\s@\\\"]+(\\\\.[^<>()\\\\[\\\\]\\\\\\\\.,;:\\\\s@\\\"]+)*)|(\\\".+\\\"))@((\\\\[[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}])|(([a-zA-Z\\\\-0-9]+\\\\.)+[a-zA-Z]{2,}))$/\\' ng-disabled=\\\"ctrl.profile.CanEdit === false && ctrl.profile.CanConsult === true\\\">
    0\\\">
    • {{contact.ContactUs}} {{\\\"N/A\\\"}}
      {{contact.Email}} {{\\\"N/A\\\"}}
      {{contact.Phone | phonenumber }} {{\\\"N/A\\\"}}
      {{contact.Department}} {{\\\"N/A\\\"}}

    \\\"No

    \\\"No

    0\\\">
    0\\\" class=table-body>
    • {{notification.ExternalEmail.Email}}
      {{notification.ProcessingDate| date: \\'dd/MM/yyyy HH:mm\\'}}
    \");\n$templateCache.put(\"app/sourcing/vendor/vendor-list.html\",\"

    {{\\'title.sourcing\\' | translate }}

    0\\\">
    • {{item.Id}}
      {{item.Types}}
      {{item.ContactUs}} 0\\\">{{ item.Contacts[0].ContactUs}}
      - 0\\\">{{ item.Contacts[0].Department}}
      {{ item.Contacts }} 0\\\">{{ item.Contacts[0].Phone | phonenumber }}
      {{item.User}}
      {{item.RegistrationStatus | translate}}
      {{ \\'with_date\\'|translate:{date: item.UpdatedRegister } }}
    5\\\">
    {{ctrl.totalLista}}
    {{ctrl.totalLista}}

    \\\"No

    {{\\'vendor.list.notfound\\' | translate}}

    \");\n$templateCache.put(\"app/task/directives/taskarchiveditem.html\",\"
    {{task.Id}}

    {{task.Title}}

    \\\"\\\"{{task.DuoDate | date : \\'dd/MM/yyyy\\'}} {{getStatus().text | translate }} \\\"\\\"
    \");\n$templateCache.put(\"app/task/directives/taskitem.html\",\"
    {{\\'titleReject\\' | translate }}
    {{\\'task.title.late\\' | translate }}
    {{task.Id}}

    {{task.Title}}

    \\\"\\\"{{task.DuoDate | date : \\'dd/MM/yyyy\\'}} {{getPriority().text | translate }} \\\"\\\"
    \");\n$templateCache.put(\"app/components/button-search/button-search.html\",\"
    \");\n$templateCache.put(\"app/components/button-search-chart/button-search-chart.html\",\"
    \");\n$templateCache.put(\"app/components/checkbox_model/checkbox-model.html\",\"
    \");\n$templateCache.put(\"app/components/footer/footer.html\",\"

    {{\\'label.footer.development\\' | translate}} FPF Tech | 2016 - {{index.getYear()}} Salcomp. {{\\'label.footer.allrights\\' | translate}}
    {{\\'label.footer.version\\' | translate}}: {{index.version}}
    \");\n$templateCache.put(\"app/components/header/account.html\",\"

    {{\\\"changepwd.user.label\\\" | translate}} {{ctrl.userAlias}}

    {{\\\"changepwd.login.label\\\" | translate}} {{ctrl.userLogin}}

    {{\\\"changepwd.profile.label\\\" | translate}} {{ctrl.getUserProfileName()}}

    \");\n$templateCache.put(\"app/components/header/header.html\",\"
    \");\n$templateCache.put(\"app/components/menu/menu.html\",\"\");\n$templateCache.put(\"app/components/notification_email/notification-email.html\",\"
    ()\\\\[\\\\]\\\\\\\\.,;:\\\\s@\\\"]+(\\\\.[^<>()\\\\[\\\\]\\\\\\\\.,;:\\\\s@\\\"]+)*)|(\\\".+\\\"))@((\\\\[[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}])|(([a-zA-Z\\\\-0-9]+\\\\.)+[a-zA-Z]{2,}))$/\\' uib-typeahead=\\\"item as item.Email for item in ctrl.listEmail | filter:{Email:$viewValue}\\\" typeahead-template-url=typeHeadEmailTemplate.html typeahead-on-select=ctrl.itemClicked() typeahead-min-length=1 clearable clearable-model=ctrl.model ng-model=ctrl.model placeholder=\\\"{{\\'input.email.directive.placeholder\\' | translate}}\\\" autocomplete=off ng-required=ctrl.isRequired>
    0\\\">
    • {{target.ExternalEmail.Email}}
      {{target.ProcessingDate}}

    \\\"No

    0\\\">
    0\\\" class=table-body>
    • {{notification.ExternalEmail.Email}}
      {{notification.ProcessingDate| date: \\'dd/MM/yyyy HH:mm\\'}}
    \");\n$templateCache.put(\"app/components/popover-error/popover-error.html\",\"
    \");\n$templateCache.put(\"app/components/template/btn-add.html\",\"\");\n$templateCache.put(\"app/components/template/btn-back.html\",\" \");\n$templateCache.put(\"app/components/template/btn-basic.html\",\"\");\n$templateCache.put(\"app/components/template/btn-close.html\",\"\");\n$templateCache.put(\"app/components/template/btn-copy.html\",\"\");\n$templateCache.put(\"app/components/template/btn-create.html\",\" \");\n$templateCache.put(\"app/components/template/btn-delete.html\",\"\");\n$templateCache.put(\"app/components/template/btn-dialog-cancel.html\",\"\");\n$templateCache.put(\"app/components/template/btn-dialog-close.html\",\"\");\n$templateCache.put(\"app/components/template/btn-dialog-confirm.html\",\"\");\n$templateCache.put(\"app/components/template/btn-dialog-save.html\",\"\");\n$templateCache.put(\"app/components/template/btn-edit.html\",\"\");\n$templateCache.put(\"app/components/template/btn-export.html\",\"\");\n$templateCache.put(\"app/components/template/btn-plus.html\",\" \");\n$templateCache.put(\"app/components/template/btn-return.html\",\"\");\n$templateCache.put(\"app/components/template/btn-save.html\",\"\");\n$templateCache.put(\"app/components/template/btn-use-this.html\",\"\");\n$templateCache.put(\"app/components/template/carousel-item.html\",\"
    \");\n$templateCache.put(\"app/components/template/carousel-multiple-contract.html\",\"
    \");\n$templateCache.put(\"app/components/template/carousel-multiple.html\",\"
    \");\n$templateCache.put(\"app/components/template/carousel.html\",\"

    \");\n$templateCache.put(\"app/components/template/chart-bar.html\",\"

    \");\n$templateCache.put(\"app/components/template/chart-gauge.html\",\"
    \");\n$templateCache.put(\"app/components/template/chart-multi-bar-horizontal.html\",\"

    \");\n$templateCache.put(\"app/components/template/chart-pie.html\",\"

    \");\n$templateCache.put(\"app/components/template/check-item.html\",\"\");\n$templateCache.put(\"app/components/template/dialog-confirm.html\",\"

    {{ctrl.message}}

    \");\n$templateCache.put(\"app/components/template/div-accordion-check.html\",\"
    \");\n$templateCache.put(\"app/components/template/div-accordion-crud.html\",\"
    {{ctrl.accordionTitle}}
    \");\n$templateCache.put(\"app/components/template/div-accordion.html\",\"
    \");\n$templateCache.put(\"app/components/template/div-input-list.html\",\"
    0\\\">
    {{ctrl.valueToShow(item)}}
    \");\n$templateCache.put(\"app/components/template/div-input.html\",\"
    0 && !ctrl.isTrue(ctrl.showHintInline)\\\" class=glyphicon aria-hidden=true uib-popover={{ctrl.msgToHint}} popover-append-to-body=true tabindex=0 popover-is-open=isOpen ng-mouseout=\\\"isOpen = false\\\" alt=\\\"\\\" ng-click=\\\"isOpen = !isOpen\\\" ng-class=\\\"ctrl.warningHint === \\'true\\' ? \\'ic-warning\\' : \\'glyphicon-question-sign\\'\\\">
    \");\n$templateCache.put(\"app/components/template/input-client.html\",\"
    \");\n$templateCache.put(\"app/components/template/input-date.html\",\"
    \");\n$templateCache.put(\"app/components/template/input-dri.html\",\"
    \");\n$templateCache.put(\"app/components/template/input-list-dri.html\",\"
    0\\\">
    {{ctrl.valueToShow(control.Name)}}
    \");\n$templateCache.put(\"app/components/template/input-list-email.html\",\"
    ()\\\\[\\\\]\\\\\\\\.,;:\\\\s@\\\"]+(\\\\.[^<>()\\\\[\\\\]\\\\\\\\.,;:\\\\s@\\\"]+)*)|(\\\".+\\\"))@((\\\\[[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}])|(([a-zA-Z\\\\-0-9]+\\\\.)+[a-zA-Z]{2,}))$/\\' uib-typeahead=\\\"item as item.Email for item in ctrl.listEmail | filter:{Email:$viewValue}\\\" id=inputListEmail typeahead-template-url=typeHeadEmailTemplate.html typeahead-on-select=ctrl.itemClicked() typeahead-min-length=1 clearable clearable-model=ctrl.model ng-model=ctrl.model placeholder=\\\"{{\\'input.email.directive.placeholder\\' | translate}}\\\" autocomplete=off ng-required=ctrl.isRequired>
    0 && ctrl.showVerticalList == \\'false\\'\\\">
    0 && ctrl.showVerticalList == \\'true\\'\\\">
    {{item.Email}}
    \");\n$templateCache.put(\"app/components/template/input-list-part-inspec-sub-type.html\",\"
    \");\n$templateCache.put(\"app/components/template/input-list-test-inspec-sub-type.html\",\"
    \");\n$templateCache.put(\"app/components/template/input-model.html\",\"
    0\\\">
    {{item.Code}}
    \");\n$templateCache.put(\"app/components/template/input-oqc-oba-reinspect.html\",\"
    \");\n$templateCache.put(\"app/components/template/input-station.html\",\"
    \");\n$templateCache.put(\"app/components/template/input-user-telegram.html\",\"
    0\\\">
    0\\\">
    • {{userTelegram.Name}}
      {{userTelegram.TelegramUsername}}

    \\\"No

    \");\n$templateCache.put(\"app/components/template/input-user.html\",\"
    \");\n$templateCache.put(\"app/components/template/li-button.html\",\"
  • {{ label | translate}}
  • \");\n$templateCache.put(\"app/components/template/li-delete.html\",\"
  • {{\\'item.delete\\'| translate }}
  • \");\n$templateCache.put(\"app/components/template/list-view.html\",\"
    0\\\">
    5\\\">
    5\\\">

    \\\"No

    \");\n$templateCache.put(\"app/components/template/sub-header.html\",\"
    \");\n$templateCache.put(\"app/components/template/upload-options.html\",\"
    {{\\'defect.webcam.notfound\\' | translate}}
    \");\n$templateCache.put(\"app/acquisition/report/approval/acquisition-approval-report.html\",\"

    {{\\'title.acquisition\\' | translate }}

    \");\n$templateCache.put(\"app/acquisition/report/quotes/quotes.html\",\"

    {{\\'title.acquisition\\' | translate }}

    0\\\">

    \\\"No

    {{\\'quotes.report.graphic.nothingFound\\' | translate}}

    0\\\">

    \\\"No

    {{\\'quotes.report.graphic.nothingFound\\' | translate}}

    \\\"No

    {{\\'logistic.kpi.list.notfound\\' | translate}}

    \");\n$templateCache.put(\"app/acquisition/risks/settings/users-telegram-list.html\",\"

    {{\\'label.settings\\' | translate }}

    \");\n$templateCache.put(\"app/acquisition/risks/settings/users-telegram.html\",\"
    0\\\">
    0\\\">
    • {{userTelegram.UserName}}
      {{userTelegram.TelegramUsername}}

    \\\"No

    \");\n$templateCache.put(\"app/dashboard/directive/alert/next-alert.html\",\"

    {{\\\"dashboard.panel.alerts\\\" | translate}} - {{\\\"dashboard.panel.alert.next\\\" | translate}}

    \\\"No

    {{\\'dashboard.alert.next.not.found.msg\\' | translate}}

    \");\n$templateCache.put(\"app/external-libs/ngRadialGauge/demo/index.html\",\"ngRadialGauge Demo

    400 px


    400 px


    25% of parent width


    100% parent width

    20em width

    shallow angle

    Thick, no detailed graduations

    \");\n$templateCache.put(\"app/faca/problem/containment/containment-form.html\",\"
    \");\n$templateCache.put(\"app/faca/problem/containment/containment-tab.html\",\"
    {{\\'title.containment\\' | translate}}

    \\\"No

    {{\\'label.notfound.containment.plan\\' | translate}}

    {{\\'title.containment.details\\' | translate}}
    {{item.What}}
    {{item.Wheres}}
    {{item.Why}}
    {{item.How}}
    {{item.CreatedByDRI.Name}}
    {{item.Whens | date : \\'dd/MM/yyyy\\'}}
    {{ctrl.containmentStatus[item.Status].name | translate}}
    0\\\" ng-if=!ctrl.containmentDetails>
    {{\\'title.containment\\' | translate}}
    \");\n$templateCache.put(\"app/faca/problem/effect/effect-tab.html\",\"
    \");\n$templateCache.put(\"app/faca/problem/root-cause/ishikawa-div-input.html\",\"
    \");\n$templateCache.put(\"app/faca/problem/root-cause/ishikawa-items-panel.html\",\"
    0\\\">
    {{item.Description}}
    \");\n$templateCache.put(\"app/faca/problem/root-cause/root-cause-tab.html\",\"

    {{\\'title.rootcause\\' | translate }}

    1
    2
    3
    4
    5
    \");\n$templateCache.put(\"app/iqc/part/parameter-definition/part-param-form.html\",\"
    • {{\\'checklist.label.lessThan\\' | translate}}
    • {{\\'checklist.label.greaterThan\\' | translate}}
    • {{\\'checklist.label.range\\' | translate}}
    • {{\\'checklist.label.equalTo\\' | translate}}
    • {{\\'checklist.label.okNok\\' | translate}}
    \");\n$templateCache.put(\"app/iqc/part/modal/inspection-type-form.html\",\"
    \");\n$templateCache.put(\"app/iqc/part/modal/part-template-item.html\",\"
    \");\n$templateCache.put(\"app/iqc/part-inspection/inspect-action/part-inspection-inspect.html\",\"

    {{\\'part.inspection.inspect.title\\' | translate }} {{\\\" - \\\" + ctrl.groupedResult.PartInspectionTypeDescription}} {{\\\" - \\\" + ctrl.groupedResult.PartInspectionItemTemplate.PartInspectionTemplateSubType.Title}}

    0\\\">
    • {{item.Sequence}}
    0\\\">
    • {{item.Remark}}
    USL{{ctrl.getUSLValue()}}
    LSL{{ctrl.getLSLValue()}}
    Samples{{ctrl.groupedResult.PartInspectionItemTemplate.PartInspectionRule.Value}}
    Mean{{ctrl.groupedResult.MeanMetric}}
    Stdev{{ctrl.groupedResult.StdevMetric}}
    Max{{ctrl.groupedResult.MaxMetric}}
    Min{{ctrl.groupedResult.MinMetric}}
    Range{{ctrl.groupedResult.RangeMetric}}
    CP{{ctrl.groupedResult.CpMetric}}
    CPK{{ctrl.groupedResult.CpkMetric}}
    OK{{ctrl.groupedResult.OKMetric}}%
    NOK{{ctrl.groupedResult.NOKMetric}}%
    \");\n$templateCache.put(\"app/ort/ort-inspection/inspect-action/ort-inspection-inspect.html\",\"

    {{\\'ort.inspection.inspect.title\\' | translate }} {{\\\" - \\\" + ctrl.groupedResult.TestInspectionTypeDescription}} {{\\\" - \\\" + ctrl.groupedResult.OrtInspectionItemTemplate.TestInspectionSubType.Title}}

    0\\\">
    • {{item.Sequence}}
    0\\\">
    • {{item.Remark}}
    USL{{ctrl.getUSLValue()}}
    LSL{{ctrl.getLSLValue()}}
    Samples{{ctrl.groupedResult.OrtInspectionItemTemplate.TestInspectionRule.Value}}
    OK{{ctrl.groupedResult.OKMetric}}%
    NOK{{ctrl.groupedResult.NOKMetric}}%
    \");\n$templateCache.put(\"app/logistics/kpi/graphics/graphic-freight-cost.html\",\"
    \");\n$templateCache.put(\"app/logistics/kpi/graphics/no-graphic-found.html\",\"

    \\\"No

    {{\\'logistic.kpi.list.notfound\\' | translate}}

    \");\n$templateCache.put(\"app/ort/ort-template/modal/test-inspection-sub-type.html\",\"
    \");\n$templateCache.put(\"app/ort/ort-template/modal/test-inspection-type.html\",\"
    \");\n$templateCache.put(\"app/sgi/environmental/license/license-direct.html\",\"
    0 && ctrl.profile.CanEdit === false\\\">
    0 && ctrl.profile.CanEdit === false\\\">
    0 && ctrl.profile.CanEdit === false\\\">
    0 && ctrl.profile.CanEdit === false\\\">
    0 && ctrl.profile.CanEdit === false\\\">
  • 0 && ctrl.profile.CanEdit === false\\\">
  • 0 && ctrl.profile.CanEdit === false\\\">
    0\\\">
    • {{licenseDirectItem.LicenseType.Title}}
      {{licenseDirectItem.Number}}
      {{\\'with_date\\'|translate:{date: licenseDirectItem.EmissionDate } }}
      {{\\'with_date\\'|translate:{date: licenseDirectItem.ExpirationDate } }}
      0\\\"> 0 && ctrl.profile.CanEdit === false\\\">{{\\\"N/A\\\"}}
      {{\\\"N/A\\\"}}
      0 && ctrl.profile.CanEdit === false\\\">

    \\\"No

    \");\n$templateCache.put(\"app/sgi/environmental/license/license-indirect.html\",\"
    0 && ctrl.profile.CanEdit === false\\\">
    0 && ctrl.profile.CanEdit === false\\\">
    0 && ctrl.profile.CanEdit === false\\\">
    0 && ctrl.profile.CanEdit === false\\\">
    0 && ctrl.profile.CanEdit === false\\\">
    0 && ctrl.profile.CanEdit === false\\\">
  • 0 && ctrl.profile.CanEdit === false\\\">
  • 0 && ctrl.profile.CanEdit === false\\\">
    0\\\">
    • {{item.Vendor.FantasyName}}
      {{item.LicenseType.Title}}
      {{item.Number}}
      {{\\'with_date\\'|translate:{date: item.EmissionDate } }}
      {{\\'with_date\\'|translate:{date: item.ExpirationDate } }}
      0\\\"> 0 && ctrl.profile.CanEdit === false\\\">{{\\\"N/A\\\"}}
      {{\\\"N/A\\\"}}
      0 && ctrl.profile.CanEdit === false\\\">

    \\\"No

    \");\n$templateCache.put(\"app/sourcing/component_development/steps/component-step.html\",\"

    {{\\'label.edit.component.development\\' | translate}}

    \");\n$templateCache.put(\"app/sourcing/milestone/temporary-approval/temporary-approval.html\",\"
    \");\n$templateCache.put(\"app/sourcing/vendor/auto-complete/search-vendor-codesap-fantasy-name.html\",\"
    \");\n$templateCache.put(\"app/sourcing/vendor/vendor_notification/vendor-notification.html\",\"
    ()\\\\[\\\\]\\\\\\\\.,;:\\\\s@\\\"]+(\\\\.[^<>()\\\\[\\\\]\\\\\\\\.,;:\\\\s@\\\"]+)*)|(\\\".+\\\"))@((\\\\[[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}])|(([a-zA-Z\\\\-0-9]+\\\\.)+[a-zA-Z]{2,}))$/\\' uib-typeahead=\\\"item as item.Email for item in ctrl.listEmail | filter:{Email:$viewValue}\\\" typeahead-template-url=typeHeadEmailTemplate.html typeahead-on-select=ctrl.itemClicked() typeahead-min-length=1 clearable clearable-model=ctrl.model ng-model=ctrl.model placeholder=\\\"{{\\'input.email.directive.placeholder\\' | translate}}\\\" autocomplete=off ng-required=ctrl.isRequired>
    0\\\">
    • {{target.ExternalEmail.Email}}
      {{target.ProcessingDate}}
    \");\n$templateCache.put(\"app/components/auto_complete/area/auto-complete-area.html\",\"
    \");\n$templateCache.put(\"app/components/auto_complete/client/auto-complete-client.html\",\"
    \");\n$templateCache.put(\"app/components/auto_complete/contract/auto-complete-contract.html\",\"
    \");\n$templateCache.put(\"app/components/auto_complete/document_flow/auto-complete-document-flow.html\",\"
    \");\n$templateCache.put(\"app/components/auto_complete/license/auto-complete-license.html\",\"
    \");\n$templateCache.put(\"app/components/auto_complete/license-type/auto-complete-license-type.html\",\"
    \");\n$templateCache.put(\"app/components/auto_complete/model/auto-complete-model.html\",\"
    \");\n$templateCache.put(\"app/components/auto_complete/part/auto-complete-part.html\",\"
    \");\n$templateCache.put(\"app/components/auto_complete/part-rule/auto-complete-part-rule.html\",\"
    \");\n$templateCache.put(\"app/components/auto_complete/part-type/auto-complete-part-type.html\",\"
    \");\n$templateCache.put(\"app/components/auto_complete/part_inspection_type/auto-complete-part-inspection-type.html\",\"
    \");\n$templateCache.put(\"app/components/auto_complete/project/auto-complete-project.html\",\"
    \");\n$templateCache.put(\"app/components/auto_complete/request_type/auto-complete-request-type.html\",\"
    \");\n$templateCache.put(\"app/components/auto_complete/section/auto-complete-section.html\",\"
    \");\n$templateCache.put(\"app/components/auto_complete/station/auto-complete-station.html\",\"
    \");\n$templateCache.put(\"app/components/auto_complete/synthesis/auto-complete-synthesis.html\",\"
    \");\n$templateCache.put(\"app/components/auto_complete/tasktype/auto-complete-tasktype.html\",\"
    \");\n$templateCache.put(\"app/components/auto_complete/test-inspection-sub-type/auto-complete-test-inspection-sub-type.html\",\"
    \");\n$templateCache.put(\"app/components/auto_complete/test-inspection-type/auto-complete-test-inspection-type.html\",\"
    \");\n$templateCache.put(\"app/components/auto_complete/test-rule/auto-complete-test-rule.html\",\"
    \");\n$templateCache.put(\"app/components/auto_complete/test-type/auto-complete-test-type.html\",\"
    \");\n$templateCache.put(\"app/components/auto_complete/turn/auto-complete-turn.html\",\"
    \");\n$templateCache.put(\"app/components/auto_complete/variant/auto-complete-variant.html\",\"
    \");\n$templateCache.put(\"app/components/auto_complete/variant-ort/auto-complete-variant-ort.html\",\"
    \");\n$templateCache.put(\"app/components/auto_complete/vendor/auto-complete-vendor.html\",\"
    \");\n$templateCache.put(\"app/dashboard/directive/sourcing/component-development/component-pending-review.html\",\"

    {{\\'dashboard.panel.component.development.pending.review.title\\' | translate}}

    \\\"No

    {{\\'dashboard.milestone.pending.not.found.msg\\' | translate}}

    \");\n$templateCache.put(\"app/dashboard/directive/sourcing/milestone/milestone-pending.html\",\"

    {{\\\"dashboard.panel.milestone.pending.title\\\" | translate}}

    \");\n$templateCache.put(\"app/dashboard/directive/sourcing/technical-visit/technical-visit-pending.html\",\"

    {{\\\"dashboard.panel.technicalvisit.pending.title\\\" | translate}}

    \");\n$templateCache.put(\"app/faca/problem/root-cause/action-plan/action-plan.html\",\"

    {{\\'title.action.plan\\' | translate }}

    0\\\">
    {{item.Description}}
    {{item.What}}
    {{item.Wheres}}
    {{item.Why}}
    {{item.How}}
    {{item.CreatedByDRI.Name}}
    {{item.Whens | date : \\'dd/MM/yyyy\\'}}

    \\\"{{\\'actionplan.not.found\\'

    {{\\'actionplan.not.found\\' | translate}}

    \");\n$templateCache.put(\"app/faca/problem/root-cause/corrective-action/control-plan-form.html\",\"


    \");\n$templateCache.put(\"app/faca/problem/root-cause/corrective-action/corrective-action-tab.html\",\"

    {{\\'title.correctiveAction\\' | translate }}

    \\\"{{\\'corrective.not.found\\'

    {{\\'corrective.not.found\\' | translate}}

    0\\\">
    • {{item.Description}}
      {{item.Whens | date:\\'dd/MM/yyyy\\'}}
      {{item.UserName}}

    • {{plan.Action}}
      {{plan.DueDate}}
      {{plan.DRI.Name}}

    \\\"{{\\'controlPlan.not.found\\'

    {{\\'controlPlan.not.found\\' | translate}}

    0\\\">
    • {{lessonLearn.Lesson}}

    \\\"{{\\'lesson.not.found\\'

    {{\\'lesson.not.found\\' | translate}}

    \");\n$templateCache.put(\"app/faca/problem/root-cause/corrective-action/lesson-learn-form.html\",\"
    \");\n$templateCache.put(\"app/faca/problem/root-cause/risk/risk-tab.html\",\"

    {{\\'title.risk\\' | translate }}

    0\\\">
    {{item.IshikawaType.Description}}{{item.Description}}{{item.Score}}

    \\\"{{\\'risk.not.found\\'

    {{\\'risk.not.found\\' | translate}}

    \");\n$templateCache.put(\"app/sourcing/component_development/steps/approval/component-approval.html\",\"
    {{ctrl.approvalValid | json}}
    \");\n$templateCache.put(\"app/logistics/kpi/graphics/directive/cargo-ratio-chart.html\",\"
    \");\n$templateCache.put(\"app/logistics/kpi/graphics/directive/channel-performance-chart.html\",\"
    \");\n$templateCache.put(\"app/logistics/kpi/graphics/directive/chargeable-weight-chart.html\",\"
    \");\n$templateCache.put(\"app/logistics/kpi/graphics/directive/fob-chart.html\",\"
    \");\n$templateCache.put(\"app/logistics/kpi/graphics/directive/gross-weight-chart.html\",\"
    \");\n$templateCache.put(\"app/logistics/kpi/graphics/directive/gross-weight-lsp-outbound-chart.html\",\"
    \");\n$templateCache.put(\"app/logistics/kpi/graphics/directive/gross-weight-lsp-outbound-road-chart.html\",\"
    \");\n$templateCache.put(\"app/logistics/kpi/graphics/directive/invoices-issued-consolidated-chart.html\",\"
    \");\n$templateCache.put(\"app/logistics/kpi/graphics/directive/landed-cost-chart.html\",\"
    \");\n$templateCache.put(\"app/logistics/kpi/graphics/directive/landed-variation-chart.html\",\"
    \");\n$templateCache.put(\"app/logistics/kpi/graphics/directive/local-transport-freigth-cost-chart.html\",\"
    \");\n$templateCache.put(\"app/logistics/kpi/graphics/directive/lsp-chargeable-chart.html\",\"
    \");\n$templateCache.put(\"app/logistics/kpi/graphics/directive/mode-spend-chart.html\",\"
    \");\n$templateCache.put(\"app/logistics/kpi/graphics/directive/national-freight-cost-air-chart.html\",\"
    {{ ctrl.getMonthName(month) }}
    {{carrier}}
    {{ ctrl.getCarrierValues(carrier, month)}}
    Total GW
    {{ ctrl.getTotalGW(month)}}
    \");\n$templateCache.put(\"app/logistics/kpi/graphics/directive/national-freight-cost-air-inbound-chart.html\",\"
    {{ ctrl.getMonthName(month) }}
    {{carrier}}
    {{ ctrl.getFCostValue(carrier, month)}}
    Total GW
    {{ ctrl.getTotalGW(month)}}
    \");\n$templateCache.put(\"app/logistics/kpi/graphics/directive/national-freight-cost-road-outbound-chart.html\",\"
    {{ ctrl.getMonthName(month) }}
    {{carrier}}
    {{ ctrl.getCarrierValues(carrier, month)}}
    {{\\'logistics.kpi.graphics.national.freight.cost.road.qty\\' | translate}} {{ctrl.getCarrierName(carrier)}}{{ ctrl.getCarrierVolumes(carrier, month)}}
    {{\\'logistics.kpi.graphics.national.freight.cost.road.total.gw\\' | translate}}
    {{ ctrl.getTotalGW(month)}}
    \");\n$templateCache.put(\"app/logistics/kpi/graphics/directive/rate-variation-chart.html\",\"
    \");\n$templateCache.put(\"app/logistics/kpi/graphics/directive/total-lsp-chargeable-chart.html\",\"
    \");\n$templateCache.put(\"app/logistics/kpi/graphics/directive/transit-time-chart.html\",\"
    \");\n$templateCache.put(\"app/sourcing/component_development/steps/sample/component-sample.html\",\"
    \");}]);"],"sourceRoot":"/source/"}