etiquetas.js 1.0.0-alpha.1 → 1.0.0-alpha.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +122 -38
- package/README.npm.md +0 -0
- package/dist/etiquetas.es.js +65 -0
- package/dist/etiquetas.es.js.map +1 -0
- package/dist/etiquetas.umd.js +358 -0
- package/dist/etiquetas.umd.js.map +1 -0
- package/dist/index-BOlnSrKc.js +59422 -0
- package/dist/index-BOlnSrKc.js.map +1 -0
- package/dist/index.es-BNBDSL51.js +9229 -0
- package/dist/index.es-BNBDSL51.js.map +1 -0
- package/dist/purify.es-DzZgBtzL.js +965 -0
- package/dist/purify.es-DzZgBtzL.js.map +1 -0
- package/package.json +37 -14
- package/README.git.md +0 -486
- package/api/api-labels.json +0 -114
- package/api/api.js +0 -316
- package/api/mock/data-volume-id_680.json +0 -64
- package/api/mock/labels-input.json +0 -96
- package/api/mock/labels-part.json +0 -216
- package/api/mock/labels-scrap.json +0 -76
- package/api/mock/labels-thickened.json +0 -96
- package/api/mock/labels-volume.json +0 -56
- package/api/token.txt +0 -1
- package/services/index.js +0 -28
- package/src/constants.js +0 -247
- package/src/createLabel.js +0 -342
- package/src/etiquetas.js +0 -654
- package/src/formatData.js +0 -96
- package/src/formatDataIntegrated.js +0 -498
- package/src/index.js +0 -86
- package/src/label/services/index.js +0 -1201
- package/src/label/services/sortFunctions.js +0 -158
- package/src/label/services/utils.js +0 -280
- package/src/labelWorker.js +0 -123
- package/src/reducer.js +0 -40
- package/src/store.js +0 -55
- package/src/templates.js +0 -139
- package/src/useLabelData.js +0 -99
- package/src/usePrinterStore.js +0 -115
- package/src/variableManager.js +0 -224
package/src/formatData.js
DELETED
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
export const getPartsForLabels = (
|
|
2
|
-
projectData,
|
|
3
|
-
part,
|
|
4
|
-
sheet,
|
|
5
|
-
sheetIndex,
|
|
6
|
-
key
|
|
7
|
-
) => ({
|
|
8
|
-
i:part.i,
|
|
9
|
-
id: part.id,
|
|
10
|
-
pid: part.pid || null,
|
|
11
|
-
moduleLength:part.moduleLength,
|
|
12
|
-
pref: part.pref,
|
|
13
|
-
mref: part.mref,
|
|
14
|
-
mtype: part?.mType,
|
|
15
|
-
mnote: part.mnote,
|
|
16
|
-
mname: part.mname,
|
|
17
|
-
index: part.index,
|
|
18
|
-
number: part.number,
|
|
19
|
-
key: key,
|
|
20
|
-
sheetMaterial: sheet.material,
|
|
21
|
-
sheetIndex: sheetIndex,
|
|
22
|
-
name: part.name,
|
|
23
|
-
note: part.note,
|
|
24
|
-
width: part.width,
|
|
25
|
-
height: part.height,
|
|
26
|
-
type: part.type,
|
|
27
|
-
edge_left: part.edges.left,
|
|
28
|
-
edge_left_id: part.edges.left_id,
|
|
29
|
-
edge_right: part.edges.right,
|
|
30
|
-
edge_right_id: part.edges.right_id,
|
|
31
|
-
edge_top: part.edges.top,
|
|
32
|
-
edge_top_id: part.edges.top_id,
|
|
33
|
-
edge_bottom: part.edges.bottom,
|
|
34
|
-
edge_bottom_id: part.edges.bottom_id,
|
|
35
|
-
code_a: `${part.code_a}`,
|
|
36
|
-
code_a2: `${part.code_a2}`,
|
|
37
|
-
code_b: `${part.code_b}`,
|
|
38
|
-
code_b2: `${part.code_b2}`,
|
|
39
|
-
group_id:part?.group,
|
|
40
|
-
project_id: part.project_id,
|
|
41
|
-
project_description: part.project_description,
|
|
42
|
-
project_customer_id: part.project_customer_id,
|
|
43
|
-
project_customer_name: part.project_customer_name,
|
|
44
|
-
project_note: part.project_note,
|
|
45
|
-
rotated: part.rotated,
|
|
46
|
-
holes: part.holes_diagram,
|
|
47
|
-
material_name: projectData.name,
|
|
48
|
-
material_id: projectData.material,
|
|
49
|
-
material_width: projectData.width,
|
|
50
|
-
material_height: projectData.height,
|
|
51
|
-
thickness: projectData.thickness,
|
|
52
|
-
labelKey:`${projectData.material}-${projectData.thickness}`,
|
|
53
|
-
machining_side:part.machining_side,
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
});
|
|
57
|
-
export const getInputForLabels = (input, projectInfo, woodwork) => ({
|
|
58
|
-
...input,
|
|
59
|
-
project_id: projectInfo.data.project_id,
|
|
60
|
-
project_description: projectInfo.data.project_description,
|
|
61
|
-
project_customer_id: projectInfo.data.project_customer_id,
|
|
62
|
-
project_customer_name: projectInfo.data.project_customer_name,
|
|
63
|
-
project_note: projectInfo.data.project_note,
|
|
64
|
-
mref: woodwork.ref,
|
|
65
|
-
mname: woodwork.name,
|
|
66
|
-
mnote: woodwork.note,
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
/*export const getWoodWorkForLabels = woodwork => ({...omit(woodwork,['inputs','parts']),
|
|
70
|
-
index: thicknessIndex,
|
|
71
|
-
mref:woodwork.ref,
|
|
72
|
-
mnote:woodwork.note,
|
|
73
|
-
ref:null,
|
|
74
|
-
project_id: v.data.project_id,
|
|
75
|
-
project_description: v.data.project_description,
|
|
76
|
-
project_customer_id: v.data.project_customer_id,
|
|
77
|
-
project_customer_name: v.data.project_customer_name,
|
|
78
|
-
project_note: v.data.project_note,
|
|
79
|
-
})
|
|
80
|
-
*/
|
|
81
|
-
export const getPartsFromProjectToLabels = ({projectPartsByCode,partsByCode,templatePartsByURef}) => Object.entries({ ...projectPartsByCode }).flatMap(([uref, codes]) => {
|
|
82
|
-
return codes.map((code, moduleIndex) => {
|
|
83
|
-
const part = { ...partsByCode[code], ...templatePartsByURef?.[uref] };
|
|
84
|
-
return {
|
|
85
|
-
...part,
|
|
86
|
-
edge_left: part.edge_left,
|
|
87
|
-
edge_right: part.edge_right,
|
|
88
|
-
edge_bottom: part.edge_bottom,
|
|
89
|
-
edge_top: part.edge_top,
|
|
90
|
-
width: part.width / 10,
|
|
91
|
-
height: part.height / 10,
|
|
92
|
-
moduleIndex: moduleIndex + 1,
|
|
93
|
-
holes_diagram: partsByCode[code]?.holes
|
|
94
|
-
};
|
|
95
|
-
});
|
|
96
|
-
});
|
|
@@ -1,498 +0,0 @@
|
|
|
1
|
-
import pkg from "lodash";
|
|
2
|
-
const { omit, groupBy } = pkg;
|
|
3
|
-
|
|
4
|
-
// ============================================================================
|
|
5
|
-
// FUNÇÕES INTEGRADAS DE FORMATAÇÃO DE DADOS
|
|
6
|
-
// ============================================================================
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Formata dados da peça para o formato esperado pelo worker
|
|
10
|
-
* Compatível com diferentes formatos de entrada (projeto, API, etc)
|
|
11
|
-
*/
|
|
12
|
-
export const formatPartData = (dadosPeca) => {
|
|
13
|
-
return {
|
|
14
|
-
// Dados originais
|
|
15
|
-
...dadosPeca,
|
|
16
|
-
type: dadosPeca.type || 'cabinet',
|
|
17
|
-
|
|
18
|
-
// Mapeamento para variáveis do template
|
|
19
|
-
PROJETO_ID: dadosPeca.projeto?.id || dadosPeca.project_id,
|
|
20
|
-
PROJETO_NOME: dadosPeca.projeto?.nome || dadosPeca.project_description,
|
|
21
|
-
CLIENTE_NOME: dadosPeca.projeto?.cliente || dadosPeca.project_customer_name,
|
|
22
|
-
|
|
23
|
-
PECA_ID: dadosPeca.id || dadosPeca.pid,
|
|
24
|
-
PECA_CODIGO: dadosPeca.codigo || dadosPeca.pid || dadosPeca.pref,
|
|
25
|
-
PECA_NOME: dadosPeca.nome || dadosPeca.name,
|
|
26
|
-
PECA_INDICE: dadosPeca.index || dadosPeca.number,
|
|
27
|
-
PECA_NOTA: dadosPeca.note || dadosPeca.mnote,
|
|
28
|
-
|
|
29
|
-
LARGURA: dadosPeca.largura || dadosPeca.width,
|
|
30
|
-
ALTURA: dadosPeca.altura || dadosPeca.height,
|
|
31
|
-
ESPESSURA: dadosPeca.espessura || dadosPeca.thickness,
|
|
32
|
-
|
|
33
|
-
MN: dadosPeca.material?.nome || dadosPeca.material_name,
|
|
34
|
-
|
|
35
|
-
FE: dadosPeca.bordas?.esquerda || dadosPeca.edge_left,
|
|
36
|
-
FD: dadosPeca.bordas?.direita || dadosPeca.edge_right,
|
|
37
|
-
FS: dadosPeca.bordas?.superior || dadosPeca.edge_top,
|
|
38
|
-
FI: dadosPeca.bordas?.inferior || dadosPeca.edge_bottom,
|
|
39
|
-
|
|
40
|
-
// Dados do módulo
|
|
41
|
-
MODULO_REF: dadosPeca.mref,
|
|
42
|
-
MODULO_NOME: dadosPeca.mname,
|
|
43
|
-
MODULO_NOTA: dadosPeca.mnote,
|
|
44
|
-
|
|
45
|
-
// Códigos de furação
|
|
46
|
-
CODIGO_A: dadosPeca.furacao?.codigoA || dadosPeca.code_a,
|
|
47
|
-
CODIGO_B: dadosPeca.furacao?.codigoB || dadosPeca.code_b,
|
|
48
|
-
|
|
49
|
-
// Campos originais para compatibilidade
|
|
50
|
-
material_name: dadosPeca.material?.nome || dadosPeca.material_name,
|
|
51
|
-
material_width: dadosPeca.material?.largura || dadosPeca.material_width,
|
|
52
|
-
material_height: dadosPeca.material?.altura || dadosPeca.material_height,
|
|
53
|
-
edge_left: dadosPeca.bordas?.esquerda || dadosPeca.edge_left,
|
|
54
|
-
edge_right: dadosPeca.bordas?.direita || dadosPeca.edge_right,
|
|
55
|
-
edge_top: dadosPeca.bordas?.superior || dadosPeca.edge_top,
|
|
56
|
-
edge_bottom: dadosPeca.bordas?.inferior || dadosPeca.edge_bottom,
|
|
57
|
-
code_a: dadosPeca.furacao?.codigoA || dadosPeca.code_a,
|
|
58
|
-
code_b: dadosPeca.furacao?.codigoB || dadosPeca.code_b,
|
|
59
|
-
code_a2: dadosPeca.code_a2,
|
|
60
|
-
code_b2: dadosPeca.code_b2,
|
|
61
|
-
machining_side: dadosPeca.furacao?.ladoUsinagem || dadosPeca.machining_side,
|
|
62
|
-
project_id: dadosPeca.projeto?.id || dadosPeca.project_id,
|
|
63
|
-
project_description: dadosPeca.projeto?.nome || dadosPeca.project_description,
|
|
64
|
-
project_customer_name: dadosPeca.projeto?.cliente || dadosPeca.project_customer_name,
|
|
65
|
-
project_customer_id: dadosPeca.project_customer_id,
|
|
66
|
-
project_note: dadosPeca.project_note || dadosPeca.mnote,
|
|
67
|
-
|
|
68
|
-
// Campos extras para compatibilidade com outras APIs
|
|
69
|
-
rotated: dadosPeca.rotated || false,
|
|
70
|
-
holes: dadosPeca.holes_diagram || dadosPeca.holes,
|
|
71
|
-
};
|
|
72
|
-
};
|
|
73
|
-
|
|
74
|
-
/**
|
|
75
|
-
* Formata dados do tamponamento
|
|
76
|
-
*/
|
|
77
|
-
export const formatTamponamentoData = (dados) => {
|
|
78
|
-
return {
|
|
79
|
-
...dados,
|
|
80
|
-
type: 'thickened',
|
|
81
|
-
|
|
82
|
-
// Mapeamento para variáveis do template
|
|
83
|
-
TAMPONAMENTO_ID: dados.id,
|
|
84
|
-
TAMPONAMENTO_REF: dados.ref || dados.mref,
|
|
85
|
-
TAMPONAMENTO_QT: dados.qt || dados.quantity || 1,
|
|
86
|
-
TAMPONAMENTO_PESO: dados.weight || dados.peso || "0.00",
|
|
87
|
-
TAMPONAMENTO_NOME: dados.name || dados.nome,
|
|
88
|
-
TAMPONAMENTO_MATERIAL: dados.material,
|
|
89
|
-
TAMPONAMENTO_DIMENSOES: dados.dimensions || `${dados.width || 0}x${dados.height || 0}`,
|
|
90
|
-
|
|
91
|
-
PROJETO_ID: dados.project_id,
|
|
92
|
-
PROJETO_NOME: dados.project_description,
|
|
93
|
-
CLIENTE_NOME: dados.project_customer_name,
|
|
94
|
-
|
|
95
|
-
// Campos extras para compatibilidade
|
|
96
|
-
mref: dados.mref || dados.ref,
|
|
97
|
-
mname: dados.mname || dados.name,
|
|
98
|
-
mnote: dados.mnote || dados.note,
|
|
99
|
-
project_customer_id: dados.project_customer_id,
|
|
100
|
-
project_note: dados.project_note,
|
|
101
|
-
rotated: dados.rotated || true,
|
|
102
|
-
};
|
|
103
|
-
};
|
|
104
|
-
|
|
105
|
-
/**
|
|
106
|
-
* Formata dados do insumo
|
|
107
|
-
*/
|
|
108
|
-
export const formatInsumoData = (dados) => {
|
|
109
|
-
return {
|
|
110
|
-
...dados,
|
|
111
|
-
type: 'input',
|
|
112
|
-
|
|
113
|
-
// Mapeamento para variáveis do template
|
|
114
|
-
INSUMO_ID: dados.id,
|
|
115
|
-
INSUMO_NOME: dados.name || dados.nome,
|
|
116
|
-
INSUMO_DIMENSOES: dados.dimensions || `${dados.width || 0}x${dados.height || 0}`,
|
|
117
|
-
INSUMO_QT: dados.qt || dados.quantity || 1,
|
|
118
|
-
INSUMO_PESO: dados.weight || dados.peso || "0.00",
|
|
119
|
-
INSUMO_REF: dados.ref || dados.mref,
|
|
120
|
-
INSUMO_FABRICANTE: dados.manufacturer || dados.fabricante,
|
|
121
|
-
INSUMO_CATEGORIA: dados.category || dados.categoria,
|
|
122
|
-
INSUMO_MATERIAL: dados.material,
|
|
123
|
-
|
|
124
|
-
PROJETO_ID: dados.project_id,
|
|
125
|
-
PROJETO_NOME: dados.project_description,
|
|
126
|
-
CLIENTE_NOME: dados.project_customer_name,
|
|
127
|
-
|
|
128
|
-
// Campos extras para compatibilidade
|
|
129
|
-
mref: dados.mref || dados.ref,
|
|
130
|
-
mname: dados.mname || dados.name,
|
|
131
|
-
mnote: dados.mnote || dados.note,
|
|
132
|
-
project_customer_id: dados.project_customer_id,
|
|
133
|
-
project_note: dados.project_note,
|
|
134
|
-
};
|
|
135
|
-
};
|
|
136
|
-
|
|
137
|
-
/**
|
|
138
|
-
* Formata dados do retalho
|
|
139
|
-
*/
|
|
140
|
-
export const formatRetalhoData = (dados) => {
|
|
141
|
-
return {
|
|
142
|
-
...dados,
|
|
143
|
-
type: 'scrap',
|
|
144
|
-
|
|
145
|
-
// Mapeamento para variáveis do template
|
|
146
|
-
RETALHO_ID: dados.scrapId || dados.id,
|
|
147
|
-
RETALHO_NOME: dados.name || dados.nome,
|
|
148
|
-
RETALHO_REF: dados.ref || dados.mref,
|
|
149
|
-
RETALHO_QT: dados.qt || dados.quantity || 1,
|
|
150
|
-
RETALHO_PESO: dados.weight || dados.peso || "0.00",
|
|
151
|
-
RETALHO_DIMENSOES: dados.dimensions || `${dados.width || 0}x${dados.height || 0}`,
|
|
152
|
-
RETALHO_MATERIAL: dados.material,
|
|
153
|
-
RETALHO_ORIGEM: dados.origin || dados.origem,
|
|
154
|
-
|
|
155
|
-
PROJETO_ID: dados.project_id,
|
|
156
|
-
PROJETO_NOME: dados.project_description,
|
|
157
|
-
CLIENTE_NOME: dados.project_customer_name,
|
|
158
|
-
|
|
159
|
-
// Campos extras para compatibilidade
|
|
160
|
-
mref: dados.mref || dados.ref,
|
|
161
|
-
project_customer_id: dados.project_customer_id,
|
|
162
|
-
project_note: dados.project_note,
|
|
163
|
-
};
|
|
164
|
-
};
|
|
165
|
-
|
|
166
|
-
/**
|
|
167
|
-
* Formata dados do volume
|
|
168
|
-
*/
|
|
169
|
-
export const formatVolumeData = (dados) => {
|
|
170
|
-
// Verifica se os dados vieram do formato real JSON ou do formato de teste
|
|
171
|
-
const isFromRealJson = dados.parts && Array.isArray(dados.parts);
|
|
172
|
-
const hasVolumePrefix = 'volume_id' in dados;
|
|
173
|
-
|
|
174
|
-
return {
|
|
175
|
-
...dados,
|
|
176
|
-
type: 'volume',
|
|
177
|
-
|
|
178
|
-
// Mapeamento para variáveis do template
|
|
179
|
-
VOLUME_ID: dados.volume_id || dados.id,
|
|
180
|
-
VOLUME_NOME: dados.volume_nome || dados.volume_name || dados.name,
|
|
181
|
-
VOLUME_PESO: dados.volume_peso || dados.volume_weight || dados.weight || "0.00",
|
|
182
|
-
VOLUME_DATA: dados.volume_date || dados.date || new Date().toLocaleDateString('pt-BR'),
|
|
183
|
-
VOLUME_DESCRICAO: dados.volume_description || dados.note || "",
|
|
184
|
-
VOLUME_PECAS: dados.volume_parts_count || (isFromRealJson ? dados.parts.length : 0) ||
|
|
185
|
-
(dados.itemList ? dados.itemList.length : 0),
|
|
186
|
-
VOLUME_DIMENSOES: dados.volume_dimensions || "",
|
|
187
|
-
|
|
188
|
-
PROJETO_ID: dados.project_id,
|
|
189
|
-
PROJETO_NOME: dados.project_description,
|
|
190
|
-
CLIENTE_NOME: dados.project_customer_name,
|
|
191
|
-
|
|
192
|
-
// Dados adicionais para compatibilidade
|
|
193
|
-
VOLUME_NAME: dados.volume_nome || dados.volume_name || dados.name,
|
|
194
|
-
PROJECT_NAME: dados.project_description,
|
|
195
|
-
CUSTOMER_NAME: dados.project_customer_name,
|
|
196
|
-
|
|
197
|
-
// Assegurar compatibilidade com dados de volume da API
|
|
198
|
-
volume_id: dados.volume_id || dados.id,
|
|
199
|
-
volume_name: dados.volume_nome || dados.volume_name || dados.name,
|
|
200
|
-
project_customer_id: dados.project_customer_id,
|
|
201
|
-
project_note: dados.project_note,
|
|
202
|
-
|
|
203
|
-
// Dados de peças (se disponíveis)
|
|
204
|
-
parts: dados.parts || [],
|
|
205
|
-
itemList: dados.itemList || [],
|
|
206
|
-
inputs: dados.inputs || []
|
|
207
|
-
};
|
|
208
|
-
};
|
|
209
|
-
|
|
210
|
-
// ============================================================================
|
|
211
|
-
// FUNÇÕES ADAPTADAS DO SORTFUNCTIONS.JS
|
|
212
|
-
// ============================================================================
|
|
213
|
-
|
|
214
|
-
/**
|
|
215
|
-
* Função para filtrar e preparar os dados de acordo com o tipo selecionado
|
|
216
|
-
* Adaptado de sortFunctions.js para integração com o sistema de etiquetas
|
|
217
|
-
*/
|
|
218
|
-
export const dataTypeList = (actualFilter, values) => {
|
|
219
|
-
const value = [...values];
|
|
220
|
-
switch (actualFilter) {
|
|
221
|
-
case "input":
|
|
222
|
-
let arr = [];
|
|
223
|
-
value.map((v, k) => {
|
|
224
|
-
arr = arr.concat(
|
|
225
|
-
...v.data.woodwork.reduce((accumulator, w, wi) => {
|
|
226
|
-
const inputsWithProjectData = w.inputs.map((input, inputIndex) => ({
|
|
227
|
-
...input,
|
|
228
|
-
project_id: v.data.project_id,
|
|
229
|
-
project_description: v.data.project_description,
|
|
230
|
-
project_customer_id: v.data.project_customer_id,
|
|
231
|
-
project_customer_name: v.data.project_customer_name,
|
|
232
|
-
project_note: v.data.project_note,
|
|
233
|
-
mref: w.ref,
|
|
234
|
-
mname: w.name,
|
|
235
|
-
mnote: w.note,
|
|
236
|
-
}));
|
|
237
|
-
accumulator = accumulator.concat(inputsWithProjectData);
|
|
238
|
-
return accumulator;
|
|
239
|
-
}, [])
|
|
240
|
-
);
|
|
241
|
-
});
|
|
242
|
-
// Processar dados para formato da API de etiquetas
|
|
243
|
-
const groupedInputs = groupBy(arr, "category_id");
|
|
244
|
-
return Object.values(groupedInputs).flatMap(inputs =>
|
|
245
|
-
inputs.map(input => formatInsumoData(input))
|
|
246
|
-
);
|
|
247
|
-
|
|
248
|
-
case "part":
|
|
249
|
-
let aux = [];
|
|
250
|
-
let partNumber = 1;
|
|
251
|
-
value.map((val, key) =>
|
|
252
|
-
val.data.woodwork.map(
|
|
253
|
-
(v, k) =>
|
|
254
|
-
(aux = aux.concat(
|
|
255
|
-
...v.parts.reduce((accumulator, part, partIndex) => {
|
|
256
|
-
accumulator = accumulator.concat({
|
|
257
|
-
id: part.id,
|
|
258
|
-
pid: part.id,
|
|
259
|
-
pref: part.ref,
|
|
260
|
-
mref: v.ref,
|
|
261
|
-
mname: v.name,
|
|
262
|
-
mnote: v.note,
|
|
263
|
-
index: partNumber,
|
|
264
|
-
number: partNumber,
|
|
265
|
-
key: k,
|
|
266
|
-
name: part.name,
|
|
267
|
-
material_name: part.material_name,
|
|
268
|
-
material_id: part.material_id,
|
|
269
|
-
material_width: part.material_width,
|
|
270
|
-
material_height: part.material_height,
|
|
271
|
-
note: part.note,
|
|
272
|
-
width: part.height,
|
|
273
|
-
height: part.width,
|
|
274
|
-
thickness: part.thickness,
|
|
275
|
-
type: part.type,
|
|
276
|
-
edge_left: part.edge_left,
|
|
277
|
-
edge_left_id: part.edge_left_id,
|
|
278
|
-
edge_right: part.edge_right,
|
|
279
|
-
edge_right_id: part.edge_right_id,
|
|
280
|
-
edge_top: part.edge_top,
|
|
281
|
-
edge_top_id: part.edge_top_id,
|
|
282
|
-
edge_bottom: part.edge_bottom,
|
|
283
|
-
edge_bottom_id: part.edge_bottom_id,
|
|
284
|
-
code_a: `${part.code_a}`,
|
|
285
|
-
code_b: `${part.code_b}`,
|
|
286
|
-
project_id: val.data.project_id,
|
|
287
|
-
project_description: val.data.project_description,
|
|
288
|
-
project_customer_id: val.data.project_customer_id,
|
|
289
|
-
project_customer_name: val.data.project_customer_name,
|
|
290
|
-
project_note: val.data.project_note,
|
|
291
|
-
});
|
|
292
|
-
partNumber++;
|
|
293
|
-
return accumulator;
|
|
294
|
-
}, [])
|
|
295
|
-
))
|
|
296
|
-
)
|
|
297
|
-
);
|
|
298
|
-
// Processar dados para formato da API de etiquetas
|
|
299
|
-
return aux.map(part => formatPartData(part));
|
|
300
|
-
|
|
301
|
-
case 'volume':
|
|
302
|
-
const volumes = value.map((v) => {
|
|
303
|
-
return {
|
|
304
|
-
project_id: v?.volume?.project_id,
|
|
305
|
-
project_description: v?.volume?.project_name,
|
|
306
|
-
project_customer_id: '',
|
|
307
|
-
project_customer_name: v?.volume?.customer,
|
|
308
|
-
project_note: '',
|
|
309
|
-
volume_id: v?.volume?.id,
|
|
310
|
-
volume_name: v?.volume?.description,
|
|
311
|
-
volume_date: v?.volume?.created_at ? new Date(v.volume.created_at).toLocaleDateString('pt-BR') : '',
|
|
312
|
-
volume_weight: '0kg',
|
|
313
|
-
itemList: [
|
|
314
|
-
...(v.inputs || []),
|
|
315
|
-
...(v.parts || []).map((part) => ({
|
|
316
|
-
...part,
|
|
317
|
-
name: `${part.name} ${part.thickness}mm`,
|
|
318
|
-
dimensions: `${part.width} x ${part.height} mm`
|
|
319
|
-
}))
|
|
320
|
-
],
|
|
321
|
-
};
|
|
322
|
-
});
|
|
323
|
-
// Processar dados para formato da API de etiquetas
|
|
324
|
-
return volumes.map(volume => formatVolumeData(volume));
|
|
325
|
-
|
|
326
|
-
case "thickened":
|
|
327
|
-
let thickNumber = 1;
|
|
328
|
-
const thickArr = value.flatMap((v) =>
|
|
329
|
-
v.data.woodwork.reduce((accumulator, wd) => {
|
|
330
|
-
if (wd.type === "thickened") {
|
|
331
|
-
accumulator.push({
|
|
332
|
-
...omit(wd, ["inputs", "parts"]),
|
|
333
|
-
index: thickNumber,
|
|
334
|
-
mref: wd.ref,
|
|
335
|
-
mnote: wd.note,
|
|
336
|
-
ref: null,
|
|
337
|
-
project_id: v.data.project_id,
|
|
338
|
-
project_description: v.data.project_description,
|
|
339
|
-
project_customer_id: v.data.project_customer_id,
|
|
340
|
-
project_customer_name: v.data.project_customer_name,
|
|
341
|
-
project_note: v.data.project_note,
|
|
342
|
-
rotated: true,
|
|
343
|
-
});
|
|
344
|
-
thickNumber++;
|
|
345
|
-
}
|
|
346
|
-
return accumulator;
|
|
347
|
-
}, [])
|
|
348
|
-
);
|
|
349
|
-
// Processar dados para formato da API de etiquetas
|
|
350
|
-
return thickArr.map(thickened => formatTamponamentoData(thickened));
|
|
351
|
-
|
|
352
|
-
default:
|
|
353
|
-
return [];
|
|
354
|
-
}
|
|
355
|
-
};
|
|
356
|
-
|
|
357
|
-
/**
|
|
358
|
-
* Função para filtrar insumos por categoria
|
|
359
|
-
*/
|
|
360
|
-
export const getInputsByCategory = (inputs, category_id = []) => {
|
|
361
|
-
if (category_id.length === 0) {
|
|
362
|
-
return Object.values(inputs).reduce((accumulator, input) => {
|
|
363
|
-
accumulator = accumulator.concat(input);
|
|
364
|
-
return accumulator;
|
|
365
|
-
}, []).map(input => formatInsumoData(input));
|
|
366
|
-
}
|
|
367
|
-
return category_id.reduce((accumulator, id) => {
|
|
368
|
-
if (inputs[id]) {
|
|
369
|
-
accumulator = accumulator.concat(inputs[id]);
|
|
370
|
-
}
|
|
371
|
-
return accumulator;
|
|
372
|
-
}, []).map(input => formatInsumoData(input));
|
|
373
|
-
};
|
|
374
|
-
|
|
375
|
-
/**
|
|
376
|
-
* Função para obter todas as categorias de insumos
|
|
377
|
-
*/
|
|
378
|
-
export const getAllCategoriesId = (inputs = []) =>
|
|
379
|
-
inputs.reduce((accumulator, input) => {
|
|
380
|
-
const ids = input.map((inp) => [inp.category_id, inp.category_name]);
|
|
381
|
-
accumulator = accumulator.concat(ids);
|
|
382
|
-
return [...new Set(accumulator)];
|
|
383
|
-
}, []);
|
|
384
|
-
|
|
385
|
-
/**
|
|
386
|
-
* Função adaptada para converter partes do formato antigo para o novo formato
|
|
387
|
-
* Compatível com o formatData.js original
|
|
388
|
-
*/
|
|
389
|
-
export const getPartsForLabels = (projectData, part, sheet, sheetIndex, key) => {
|
|
390
|
-
const formattedPart = {
|
|
391
|
-
i: part.i,
|
|
392
|
-
id: part.id,
|
|
393
|
-
pid: part.pid || null,
|
|
394
|
-
moduleLength: part.moduleLength,
|
|
395
|
-
pref: part.pref,
|
|
396
|
-
mref: part.mref,
|
|
397
|
-
mtype: part?.mType,
|
|
398
|
-
mnote: part.mnote,
|
|
399
|
-
mname: part.mname,
|
|
400
|
-
index: part.index,
|
|
401
|
-
number: part.number,
|
|
402
|
-
key: key,
|
|
403
|
-
sheetMaterial: sheet.material,
|
|
404
|
-
sheetIndex: sheetIndex,
|
|
405
|
-
name: part.name,
|
|
406
|
-
note: part.note,
|
|
407
|
-
width: part.width,
|
|
408
|
-
height: part.height,
|
|
409
|
-
type: part.type,
|
|
410
|
-
edge_left: part.edges.left,
|
|
411
|
-
edge_left_id: part.edges.left_id,
|
|
412
|
-
edge_right: part.edges.right,
|
|
413
|
-
edge_right_id: part.edges.right_id,
|
|
414
|
-
edge_top: part.edges.top,
|
|
415
|
-
edge_top_id: part.edges.top_id,
|
|
416
|
-
edge_bottom: part.edges.bottom,
|
|
417
|
-
edge_bottom_id: part.edges.bottom_id,
|
|
418
|
-
code_a: `${part.code_a}`,
|
|
419
|
-
code_a2: `${part.code_a2}`,
|
|
420
|
-
code_b: `${part.code_b}`,
|
|
421
|
-
code_b2: `${part.code_b2}`,
|
|
422
|
-
group_id: part?.group,
|
|
423
|
-
project_id: part.project_id,
|
|
424
|
-
project_description: part.project_description,
|
|
425
|
-
project_customer_id: part.project_customer_id,
|
|
426
|
-
project_customer_name: part.project_customer_name,
|
|
427
|
-
project_note: part.project_note,
|
|
428
|
-
rotated: part.rotated,
|
|
429
|
-
holes: part.holes_diagram,
|
|
430
|
-
material_name: projectData.name,
|
|
431
|
-
material_id: projectData.material,
|
|
432
|
-
material_width: projectData.width,
|
|
433
|
-
material_height: projectData.height,
|
|
434
|
-
thickness: projectData.thickness,
|
|
435
|
-
labelKey: `${projectData.material}-${projectData.thickness}`,
|
|
436
|
-
machining_side: part.machining_side,
|
|
437
|
-
};
|
|
438
|
-
|
|
439
|
-
return formatPartData(formattedPart);
|
|
440
|
-
};
|
|
441
|
-
|
|
442
|
-
/**
|
|
443
|
-
* Função adaptada para insumos do formato antigo para o novo formato
|
|
444
|
-
*/
|
|
445
|
-
export const getInputForLabels = (input, projectInfo, woodwork) => {
|
|
446
|
-
const formattedInput = {
|
|
447
|
-
...input,
|
|
448
|
-
project_id: projectInfo.data.project_id,
|
|
449
|
-
project_description: projectInfo.data.project_description,
|
|
450
|
-
project_customer_id: projectInfo.data.project_customer_id,
|
|
451
|
-
project_customer_name: projectInfo.data.project_customer_name,
|
|
452
|
-
project_note: projectInfo.data.project_note,
|
|
453
|
-
mref: woodwork.ref,
|
|
454
|
-
mname: woodwork.name,
|
|
455
|
-
mnote: woodwork.note,
|
|
456
|
-
};
|
|
457
|
-
|
|
458
|
-
return formatInsumoData(formattedInput);
|
|
459
|
-
};
|
|
460
|
-
|
|
461
|
-
/**
|
|
462
|
-
* Função para converter dados de projetos para o formato de etiquetas
|
|
463
|
-
*/
|
|
464
|
-
export const getPartsFromProjectToLabels = ({projectPartsByCode, partsByCode, templatePartsByURef}) => {
|
|
465
|
-
return Object.entries({ ...projectPartsByCode }).flatMap(([uref, codes]) => {
|
|
466
|
-
return codes.map((code, moduleIndex) => {
|
|
467
|
-
const part = { ...partsByCode[code], ...templatePartsByURef?.[uref] };
|
|
468
|
-
const formattedPart = {
|
|
469
|
-
...part,
|
|
470
|
-
edge_left: part.edge_left,
|
|
471
|
-
edge_right: part.edge_right,
|
|
472
|
-
edge_bottom: part.edge_bottom,
|
|
473
|
-
edge_top: part.edge_top,
|
|
474
|
-
width: part.width / 10,
|
|
475
|
-
height: part.height / 10,
|
|
476
|
-
moduleIndex: moduleIndex + 1,
|
|
477
|
-
holes_diagram: partsByCode[code]?.holes
|
|
478
|
-
};
|
|
479
|
-
|
|
480
|
-
return formatPartData(formattedPart);
|
|
481
|
-
});
|
|
482
|
-
});
|
|
483
|
-
};
|
|
484
|
-
|
|
485
|
-
// Exportação por padrão
|
|
486
|
-
export default {
|
|
487
|
-
formatPartData,
|
|
488
|
-
formatTamponamentoData,
|
|
489
|
-
formatInsumoData,
|
|
490
|
-
formatRetalhoData,
|
|
491
|
-
formatVolumeData,
|
|
492
|
-
dataTypeList,
|
|
493
|
-
getInputsByCategory,
|
|
494
|
-
getAllCategoriesId,
|
|
495
|
-
getPartsForLabels,
|
|
496
|
-
getInputForLabels,
|
|
497
|
-
getPartsFromProjectToLabels
|
|
498
|
-
};
|
package/src/index.js
DELETED
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 🏷️ ETIQUETAS.JS - Ponto de Entrada Principal
|
|
3
|
-
*
|
|
4
|
-
* Sistema modular para geração de etiquetas de projetos de marcenaria
|
|
5
|
-
* Suporta 5 tipos: Peças, Tamponamentos, Insumos, Retalhos e Volumes
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
// ============================================================================
|
|
9
|
-
// EXPORTAÇÕES PRINCIPAIS - NOVA API ORGANIZADA
|
|
10
|
-
// ============================================================================
|
|
11
|
-
|
|
12
|
-
// API principal do sistema de etiquetas
|
|
13
|
-
export { default as etiquetas } from './etiquetas.js';
|
|
14
|
-
|
|
15
|
-
// Exportações nomeadas para uso direto
|
|
16
|
-
export {
|
|
17
|
-
// Inicialização e configuração
|
|
18
|
-
init,
|
|
19
|
-
configurePrinter,
|
|
20
|
-
getPrinterStatus,
|
|
21
|
-
|
|
22
|
-
// Funções de geração (makeXLabel)
|
|
23
|
-
makePartLabel,
|
|
24
|
-
makeTamponamentoLabel,
|
|
25
|
-
makeInsumoLabel,
|
|
26
|
-
makeRetalhoLabel,
|
|
27
|
-
makeVolumeLabel,
|
|
28
|
-
|
|
29
|
-
// Funções de saída
|
|
30
|
-
downloadPDF,
|
|
31
|
-
sendToPrinter,
|
|
32
|
-
|
|
33
|
-
// Funções de envio inteligente (sendXLabel)
|
|
34
|
-
sendPartLabel,
|
|
35
|
-
sendTamponamentoLabel,
|
|
36
|
-
sendInsumoLabel,
|
|
37
|
-
sendRetalhoLabel,
|
|
38
|
-
sendVolumeLabel,
|
|
39
|
-
|
|
40
|
-
// Funções de lote
|
|
41
|
-
makeBatchLabels
|
|
42
|
-
} from './etiquetas.js';
|
|
43
|
-
|
|
44
|
-
// ============================================================================
|
|
45
|
-
// EXPORTAÇÕES LEGADAS - COMPATIBILIDADE COM CÓDIGO EXISTENTE
|
|
46
|
-
// ============================================================================
|
|
47
|
-
|
|
48
|
-
// Hooks e workers existentes (para compatibilidade)
|
|
49
|
-
export { useLabelData } from './useLabelData';
|
|
50
|
-
export { LabelWorker, createLabelWorker, generateLabelsFromHookData } from './labelWorker';
|
|
51
|
-
export { default as useLabelStore } from './store';
|
|
52
|
-
|
|
53
|
-
// Utilitários existentes
|
|
54
|
-
export { getPartsForLabels, getInputForLabels, getPartsFromProjectToLabels } from './formatData';
|
|
55
|
-
export { labelTypeNames } from './constants';
|
|
56
|
-
export { initialState, reducer } from './reducer';
|
|
57
|
-
|
|
58
|
-
// Re-exportações do createLabel (se existir)
|
|
59
|
-
export { createLabelsGenerator, createLabelsPromise } from './createLabel';
|
|
60
|
-
|
|
61
|
-
// ============================================================================
|
|
62
|
-
// API DE COMUNICAÇÃO COM SERVIDOR - NOVO MÓDULO
|
|
63
|
-
// ============================================================================
|
|
64
|
-
|
|
65
|
-
// Exportações da API de etiquetas (comunicação com servidor)
|
|
66
|
-
export {
|
|
67
|
-
LabelsAPI,
|
|
68
|
-
LABEL_TYPES,
|
|
69
|
-
apiClient,
|
|
70
|
-
|
|
71
|
-
// Funções de conveniência por tipo
|
|
72
|
-
getPartLabels,
|
|
73
|
-
getScrapLabels,
|
|
74
|
-
getThickenedLabels,
|
|
75
|
-
getInputLabels,
|
|
76
|
-
getVolumeLabels
|
|
77
|
-
} from '../api/api.js';
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
// ============================================================================
|
|
81
|
-
// EXPORTAÇÃO PADRÃO
|
|
82
|
-
// ============================================================================
|
|
83
|
-
|
|
84
|
-
// Exportar a API principal como padrão
|
|
85
|
-
import etiquetasAPI from './etiquetas.js';
|
|
86
|
-
export default etiquetasAPI;
|