fix: normalizacao de marca_componente para restricao check_marca_componente_range

This commit is contained in:
2026-09-16 16:30:32 +00:00
parent 94f9efeb95
commit c9e847f13f
4 changed files with 57 additions and 8 deletions
+10 -1
View File
@@ -626,8 +626,17 @@
if (isSubComp) {
currentAssembly.isComposed = 'SIM';
let cleanCompMark = itemMark;
const subMatch = itemMark.match(/-?(\d{4,})$/) || itemMark.match(/(\d{4,})/);
if (subMatch) {
cleanCompMark = subMatch[1];
} else if (itemMark === '-' || !/^\d{4}$/.test(itemMark)) {
cleanCompMark = String(1000 + currentAssembly.components.length);
}
currentAssembly.components.push({
marca: itemMark,
marca: cleanCompMark,
quantidade: itemQuant,
perfil: itemDesc || currentAssembly.descricao,
material: detectedMaterial || 'A36',
+10 -1
View File
@@ -626,8 +626,17 @@
if (isSubComp) {
currentAssembly.isComposed = 'SIM';
let cleanCompMark = itemMark;
const subMatch = itemMark.match(/-?(\d{4,})$/) || itemMark.match(/(\d{4,})/);
if (subMatch) {
cleanCompMark = subMatch[1];
} else if (itemMark === '-' || !/^\d{4}$/.test(itemMark)) {
cleanCompMark = String(1000 + currentAssembly.components.length);
}
currentAssembly.components.push({
marca: itemMark,
marca: cleanCompMark,
quantidade: itemQuant,
perfil: itemDesc || currentAssembly.descricao,
material: detectedMaterial || 'A36',
@@ -500,8 +500,17 @@ const AdvanceSteelConverterContent: React.FC = () => {
if (isSubComp) {
currentAssembly.isComposed = 'SIM';
let cleanCompMark = itemMark;
const subMatch = itemMark.match(/-?(\d{4,})$/) || itemMark.match(/(\d{4,})/);
if (subMatch) {
cleanCompMark = subMatch[1];
} else if (itemMark === '-' || !/^\d{4}$/.test(itemMark)) {
cleanCompMark = String((labels.faixaComponenteMin || 1000) + currentAssembly.components.length);
}
currentAssembly.components.push({
marca: itemMark,
marca: cleanCompMark,
quantidade: itemQuant,
perfil: itemDesc || currentAssembly.descricao,
material: detectedMaterial || 'A36',
+27 -5
View File
@@ -442,13 +442,35 @@ export function usePecas() {
pecasMap.set(pecaKey, pecaData);
}
if (item.marca_componente && item.marca_componente.trim()) {
if (item.marca_componente && String(item.marca_componente).trim()) {
const rawMarca = String(item.marca_componente).trim();
let cleanMarca = rawMarca;
// Extrair a marca numérica pura entre 1000 e 9999 (requisito do banco PostgreSQL)
const matchSuffix = rawMarca.match(/-?(\d{4,})$/) || rawMarca.match(/(\d{4,})/);
if (matchSuffix) {
cleanMarca = matchSuffix[1];
} else {
const digits = rawMarca.replace(/\D/g, '');
if (digits.length >= 4) {
cleanMarca = digits.slice(-4);
} else {
cleanMarca = String(1000 + (componentesMap.get(pecaKey)?.length || 0));
}
}
let numVal = parseInt(cleanMarca, 10);
if (isNaN(numVal) || numVal < 1000 || numVal > 9999) {
numVal = 1000 + (componentesMap.get(pecaKey)?.length || 0);
}
cleanMarca = String(numVal);
const componenteData = {
marca_componente: item.marca_componente.trim(),
descricao: item.descricao_componente || '',
perfil: item.perfil_componente || '',
marca_componente: cleanMarca,
descricao: item.descricao_componente || item.descricao || '',
perfil: item.perfil_componente || item.perfil_principal || '',
peso_unitario: Number(item.peso_unitario_componente) || 0,
quantidade_por_peca: Number(item.quantidade_por_peca) || 1,
quantidade_por_peca: Math.max(1, Math.round(Number(item.quantidade_por_peca) || 1)),
user_id: user.id
};