etiquetas.js 1.0.0-alpha.1

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.
@@ -0,0 +1,96 @@
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
+ });
@@ -0,0 +1,498 @@
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 ADDED
@@ -0,0 +1,86 @@
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;