{"version":3,"sources":["webpack:///./node_modules/class-transformer/esm5/decorators/type.decorator.js","webpack:///./src/views/report/components/AnalysisItems.vue?f33a","webpack:///./node_modules/quasar/src/components/input/use-mask.js","webpack:///./node_modules/quasar/src/composables/private/use-file-dom-props.js","webpack:///./node_modules/quasar/src/components/input/QInput.js","webpack:///./src/models/state.ts","webpack:///./src/views/report/utils.ts","webpack:///./node_modules/core-js/modules/es.array.sort.js","webpack:///./src/models/nivel-critico-p.ts","webpack:///./src/models/analysis-item.ts","webpack:///./node_modules/core-js/internals/number-parse-float.js","webpack:///./node_modules/mustache/mustache.js","webpack:///./src/views/report/models/report-form.ts","webpack:///./src/models/report-analysis-item.ts","webpack:///./node_modules/core-js/modules/es.number.parse-float.js","webpack:///./src/models/crop-substance.ts","webpack:///./src/models/crop.ts","webpack:///./src/models/substance.ts","webpack:///./src/views/report/components/AnalysisItems.vue?a411","webpack:///./src/views/report/components/AnalysisItems.vue","webpack:///./src/views/report/components/Form.vue?7dcd","webpack:///./src/views/report/components/Form.vue","webpack:///./src/models/measurement-level.ts"],"names":["Type","typeFunction","options","target","propertyName","reflectedType","Reflect","getMetadata","addTypeMetadata","constructor","NAMED_MASKS","date","datetime","time","fulltime","phone","card","TOKENS","pattern","negate","S","N","A","transform","v","toLocaleUpperCase","a","toLocaleLowerCase","X","x","KEYS","Object","keys","forEach","key","regex","RegExp","tokenRegexMask","join","escRegex","MARKER","String","fromCharCode","useMaskProps","mask","reverseFillMask","Boolean","fillMask","unmaskedValue","props","emit","emitValue","inputRef","maskMarked","maskReplaced","computedMask","computedUnmask","hasMask","ref","innerValue","getInitialMaskedValue","getIsTypeText","autogrow","includes","type","updateMaskInternals","value","masked","maskValue","unmaskValue","modelValue","fillWithMask","getPaddedMaskMarked","size","length","slice","pad","localMaskMarked","padPos","indexOf","i","localComputedMask","fillChar","fillCharEscaped","replace","unmask","extract","firstMatch","unmaskChar","negateChar","_","char1","esc","token","char2","c","push","unmaskMatcher","extractLast","extractMatcher","map","re","index","val","unmaskMatch","exec","extractMatch","extractMatcherLength","str","m","shift","split","updateMaskValue","rawVal","updateMaskInternalsFlag","inputType","inp","end","selectionEnd","endReverse","unmasked","preMasked","changed","document","activeElement","nextTick","cursor","Math","max","min","setSelectionRange","moveCursor","rightReverse","right","moveCursorForPaste","start","watch","left","selection","noMarkBefore","limit","leftReverse","onMaskedKeydown","e","shouldIgnoreKey","selectionStart","keyCode","fn","preventDefault","shiftKey","maskValueReverse","valIndex","output","maskIndex","valChar","maskDef","test","firstTokenIndex","typeGuard","getFormDomProps","model","dt","window","DataTransfer","ClipboardEvent","clipboardData","Array","from","file","items","add","files","computed","createComponent","name","inheritAttrs","useFieldProps","useFormProps","required","shadowText","default","debounce","Number","inputClass","inputStyle","emits","useFieldEmits","setup","typedNumber","stopValueWatcher","emitTimer","emitValueFn","attrs","temp","emitCachedValue","NaN","nameProp","useFormInputNameAttr","useMask","formDomProps","useFileFormDomProps","hasValue","fieldValueIsFilled","onComposition","useKeyComposition","onInput","state","useFieldState","isTextarea","isTypeText","onEvents","evt","splitAttrs","listeners","onPaste","onChange","onBlur","onFinishEditing","onFocus","stop","onCompositionstart","onCompositionupdate","onCompositionend","onKeydown","onAnimationend","adjustHeight","inputAttrs","tabindex","autofocus","rows","label","attributes","id","targetUid","maxlength","disabled","disable","readonly","focus","addFocusFn","el","preventScroll","select","composing","stopWatcher","hasOwnProperty","clearTimeout","setTimeout","parentStyle","parentNode","style","marginBottom","scrollHeight","height","getCurValue","dense","onBeforeUnmount","onMounted","assign","fieldClass","hasShadow","floatingLabel","displayValue","getControl","h","class","getShadowControl","renderFn","useField","vm","getCurrentInstance","proxy","getNativeElement","State","this","__decorate","Expose","calculateValues","crops","niveisCriticosP","capacidadesTampaoP","measurementLevels","calculated","filter","item","analysisItem","identifier","calculateValue","result","plainToInstance","ReportAnalysisItem","instanceToPlain","context","getContext","findIndex","expression","dependencies","getDependencies","dep","depIndex","depItem","undefined","console","log","replacedString","mustache","render","eval","functionName","param1","param2","param3","param4","param5","customFunctions","findMustacheRegex","match","replaced","extracao","params","cropName","substanceCode","crop","extraction","find","substance","code","exportacao","exportation","nivelCriticoP","argila","parseFloat","extrator","roundedArgila","floor","nivel","recomendacaoKCL","K2OExtracaoCultura","K2OElevacaoCTC","capacidadeTampaoP","recomendacaoCalagem","aplicacaoDeCalcario","acrescimoCaO","CaO","PRNT","multiplier","gessagem","saturacaoAl","S2040","fertilizacaoS","S020","extracaoS","producaoEsperada","recomendacaoS","exportacaoS","extractor","levels","getLevel","level","assert","necessidadeMicronutriente","necessidadeMicronutrienteN","MO","$","uncurryThis","aCallable","toObject","lengthOfArrayLike","toString","fails","internalSort","arrayMethodIsStrict","FF","IE_OR_EDGE","V8","WEBKIT","un$Sort","sort","FAILS_ON_UNDEFINED","FAILS_ON_NULL","STRICT_METHOD","STABLE_SORT","chr","k","b","charAt","FORCED","getSortCompare","comparefn","y","proto","forced","array","itemsLength","arrayLength","NivelCriticoP","mehlich1","resina","AnalysisItemTypeString","AnalysisItem","createdAt","updatedAt","deletedAt","text","unit","group","hidden","order","selectOptions","Model","global","trim","whitespaces","n$ParseFloat","Symbol","ITERATOR","iterator","Infinity","module","exports","string","trimmedString","factory","objectToString","prototype","isArray","object","call","isFunction","typeStr","obj","escapeRegExp","hasProperty","propName","primitiveHasOwnProperty","primitive","regExpTest","testRegExp","nonSpaceRe","isWhitespace","entityMap","escapeHtml","s","whiteRe","spaceRe","equalsRe","curlyRe","tagRe","parseTemplate","template","tags","openingTagRe","closingTagRe","closingCurlyRe","lineHasNonSpace","sections","tokens","spaces","hasTag","nonSpace","indentation","tagIndex","stripSpace","pop","compileTags","tagsToCompile","Error","openSection","scanner","Scanner","eos","pos","scanUntil","valueLength","scan","nestTokens","squashTokens","lastToken","squashedTokens","numTokens","section","nestedTokens","collector","tail","Context","view","parentContext","cache","parent","Writer","templateCache","_cache","set","get","clear","substring","search","lookup","intermediateValue","names","lookupHit","clearCache","parse","cacheKey","isCacheEnabled","partials","config","getConfigTags","renderTokens","originalTemplate","symbol","buffer","renderSection","renderInverted","renderPartial","unescapedValue","escapedValue","rawValue","self","subRender","j","indentPartial","partial","filteredIndentation","partialByNl","indentedValue","escape","getConfigEscape","version","defaultWriter","TypeError","getEmptyReportForm","farmer","field","area","city","stateId","cropId","reportAnalysisItems","toRequestData","formData","state_id","crop_id","report_analysis_items","analysis_item_id","analysisItemId","reportId","stat","CropSubstance","substanceId","Substance","Crop","SubstanceUnitString","utf8Code","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_defineComponent","__props","expose","internalValue","groups","clonedItems","reduce","accumulator","accumulatorLastItem","lastGroup","totalRows","lastRow","lastRowLength","getRowLength","row","acc","getModelIndex","valueTreatment","toFixed","emitUpdate","updateValues","updateCrop","_ctx","_component_q_input","_resolveComponent","_component_q_select","_openBlock","_createElementBlock","_createElementVNode","_Fragment","_renderList","_unref","rowIndex","groupIndex","_normalizeStyle","width","_toDisplayString","_createCommentVNode","itemIndex","_createBlock","$event","filled","square","isNaN","__exports__","QInput","QSelect","states","route","useRoute","analysisItemsComponent","userTest","useStore","userName","getters","user","dispatch","recommendationDate","moment","Date","format","stateOptions","cropOptions","api","then","response","data","report","created_at","catch","error","initForm","setReportAnalysisItems","handleCropUpdate","_createVNode","_isRef","outlined","rules","FormRules","AnalysisItems","ref_key","onUpdate","MeasurementLevel","value1","ruleValue1","value2","ruleValue2","rule1Passed","checkRule","rule2Passed","valueToCompare","rule"],"mappings":"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","file":"js/chunk-3a4d7669.42d470b9.js","sourcesContent":["import { defaultMetadataStorage } from '../storage';\n/**\n * Specifies a type of the property.\n * The given TypeFunction can return a constructor. A discriminator can be given in the options.\n *\n * Can be applied to properties only.\n */\nexport function Type(typeFunction, options) {\n if (options === void 0) { options = {}; }\n return function (target, propertyName) {\n var reflectedType = Reflect.getMetadata('design:type', target, propertyName);\n defaultMetadataStorage.addTypeMetadata({\n target: target.constructor,\n propertyName: propertyName,\n reflectedType: reflectedType,\n typeFunction: typeFunction,\n options: options,\n });\n };\n}\n//# sourceMappingURL=type.decorator.js.map","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/vue-cli-plugin-quasar/lib/loader.vue.auto-import-quasar.js??ref--1-0!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-1!../../../../node_modules/vue-loader-v16/dist/index.js??ref--1-2!./AnalysisItems.vue?vue&type=style&index=0&id=0b6bbf2a&lang=scss&scoped=true\"","import { ref, watch, nextTick } from 'vue'\n\nimport { shouldIgnoreKey } from '../../utils/private/key-composition.js'\n\n// leave NAMED_MASKS at top of file (code referenced from docs)\nconst NAMED_MASKS = {\n date: '####/##/##',\n datetime: '####/##/## ##:##',\n time: '##:##',\n fulltime: '##:##:##',\n phone: '(###) ### - ####',\n card: '#### #### #### ####'\n}\n\nconst TOKENS = {\n '#': { pattern: '[\\\\d]', negate: '[^\\\\d]' },\n\n S: { pattern: '[a-zA-Z]', negate: '[^a-zA-Z]' },\n N: { pattern: '[0-9a-zA-Z]', negate: '[^0-9a-zA-Z]' },\n\n A: { pattern: '[a-zA-Z]', negate: '[^a-zA-Z]', transform: v => v.toLocaleUpperCase() },\n a: { pattern: '[a-zA-Z]', negate: '[^a-zA-Z]', transform: v => v.toLocaleLowerCase() },\n\n X: { pattern: '[0-9a-zA-Z]', negate: '[^0-9a-zA-Z]', transform: v => v.toLocaleUpperCase() },\n x: { pattern: '[0-9a-zA-Z]', negate: '[^0-9a-zA-Z]', transform: v => v.toLocaleLowerCase() }\n}\n\nconst KEYS = Object.keys(TOKENS)\nKEYS.forEach(key => {\n TOKENS[ key ].regex = new RegExp(TOKENS[ key ].pattern)\n})\n\nconst\n tokenRegexMask = new RegExp('\\\\\\\\([^.*+?^${}()|([\\\\]])|([.*+?^${}()|[\\\\]])|([' + KEYS.join('') + '])|(.)', 'g'),\n escRegex = /[.*+?^${}()|[\\]\\\\]/g\n\nconst MARKER = String.fromCharCode(1)\n\nexport const useMaskProps = {\n mask: String,\n reverseFillMask: Boolean,\n fillMask: [ Boolean, String ],\n unmaskedValue: Boolean\n}\n\nexport default function (props, emit, emitValue, inputRef) {\n let maskMarked, maskReplaced, computedMask, computedUnmask\n\n const hasMask = ref(null)\n const innerValue = ref(getInitialMaskedValue())\n\n function getIsTypeText () {\n return props.autogrow === true\n || [ 'textarea', 'text', 'search', 'url', 'tel', 'password' ].includes(props.type)\n }\n\n watch(() => props.type + props.autogrow, updateMaskInternals)\n\n watch(() => props.mask, v => {\n if (v !== void 0) {\n updateMaskValue(innerValue.value, true)\n }\n else {\n const val = unmaskValue(innerValue.value)\n updateMaskInternals()\n props.modelValue !== val && emit('update:modelValue', val)\n }\n })\n\n watch(() => props.fillMask + props.reverseFillMask, () => {\n hasMask.value === true && updateMaskValue(innerValue.value, true)\n })\n\n watch(() => props.unmaskedValue, () => {\n hasMask.value === true && updateMaskValue(innerValue.value)\n })\n\n function getInitialMaskedValue () {\n updateMaskInternals()\n\n if (hasMask.value === true) {\n const masked = maskValue(unmaskValue(props.modelValue))\n\n return props.fillMask !== false\n ? fillWithMask(masked)\n : masked\n }\n\n return props.modelValue\n }\n\n function getPaddedMaskMarked (size) {\n if (size < maskMarked.length) {\n return maskMarked.slice(-size)\n }\n\n let pad = '', localMaskMarked = maskMarked\n const padPos = localMaskMarked.indexOf(MARKER)\n\n if (padPos > -1) {\n for (let i = size - localMaskMarked.length; i > 0; i--) {\n pad += MARKER\n }\n\n localMaskMarked = localMaskMarked.slice(0, padPos) + pad + localMaskMarked.slice(padPos)\n }\n\n return localMaskMarked\n }\n\n function updateMaskInternals () {\n hasMask.value = props.mask !== void 0\n && props.mask.length > 0\n && getIsTypeText()\n\n if (hasMask.value === false) {\n computedUnmask = void 0\n maskMarked = ''\n maskReplaced = ''\n return\n }\n\n const\n localComputedMask = NAMED_MASKS[ props.mask ] === void 0\n ? props.mask\n : NAMED_MASKS[ props.mask ],\n fillChar = typeof props.fillMask === 'string' && props.fillMask.length > 0\n ? props.fillMask.slice(0, 1)\n : '_',\n fillCharEscaped = fillChar.replace(escRegex, '\\\\$&'),\n unmask = [],\n extract = [],\n mask = []\n\n let\n firstMatch = props.reverseFillMask === true,\n unmaskChar = '',\n negateChar = ''\n\n localComputedMask.replace(tokenRegexMask, (_, char1, esc, token, char2) => {\n if (token !== void 0) {\n const c = TOKENS[ token ]\n mask.push(c)\n negateChar = c.negate\n if (firstMatch === true) {\n extract.push('(?:' + negateChar + '+)?(' + c.pattern + '+)?(?:' + negateChar + '+)?(' + c.pattern + '+)?')\n firstMatch = false\n }\n extract.push('(?:' + negateChar + '+)?(' + c.pattern + ')?')\n }\n else if (esc !== void 0) {\n unmaskChar = '\\\\' + (esc === '\\\\' ? '' : esc)\n mask.push(esc)\n unmask.push('([^' + unmaskChar + ']+)?' + unmaskChar + '?')\n }\n else {\n const c = char1 !== void 0 ? char1 : char2\n unmaskChar = c === '\\\\' ? '\\\\\\\\\\\\\\\\' : c.replace(escRegex, '\\\\\\\\$&')\n mask.push(c)\n unmask.push('([^' + unmaskChar + ']+)?' + unmaskChar + '?')\n }\n })\n\n const\n unmaskMatcher = new RegExp(\n '^'\n + unmask.join('')\n + '(' + (unmaskChar === '' ? '.' : '[^' + unmaskChar + ']') + '+)?'\n + '$'\n ),\n extractLast = extract.length - 1,\n extractMatcher = extract.map((re, index) => {\n if (index === 0 && props.reverseFillMask === true) {\n return new RegExp('^' + fillCharEscaped + '*' + re)\n }\n else if (index === extractLast) {\n return new RegExp(\n '^' + re\n + '(' + (negateChar === '' ? '.' : negateChar) + '+)?'\n + (props.reverseFillMask === true ? '$' : fillCharEscaped + '*')\n )\n }\n\n return new RegExp('^' + re)\n })\n\n computedMask = mask\n computedUnmask = val => {\n const unmaskMatch = unmaskMatcher.exec(val)\n if (unmaskMatch !== null) {\n val = unmaskMatch.slice(1).join('')\n }\n\n const\n extractMatch = [],\n extractMatcherLength = extractMatcher.length\n\n for (let i = 0, str = val; i < extractMatcherLength; i++) {\n const m = extractMatcher[ i ].exec(str)\n\n if (m === null) {\n break\n }\n\n str = str.slice(m.shift().length)\n extractMatch.push(...m)\n }\n if (extractMatch.length > 0) {\n return extractMatch.join('')\n }\n\n return val\n }\n maskMarked = mask.map(v => (typeof v === 'string' ? v : MARKER)).join('')\n maskReplaced = maskMarked.split(MARKER).join(fillChar)\n }\n\n function updateMaskValue (rawVal, updateMaskInternalsFlag, inputType) {\n const\n inp = inputRef.value,\n end = inp.selectionEnd,\n endReverse = inp.value.length - end,\n unmasked = unmaskValue(rawVal)\n\n // Update here so unmask uses the original fillChar\n updateMaskInternalsFlag === true && updateMaskInternals()\n\n const\n preMasked = maskValue(unmasked),\n masked = props.fillMask !== false\n ? fillWithMask(preMasked)\n : preMasked,\n changed = innerValue.value !== masked\n\n // We want to avoid \"flickering\" so we set value immediately\n inp.value !== masked && (inp.value = masked)\n\n changed === true && (innerValue.value = masked)\n\n document.activeElement === inp && nextTick(() => {\n if (masked === maskReplaced) {\n const cursor = props.reverseFillMask === true ? maskReplaced.length : 0\n inp.setSelectionRange(cursor, cursor, 'forward')\n\n return\n }\n\n if (inputType === 'insertFromPaste' && props.reverseFillMask !== true) {\n const cursor = end - 1\n moveCursor.right(inp, cursor, cursor)\n\n return\n }\n\n if ([ 'deleteContentBackward', 'deleteContentForward' ].indexOf(inputType) > -1) {\n const cursor = props.reverseFillMask === true\n ? (\n end === 0\n ? (masked.length > preMasked.length ? 1 : 0)\n : Math.max(0, masked.length - (masked === maskReplaced ? 0 : Math.min(preMasked.length, endReverse) + 1)) + 1\n )\n : end\n\n inp.setSelectionRange(cursor, cursor, 'forward')\n return\n }\n\n if (props.reverseFillMask === true) {\n if (changed === true) {\n const cursor = Math.max(0, masked.length - (masked === maskReplaced ? 0 : Math.min(preMasked.length, endReverse + 1)))\n\n if (cursor === 1 && end === 1) {\n inp.setSelectionRange(cursor, cursor, 'forward')\n }\n else {\n moveCursor.rightReverse(inp, cursor, cursor)\n }\n }\n else {\n const cursor = masked.length - endReverse\n inp.setSelectionRange(cursor, cursor, 'backward')\n }\n }\n else {\n if (changed === true) {\n const cursor = Math.max(0, maskMarked.indexOf(MARKER), Math.min(preMasked.length, end) - 1)\n moveCursor.right(inp, cursor, cursor)\n }\n else {\n const cursor = end - 1\n moveCursor.right(inp, cursor, cursor)\n }\n }\n })\n\n const val = props.unmaskedValue === true\n ? unmaskValue(masked)\n : masked\n\n String(props.modelValue) !== val && emitValue(val, true)\n }\n\n function moveCursorForPaste (inp, start, end) {\n const preMasked = maskValue(unmaskValue(inp.value))\n\n start = Math.max(0, maskMarked.indexOf(MARKER), Math.min(preMasked.length, start))\n\n inp.setSelectionRange(start, end, 'forward')\n }\n\n const moveCursor = {\n left (inp, start, end, selection) {\n const noMarkBefore = maskMarked.slice(start - 1).indexOf(MARKER) === -1\n let i = Math.max(0, start - 1)\n\n for (; i >= 0; i--) {\n if (maskMarked[ i ] === MARKER) {\n start = i\n noMarkBefore === true && start++\n break\n }\n }\n\n if (\n i < 0\n && maskMarked[ start ] !== void 0\n && maskMarked[ start ] !== MARKER\n ) {\n return moveCursor.right(inp, 0, 0)\n }\n\n start >= 0 && inp.setSelectionRange(\n start,\n selection === true ? end : start, 'backward'\n )\n },\n\n right (inp, start, end, selection) {\n const limit = inp.value.length\n let i = Math.min(limit, end + 1)\n\n for (; i <= limit; i++) {\n if (maskMarked[ i ] === MARKER) {\n end = i\n break\n }\n else if (maskMarked[ i - 1 ] === MARKER) {\n end = i\n }\n }\n\n if (\n i > limit\n && maskMarked[ end - 1 ] !== void 0\n && maskMarked[ end - 1 ] !== MARKER\n ) {\n return moveCursor.left(inp, limit, limit)\n }\n\n inp.setSelectionRange(selection ? start : end, end, 'forward')\n },\n\n leftReverse (inp, start, end, selection) {\n const\n localMaskMarked = getPaddedMaskMarked(inp.value.length)\n let i = Math.max(0, start - 1)\n\n for (; i >= 0; i--) {\n if (localMaskMarked[ i - 1 ] === MARKER) {\n start = i\n break\n }\n else if (localMaskMarked[ i ] === MARKER) {\n start = i\n if (i === 0) {\n break\n }\n }\n }\n\n if (\n i < 0\n && localMaskMarked[ start ] !== void 0\n && localMaskMarked[ start ] !== MARKER\n ) {\n return moveCursor.rightReverse(inp, 0, 0)\n }\n\n start >= 0 && inp.setSelectionRange(\n start,\n selection === true ? end : start, 'backward'\n )\n },\n\n rightReverse (inp, start, end, selection) {\n const\n limit = inp.value.length,\n localMaskMarked = getPaddedMaskMarked(limit),\n noMarkBefore = localMaskMarked.slice(0, end + 1).indexOf(MARKER) === -1\n let i = Math.min(limit, end + 1)\n\n for (; i <= limit; i++) {\n if (localMaskMarked[ i - 1 ] === MARKER) {\n end = i\n end > 0 && noMarkBefore === true && end--\n break\n }\n }\n\n if (\n i > limit\n && localMaskMarked[ end - 1 ] !== void 0\n && localMaskMarked[ end - 1 ] !== MARKER\n ) {\n return moveCursor.leftReverse(inp, limit, limit)\n }\n\n inp.setSelectionRange(selection === true ? start : end, end, 'forward')\n }\n }\n\n function onMaskedKeydown (e) {\n if (shouldIgnoreKey(e) === true) {\n return\n }\n\n const\n inp = inputRef.value,\n start = inp.selectionStart,\n end = inp.selectionEnd\n\n if (e.keyCode === 37 || e.keyCode === 39) { // Left / Right\n const fn = moveCursor[ (e.keyCode === 39 ? 'right' : 'left') + (props.reverseFillMask === true ? 'Reverse' : '') ]\n\n e.preventDefault()\n fn(inp, start, end, e.shiftKey)\n }\n else if (\n e.keyCode === 8 // Backspace\n && props.reverseFillMask !== true\n && start === end\n ) {\n moveCursor.left(inp, start, end, true)\n }\n else if (\n e.keyCode === 46 // Delete\n && props.reverseFillMask === true\n && start === end\n ) {\n moveCursor.rightReverse(inp, start, end, true)\n }\n }\n\n function maskValue (val) {\n if (val === void 0 || val === null || val === '') { return '' }\n\n if (props.reverseFillMask === true) {\n return maskValueReverse(val)\n }\n\n const mask = computedMask\n\n let valIndex = 0, output = ''\n\n for (let maskIndex = 0; maskIndex < mask.length; maskIndex++) {\n const\n valChar = val[ valIndex ],\n maskDef = mask[ maskIndex ]\n\n if (typeof maskDef === 'string') {\n output += maskDef\n valChar === maskDef && valIndex++\n }\n else if (valChar !== void 0 && maskDef.regex.test(valChar)) {\n output += maskDef.transform !== void 0\n ? maskDef.transform(valChar)\n : valChar\n valIndex++\n }\n else {\n return output\n }\n }\n\n return output\n }\n\n function maskValueReverse (val) {\n const\n mask = computedMask,\n firstTokenIndex = maskMarked.indexOf(MARKER)\n\n let valIndex = val.length - 1, output = ''\n\n for (let maskIndex = mask.length - 1; maskIndex >= 0 && valIndex > -1; maskIndex--) {\n const maskDef = mask[ maskIndex ]\n\n let valChar = val[ valIndex ]\n\n if (typeof maskDef === 'string') {\n output = maskDef + output\n valChar === maskDef && valIndex--\n }\n else if (valChar !== void 0 && maskDef.regex.test(valChar)) {\n do {\n output = (maskDef.transform !== void 0 ? maskDef.transform(valChar) : valChar) + output\n valIndex--\n valChar = val[ valIndex ]\n // eslint-disable-next-line no-unmodified-loop-condition\n } while (firstTokenIndex === maskIndex && valChar !== void 0 && maskDef.regex.test(valChar))\n }\n else {\n return output\n }\n }\n\n return output\n }\n\n function unmaskValue (val) {\n return typeof val !== 'string' || computedUnmask === void 0\n ? (typeof val === 'number' ? computedUnmask('' + val) : val)\n : computedUnmask(val)\n }\n\n function fillWithMask (val) {\n if (maskReplaced.length - val.length <= 0) {\n return val\n }\n\n return props.reverseFillMask === true && val.length > 0\n ? maskReplaced.slice(0, -val.length) + val\n : val + maskReplaced.slice(val.length)\n }\n\n return {\n innerValue,\n hasMask,\n moveCursorForPaste,\n updateMaskValue,\n onMaskedKeydown\n }\n}\n","import { computed } from 'vue'\n\nexport default function (props, typeGuard) {\n function getFormDomProps () {\n const model = props.modelValue\n\n try {\n const dt = 'DataTransfer' in window\n ? new DataTransfer()\n : ('ClipboardEvent' in window\n ? new ClipboardEvent('').clipboardData\n : void 0\n )\n\n if (Object(model) === model) {\n ('length' in model\n ? Array.from(model)\n : [ model ]\n ).forEach(file => {\n dt.items.add(file)\n })\n }\n\n return {\n files: dt.files\n }\n }\n catch (e) {\n return {\n files: void 0\n }\n }\n }\n\n return typeGuard === true\n ? computed(() => {\n if (props.type !== 'file') {\n return\n }\n\n return getFormDomProps()\n })\n : computed(getFormDomProps)\n}\n","import { h, ref, computed, watch, onBeforeUnmount, onMounted, nextTick, getCurrentInstance } from 'vue'\n\nimport useField, { useFieldState, useFieldProps, useFieldEmits, fieldValueIsFilled } from '../../composables/private/use-field.js'\nimport useMask, { useMaskProps } from './use-mask.js'\nimport { useFormProps, useFormInputNameAttr } from '../../composables/private/use-form.js'\nimport useFileFormDomProps from '../../composables/private/use-file-dom-props.js'\nimport useKeyComposition from '../../composables/private/use-key-composition.js'\n\nimport { createComponent } from '../../utils/private/create.js'\nimport { stop } from '../../utils/event.js'\nimport { addFocusFn } from '../../utils/private/focus-manager.js'\n\nexport default createComponent({\n name: 'QInput',\n\n inheritAttrs: false,\n\n props: {\n ...useFieldProps,\n ...useMaskProps,\n ...useFormProps,\n\n modelValue: { required: false },\n\n shadowText: String,\n\n type: {\n type: String,\n default: 'text'\n },\n\n debounce: [ String, Number ],\n\n autogrow: Boolean, // makes a textarea\n\n inputClass: [ Array, String, Object ],\n inputStyle: [ Array, String, Object ]\n },\n\n emits: [\n ...useFieldEmits,\n 'paste', 'change'\n ],\n\n setup (props, { emit, attrs }) {\n const temp = {}\n let emitCachedValue = NaN, typedNumber, stopValueWatcher, emitTimer, emitValueFn\n\n const inputRef = ref(null)\n const nameProp = useFormInputNameAttr(props)\n\n const {\n innerValue,\n hasMask,\n moveCursorForPaste,\n updateMaskValue,\n onMaskedKeydown\n } = useMask(props, emit, emitValue, inputRef)\n\n const formDomProps = useFileFormDomProps(props, /* type guard */ true)\n const hasValue = computed(() => fieldValueIsFilled(innerValue.value))\n\n const onComposition = useKeyComposition(onInput)\n\n const state = useFieldState()\n\n const isTextarea = computed(() =>\n props.type === 'textarea' || props.autogrow === true\n )\n\n const isTypeText = computed(() =>\n isTextarea.value === true\n || [ 'text', 'search', 'url', 'tel', 'password' ].includes(props.type)\n )\n\n const onEvents = computed(() => {\n const evt = {\n ...state.splitAttrs.listeners.value,\n onInput,\n onPaste,\n // Safari < 10.2 & UIWebView doesn't fire compositionend when\n // switching focus before confirming composition choice\n // this also fixes the issue where some browsers e.g. iOS Chrome\n // fires \"change\" instead of \"input\" on autocomplete.\n onChange,\n onBlur: onFinishEditing,\n onFocus: stop\n }\n\n evt.onCompositionstart = evt.onCompositionupdate = evt.onCompositionend = onComposition\n\n if (hasMask.value === true) {\n evt.onKeydown = onMaskedKeydown\n }\n\n if (props.autogrow === true) {\n evt.onAnimationend = adjustHeight\n }\n\n return evt\n })\n\n const inputAttrs = computed(() => {\n const attrs = {\n tabindex: 0,\n 'data-autofocus': props.autofocus === true || void 0,\n rows: props.type === 'textarea' ? 6 : void 0,\n 'aria-label': props.label,\n name: nameProp.value,\n ...state.splitAttrs.attributes.value,\n id: state.targetUid.value,\n maxlength: props.maxlength,\n disabled: props.disable === true,\n readonly: props.readonly === true\n }\n\n if (isTextarea.value === false) {\n attrs.type = props.type\n }\n\n if (props.autogrow === true) {\n attrs.rows = 1\n }\n\n return attrs\n })\n\n // some browsers lose the native input value\n // so we need to reattach it dynamically\n // (like type=\"password\" <-> type=\"text\"; see #12078)\n watch(() => props.type, () => {\n if (inputRef.value) {\n inputRef.value.value = props.modelValue\n }\n })\n\n watch(() => props.modelValue, v => {\n if (hasMask.value === true) {\n if (stopValueWatcher === true) {\n stopValueWatcher = false\n return\n }\n\n updateMaskValue(v)\n }\n else if (innerValue.value !== v) {\n innerValue.value = v\n\n if (\n props.type === 'number'\n && temp.hasOwnProperty('value') === true\n ) {\n if (typedNumber === true) {\n typedNumber = false\n }\n else {\n delete temp.value\n }\n }\n }\n\n // textarea only\n props.autogrow === true && nextTick(adjustHeight)\n })\n\n watch(() => props.autogrow, val => {\n // textarea only\n if (val === true) {\n nextTick(adjustHeight)\n }\n // if it has a number of rows set respect it\n else if (inputRef.value !== null && attrs.rows > 0) {\n inputRef.value.style.height = 'auto'\n }\n })\n\n watch(() => props.dense, () => {\n props.autogrow === true && nextTick(adjustHeight)\n })\n\n function focus () {\n addFocusFn(() => {\n const el = document.activeElement\n if (\n inputRef.value !== null\n && inputRef.value !== el\n && (el === null || el.id !== state.targetUid.value)\n ) {\n inputRef.value.focus({ preventScroll: true })\n }\n })\n }\n\n function select () {\n inputRef.value !== null && inputRef.value.select()\n }\n\n function onPaste (e) {\n if (hasMask.value === true && props.reverseFillMask !== true) {\n const inp = e.target\n moveCursorForPaste(inp, inp.selectionStart, inp.selectionEnd)\n }\n\n emit('paste', e)\n }\n\n function onInput (e) {\n if (!e || !e.target || e.target.composing === true) {\n return\n }\n\n if (props.type === 'file') {\n emit('update:modelValue', e.target.files)\n return\n }\n\n const val = e.target.value\n\n if (hasMask.value === true) {\n updateMaskValue(val, false, e.inputType)\n }\n else {\n emitValue(val)\n\n if (isTypeText.value === true && e.target === document.activeElement) {\n const { selectionStart, selectionEnd } = e.target\n\n if (selectionStart !== void 0 && selectionEnd !== void 0) {\n nextTick(() => {\n if (e.target === document.activeElement && val.indexOf(e.target.value) === 0) {\n e.target.setSelectionRange(selectionStart, selectionEnd)\n }\n })\n }\n }\n }\n\n // we need to trigger it immediately too,\n // to avoid \"flickering\"\n props.autogrow === true && adjustHeight()\n }\n\n function emitValue (val, stopWatcher) {\n emitValueFn = () => {\n if (\n props.type !== 'number'\n && temp.hasOwnProperty('value') === true\n ) {\n delete temp.value\n }\n\n if (props.modelValue !== val && emitCachedValue !== val) {\n stopWatcher === true && (stopValueWatcher = true)\n emit('update:modelValue', val)\n\n nextTick(() => {\n emitCachedValue === val && (emitCachedValue = NaN)\n })\n }\n\n emitValueFn = void 0\n }\n\n if (props.type === 'number') {\n typedNumber = true\n temp.value = val\n }\n\n if (props.debounce !== void 0) {\n clearTimeout(emitTimer)\n temp.value = val\n emitTimer = setTimeout(emitValueFn, props.debounce)\n }\n else {\n emitValueFn()\n }\n }\n\n // textarea only\n function adjustHeight () {\n const inp = inputRef.value\n if (inp !== null) {\n const parentStyle = inp.parentNode.style\n\n // reset height of textarea to a small size to detect the real height\n // but keep the total control size the same\n parentStyle.marginBottom = (inp.scrollHeight - 1) + 'px'\n inp.style.height = '1px'\n\n inp.style.height = inp.scrollHeight + 'px'\n parentStyle.marginBottom = ''\n }\n }\n\n function onChange (e) {\n onComposition(e)\n\n clearTimeout(emitTimer)\n emitValueFn !== void 0 && emitValueFn()\n\n emit('change', e.target.value)\n }\n\n function onFinishEditing (e) {\n e !== void 0 && stop(e)\n\n clearTimeout(emitTimer)\n emitValueFn !== void 0 && emitValueFn()\n\n typedNumber = false\n stopValueWatcher = false\n delete temp.value\n\n // we need to use setTimeout instead of this.$nextTick\n // to avoid a bug where focusout is not emitted for type date/time/week/...\n props.type !== 'file' && setTimeout(() => {\n if (inputRef.value !== null) {\n inputRef.value.value = innerValue.value !== void 0 ? innerValue.value : ''\n }\n })\n }\n\n function getCurValue () {\n return temp.hasOwnProperty('value') === true\n ? temp.value\n : (innerValue.value !== void 0 ? innerValue.value : '')\n }\n\n onBeforeUnmount(() => {\n onFinishEditing()\n })\n\n onMounted(() => {\n // textarea only\n props.autogrow === true && adjustHeight()\n })\n\n Object.assign(state, {\n innerValue,\n\n fieldClass: computed(() =>\n `q-${ isTextarea.value === true ? 'textarea' : 'input' }`\n + (props.autogrow === true ? ' q-textarea--autogrow' : '')\n ),\n\n hasShadow: computed(() =>\n props.type !== 'file'\n && typeof props.shadowText === 'string'\n && props.shadowText.length > 0\n ),\n\n inputRef,\n\n emitValue,\n\n hasValue,\n\n floatingLabel: computed(() =>\n hasValue.value === true\n || fieldValueIsFilled(props.displayValue)\n ),\n\n getControl: () => {\n return h(isTextarea.value === true ? 'textarea' : 'input', {\n ref: inputRef,\n class: [\n 'q-field__native q-placeholder',\n props.inputClass\n ],\n style: props.inputStyle,\n ...inputAttrs.value,\n ...onEvents.value,\n ...(\n props.type !== 'file'\n ? { value: getCurValue() }\n : formDomProps.value\n )\n })\n },\n\n getShadowControl: () => {\n return h('div', {\n class: 'q-field__native q-field__shadow absolute-bottom no-pointer-events'\n + (isTextarea.value === true ? '' : ' text-no-wrap')\n }, [\n h('span', { class: 'invisible' }, getCurValue()),\n h('span', props.shadowText)\n ])\n }\n })\n\n const renderFn = useField(state)\n\n // expose public methods\n const vm = getCurrentInstance()\n Object.assign(vm.proxy, {\n focus,\n select,\n getNativeElement: () => inputRef.value\n })\n\n return renderFn\n }\n})\n","import { Expose } from 'class-transformer';\r\n\r\ntype StateName =\r\n | 'AC'\r\n | 'AL'\r\n | 'AM'\r\n | 'AP'\r\n | 'BA'\r\n | 'CE'\r\n | 'DF'\r\n | 'ES'\r\n | 'GO'\r\n | 'MA'\r\n | 'MG'\r\n | 'MS'\r\n | 'MT'\r\n | 'PA'\r\n | 'PB'\r\n | 'PE'\r\n | 'PI'\r\n | 'PR'\r\n | 'RJ'\r\n | 'RN'\r\n | 'RO'\r\n | 'RR'\r\n | 'RS'\r\n | 'SC'\r\n | 'SE'\r\n | 'SP'\r\n | 'TO';\r\n\r\nclass State {\r\n @Expose()\r\n public id: number;\r\n\r\n @Expose()\r\n public name: StateName;\r\n\r\n constructor(id: number, name: StateName) {\r\n this.id = id;\r\n this.name = name;\r\n }\r\n}\r\n\r\nexport { State };\r\n","import { CapacidadeTampaoP } from '@/models/capacidade-tampao-p';\r\nimport { Crop } from '@/models/crop';\r\nimport mustache from 'mustache';\r\nimport { NivelCriticoP } from '@/models/nivel-critico-p';\r\nimport { ReportAnalysisItem } from '@/models/report-analysis-item';\r\nimport { instanceToPlain, plainToInstance } from 'class-transformer';\r\nimport { MeasurementLevel, MeasurementLevelType } from '@/models/measurement-level';\r\n\r\ninterface CalculatedValues {\r\n identifier: string;\r\n value: number | string;\r\n}\r\n\r\ninterface CustomFunctions {\r\n [key: string]: (params: { [key: string]: unknown }) => number | string;\r\n}\r\n\r\nconst calculateValues = (\r\n items: ReportAnalysisItem[],\r\n crops: Crop[],\r\n niveisCriticosP: NivelCriticoP[],\r\n capacidadesTampaoP: CapacidadeTampaoP[],\r\n measurementLevels: MeasurementLevel[]\r\n): ReportAnalysisItem[] => {\r\n const calculated: CalculatedValues[] = items\r\n .filter((item) => item.analysisItem.type === 'input' || item.analysisItem.type === 'select')\r\n .map((item) => ({ identifier: item.analysisItem.identifier, value: item.value }));\r\n\r\n items.forEach((item) => {\r\n calculateValue(\r\n item,\r\n items,\r\n calculated,\r\n crops,\r\n niveisCriticosP,\r\n capacidadesTampaoP,\r\n measurementLevels\r\n );\r\n });\r\n\r\n const result = plainToInstance(ReportAnalysisItem, instanceToPlain(items) as never[]);\r\n\r\n const context = getContext(calculated);\r\n\r\n result.forEach((item) => (item.value = context[item.analysisItem.identifier]));\r\n\r\n return result;\r\n};\r\n\r\nconst calculateValue = (\r\n item: ReportAnalysisItem,\r\n items: ReportAnalysisItem[],\r\n calculated: CalculatedValues[],\r\n crops: Crop[],\r\n niveisCriticosP: NivelCriticoP[],\r\n capacidadesTampaoP: CapacidadeTampaoP[],\r\n measurementLevels: MeasurementLevel[]\r\n) => {\r\n const index = calculated.findIndex((el) => el.identifier === item.analysisItem.identifier);\r\n\r\n if (item.analysisItem.expression !== null && index === -1) {\r\n const dependencies = getDependencies(item);\r\n\r\n dependencies.forEach((dep) => {\r\n const depIndex = items.findIndex((depItem) => depItem.analysisItem.identifier === dep);\r\n\r\n if (items[depIndex] === undefined) {\r\n console.log(dep);\r\n }\r\n\r\n calculateValue(\r\n items[depIndex],\r\n items,\r\n calculated,\r\n crops,\r\n niveisCriticosP,\r\n capacidadesTampaoP,\r\n measurementLevels\r\n );\r\n });\r\n\r\n let value: number | string = 0;\r\n\r\n const context = getContext(calculated);\r\n const replacedString = mustache.render(item.analysisItem.expression, context);\r\n\r\n try {\r\n if (item.analysisItem.type === 'auto') {\r\n value = eval(replacedString);\r\n } else if (item.analysisItem.type === 'function') {\r\n const [functionName, param1, param2, param3, param4, param5] = replacedString.split(',');\r\n\r\n if (customFunctions[functionName]) {\r\n value = customFunctions[functionName]({\r\n param1,\r\n param2,\r\n param3,\r\n param4,\r\n param5,\r\n crops,\r\n niveisCriticosP,\r\n capacidadesTampaoP,\r\n measurementLevels,\r\n });\r\n }\r\n }\r\n } catch (e) {\r\n value = 0;\r\n }\r\n\r\n calculated.push({ identifier: item.analysisItem.identifier, value });\r\n }\r\n};\r\n\r\nconst getDependencies = (item: ReportAnalysisItem): string[] => {\r\n const findMustacheRegex = new RegExp('{{([a-zA-Z0-9/])*}}', 'g');\r\n\r\n const result = item.analysisItem.expression?.match(findMustacheRegex)?.map((str) => {\r\n let replaced = str.replace('{{', '');\r\n replaced = replaced.replace('}}', '');\r\n\r\n return replaced;\r\n });\r\n\r\n return result || [];\r\n};\r\n\r\nconst getContext = (calculated: CalculatedValues[]) => {\r\n const result: { [key: string]: string | number } = {};\r\n\r\n calculated.forEach((el) => (result[el.identifier] = el.value));\r\n\r\n return result;\r\n};\r\n\r\nconst extracao = (params: { [key: string]: unknown }): number | string => {\r\n let result = 0;\r\n const cropName = params.param1;\r\n const substanceCode = params.param2;\r\n const crops = params.crops;\r\n\r\n const index = crops.findIndex((crop) => crop.name === cropName);\r\n\r\n if (index !== -1) {\r\n result = crops[index].extraction?.find((el) => el.substance.code === substanceCode)?.value || 0;\r\n }\r\n\r\n return result;\r\n};\r\n\r\nconst exportacao = (params: { [key: string]: unknown }): number | string => {\r\n let result = 0;\r\n const cropName = params.param1;\r\n const substanceCode = params.param2;\r\n const crops = params.crops;\r\n\r\n const index = crops.findIndex((crop) => crop.name === cropName);\r\n\r\n if (index !== -1) {\r\n result =\r\n crops[index].exportation?.find((el) => el.substance.code === substanceCode)?.value || 0;\r\n }\r\n\r\n return result;\r\n};\r\n\r\nconst nivelCriticoP = (params: { [key: string]: unknown }): number | string => {\r\n let result = 0;\r\n const argila = Number.parseFloat(params.param1 as string);\r\n const extrator = params.param2;\r\n const niveisCriticosP = params.niveisCriticosP;\r\n\r\n const key = extrator === 'Mehlich-1' ? 'mehlich1' : 'resina';\r\n const roundedArgila = Math.floor(argila);\r\n\r\n const index = niveisCriticosP.findIndex((nivel) => nivel.argila === roundedArgila);\r\n\r\n if (index !== -1) {\r\n result = niveisCriticosP[index][key];\r\n }\r\n\r\n return result;\r\n};\r\n\r\nconst recomendacaoKCL = (params: { [key: string]: unknown }): number | string => {\r\n\r\n const K2OExtracaoCultura = Number.parseFloat(params.param1 as string);\r\n const K2OElevacaoCTC = Number.parseFloat(params.param2 as string);\r\n\r\n let value = K2OExtracaoCultura + K2OElevacaoCTC\r\n\r\n if (value < 0) {\r\n return 0;\r\n } else {\r\n return value;\r\n }\r\n};\r\n\r\nconst capacidadeTampaoP = (params: { [key: string]: unknown }): number | string => {\r\n let result = 0;\r\n const argila = Number.parseFloat(params.param1 as string);\r\n const extrator = params.param2;\r\n const capacidadesTampaoP = params.capacidadesTampaoP;\r\n\r\n const key = extrator === 'Mehlich-1' ? 'mehlich1' : 'resina';\r\n const roundedArgila = Math.floor(argila);\r\n\r\n const index = capacidadesTampaoP.findIndex((nivel) => nivel.argila === roundedArgila);\r\n\r\n if (index !== -1) {\r\n result = capacidadesTampaoP[index][key];\r\n }\r\n\r\n return result;\r\n};\r\n\r\nconst recomendacaoCalagem = (params: { [key: string]: unknown }): number | string => {\r\n const aplicacaoDeCalcario = params.param1;\r\n const acrescimoCaO = Number.parseFloat(params.param2 as string);\r\n const CaO = Number.parseFloat(params.param3 as string);\r\n const PRNT = Number.parseFloat(params.param4 as string);\r\n\r\n const multiplier = aplicacaoDeCalcario === 'Superficial' ? 1.15 : 1;\r\n\r\n return ((1000 * acrescimoCaO) / (CaO * 10 * (PRNT / 100))) * multiplier;\r\n};\r\n\r\nconst gessagem = (params: { [key: string]: unknown }): number | string => {\r\n const saturacaoAl = Number.parseFloat(params.param1 as string);\r\n const S2040 = Number.parseFloat(params.param2 as string);\r\n const argila = Number.parseFloat(params.param3 as string);\r\n\r\n if (saturacaoAl > 15 || S2040 < 10) {\r\n return argila * 50;\r\n } else {\r\n return 'Não é necessária';\r\n }\r\n};\r\n\r\nconst fertilizacaoS = (params: { [key: string]: unknown }): number | string => {\r\n const saturacaoAl = Number.parseFloat(params.param1 as string);\r\n const S020 = Number.parseFloat(params.param2 as string);\r\n const S2040 = Number.parseFloat(params.param3 as string);\r\n const extracaoS = Number.parseFloat(params.param4 as string);\r\n const producaoEsperada = Number.parseFloat(params.param5 as string);\r\n\r\n let value;\r\n\r\n if (!(saturacaoAl > 15 || S2040 < 10)) {\r\n value = (producaoEsperada / 1000) * extracaoS - (S020 + S2040) * 2;\r\n } else {\r\n value = 0;\r\n }\r\n\r\n if (value < 0){\r\n value = 0;\r\n }\r\n\r\n return value;\r\n};\r\n\r\nconst recomendacaoS = (params: { [key: string]: unknown }): number | string => {\r\n const saturacaoAl = Number.parseFloat(params.param1 as string);\r\n const S2040 = Number.parseFloat(params.param2 as string);\r\n const extracaoS = Number.parseFloat(params.param3 as string);\r\n const exportacaoS = Number.parseFloat(params.param4 as string);\r\n const producaoEsperada = Number.parseFloat(params.param5 as string);\r\n\r\n let value;\r\n\r\n if (saturacaoAl > 15 || S2040 < 10) {\r\n value = (producaoEsperada / 1000) * extracaoS;\r\n } else {\r\n value = (producaoEsperada / 1000) * exportacaoS;\r\n }\r\n\r\n return value;\r\n};\r\n\r\n\r\nconst nivel = (params: { [key: string]: unknown }): number | string => {\r\n const extractor = params.param1;\r\n const substanceCode = params.param2;\r\n const value = Number.parseFloat(params.param3 as string);\r\n const measurementLevels = params.measurementLevels;\r\n\r\n const levels = measurementLevels.filter((el) => {\r\n return el.substance.code === substanceCode && el.extractor === extractor;\r\n });\r\n\r\n return getLevel(levels, value);\r\n};\r\n\r\nconst getLevel = (levels: MeasurementLevel[], value: number): MeasurementLevelType => {\r\n for (let i = 0; i < levels.length; i += 1) {\r\n const level = levels[i];\r\n\r\n if (level.assert(value)) {\r\n return level.level;\r\n }\r\n }\r\n\r\n return 'low';\r\n};\r\n\r\nconst necessidadeMicronutriente = (params: { [key: string]: unknown }): number | string => {\r\n const substanceCode = params.param1;\r\n const extracao = Number.parseFloat(params.param2 as string);\r\n const exportacao = Number.parseFloat(params.param3 as string);\r\n const nivel = params.param4;\r\n const producaoEsperada = Number.parseFloat(params.param5 as string);\r\n\r\n if(substanceCode === 'Fe'){\r\n return nivel === 'low'\r\n ? (producaoEsperada / 1000) * exportacao\r\n : 0;\r\n }\r\n\r\n /* if(substanceCode === 'N' && extracao != 50.62){\r\n return (producaoEsperada / 1000) * extracao\r\n } */\r\n\r\n return nivel === 'low' || nivel === 'mid'\r\n ? (producaoEsperada / 1000) * extracao\r\n : (producaoEsperada / 1000) * exportacao; \r\n\r\n};\r\n\r\nconst necessidadeMicronutrienteN = (params: { [key: string]: unknown }): number | string => {\r\n const extracao = Number.parseFloat(params.param1 as string);\r\n const MO = Number.parseFloat(params.param2 as string);\r\n const producaoEsperada = Number.parseFloat(params.param3 as string);\r\n const cropName = params.param4;\r\n\r\n if(cropName == 'Soja'){\r\n return 0\r\n } \r\n else {\r\n return (producaoEsperada / 1000) * extracao - MO * 2.5;\r\n }\r\n};\r\n\r\nconst customFunctions: CustomFunctions = {\r\n extracao,\r\n exportacao,\r\n nivelCriticoP,\r\n capacidadeTampaoP,\r\n recomendacaoKCL,\r\n recomendacaoCalagem,\r\n recomendacaoS,\r\n necessidadeMicronutrienteN,\r\n gessagem,\r\n fertilizacaoS,\r\n nivel,\r\n necessidadeMicronutriente,\r\n};\r\n\r\nexport { calculateValues };\r\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toString = require('../internals/to-string');\nvar fails = require('../internals/fails');\nvar internalSort = require('../internals/array-sort');\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar FF = require('../internals/engine-ff-version');\nvar IE_OR_EDGE = require('../internals/engine-is-ie-or-edge');\nvar V8 = require('../internals/engine-v8-version');\nvar WEBKIT = require('../internals/engine-webkit-version');\n\nvar test = [];\nvar un$Sort = uncurryThis(test.sort);\nvar push = uncurryThis(test.push);\n\n// IE8-\nvar FAILS_ON_UNDEFINED = fails(function () {\n test.sort(undefined);\n});\n// V8 bug\nvar FAILS_ON_NULL = fails(function () {\n test.sort(null);\n});\n// Old WebKit\nvar STRICT_METHOD = arrayMethodIsStrict('sort');\n\nvar STABLE_SORT = !fails(function () {\n // feature detection can be too slow, so check engines versions\n if (V8) return V8 < 70;\n if (FF && FF > 3) return;\n if (IE_OR_EDGE) return true;\n if (WEBKIT) return WEBKIT < 603;\n\n var result = '';\n var code, chr, value, index;\n\n // generate an array with more 512 elements (Chakra and old V8 fails only in this case)\n for (code = 65; code < 76; code++) {\n chr = String.fromCharCode(code);\n\n switch (code) {\n case 66: case 69: case 70: case 72: value = 3; break;\n case 68: case 71: value = 4; break;\n default: value = 2;\n }\n\n for (index = 0; index < 47; index++) {\n test.push({ k: chr + index, v: value });\n }\n }\n\n test.sort(function (a, b) { return b.v - a.v; });\n\n for (index = 0; index < test.length; index++) {\n chr = test[index].k.charAt(0);\n if (result.charAt(result.length - 1) !== chr) result += chr;\n }\n\n return result !== 'DGBEFHACIJK';\n});\n\nvar FORCED = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || !STRICT_METHOD || !STABLE_SORT;\n\nvar getSortCompare = function (comparefn) {\n return function (x, y) {\n if (y === undefined) return -1;\n if (x === undefined) return 1;\n if (comparefn !== undefined) return +comparefn(x, y) || 0;\n return toString(x) > toString(y) ? 1 : -1;\n };\n};\n\n// `Array.prototype.sort` method\n// https://tc39.es/ecma262/#sec-array.prototype.sort\n$({ target: 'Array', proto: true, forced: FORCED }, {\n sort: function sort(comparefn) {\n if (comparefn !== undefined) aCallable(comparefn);\n\n var array = toObject(this);\n\n if (STABLE_SORT) return comparefn === undefined ? un$Sort(array) : un$Sort(array, comparefn);\n\n var items = [];\n var arrayLength = lengthOfArrayLike(array);\n var itemsLength, index;\n\n for (index = 0; index < arrayLength; index++) {\n if (index in array) push(items, array[index]);\n }\n\n internalSort(items, getSortCompare(comparefn));\n\n itemsLength = items.length;\n index = 0;\n\n while (index < itemsLength) array[index] = items[index++];\n while (index < arrayLength) delete array[index++];\n\n return array;\n }\n});\n","import { Expose } from 'class-transformer';\r\n\r\nclass NivelCriticoP {\r\n @Expose()\r\n public id: number;\r\n\r\n @Expose()\r\n public argila: number;\r\n\r\n @Expose()\r\n public mehlich1: number;\r\n\r\n @Expose()\r\n public resina: number;\r\n\r\n constructor(id: number, argila: number, mehlich1: number, resina: number) {\r\n this.id = id;\r\n this.argila = argila;\r\n this.mehlich1 = mehlich1;\r\n this.resina = resina;\r\n }\r\n}\r\n\r\nexport { NivelCriticoP };\r\n","import { Expose } from 'class-transformer';\r\nimport { Model } from './model';\r\nimport { Moment } from 'moment';\r\n\r\ntype AnalysisItemType = 'input' | 'auto' | 'select' | 'function';\r\n\r\nenum AnalysisItemTypeString {\r\n input = 'Campo Input',\r\n auto = 'Campo Autocomplete',\r\n select = 'Campo Seletor',\r\n function = 'Função',\r\n}\r\n\r\nclass AnalysisItem extends Model {\r\n @Expose()\r\n public identifier: string;\r\n\r\n @Expose()\r\n public text: string;\r\n\r\n @Expose()\r\n public unit: string;\r\n\r\n @Expose()\r\n public group: string | null;\r\n\r\n @Expose()\r\n public expression: string | null;\r\n\r\n @Expose()\r\n public hidden: boolean;\r\n\r\n @Expose()\r\n public type: AnalysisItemType;\r\n\r\n @Expose()\r\n public order: number;\r\n\r\n @Expose({ name: 'select_options' })\r\n public selectOptions: string[] | null;\r\n\r\n constructor(\r\n id: number | null,\r\n createdAt: Moment,\r\n updatedAt: Moment,\r\n deletedAt: Moment | null,\r\n identifier: string,\r\n text: string,\r\n unit: string,\r\n group: string,\r\n expression: string,\r\n hidden: boolean,\r\n type: AnalysisItemType,\r\n order: number,\r\n selectOptions: string[] | null\r\n ) {\r\n super(id, createdAt, updatedAt, deletedAt);\r\n this.identifier = identifier;\r\n this.text = text;\r\n this.unit = unit;\r\n this.group = group;\r\n this.expression = expression;\r\n this.hidden = hidden;\r\n this.type = type;\r\n this.order = order;\r\n this.selectOptions = selectOptions;\r\n }\r\n}\r\n\r\nexport { AnalysisItem, AnalysisItemType, AnalysisItemTypeString };\r\n","var global = require('../internals/global');\nvar fails = require('../internals/fails');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toString = require('../internals/to-string');\nvar trim = require('../internals/string-trim').trim;\nvar whitespaces = require('../internals/whitespaces');\n\nvar charAt = uncurryThis(''.charAt);\nvar n$ParseFloat = global.parseFloat;\nvar Symbol = global.Symbol;\nvar ITERATOR = Symbol && Symbol.iterator;\nvar FORCED = 1 / n$ParseFloat(whitespaces + '-0') !== -Infinity\n // MS Edge 18- broken with boxed symbols\n || (ITERATOR && !fails(function () { n$ParseFloat(Object(ITERATOR)); }));\n\n// `parseFloat` method\n// https://tc39.es/ecma262/#sec-parsefloat-string\nmodule.exports = FORCED ? function parseFloat(string) {\n var trimmedString = trim(toString(string));\n var result = n$ParseFloat(trimmedString);\n return result === 0 && charAt(trimmedString, 0) == '-' ? -0 : result;\n} : n$ParseFloat;\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = global || self, global.Mustache = factory());\n}(this, (function () { 'use strict';\n\n /*!\n * mustache.js - Logic-less {{mustache}} templates with JavaScript\n * http://github.com/janl/mustache.js\n */\n\n var objectToString = Object.prototype.toString;\n var isArray = Array.isArray || function isArrayPolyfill (object) {\n return objectToString.call(object) === '[object Array]';\n };\n\n function isFunction (object) {\n return typeof object === 'function';\n }\n\n /**\n * More correct typeof string handling array\n * which normally returns typeof 'object'\n */\n function typeStr (obj) {\n return isArray(obj) ? 'array' : typeof obj;\n }\n\n function escapeRegExp (string) {\n return string.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, '\\\\$&');\n }\n\n /**\n * Null safe way of checking whether or not an object,\n * including its prototype, has a given property\n */\n function hasProperty (obj, propName) {\n return obj != null && typeof obj === 'object' && (propName in obj);\n }\n\n /**\n * Safe way of detecting whether or not the given thing is a primitive and\n * whether it has the given property\n */\n function primitiveHasOwnProperty (primitive, propName) {\n return (\n primitive != null\n && typeof primitive !== 'object'\n && primitive.hasOwnProperty\n && primitive.hasOwnProperty(propName)\n );\n }\n\n // Workaround for https://issues.apache.org/jira/browse/COUCHDB-577\n // See https://github.com/janl/mustache.js/issues/189\n var regExpTest = RegExp.prototype.test;\n function testRegExp (re, string) {\n return regExpTest.call(re, string);\n }\n\n var nonSpaceRe = /\\S/;\n function isWhitespace (string) {\n return !testRegExp(nonSpaceRe, string);\n }\n\n var entityMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '/': '/',\n '`': '`',\n '=': '='\n };\n\n function escapeHtml (string) {\n return String(string).replace(/[&<>\"'`=\\/]/g, function fromEntityMap (s) {\n return entityMap[s];\n });\n }\n\n var whiteRe = /\\s*/;\n var spaceRe = /\\s+/;\n var equalsRe = /\\s*=/;\n var curlyRe = /\\s*\\}/;\n var tagRe = /#|\\^|\\/|>|\\{|&|=|!/;\n\n /**\n * Breaks up the given `template` string into a tree of tokens. If the `tags`\n * argument is given here it must be an array with two string values: the\n * opening and closing tags used in the template (e.g. [ \"<%\", \"%>\" ]). Of\n * course, the default is to use mustaches (i.e. mustache.tags).\n *\n * A token is an array with at least 4 elements. The first element is the\n * mustache symbol that was used inside the tag, e.g. \"#\" or \"&\". If the tag\n * did not contain a symbol (i.e. {{myValue}}) this element is \"name\". For\n * all text that appears outside a symbol this element is \"text\".\n *\n * The second element of a token is its \"value\". For mustache tags this is\n * whatever else was inside the tag besides the opening symbol. For text tokens\n * this is the text itself.\n *\n * The third and fourth elements of the token are the start and end indices,\n * respectively, of the token in the original template.\n *\n * Tokens that are the root node of a subtree contain two more elements: 1) an\n * array of tokens in the subtree and 2) the index in the original template at\n * which the closing tag for that section begins.\n *\n * Tokens for partials also contain two more elements: 1) a string value of\n * indendation prior to that tag and 2) the index of that tag on that line -\n * eg a value of 2 indicates the partial is the third tag on this line.\n */\n function parseTemplate (template, tags) {\n if (!template)\n return [];\n var lineHasNonSpace = false;\n var sections = []; // Stack to hold section tokens\n var tokens = []; // Buffer to hold the tokens\n var spaces = []; // Indices of whitespace tokens on the current line\n var hasTag = false; // Is there a {{tag}} on the current line?\n var nonSpace = false; // Is there a non-space char on the current line?\n var indentation = ''; // Tracks indentation for tags that use it\n var tagIndex = 0; // Stores a count of number of tags encountered on a line\n\n // Strips all whitespace tokens array for the current line\n // if there was a {{#tag}} on it and otherwise only space.\n function stripSpace () {\n if (hasTag && !nonSpace) {\n while (spaces.length)\n delete tokens[spaces.pop()];\n } else {\n spaces = [];\n }\n\n hasTag = false;\n nonSpace = false;\n }\n\n var openingTagRe, closingTagRe, closingCurlyRe;\n function compileTags (tagsToCompile) {\n if (typeof tagsToCompile === 'string')\n tagsToCompile = tagsToCompile.split(spaceRe, 2);\n\n if (!isArray(tagsToCompile) || tagsToCompile.length !== 2)\n throw new Error('Invalid tags: ' + tagsToCompile);\n\n openingTagRe = new RegExp(escapeRegExp(tagsToCompile[0]) + '\\\\s*');\n closingTagRe = new RegExp('\\\\s*' + escapeRegExp(tagsToCompile[1]));\n closingCurlyRe = new RegExp('\\\\s*' + escapeRegExp('}' + tagsToCompile[1]));\n }\n\n compileTags(tags || mustache.tags);\n\n var scanner = new Scanner(template);\n\n var start, type, value, chr, token, openSection;\n while (!scanner.eos()) {\n start = scanner.pos;\n\n // Match any text between tags.\n value = scanner.scanUntil(openingTagRe);\n\n if (value) {\n for (var i = 0, valueLength = value.length; i < valueLength; ++i) {\n chr = value.charAt(i);\n\n if (isWhitespace(chr)) {\n spaces.push(tokens.length);\n indentation += chr;\n } else {\n nonSpace = true;\n lineHasNonSpace = true;\n indentation += ' ';\n }\n\n tokens.push([ 'text', chr, start, start + 1 ]);\n start += 1;\n\n // Check for whitespace on the current line.\n if (chr === '\\n') {\n stripSpace();\n indentation = '';\n tagIndex = 0;\n lineHasNonSpace = false;\n }\n }\n }\n\n // Match the opening tag.\n if (!scanner.scan(openingTagRe))\n break;\n\n hasTag = true;\n\n // Get the tag type.\n type = scanner.scan(tagRe) || 'name';\n scanner.scan(whiteRe);\n\n // Get the tag value.\n if (type === '=') {\n value = scanner.scanUntil(equalsRe);\n scanner.scan(equalsRe);\n scanner.scanUntil(closingTagRe);\n } else if (type === '{') {\n value = scanner.scanUntil(closingCurlyRe);\n scanner.scan(curlyRe);\n scanner.scanUntil(closingTagRe);\n type = '&';\n } else {\n value = scanner.scanUntil(closingTagRe);\n }\n\n // Match the closing tag.\n if (!scanner.scan(closingTagRe))\n throw new Error('Unclosed tag at ' + scanner.pos);\n\n if (type == '>') {\n token = [ type, value, start, scanner.pos, indentation, tagIndex, lineHasNonSpace ];\n } else {\n token = [ type, value, start, scanner.pos ];\n }\n tagIndex++;\n tokens.push(token);\n\n if (type === '#' || type === '^') {\n sections.push(token);\n } else if (type === '/') {\n // Check section nesting.\n openSection = sections.pop();\n\n if (!openSection)\n throw new Error('Unopened section \"' + value + '\" at ' + start);\n\n if (openSection[1] !== value)\n throw new Error('Unclosed section \"' + openSection[1] + '\" at ' + start);\n } else if (type === 'name' || type === '{' || type === '&') {\n nonSpace = true;\n } else if (type === '=') {\n // Set the tags for the next time around.\n compileTags(value);\n }\n }\n\n stripSpace();\n\n // Make sure there are no open sections when we're done.\n openSection = sections.pop();\n\n if (openSection)\n throw new Error('Unclosed section \"' + openSection[1] + '\" at ' + scanner.pos);\n\n return nestTokens(squashTokens(tokens));\n }\n\n /**\n * Combines the values of consecutive text tokens in the given `tokens` array\n * to a single token.\n */\n function squashTokens (tokens) {\n var squashedTokens = [];\n\n var token, lastToken;\n for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {\n token = tokens[i];\n\n if (token) {\n if (token[0] === 'text' && lastToken && lastToken[0] === 'text') {\n lastToken[1] += token[1];\n lastToken[3] = token[3];\n } else {\n squashedTokens.push(token);\n lastToken = token;\n }\n }\n }\n\n return squashedTokens;\n }\n\n /**\n * Forms the given array of `tokens` into a nested tree structure where\n * tokens that represent a section have two additional items: 1) an array of\n * all tokens that appear in that section and 2) the index in the original\n * template that represents the end of that section.\n */\n function nestTokens (tokens) {\n var nestedTokens = [];\n var collector = nestedTokens;\n var sections = [];\n\n var token, section;\n for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {\n token = tokens[i];\n\n switch (token[0]) {\n case '#':\n case '^':\n collector.push(token);\n sections.push(token);\n collector = token[4] = [];\n break;\n case '/':\n section = sections.pop();\n section[5] = token[2];\n collector = sections.length > 0 ? sections[sections.length - 1][4] : nestedTokens;\n break;\n default:\n collector.push(token);\n }\n }\n\n return nestedTokens;\n }\n\n /**\n * A simple string scanner that is used by the template parser to find\n * tokens in template strings.\n */\n function Scanner (string) {\n this.string = string;\n this.tail = string;\n this.pos = 0;\n }\n\n /**\n * Returns `true` if the tail is empty (end of string).\n */\n Scanner.prototype.eos = function eos () {\n return this.tail === '';\n };\n\n /**\n * Tries to match the given regular expression at the current position.\n * Returns the matched text if it can match, the empty string otherwise.\n */\n Scanner.prototype.scan = function scan (re) {\n var match = this.tail.match(re);\n\n if (!match || match.index !== 0)\n return '';\n\n var string = match[0];\n\n this.tail = this.tail.substring(string.length);\n this.pos += string.length;\n\n return string;\n };\n\n /**\n * Skips all text until the given regular expression can be matched. Returns\n * the skipped string, which is the entire tail if no match can be made.\n */\n Scanner.prototype.scanUntil = function scanUntil (re) {\n var index = this.tail.search(re), match;\n\n switch (index) {\n case -1:\n match = this.tail;\n this.tail = '';\n break;\n case 0:\n match = '';\n break;\n default:\n match = this.tail.substring(0, index);\n this.tail = this.tail.substring(index);\n }\n\n this.pos += match.length;\n\n return match;\n };\n\n /**\n * Represents a rendering context by wrapping a view object and\n * maintaining a reference to the parent context.\n */\n function Context (view, parentContext) {\n this.view = view;\n this.cache = { '.': this.view };\n this.parent = parentContext;\n }\n\n /**\n * Creates a new context using the given view with this context\n * as the parent.\n */\n Context.prototype.push = function push (view) {\n return new Context(view, this);\n };\n\n /**\n * Returns the value of the given name in this context, traversing\n * up the context hierarchy if the value is absent in this context's view.\n */\n Context.prototype.lookup = function lookup (name) {\n var cache = this.cache;\n\n var value;\n if (cache.hasOwnProperty(name)) {\n value = cache[name];\n } else {\n var context = this, intermediateValue, names, index, lookupHit = false;\n\n while (context) {\n if (name.indexOf('.') > 0) {\n intermediateValue = context.view;\n names = name.split('.');\n index = 0;\n\n /**\n * Using the dot notion path in `name`, we descend through the\n * nested objects.\n *\n * To be certain that the lookup has been successful, we have to\n * check if the last object in the path actually has the property\n * we are looking for. We store the result in `lookupHit`.\n *\n * This is specially necessary for when the value has been set to\n * `undefined` and we want to avoid looking up parent contexts.\n *\n * In the case where dot notation is used, we consider the lookup\n * to be successful even if the last \"object\" in the path is\n * not actually an object but a primitive (e.g., a string, or an\n * integer), because it is sometimes useful to access a property\n * of an autoboxed primitive, such as the length of a string.\n **/\n while (intermediateValue != null && index < names.length) {\n if (index === names.length - 1)\n lookupHit = (\n hasProperty(intermediateValue, names[index])\n || primitiveHasOwnProperty(intermediateValue, names[index])\n );\n\n intermediateValue = intermediateValue[names[index++]];\n }\n } else {\n intermediateValue = context.view[name];\n\n /**\n * Only checking against `hasProperty`, which always returns `false` if\n * `context.view` is not an object. Deliberately omitting the check\n * against `primitiveHasOwnProperty` if dot notation is not used.\n *\n * Consider this example:\n * ```\n * Mustache.render(\"The length of a football field is {{#length}}{{length}}{{/length}}.\", {length: \"100 yards\"})\n * ```\n *\n * If we were to check also against `primitiveHasOwnProperty`, as we do\n * in the dot notation case, then render call would return:\n *\n * \"The length of a football field is 9.\"\n *\n * rather than the expected:\n *\n * \"The length of a football field is 100 yards.\"\n **/\n lookupHit = hasProperty(context.view, name);\n }\n\n if (lookupHit) {\n value = intermediateValue;\n break;\n }\n\n context = context.parent;\n }\n\n cache[name] = value;\n }\n\n if (isFunction(value))\n value = value.call(this.view);\n\n return value;\n };\n\n /**\n * A Writer knows how to take a stream of tokens and render them to a\n * string, given a context. It also maintains a cache of templates to\n * avoid the need to parse the same template twice.\n */\n function Writer () {\n this.templateCache = {\n _cache: {},\n set: function set (key, value) {\n this._cache[key] = value;\n },\n get: function get (key) {\n return this._cache[key];\n },\n clear: function clear () {\n this._cache = {};\n }\n };\n }\n\n /**\n * Clears all cached templates in this writer.\n */\n Writer.prototype.clearCache = function clearCache () {\n if (typeof this.templateCache !== 'undefined') {\n this.templateCache.clear();\n }\n };\n\n /**\n * Parses and caches the given `template` according to the given `tags` or\n * `mustache.tags` if `tags` is omitted, and returns the array of tokens\n * that is generated from the parse.\n */\n Writer.prototype.parse = function parse (template, tags) {\n var cache = this.templateCache;\n var cacheKey = template + ':' + (tags || mustache.tags).join(':');\n var isCacheEnabled = typeof cache !== 'undefined';\n var tokens = isCacheEnabled ? cache.get(cacheKey) : undefined;\n\n if (tokens == undefined) {\n tokens = parseTemplate(template, tags);\n isCacheEnabled && cache.set(cacheKey, tokens);\n }\n return tokens;\n };\n\n /**\n * High-level method that is used to render the given `template` with\n * the given `view`.\n *\n * The optional `partials` argument may be an object that contains the\n * names and templates of partials that are used in the template. It may\n * also be a function that is used to load partial templates on the fly\n * that takes a single argument: the name of the partial.\n *\n * If the optional `config` argument is given here, then it should be an\n * object with a `tags` attribute or an `escape` attribute or both.\n * If an array is passed, then it will be interpreted the same way as\n * a `tags` attribute on a `config` object.\n *\n * The `tags` attribute of a `config` object must be an array with two\n * string values: the opening and closing tags used in the template (e.g.\n * [ \"<%\", \"%>\" ]). The default is to mustache.tags.\n *\n * The `escape` attribute of a `config` object must be a function which\n * accepts a string as input and outputs a safely escaped string.\n * If an `escape` function is not provided, then an HTML-safe string\n * escaping function is used as the default.\n */\n Writer.prototype.render = function render (template, view, partials, config) {\n var tags = this.getConfigTags(config);\n var tokens = this.parse(template, tags);\n var context = (view instanceof Context) ? view : new Context(view, undefined);\n return this.renderTokens(tokens, context, partials, template, config);\n };\n\n /**\n * Low-level method that renders the given array of `tokens` using\n * the given `context` and `partials`.\n *\n * Note: The `originalTemplate` is only ever used to extract the portion\n * of the original template that was contained in a higher-order section.\n * If the template doesn't use higher-order sections, this argument may\n * be omitted.\n */\n Writer.prototype.renderTokens = function renderTokens (tokens, context, partials, originalTemplate, config) {\n var buffer = '';\n\n var token, symbol, value;\n for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {\n value = undefined;\n token = tokens[i];\n symbol = token[0];\n\n if (symbol === '#') value = this.renderSection(token, context, partials, originalTemplate, config);\n else if (symbol === '^') value = this.renderInverted(token, context, partials, originalTemplate, config);\n else if (symbol === '>') value = this.renderPartial(token, context, partials, config);\n else if (symbol === '&') value = this.unescapedValue(token, context);\n else if (symbol === 'name') value = this.escapedValue(token, context, config);\n else if (symbol === 'text') value = this.rawValue(token);\n\n if (value !== undefined)\n buffer += value;\n }\n\n return buffer;\n };\n\n Writer.prototype.renderSection = function renderSection (token, context, partials, originalTemplate, config) {\n var self = this;\n var buffer = '';\n var value = context.lookup(token[1]);\n\n // This function is used to render an arbitrary template\n // in the current context by higher-order sections.\n function subRender (template) {\n return self.render(template, context, partials, config);\n }\n\n if (!value) return;\n\n if (isArray(value)) {\n for (var j = 0, valueLength = value.length; j < valueLength; ++j) {\n buffer += this.renderTokens(token[4], context.push(value[j]), partials, originalTemplate, config);\n }\n } else if (typeof value === 'object' || typeof value === 'string' || typeof value === 'number') {\n buffer += this.renderTokens(token[4], context.push(value), partials, originalTemplate, config);\n } else if (isFunction(value)) {\n if (typeof originalTemplate !== 'string')\n throw new Error('Cannot use higher-order sections without the original template');\n\n // Extract the portion of the original template that the section contains.\n value = value.call(context.view, originalTemplate.slice(token[3], token[5]), subRender);\n\n if (value != null)\n buffer += value;\n } else {\n buffer += this.renderTokens(token[4], context, partials, originalTemplate, config);\n }\n return buffer;\n };\n\n Writer.prototype.renderInverted = function renderInverted (token, context, partials, originalTemplate, config) {\n var value = context.lookup(token[1]);\n\n // Use JavaScript's definition of falsy. Include empty arrays.\n // See https://github.com/janl/mustache.js/issues/186\n if (!value || (isArray(value) && value.length === 0))\n return this.renderTokens(token[4], context, partials, originalTemplate, config);\n };\n\n Writer.prototype.indentPartial = function indentPartial (partial, indentation, lineHasNonSpace) {\n var filteredIndentation = indentation.replace(/[^ \\t]/g, '');\n var partialByNl = partial.split('\\n');\n for (var i = 0; i < partialByNl.length; i++) {\n if (partialByNl[i].length && (i > 0 || !lineHasNonSpace)) {\n partialByNl[i] = filteredIndentation + partialByNl[i];\n }\n }\n return partialByNl.join('\\n');\n };\n\n Writer.prototype.renderPartial = function renderPartial (token, context, partials, config) {\n if (!partials) return;\n var tags = this.getConfigTags(config);\n\n var value = isFunction(partials) ? partials(token[1]) : partials[token[1]];\n if (value != null) {\n var lineHasNonSpace = token[6];\n var tagIndex = token[5];\n var indentation = token[4];\n var indentedValue = value;\n if (tagIndex == 0 && indentation) {\n indentedValue = this.indentPartial(value, indentation, lineHasNonSpace);\n }\n var tokens = this.parse(indentedValue, tags);\n return this.renderTokens(tokens, context, partials, indentedValue, config);\n }\n };\n\n Writer.prototype.unescapedValue = function unescapedValue (token, context) {\n var value = context.lookup(token[1]);\n if (value != null)\n return value;\n };\n\n Writer.prototype.escapedValue = function escapedValue (token, context, config) {\n var escape = this.getConfigEscape(config) || mustache.escape;\n var value = context.lookup(token[1]);\n if (value != null)\n return (typeof value === 'number' && escape === mustache.escape) ? String(value) : escape(value);\n };\n\n Writer.prototype.rawValue = function rawValue (token) {\n return token[1];\n };\n\n Writer.prototype.getConfigTags = function getConfigTags (config) {\n if (isArray(config)) {\n return config;\n }\n else if (config && typeof config === 'object') {\n return config.tags;\n }\n else {\n return undefined;\n }\n };\n\n Writer.prototype.getConfigEscape = function getConfigEscape (config) {\n if (config && typeof config === 'object' && !isArray(config)) {\n return config.escape;\n }\n else {\n return undefined;\n }\n };\n\n var mustache = {\n name: 'mustache.js',\n version: '4.2.0',\n tags: [ '{{', '}}' ],\n clearCache: undefined,\n escape: undefined,\n parse: undefined,\n render: undefined,\n Scanner: undefined,\n Context: undefined,\n Writer: undefined,\n /**\n * Allows a user to override the default caching strategy, by providing an\n * object with set, get and clear methods. This can also be used to disable\n * the cache by setting it to the literal `undefined`.\n */\n set templateCache (cache) {\n defaultWriter.templateCache = cache;\n },\n /**\n * Gets the default or overridden caching object from the default writer.\n */\n get templateCache () {\n return defaultWriter.templateCache;\n }\n };\n\n // All high-level mustache.* functions use this writer.\n var defaultWriter = new Writer();\n\n /**\n * Clears all cached templates in the default writer.\n */\n mustache.clearCache = function clearCache () {\n return defaultWriter.clearCache();\n };\n\n /**\n * Parses and caches the given template in the default writer and returns the\n * array of tokens it contains. Doing this ahead of time avoids the need to\n * parse templates on the fly as they are rendered.\n */\n mustache.parse = function parse (template, tags) {\n return defaultWriter.parse(template, tags);\n };\n\n /**\n * Renders the `template` with the given `view`, `partials`, and `config`\n * using the default writer.\n */\n mustache.render = function render (template, view, partials, config) {\n if (typeof template !== 'string') {\n throw new TypeError('Invalid template! Template should be a \"string\" ' +\n 'but \"' + typeStr(template) + '\" was given as the first ' +\n 'argument for mustache#render(template, view, partials)');\n }\n\n return defaultWriter.render(template, view, partials, config);\n };\n\n // Export the escaping function so that the user may override it.\n // See https://github.com/janl/mustache.js/issues/244\n mustache.escape = escapeHtml;\n\n // Export these mainly for testing, but also for advanced usage.\n mustache.Scanner = Scanner;\n mustache.Context = Context;\n mustache.Writer = Writer;\n\n return mustache;\n\n})));\n","import { Report } from '@/models/report';\r\nimport { ReportAnalysisItem } from '@/models/report-analysis-item';\r\n\r\ninterface ReportForm {\r\n farmer: string;\r\n field: string;\r\n area: number | null;\r\n city: string;\r\n stateId: number | null;\r\n cropId: number | null;\r\n reportAnalysisItems: ReportAnalysisItem[];\r\n}\r\n\r\ninterface ReportFormToRequest {\r\n farmer: string;\r\n field: string;\r\n area: number | null;\r\n city: string;\r\n state_id: number | null;\r\n crop_id: number | null;\r\n report_analysis_items: { analysis_item_id: number; value: number | string }[];\r\n}\r\n\r\nconst getEmptyReportForm = (): ReportForm => ({\r\n farmer: '',\r\n field: '',\r\n area: null,\r\n city: '',\r\n stateId: null,\r\n cropId: null,\r\n reportAnalysisItems: [] as ReportAnalysisItem[],\r\n});\r\n\r\nconst getFormByInstance = (\r\n report: Report,\r\n reportAnalysisItems?: ReportAnalysisItem[]\r\n): ReportForm => ({\r\n farmer: report.farmer,\r\n field: report.field,\r\n area: report.area,\r\n city: report.city,\r\n stateId: report.stateId,\r\n cropId: report.cropId,\r\n reportAnalysisItems: reportAnalysisItems || [],\r\n});\r\n\r\nconst toRequestData = (formData: ReportForm): ReportFormToRequest => {\r\n return {\r\n farmer: formData.farmer,\r\n field: formData.field,\r\n area: formData.area,\r\n city: formData.city,\r\n state_id: formData.stateId,\r\n crop_id: formData.cropId,\r\n report_analysis_items: formData.reportAnalysisItems.map((el) => ({\r\n analysis_item_id: el.analysisItemId,\r\n value: el.value,\r\n })),\r\n };\r\n};\r\n\r\nexport { getEmptyReportForm, getFormByInstance, toRequestData, ReportForm };\r\n","import { AnalysisItem } from './analysis-item';\r\nimport { Expose, Type } from 'class-transformer';\r\n\r\nclass ReportAnalysisItem {\r\n @Expose()\r\n public id: number | null;\r\n\r\n @Expose()\r\n public value: number | string;\r\n\r\n @Expose({ name: 'analysis_item_id' })\r\n public analysisItemId: number;\r\n\r\n @Expose({ name: 'report_id' })\r\n public reportId: number;\r\n\r\n @Expose({ name: 'analysis_item' })\r\n @Type(() => AnalysisItem)\r\n public analysisItem: AnalysisItem;\r\n\r\n constructor(\r\n id: number | null,\r\n value: number,\r\n analysisItemId: number,\r\n reportId: number,\r\n analysisItem: AnalysisItem\r\n ) {\r\n this.id = id;\r\n this.value = value;\r\n this.analysisItemId = analysisItemId;\r\n this.reportId = reportId;\r\n this.analysisItem = analysisItem;\r\n }\r\n}\r\n\r\nexport { ReportAnalysisItem };\r\n","var $ = require('../internals/export');\nvar parseFloat = require('../internals/number-parse-float');\n\n// `Number.parseFloat` method\n// https://tc39.es/ecma262/#sec-number.parseFloat\n// eslint-disable-next-line es/no-number-parsefloat -- required for testing\n$({ target: 'Number', stat: true, forced: Number.parseFloat != parseFloat }, {\n parseFloat: parseFloat\n});\n","import { Model } from './model';\r\nimport { Moment } from 'moment';\r\nimport { Substance } from './substance';\r\nimport { Expose, Type } from 'class-transformer';\r\n\r\nclass CropSubstance extends Model {\r\n @Expose()\r\n public value: number;\r\n\r\n @Expose({ name: 'crop_id' })\r\n public cropId: number;\r\n\r\n @Expose({ name: 'substance_id' })\r\n public substanceId: number;\r\n\r\n @Expose()\r\n @Type(() => Substance)\r\n public substance: Substance;\r\n\r\n constructor(\r\n id: number | null,\r\n createdAt: Moment,\r\n updatedAt: Moment,\r\n deletedAt: Moment,\r\n value: number,\r\n cropId: number,\r\n substanceId: number,\r\n substance: Substance\r\n ) {\r\n super(id, createdAt, updatedAt, deletedAt);\r\n\r\n this.value = value;\r\n this.cropId = cropId;\r\n this.substanceId = substanceId;\r\n this.substance = substance;\r\n }\r\n}\r\n\r\nexport { CropSubstance };\r\n","import { CropSubstance } from './crop-substance';\r\nimport { Model } from './model';\r\nimport { Moment } from 'moment';\r\nimport { Expose, Type } from 'class-transformer';\r\n\r\nclass Crop extends Model {\r\n @Expose()\r\n public name: string;\r\n\r\n @Expose()\r\n @Type(() => CropSubstance)\r\n public exportation?: CropSubstance[];\r\n\r\n @Expose()\r\n @Type(() => CropSubstance)\r\n public extraction?: CropSubstance[];\r\n\r\n constructor(\r\n id: number | null,\r\n createdAt: Moment,\r\n updatedAt: Moment,\r\n deletedAt: Moment | null,\r\n name: string,\r\n exportation: CropSubstance[],\r\n extraction: CropSubstance[]\r\n ) {\r\n super(id, createdAt, updatedAt, deletedAt);\r\n\r\n this.name = name;\r\n this.exportation = exportation;\r\n this.extraction = extraction;\r\n }\r\n}\r\n\r\nexport { Crop };\r\n","import { Expose } from 'class-transformer';\r\nimport { Model } from './model';\r\nimport { Moment } from 'moment';\r\n\r\ntype SubstanceUnit = 'kg' | 'g';\r\n\r\nenum SubstanceUnitString {\r\n kg = 'Kg',\r\n g = 'g',\r\n}\r\n\r\nclass Substance extends Model {\r\n @Expose()\r\n public code: string;\r\n\r\n @Expose({ name: 'utf8_code' })\r\n public utf8Code: string;\r\n\r\n @Expose()\r\n public unit: SubstanceUnit;\r\n\r\n constructor(\r\n id: number | null,\r\n createdAt: Moment,\r\n updatedAt: Moment,\r\n deletedAt: Moment | null,\r\n code: string,\r\n utf8Code: string,\r\n unit: SubstanceUnit\r\n ) {\r\n super(id, createdAt, updatedAt, deletedAt);\r\n\r\n this.code = code;\r\n this.utf8Code = utf8Code;\r\n this.unit = unit;\r\n }\r\n}\r\n\r\nexport { Substance, SubstanceUnit, SubstanceUnitString };\r\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, createBlock as _createBlock, createElementVNode as _createElementVNode, normalizeStyle as _normalizeStyle, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-0b6bbf2a\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"row wrap justify-between aling-start text-center\" }\nconst _hoisted_2 = { class: \"col-12\" }\nconst _hoisted_3 = { class: \"row full-height items-end\" }\nconst _hoisted_4 = {\n key: 0,\n class: \"col-12 group-label\"\n}\nconst _hoisted_5 = { class: \"col-12\" }\nconst _hoisted_6 = { class: \"row\" }\nconst _hoisted_7 = { class: \"row\" }\nconst _hoisted_8 = {\n key: 0,\n class: \"col-12 q-pa-xs item-text\"\n}\nconst _hoisted_9 = {\n key: 1,\n class: \"col-12 q-pa-xs item-unit\"\n}\nconst _hoisted_10 = { class: \"col-12\" }\nconst _hoisted_11 = {\n key: 2,\n class: \"row justify-start items-center q-px-sm item-auto-value\"\n}\nconst _hoisted_12 = { class: \"col-auto\" }\n\nimport { calculateValues } from '../utils';\r\nimport { CapacidadeTampaoP } from '@/models/capacidade-tampao-p';\r\nimport { Crop } from '@/models/crop';\r\nimport { MeasurementLevel } from '@/models/measurement-level';\r\nimport { NivelCriticoP } from '@/models/nivel-critico-p';\r\nimport { ReportAnalysisItem } from '@/models/report-analysis-item';\r\nimport { computed, ref, watch } from 'vue';\r\nimport { instanceToPlain, plainToInstance } from 'class-transformer';\r\n\r\ninterface Props {\r\n items: ReportAnalysisItem[];\r\n crops: Crop[];\r\n niveisCriticosP: NivelCriticoP[];\r\n capacidadesTampaoP: CapacidadeTampaoP[];\r\n measurementLevels: MeasurementLevel[];\r\n}\r\n\r\ninterface Emits {\r\n (e: 'update', value: ReportAnalysisItem[]): void;\r\n}\r\n\r\n\nexport default /*#__PURE__*/_defineComponent({\n props: {\n items: null,\n crops: null,\n niveisCriticosP: null,\n capacidadesTampaoP: null,\n measurementLevels: null\n },\n emits: [\"update\"],\n setup(__props: any, { expose, emit }: { emit: ({\r\n (e: 'update', value: ReportAnalysisItem[]): void;\r\n}), expose: any, slots: any, attrs: any }) {\n\nconst props = __props as {\r\n items: ReportAnalysisItem[];\r\n crops: Crop[];\r\n niveisCriticosP: NivelCriticoP[];\r\n capacidadesTampaoP: CapacidadeTampaoP[];\r\n measurementLevels: MeasurementLevel[];\r\n}\n\r\n\r\n\r\n\r\nconst internalValue = ref([]);\r\n\r\nwatch(\r\n () => props.items,\r\n () => {\r\n internalValue.value = plainToInstance(\r\n ReportAnalysisItem,\r\n instanceToPlain(props.items) as never[]\r\n );\r\n }\r\n);\r\n\r\nconst groups = computed(() => {\r\n const clonedItems = plainToInstance(ReportAnalysisItem, instanceToPlain(props.items) as never[]);\r\n\r\n const items = clonedItems.filter((item) => !item.analysisItem.hidden);\r\n\r\n items.sort((a, b) => a.analysisItem.order - b.analysisItem.order);\r\n\r\n const result = items.reduce((accumulator, item, index) => {\r\n if (index !== 0) {\r\n const accumulatorLastItem = accumulator[accumulator.length - 1];\r\n const lastGroup = accumulatorLastItem[accumulatorLastItem.length - 1].analysisItem.group;\r\n\r\n if (item.analysisItem.group !== null && item.analysisItem.group === lastGroup) {\r\n accumulatorLastItem.push(item);\r\n } else {\r\n accumulator.push([item]);\r\n }\r\n } else {\r\n accumulator.push([item]);\r\n }\r\n\r\n return accumulator;\r\n }, [] as ReportAnalysisItem[][]);\r\n\r\n return result;\r\n});\r\n\r\nconst rows = computed(() => {\r\n const result = [] as ReportAnalysisItem[][][];\r\n let totalRows = 1;\r\n\r\n groups.value.forEach((group, index) => {\r\n if (index !== 0) {\r\n const lastRow = result[result.length - 1];\r\n\r\n const lastRowLength = getRowLength(lastRow);\r\n\r\n if (totalRows == 2 && lastRowLength + group.length <= 8) {\r\n lastRow.push(group);\r\n } else if (lastRowLength + group.length <= 7) {\r\n lastRow.push(group);\r\n } else {\r\n result.push([group]);\r\n totalRows++;\r\n }\r\n } else {\r\n result.push([group]);\r\n }\r\n });\r\n\r\n return result;\r\n});\r\n\r\nconst getRowLength = (row: ReportAnalysisItem[][]) => {\r\n return row.reduce((acc, group) => acc + group.length, 0);\r\n};\r\n\r\nconst getModelIndex = (item: ReportAnalysisItem) => {\r\n const { identifier } = item.analysisItem;\r\n\r\n const index = internalValue.value.findIndex((el) => el.analysisItem.identifier === identifier);\r\n\r\n return index;\r\n};\r\n\r\nconst valueTreatment = (val: string | number) => {\r\n const result = Number(val);\r\n return result % 1 === 0 ? result : result.toFixed(2);\r\n};\r\n\r\nconst emitUpdate = () => {\r\n emit('update', internalValue.value);\r\n};\r\n\r\nconst updateValues = () => {\r\n internalValue.value = calculateValues(\r\n internalValue.value,\r\n props.crops,\r\n props.niveisCriticosP,\r\n props.capacidadesTampaoP,\r\n props.measurementLevels\r\n );\r\n\r\n emitUpdate();\r\n};\r\n\r\nconst updateCrop = (crop: Crop) => {\r\n const index = internalValue.value.findIndex((item) => item.analysisItem.identifier === 'Cultura');\r\n\r\n if (index !== -1) {\r\n internalValue.value[index].value = crop.name;\r\n\r\n updateValues();\r\n }\r\n};\r\n\r\nexpose({ updateCrop });\r\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_input = _resolveComponent(\"q-input\")!\n const _component_q_select = _resolveComponent(\"q-select\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(rows), (row, rowIndex) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"row full-width item-row q-my-md\",\n key: rowIndex\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(row, (group, groupIndex) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"item-group\",\n style: _normalizeStyle({ width: `${(group.length / getRowLength(row)) * 100}%` }),\n key: groupIndex\n }, [\n _createElementVNode(\"div\", _hoisted_3, [\n (group[0].analysisItem.group)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, _toDisplayString(group[0].analysisItem.group), 1))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"div\", _hoisted_6, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(group, (item, itemIndex) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"col item\",\n key: itemIndex\n }, [\n _createElementVNode(\"div\", _hoisted_7, [\n (item.analysisItem.text)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_8, _toDisplayString(item.analysisItem.text), 1))\n : _createCommentVNode(\"\", true),\n (item.analysisItem.unit)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_9, _toDisplayString(item.analysisItem.unit), 1))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_10, [\n (item.analysisItem.type === 'input')\n ? (_openBlock(), _createBlock(_component_q_input, {\n key: 0,\n modelValue: internalValue.value[getModelIndex(item)].value,\n \"onUpdate:modelValue\": [($event: any) => ((internalValue.value[getModelIndex(item)].value) = $event), updateValues],\n type: \"number\",\n filled: item.analysisItem.type === 'input',\n square: \"\",\n dense: \"\",\n debounce: \"500\",\n name: item.analysisItem.identifier\n }, null, 8, [\"modelValue\", \"onUpdate:modelValue\", \"filled\", \"name\"]))\n : (item.analysisItem.type === 'select')\n ? (_openBlock(), _createBlock(_component_q_select, {\n key: 1,\n modelValue: internalValue.value[getModelIndex(item)].value,\n \"onUpdate:modelValue\": [($event: any) => ((internalValue.value[getModelIndex(item)].value) = $event), updateValues],\n options: (item.analysisItem.selectOptions as string[]),\n filled: \"\",\n dense: \"\"\n }, null, 8, [\"modelValue\", \"onUpdate:modelValue\", \"options\"]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_11, [\n _createElementVNode(\"div\", _hoisted_12, _toDisplayString(isNaN(internalValue.value[getModelIndex(item)].value as number)\r\n ? 0\r\n : valueTreatment(internalValue.value[getModelIndex(item)].value)), 1)\n ]))\n ])\n ])\n ]))\n }), 128))\n ])\n ])\n ])\n ], 4))\n }), 128))\n ]))\n }), 128))\n ])\n ]))\n}\n}\n\n})","import script from \"./AnalysisItems.vue?vue&type=script&lang=ts&setup=true\"\nexport * from \"./AnalysisItems.vue?vue&type=script&lang=ts&setup=true\"\n\nimport \"./AnalysisItems.vue?vue&type=style&index=0&id=0b6bbf2a&lang=scss&scoped=true\"\n\nimport exportComponent from \"C:\\\\Users\\\\Scaleao\\\\Desktop\\\\Projetos Timo\\\\nutricao-inteligente-frontend\\\\node_modules\\\\vue-loader-v16\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-0b6bbf2a\"]])\n\nexport default __exports__\nimport QInput from 'quasar/src/components/input/QInput.js';\nimport QSelect from 'quasar/src/components/select/QSelect.js';\nimport qInstall from \"../../../../node_modules/vue-cli-plugin-quasar/lib/runtime.auto-import.js\";\nqInstall(script, 'components', {QInput,QSelect});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, isRef as _isRef, createVNode as _createVNode, createElementVNode as _createElementVNode, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"row full-width q-col-gutter-x-md q-col-gutter-y-sm\" }\nconst _hoisted_2 = { class: \"col-7\" }\nconst _hoisted_3 = { class: \"col-5\" }\nconst _hoisted_4 = { class: \"col-7\" }\nconst _hoisted_5 = { class: \"col-3\" }\nconst _hoisted_6 = { class: \"col-2\" }\nconst _hoisted_7 = { class: \"col-6\" }\nconst _hoisted_8 = { class: \"col-2\" }\nconst _hoisted_9 = { class: \"col-4\" }\nconst _hoisted_10 = { class: \"row justify-start full-width q-mt-xl\" }\nconst _hoisted_11 = { class: \"col\" }\n\nimport AnalysisItems from './AnalysisItems.vue';\r\nimport { api } from '@/utils';\r\nimport { CapacidadeTampaoP } from '@/models/capacidade-tampao-p';\r\nimport { Crop } from '@/models/crop';\r\nimport { FormRules } from '@/utils';\r\nimport { MeasurementLevel } from '@/models/measurement-level';\r\nimport moment from 'moment';\r\nimport { NivelCriticoP } from '@/models/nivel-critico-p';\r\nimport { ReportAnalysisItem } from '@/models/report-analysis-item';\r\nimport { State } from '@/models/state';\r\nimport { useRoute } from 'vue-router';\r\nimport { useStore } from 'vuex';\r\nimport { computed, ref } from 'vue';\r\nimport { getEmptyReportForm, ReportForm } from '../models/report-form';\r\nimport { instanceToPlain, plainToInstance } from 'class-transformer';\r\n\r\ntype SelectOption = { label: string; value: number };\r\n\r\ninterface Props {\r\n modelValue: ReportForm;\r\n states: State[];\r\n crops: Crop[];\r\n reportAnalysisItems: ReportAnalysisItem[];\r\n niveisCriticosP: NivelCriticoP[];\r\n capacidadesTampaoP: CapacidadeTampaoP[];\r\n measurementLevels: MeasurementLevel[];\r\n}\r\n\r\ninterface Emits {\r\n (e: 'update:modelValue', value: ReportForm): void;\r\n}\r\n\r\n\nexport default /*#__PURE__*/_defineComponent({\n props: {\n modelValue: null,\n states: null,\n crops: null,\n reportAnalysisItems: null,\n niveisCriticosP: null,\n capacidadesTampaoP: null,\n measurementLevels: null\n },\n emits: [\"update:modelValue\"],\n setup(__props: any, { expose, emit }: { emit: ({\r\n (e: 'update:modelValue', value: ReportForm): void;\r\n}), expose: any, slots: any, attrs: any }) {\n\nconst props = __props as {\r\n modelValue: ReportForm;\r\n states: State[];\r\n crops: Crop[];\r\n reportAnalysisItems: ReportAnalysisItem[];\r\n niveisCriticosP: NivelCriticoP[];\r\n capacidadesTampaoP: CapacidadeTampaoP[];\r\n measurementLevels: MeasurementLevel[];\r\n}\n\r\n\r\n\r\nconst route = useRoute();\r\n\r\nconst analysisItemsComponent = ref | null>(null);\r\n\r\nconst userTest = useStore();\r\nconst userName = computed(() => userTest.getters.user?.name);\r\nuserTest.dispatch('getUser');\r\n\r\nconst recommendationDate = ref(moment(new Date()).format('YYYY-MM-DD'))\r\nconst internalValue = ref(getEmptyReportForm());\r\n\r\nconst stateOptions = computed(() =>\r\n props.states.map((state) => ({ label: state.name, value: state.id }))\r\n);\r\n\r\nconst cropOptions = computed(() =>\r\n props.crops.map((crop) => ({ label: crop.name, value: crop.id || 0 }))\r\n);\r\n\r\nif(route.params.id){ // É edição, e não criação \r\n api\r\n .get(`report/${route.params.id}`)\r\n .then((response) => {\r\n internalValue.value.area = response.data.report.area\r\n internalValue.value.farmer = response.data.report.farmer\r\n internalValue.value.field = response.data.report.field\r\n internalValue.value.stateId = response.data.report.state_id\r\n internalValue.value.city = response.data.report.city\r\n internalValue.value.cropId = response.data.report.crop_id\r\n recommendationDate.value = response.data.report.created_at.split(\"T\")[0]\r\n\r\n emitUpdate();\r\n })\r\n .catch((error) => {\r\n console.log('Erro ao obter dados das categorias.', error.response);\r\n });\r\n}\r\n\r\nconst initForm = () => {\r\n internalValue.value = props.modelValue;\r\n};\r\n\r\nconst setReportAnalysisItems = (value: ReportAnalysisItem[]) => {\r\n internalValue.value.reportAnalysisItems = plainToInstance(\r\n ReportAnalysisItem,\r\n instanceToPlain(value) as never[]\r\n );\r\n\r\n emitUpdate();\r\n};\r\n\r\nconst emitUpdate = () => {\r\n emit('update:modelValue', internalValue.value);\r\n};\r\n\r\nconst handleCropUpdate = () => {\r\n const index = props.crops.findIndex((crop) => crop.id === internalValue.value.cropId);\r\n\r\n if (index !== -1) {\r\n analysisItemsComponent.value?.updateCrop(props.crops[index]);\r\n }\r\n};\r\n\r\nexpose({ initForm });\r\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_input = _resolveComponent(\"q-input\")!\n const _component_q_select = _resolveComponent(\"q-select\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n _createElementVNode(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(_component_q_input, {\n filled: \"\",\n modelValue: _unref(userName),\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => (_isRef(userName) ? (userName).value = $event : null)),\n label: \"Usuário\",\n disable: \"\"\n }, null, 8, [\"modelValue\"])\n ]),\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(_component_q_input, {\n filled: \"\",\n modelValue: recommendationDate.value,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((recommendationDate).value = $event)),\n type: \"date\",\n label: \"Data da Recomendação\",\n disable: \"\"\n }, null, 8, [\"modelValue\"])\n ]),\n _createElementVNode(\"div\", _hoisted_4, [\n _createVNode(_component_q_input, {\n outlined: \"\",\n modelValue: internalValue.value.farmer,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((internalValue.value.farmer) = $event)),\n label: \"Produtor\",\n \"lazy-rules\": \"\",\n rules: [_unref(FormRules).required]\n }, null, 8, [\"modelValue\", \"rules\"])\n ]),\n _createElementVNode(\"div\", _hoisted_5, [\n _createVNode(_component_q_input, {\n outlined: \"\",\n modelValue: internalValue.value.city,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = ($event: any) => ((internalValue.value.city) = $event)),\n label: \"Município\",\n \"lazy-rules\": \"\",\n rules: [_unref(FormRules).required]\n }, null, 8, [\"modelValue\", \"rules\"])\n ]),\n _createElementVNode(\"div\", _hoisted_6, [\n _createVNode(_component_q_select, {\n outlined: \"\",\n modelValue: internalValue.value.stateId,\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = ($event: any) => ((internalValue.value.stateId) = $event)),\n label: \"Estado\",\n \"lazy-rules\": \"\",\n rules: [_unref(FormRules).required],\n options: _unref(stateOptions),\n \"emit-value\": \"\",\n \"map-options\": \"\"\n }, null, 8, [\"modelValue\", \"rules\", \"options\"])\n ]),\n _createElementVNode(\"div\", _hoisted_7, [\n _createVNode(_component_q_input, {\n outlined: \"\",\n modelValue: internalValue.value.field,\n \"onUpdate:modelValue\": _cache[5] || (_cache[5] = ($event: any) => ((internalValue.value.field) = $event)),\n label: \"Talhão\",\n \"lazy-rules\": \"\",\n rules: [_unref(FormRules).required]\n }, null, 8, [\"modelValue\", \"rules\"])\n ]),\n _createElementVNode(\"div\", _hoisted_8, [\n _createVNode(_component_q_input, {\n outlined: \"\",\n modelValue: internalValue.value.area,\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = ($event: any) => ((internalValue.value.area) = $event)),\n type: \"number\",\n label: \"Área (ha)\",\n \"lazy-rules\": \"\",\n rules: [_unref(FormRules).required]\n }, null, 8, [\"modelValue\", \"rules\"])\n ]),\n _createElementVNode(\"div\", _hoisted_9, [\n _createVNode(_component_q_select, {\n outlined: \"\",\n modelValue: internalValue.value.cropId,\n \"onUpdate:modelValue\": [\n _cache[7] || (_cache[7] = ($event: any) => ((internalValue.value.cropId) = $event)),\n handleCropUpdate\n ],\n label: \"Cultura instalada\",\n \"lazy-rules\": \"\",\n rules: [_unref(FormRules).required],\n options: _unref(cropOptions),\n \"emit-value\": \"\",\n \"map-options\": \"\"\n }, null, 8, [\"modelValue\", \"rules\", \"options\"])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_10, [\n _createElementVNode(\"div\", _hoisted_11, [\n _createVNode(AnalysisItems, {\n ref_key: \"analysisItemsComponent\",\n ref: analysisItemsComponent,\n capacidadesTampaoP: __props.capacidadesTampaoP,\n crops: __props.crops,\n items: __props.reportAnalysisItems,\n niveisCriticosP: __props.niveisCriticosP,\n measurementLevels: __props.measurementLevels,\n onUpdate: setReportAnalysisItems\n }, null, 8, [\"capacidadesTampaoP\", \"crops\", \"items\", \"niveisCriticosP\", \"measurementLevels\"])\n ])\n ])\n ], 64))\n}\n}\n\n})","import script from \"./Form.vue?vue&type=script&lang=ts&setup=true\"\nexport * from \"./Form.vue?vue&type=script&lang=ts&setup=true\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QInput from 'quasar/src/components/input/QInput.js';\nimport QSelect from 'quasar/src/components/select/QSelect.js';\nimport qInstall from \"../../../../node_modules/vue-cli-plugin-quasar/lib/runtime.auto-import.js\";\nqInstall(script, 'components', {QInput,QSelect});\n","import { Expose } from 'class-transformer';\r\nimport { Model } from './model';\r\nimport { Moment } from 'moment';\r\nimport { Substance } from './substance';\r\n\r\ntype MeasurementLevelType = 'low' | 'mid' | 'appropriate' | 'high';\r\ntype MeasurementLevelRule =\r\n | 'less_than'\r\n | 'less_than_or_equal_to'\r\n | 'greater_than'\r\n | 'greater_than_or_equal_to';\r\n\r\nclass MeasurementLevel extends Model {\r\n @Expose()\r\n public level: MeasurementLevelType;\r\n\r\n @Expose({ name: 'value_1' })\r\n public value1: number;\r\n\r\n @Expose({ name: 'rule_value_1' })\r\n public ruleValue1: MeasurementLevelRule;\r\n\r\n @Expose({ name: 'value_2' })\r\n public value2: number | null;\r\n\r\n @Expose({ name: 'rule_value_2' })\r\n public ruleValue2: MeasurementLevelRule | null;\r\n\r\n @Expose()\r\n public extractor: string | null;\r\n\r\n @Expose({ name: 'substance_id' })\r\n public substanceId: number;\r\n\r\n @Expose()\r\n public substance: Substance;\r\n\r\n constructor(\r\n id: number | null,\r\n createdAt: Moment,\r\n updatedAt: Moment,\r\n deletedAt: Moment,\r\n level: MeasurementLevelType,\r\n value1: number,\r\n ruleValue1: MeasurementLevelRule,\r\n value2: number | null,\r\n ruleValue2: MeasurementLevelRule | null,\r\n extractor: string | null,\r\n substanceId: number,\r\n substance: Substance\r\n ) {\r\n super(id, createdAt, updatedAt, deletedAt);\r\n\r\n this.level = level;\r\n this.value1 = value1;\r\n this.ruleValue1 = ruleValue1;\r\n this.value2 = value2;\r\n this.ruleValue2 = ruleValue2;\r\n this.extractor = extractor;\r\n this.substanceId = substanceId;\r\n this.substance = substance;\r\n }\r\n\r\n public assert(value: number): boolean {\r\n const rule1Passed = this.checkRule(value, this.value1, this.ruleValue1);\r\n const rule2Passed =\r\n this.ruleValue2 !== null && this.value2 !== null\r\n ? this.checkRule(value, this.value2 || 0, this.ruleValue2)\r\n : true;\r\n\r\n return rule1Passed && rule2Passed;\r\n }\r\n\r\n private checkRule(value: number, valueToCompare: number, rule: MeasurementLevelRule) {\r\n switch (rule) {\r\n case 'less_than':\r\n return value < valueToCompare;\r\n\r\n case 'less_than_or_equal_to':\r\n return value <= valueToCompare;\r\n\r\n case 'greater_than':\r\n return value > valueToCompare;\r\n\r\n case 'greater_than_or_equal_to':\r\n return value >= valueToCompare;\r\n\r\n default:\r\n return false;\r\n }\r\n }\r\n}\r\n\r\nexport { MeasurementLevel, MeasurementLevelType };\r\n"],"sourceRoot":""}