@accon/connect 0.4.3 → 0.7.0

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.
Files changed (32) hide show
  1. package/dist/core/connect.service.d.ts +2 -1
  2. package/dist/core/connect.service.js +2 -2
  3. package/dist/core/connect.service.js.map +1 -1
  4. package/dist/core/interfaces/webhook-input-integration.interface.d.ts +5 -2
  5. package/dist/core/types/flags.type.d.ts +3 -0
  6. package/dist/core/types/flags.type.js +8 -0
  7. package/dist/core/types/flags.type.js.map +1 -0
  8. package/dist/core/types/integration-payload.type.d.ts +2 -1
  9. package/dist/core/types/integration-payload.type.js.map +1 -1
  10. package/dist/core/types/order.type.d.ts +7 -7
  11. package/dist/order/accon/accon-webhook.order-output.js +1 -1
  12. package/dist/order/accon/accon-webhook.order-output.js.map +1 -1
  13. package/dist/order/saipos/dto/webhook-body.dto.d.ts +5 -0
  14. package/dist/order/saipos/dto/webhook-body.dto.js +10 -0
  15. package/dist/order/saipos/dto/webhook-body.dto.js.map +1 -0
  16. package/dist/order/saipos/saipos.order-output.d.ts +6 -1
  17. package/dist/order/saipos/saipos.order-output.js +53 -11
  18. package/dist/order/saipos/saipos.order-output.js.map +1 -1
  19. package/dist/order/totvs-chef/dto/create-order.dto.d.ts +71 -0
  20. package/dist/order/totvs-chef/dto/create-order.dto.js +66 -0
  21. package/dist/order/totvs-chef/dto/create-order.dto.js.map +1 -0
  22. package/dist/order/totvs-chef/dto/itens-v1.dto.d.ts +29 -0
  23. package/dist/order/totvs-chef/dto/itens-v1.dto.js +3 -0
  24. package/dist/order/totvs-chef/dto/itens-v1.dto.js.map +1 -0
  25. package/dist/order/totvs-chef/totvs-chef.config.d.ts +15 -0
  26. package/dist/order/totvs-chef/totvs-chef.config.js +17 -0
  27. package/dist/order/totvs-chef/totvs-chef.config.js.map +1 -0
  28. package/dist/order/totvs-chef/totvs-chef.order-output.d.ts +35 -0
  29. package/dist/order/totvs-chef/totvs-chef.order-output.js +565 -0
  30. package/dist/order/totvs-chef/totvs-chef.order-output.js.map +1 -0
  31. package/dist/tsconfig.build.tsbuildinfo +1 -1
  32. package/package.json +5 -3
@@ -0,0 +1,35 @@
1
+ import { OrderOutputIntegration, IntegrationPayload, EventsService } from '../../core/index.js';
2
+ import type { Order } from '../../core/index.js';
3
+ import { HttpService } from '@nestjs/axios';
4
+ import { ItemDto, PagamentoDto, ClienteDto, EnderecoDto, CreateOrderDto } from './dto/create-order.dto';
5
+ import { GetItemInput, GetItensProducts } from './dto/itens-v1.dto';
6
+ import { TotvsChefConfig } from './totvs-chef.config';
7
+ export declare class TotvsChefOrderOutput implements OrderOutputIntegration<TotvsChefConfig> {
8
+ readonly eventsService: EventsService;
9
+ private readonly httpService;
10
+ private readonly logger;
11
+ private readonly TOTVS_CHEF_BASE_URL;
12
+ private readonly CODIGO_INTEGRACAO;
13
+ private readonly CHAVE;
14
+ private readonly dispatchEvent;
15
+ constructor(eventsService: EventsService, httpService: HttpService);
16
+ getAuthParams(config: TotvsChefConfig): {
17
+ username: string;
18
+ password: string;
19
+ };
20
+ onOrderCreated(payload: IntegrationPayload, config: TotvsChefConfig): Promise<void>;
21
+ getMenu(config: TotvsChefConfig): Promise<any[]>;
22
+ getItens(products: GetItensProducts, menu: any[], chargeMostExpensive?: string[]): ItemDto[];
23
+ getItem(input: GetItemInput, isModifier?: boolean): ItemDto;
24
+ toFixed(num: number): number;
25
+ getUF(state: string): string;
26
+ getCleanAddressNumber(number: string): string;
27
+ getChange(order: Order): number;
28
+ transformPaymentCode(method: string): number;
29
+ transformPayment(order: Order): Array<PagamentoDto>;
30
+ transformAddress(order: Order): EnderecoDto;
31
+ transformCustomer(order: Order): ClienteDto;
32
+ transformDeliveryFee(order: Order): number;
33
+ transformTotalValue(order: Order, itens: any[], otherFees: any[]): number;
34
+ transformOrder(order: Order, config: TotvsChefConfig, chargeMostExpensive?: string[]): Promise<CreateOrderDto>;
35
+ }
@@ -0,0 +1,565 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var TotvsChefOrderOutput_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.TotvsChefOrderOutput = void 0;
14
+ const core_1 = require("../../core/index.js");
15
+ const common_1 = require("@nestjs/common");
16
+ const axios_1 = require("@nestjs/axios");
17
+ const axios_2 = require("axios");
18
+ const rxjs_1 = require("rxjs");
19
+ const crypto_1 = require("crypto");
20
+ const moment = require("moment-timezone");
21
+ const currency = require("currency.js");
22
+ const totvs_chef_config_1 = require("./totvs-chef.config");
23
+ let TotvsChefOrderOutput = TotvsChefOrderOutput_1 = class TotvsChefOrderOutput {
24
+ eventsService;
25
+ httpService;
26
+ logger = new common_1.Logger(TotvsChefOrderOutput_1.name);
27
+ TOTVS_CHEF_BASE_URL;
28
+ CODIGO_INTEGRACAO;
29
+ CHAVE;
30
+ dispatchEvent;
31
+ constructor(eventsService, httpService) {
32
+ this.eventsService = eventsService;
33
+ this.httpService = httpService;
34
+ this.CODIGO_INTEGRACAO = process.env.CODIGO_INTEGRACAO;
35
+ if (!this.CODIGO_INTEGRACAO) {
36
+ this.logger.error('CODIGO_INTEGRACAO não fornecido via ambiente.');
37
+ }
38
+ this.CHAVE = process.env.CHAVE;
39
+ if (!this.CHAVE) {
40
+ this.logger.error('CHAVE não fornecida via ambiente.');
41
+ }
42
+ this.TOTVS_CHEF_BASE_URL =
43
+ process.env.TOTVS_CHEF_BASE_URL ||
44
+ 'http://chefweb.chef.totvs.com.br/IntegracaoPedidosOnline';
45
+ this.dispatchEvent = eventsService.createDispatcherFor('TotvsChef', 'OrderOutput');
46
+ }
47
+ getAuthParams(config) {
48
+ const timestamp = moment()
49
+ .tz('America/Sao_Paulo')
50
+ .format('YYYYMMDDHHmmssZZ');
51
+ return {
52
+ username: timestamp,
53
+ password: (0, crypto_1.createHash)('md5')
54
+ .update(`${this.CODIGO_INTEGRACAO}|${this.CHAVE}|${timestamp}`)
55
+ .digest('hex'),
56
+ };
57
+ }
58
+ async onOrderCreated(payload, config) {
59
+ this.logger.verbose('onOrderCreated: iniciando integração');
60
+ const { order, flags } = payload;
61
+ const chargeMostExpensive = flags?.CHARGE_MOST_EXPENSIVE;
62
+ const orderId = parseInt(order.externalId);
63
+ this.dispatchEvent({
64
+ eventType: 'INTEGRATION_INITIATED',
65
+ orderId,
66
+ });
67
+ try {
68
+ const payload = {
69
+ parametros: {
70
+ CodigoEstabelecimento: config.CodigoEstabelecimento,
71
+ CodigoIntegracao: this.CODIGO_INTEGRACAO,
72
+ Pedido: this.transformOrder(order, config, chargeMostExpensive),
73
+ },
74
+ };
75
+ this.dispatchEvent({
76
+ eventType: 'INTEGRATION_PROCESSING',
77
+ orderId,
78
+ metadata: { payload },
79
+ });
80
+ const auth = this.getAuthParams(config);
81
+ const { data } = await (0, rxjs_1.firstValueFrom)(this.httpService.post(`${this.TOTVS_CHEF_BASE_URL}/DeliveryService.svc/EnviarPedido`, payload, {
82
+ auth,
83
+ headers: { 'Content-Type': 'application/json' },
84
+ }));
85
+ this.dispatchEvent({
86
+ eventType: 'INTEGRATION_COMPLETED',
87
+ orderId,
88
+ metadata: { data },
89
+ });
90
+ return;
91
+ }
92
+ catch (error) {
93
+ if ((0, axios_2.isAxiosError)(error)) {
94
+ this.logger.error('onOrderCreated: falha ao realizar requisição no Totvs Chef ', JSON.stringify(error.response?.data));
95
+ this.dispatchEvent({
96
+ eventType: 'INTEGRATION_FAILED',
97
+ orderId,
98
+ metadata: { error: JSON.stringify(error.response?.data) },
99
+ });
100
+ }
101
+ else {
102
+ this.dispatchEvent({
103
+ eventType: 'INTEGRATION_FAILED',
104
+ orderId,
105
+ metadata: { error },
106
+ });
107
+ this.logger.error('onOrderCreated: falha ao criar pedido no Totvs Chef', error);
108
+ }
109
+ }
110
+ }
111
+ async getMenu(config) {
112
+ const payload = {
113
+ parametros: {
114
+ CodigoIntegracao: this.CODIGO_INTEGRACAO,
115
+ CodigoEstabelecimento: config.CodigoEstabelecimento,
116
+ DataAtualizacao: null,
117
+ },
118
+ };
119
+ const auth = this.getAuthParams(config);
120
+ const { data } = await (0, rxjs_1.firstValueFrom)(this.httpService.post(`${this.TOTVS_CHEF_BASE_URL}/CadastroService.svc/ObterCardapio`, payload, {
121
+ auth,
122
+ headers: { 'Content-Type': 'application/json' },
123
+ }));
124
+ return data?.ObterCardapioResult?.Produtos ?? [];
125
+ }
126
+ getItens(products, menu, chargeMostExpensive) {
127
+ const itens = [];
128
+ const getHigherPrice = (ItensFracao) => Math.max(...ItensFracao.map((Item) => Item.Produto?.PrecoVenda ?? 0));
129
+ for (const product of products) {
130
+ const item = this.getItem({
131
+ ...product,
132
+ total: currency(product.total).value,
133
+ externalVendorCode: product.externalVendorCode ?? '',
134
+ quantity: product.quantity ?? 1,
135
+ });
136
+ const attributes = product.modifiers.filter((modifier) => modifier.externalVendorCode &&
137
+ !modifier.externalVendorCode.includes('mix:') &&
138
+ !modifier.externalVendorCode.includes('split:'));
139
+ if (attributes && attributes.length) {
140
+ item.ItensAdicionais = attributes.map((attr) => {
141
+ const externalVendorCode = attr.externalVendorCode?.includes(':')
142
+ ? attr.externalVendorCode.split(':')[1]
143
+ : attr.externalVendorCode;
144
+ return this.getItem({
145
+ ...attr,
146
+ quantity: attr.quantity * product.quantity,
147
+ externalVendorCode,
148
+ }, true);
149
+ });
150
+ }
151
+ const hasFractionedModifier = product.modifiers.some((modifier) => modifier.externalVendorCode &&
152
+ (modifier.externalVendorCode.includes('mix:') ||
153
+ modifier.externalVendorCode.includes('split:')));
154
+ if (!hasFractionedModifier) {
155
+ itens.push(item);
156
+ }
157
+ const parentItem = {
158
+ TipoItem: 1,
159
+ Produto: {
160
+ Codigo: product.externalVendorCode ?? '',
161
+ Descricao: product.name ?? '',
162
+ PrecoVenda: 0,
163
+ },
164
+ Quantidade: product.quantity ?? 0,
165
+ Acrescimo: 0,
166
+ Desconto: 0,
167
+ MotivoAcrescimoDesconto: null,
168
+ AcrescimoDiferencaFracionada: 0,
169
+ Observacao: product.notes || '',
170
+ ItensFracao: [],
171
+ ItensAdicionais: [],
172
+ ValorTotal: 0,
173
+ TipoOperacao: 0,
174
+ };
175
+ const mixProductsQuantity = () => {
176
+ const mixQuantity = product.modifiers
177
+ .filter(({ externalVendorCode }) => externalVendorCode &&
178
+ (externalVendorCode.includes('mix:') ||
179
+ externalVendorCode.includes('split:')))
180
+ .reduce((acc, cur) => acc + cur.quantity, 0);
181
+ switch (mixQuantity) {
182
+ case 1:
183
+ return 1;
184
+ case 2:
185
+ return 0.5;
186
+ case 3:
187
+ return 0.333;
188
+ case 4:
189
+ return 0.25;
190
+ default:
191
+ throw new core_1.InvalidOrderException('Quantidade inválida para realizar fracionamento');
192
+ }
193
+ };
194
+ let mixCount = 1;
195
+ for (const modifier of product.modifiers) {
196
+ if (!modifier.externalVendorCode)
197
+ continue;
198
+ if (modifier.externalVendorCode &&
199
+ modifier.externalVendorCode.includes('attr:'))
200
+ continue;
201
+ if (modifier.externalVendorCode.includes('mix:') ||
202
+ modifier.externalVendorCode.includes('split:')) {
203
+ let quantity = mixProductsQuantity();
204
+ const [, externalVendorCode] = modifier.externalVendorCode.split(':');
205
+ if (quantity === 1) {
206
+ const item = this.getItem({
207
+ name: modifier.name,
208
+ externalVendorCode,
209
+ quantity,
210
+ total: modifier.price?.actualPrice ?? 0,
211
+ price: { actualPrice: modifier.price?.actualPrice ?? 0 },
212
+ notes: modifier.notes,
213
+ }, true);
214
+ itens.push(item);
215
+ continue;
216
+ }
217
+ for (let i = 0; i < modifier.quantity; i++) {
218
+ if (quantity === 0.333 && mixCount === 3) {
219
+ quantity = 0.334;
220
+ }
221
+ const itemFracao = this.getItem({
222
+ name: modifier.name,
223
+ externalVendorCode,
224
+ quantity: quantity,
225
+ total: modifier.price?.actualPrice ?? 0,
226
+ price: { actualPrice: modifier.price?.actualPrice ?? 0 },
227
+ notes: modifier.notes,
228
+ }, true);
229
+ parentItem.ItensFracao?.push(itemFracao);
230
+ mixCount++;
231
+ }
232
+ continue;
233
+ }
234
+ }
235
+ const useSplit = product.modifiers.some((m) => m.externalVendorCode && m.externalVendorCode.includes('split:'));
236
+ if (parentItem.ItensFracao && parentItem.ItensFracao.length) {
237
+ if (!useSplit) {
238
+ for (const item of parentItem.ItensFracao) {
239
+ try {
240
+ const found = menu.find((product) => product.Codigo === item.Produto?.Codigo);
241
+ if (found && item.Produto)
242
+ item.Produto.PrecoVenda = found.PrecoVenda;
243
+ }
244
+ catch {
245
+ throw new Error(`Não foi possível encontrar o produto ${item.Produto?.Descricao} com código ${item.Produto?.Codigo}`);
246
+ }
247
+ }
248
+ }
249
+ const useHigherPrice = Array.isArray(chargeMostExpensive) &&
250
+ chargeMostExpensive.includes(product.externalVendorCode);
251
+ if (useHigherPrice) {
252
+ const maxUnitPrice = Math.max(...parentItem.ItensFracao.map((f) => f.Produto?.PrecoVenda ?? 0));
253
+ const numFractions = parentItem.ItensFracao.length;
254
+ parentItem.ValorTotal = this.toFixed(maxUnitPrice * numFractions);
255
+ parentItem.ItensFracao.forEach((fracao) => {
256
+ fracao.ValorTotal = this.toFixed(maxUnitPrice * fracao.Quantidade);
257
+ });
258
+ }
259
+ else {
260
+ for (const item of parentItem.ItensFracao) {
261
+ if (!useSplit && item.Produto) {
262
+ item.ValorTotal = this.toFixed(item.Produto.PrecoVenda * item.Quantidade);
263
+ }
264
+ }
265
+ parentItem.ValorTotal = currency(product.total).value;
266
+ }
267
+ for (let i = 0; i < product.quantity; i++) {
268
+ itens.push(parentItem);
269
+ }
270
+ }
271
+ }
272
+ return itens;
273
+ }
274
+ getItem(input, isModifier = false) {
275
+ const { name, externalVendorCode, quantity, total, price, notes } = input;
276
+ const actualPrice = isModifier ? price.actualPrice : total;
277
+ return {
278
+ TipoItem: 0,
279
+ Produto: {
280
+ Codigo: externalVendorCode,
281
+ Descricao: name,
282
+ PrecoVenda: isModifier
283
+ ? actualPrice
284
+ : currency(actualPrice / quantity).value,
285
+ },
286
+ Quantidade: quantity,
287
+ Acrescimo: 0,
288
+ Desconto: 0,
289
+ MotivoAcrescimoDesconto: null,
290
+ AcrescimoDiferencaFracionada: 0,
291
+ Observacao: notes || '',
292
+ ItensFracao: null,
293
+ ItensAdicionais: null,
294
+ ValorTotal: isModifier
295
+ ? currency(actualPrice).multiply(quantity).value
296
+ : currency(actualPrice).value,
297
+ TipoOperacao: 0,
298
+ };
299
+ }
300
+ toFixed(num) {
301
+ const match = num.toPrecision(15).match(/^-?\d+(?:\.\d{0,2})?/);
302
+ return currency(match ? match[0] : '0').value;
303
+ }
304
+ getUF(state) {
305
+ const UFs = [
306
+ 'AC',
307
+ 'AL',
308
+ 'AP',
309
+ 'AM',
310
+ 'BA',
311
+ 'CE',
312
+ 'DF',
313
+ 'ES',
314
+ 'GO',
315
+ 'MA',
316
+ 'MT',
317
+ 'MS',
318
+ 'MG',
319
+ 'PA',
320
+ 'PB',
321
+ 'PR',
322
+ 'PE',
323
+ 'PI',
324
+ 'RJ',
325
+ 'RN',
326
+ 'RS',
327
+ 'RO',
328
+ 'RR',
329
+ 'SC',
330
+ 'SP',
331
+ 'SE',
332
+ 'TO',
333
+ ];
334
+ if (state.length === 2 && UFs.includes(state.toUpperCase())) {
335
+ return state.toUpperCase();
336
+ }
337
+ const normalizedState = state
338
+ .toLowerCase()
339
+ .normalize('NFD')
340
+ .replace(/[\u0300-\u036f]/g, '');
341
+ switch (normalizedState) {
342
+ case 'acre':
343
+ return 'AC';
344
+ case 'alagoas':
345
+ return 'AL';
346
+ case 'amapa':
347
+ return 'AP';
348
+ case 'amazonas':
349
+ return 'AM';
350
+ case 'bahia':
351
+ return 'BA';
352
+ case 'ceara':
353
+ return 'CE';
354
+ case 'distrito federal':
355
+ return 'DF';
356
+ case 'espirito santo':
357
+ return 'ES';
358
+ case 'goias':
359
+ return 'GO';
360
+ case 'maranhao':
361
+ return 'MA';
362
+ case 'mato grosso do sul':
363
+ return 'MS';
364
+ case 'mato grosso':
365
+ return 'MT';
366
+ case 'minas gerais':
367
+ return 'MG';
368
+ case 'para':
369
+ return 'PA';
370
+ case 'paraiba':
371
+ return 'PB';
372
+ case 'pernambuco':
373
+ return 'PE';
374
+ case 'piaui':
375
+ return 'PI';
376
+ case 'rio de janeiro':
377
+ return 'RJ';
378
+ case 'rio grande do norte':
379
+ return 'RN';
380
+ case 'rio grande do sul':
381
+ return 'RS';
382
+ case 'rondonia':
383
+ return 'RO';
384
+ case 'roraima':
385
+ return 'RR';
386
+ case 'santa catarina':
387
+ return 'SC';
388
+ case 'sao paulo':
389
+ return 'SP';
390
+ case 'sergipe':
391
+ return 'SE';
392
+ case 'tocantins':
393
+ return 'TO';
394
+ default:
395
+ if (state) {
396
+ throw new core_1.InvalidOrderException(`Estado inválido: ${state}`);
397
+ }
398
+ return '';
399
+ }
400
+ }
401
+ getCleanAddressNumber(number) {
402
+ const cleanNumber = number.replace(/\D/g, '');
403
+ return cleanNumber.length ? cleanNumber : '1';
404
+ }
405
+ getChange(order) {
406
+ const cashMethod = order.payments.methods.find((m) => m.method === 'CASH');
407
+ const changeFor = cashMethod?.changeFor ?? 0;
408
+ const totalValue = order.total?.orderAmount?.value ?? 0;
409
+ return changeFor > totalValue ? changeFor - totalValue : 0;
410
+ }
411
+ transformPaymentCode(method) {
412
+ const paymentMethod = method?.toUpperCase() || '';
413
+ const CASH = 0, CREDIT = 2, DEBIT = 3, TICKET = 4, PIX = 20;
414
+ if (paymentMethod === 'CASH')
415
+ return CASH;
416
+ if (paymentMethod === 'CREDIT')
417
+ return CREDIT;
418
+ if (paymentMethod === 'DEBIT')
419
+ return DEBIT;
420
+ if (paymentMethod === 'MEAL_VOUCHER' ||
421
+ paymentMethod === 'FOOD_VOUCHER' ||
422
+ paymentMethod === 'TICKET')
423
+ return TICKET;
424
+ if (paymentMethod === 'PIX')
425
+ return PIX;
426
+ return CASH;
427
+ }
428
+ transformPayment(order) {
429
+ const change = this.getChange(order);
430
+ return order.payments.methods.map((method) => ({
431
+ Tipo: this.transformPaymentCode(method.method),
432
+ Valor: currency(method.value).add(method.method === 'CASH' ? change : 0)
433
+ .value,
434
+ CodigoReferencia: method.method,
435
+ PagoOnline: method.type === 'PREPAID',
436
+ }));
437
+ }
438
+ transformAddress(order) {
439
+ const deliveryAddress = order.delivery.deliveryAddress;
440
+ const userPhone = order.customer?.phone.number.replace(/\D/g, '');
441
+ const DDD = userPhone?.slice(0, 2);
442
+ const Telefone = userPhone?.slice(2);
443
+ return {
444
+ Logradouro: deliveryAddress.street,
445
+ Numero: this.getCleanAddressNumber(deliveryAddress.number),
446
+ Complemento: deliveryAddress.complement || '',
447
+ Bairro: deliveryAddress.district,
448
+ Municipio: deliveryAddress.city,
449
+ MunicipioNumeroIBGE: null,
450
+ UF: this.getUF(deliveryAddress.state),
451
+ UFNumeroIBGE: null,
452
+ CEP: deliveryAddress.postalCode.replace(/\D/g, ''),
453
+ DDD: DDD || '',
454
+ Telefone: Telefone || '',
455
+ EMail: order.customer?.email || '',
456
+ IdentificacaoEndereco: null,
457
+ InformacoesAdicionais: null,
458
+ };
459
+ }
460
+ transformCustomer(order) {
461
+ const CpfCnpj = order.customer?.documentNumber?.replace(/\D/g, '') || '';
462
+ return {
463
+ NomeCompleto: order.customer?.name,
464
+ TipoPessoa: (order.customer?.documentNumber?.length ?? 0) < 12 ? 0 : 1,
465
+ Sexo: 0,
466
+ CpfCnpj,
467
+ Endereco: this.transformAddress(order),
468
+ EnderecoEntrega: null,
469
+ ConheceuComo: null,
470
+ RgIE: null,
471
+ };
472
+ }
473
+ transformDeliveryFee(order) {
474
+ const deliveryFee = order.otherFees.find(({ type }) => type === 'DELIVERY_FEE');
475
+ return deliveryFee?.price.value ?? 0;
476
+ }
477
+ transformTotalValue(order, itens, otherFees) {
478
+ const itemsTotal = itens.reduce((acc, item) => acc + currency(item.ValorTotal).value, 0);
479
+ const feesTotal = otherFees.reduce((acc, fee) => acc + currency(fee.price?.value || 0).value, 0);
480
+ return currency(itemsTotal)
481
+ .add(feesTotal)
482
+ .subtract(currency(order.total.discount?.value || 0).value).value;
483
+ }
484
+ async transformOrder(order, config, chargeMostExpensive) {
485
+ if (!order.customer) {
486
+ throw new core_1.InvalidOrderException('Pedido sem cliente', 'customer');
487
+ }
488
+ if (order.type !== 'DELIVERY' && order.type !== 'TAKEOUT') {
489
+ throw new core_1.InvalidOrderException('Tipo de pedido inválido', 'type');
490
+ }
491
+ const itemsWithoutCode = order.items.filter((item) => !item.externalCode);
492
+ if (itemsWithoutCode.length) {
493
+ throw new core_1.InvalidOrderException(`Item(s) sem código de integração: ${itemsWithoutCode
494
+ .map((i) => i.id)
495
+ .join(', ')}`, 'items');
496
+ }
497
+ const optionsWithoutCode = order.items.filter((item) => item.options?.some((option) => !option.externalCode));
498
+ if (optionsWithoutCode.length) {
499
+ throw new core_1.InvalidOrderException(`Item(s) com opção(ões) sem código: ${optionsWithoutCode
500
+ .map((i) => i.id)
501
+ .join(', ')}`, 'items');
502
+ }
503
+ const deliveryFee = this.transformDeliveryFee(order);
504
+ let menu = [];
505
+ menu = await this.getMenu(config);
506
+ const itens = this.getItens(order.items.map((item) => ({
507
+ name: item.name,
508
+ externalVendorCode: item.externalCode,
509
+ quantity: item.quantity ?? 1,
510
+ total: item.totalPrice?.value ?? item.unitPrice.value * item.quantity,
511
+ price: { actualPrice: item.unitPrice.value },
512
+ notes: item.specialInstructions,
513
+ modifiers: (item.options || []).map((option) => ({
514
+ name: option.name,
515
+ externalVendorCode: option.externalCode || '',
516
+ quantity: option.quantity ?? 1,
517
+ price: {
518
+ actualPrice: option.unitPrice.value || option.totalPrice?.value || 0,
519
+ },
520
+ notes: option.specialInstructions,
521
+ })),
522
+ })), menu, chargeMostExpensive);
523
+ const pagamentos = this.transformPayment(order);
524
+ const valorTotal = this.transformTotalValue(order, itens, order.otherFees);
525
+ const cliente = this.transformCustomer(order);
526
+ const dto = {
527
+ CodigoEstabelecimento: config.CodigoEstabelecimento,
528
+ CodigoIntegracao: this.CODIGO_INTEGRACAO,
529
+ Pedido: {
530
+ TaxaDeEntrega: deliveryFee,
531
+ PagamentoOnline: order.payments.pending === 0,
532
+ RetirarNaLoja: order.type === 'TAKEOUT',
533
+ IdConfiguracaoIntegracao: 1,
534
+ CodigoExternoPedido: order.id,
535
+ CodigoExternoPedidoReduzido: order.displayId,
536
+ Cliente: cliente,
537
+ Troco: this.getChange(order),
538
+ Desconto: order.total.discount?.value || 0,
539
+ ValorTotal: valorTotal,
540
+ Pagamentos: pagamentos,
541
+ IncluirCPFNaNota: true,
542
+ ObservacaoPedido: order.extraInfo || '',
543
+ Itens: itens,
544
+ },
545
+ };
546
+ return dto;
547
+ }
548
+ };
549
+ exports.TotvsChefOrderOutput = TotvsChefOrderOutput;
550
+ exports.TotvsChefOrderOutput = TotvsChefOrderOutput = TotvsChefOrderOutput_1 = __decorate([
551
+ (0, core_1.RegistryIntegration)({
552
+ id: 'totvs-chef',
553
+ category: 'POS',
554
+ type: 'OrderOutput',
555
+ title: 'Totvs Chef',
556
+ description: 'Integração com Totvs Chef Web PDV',
557
+ logoUrl: 'https://www.fidelimax.com.br/wp-content/uploads/2022/07/Novo-Projeto-1.png',
558
+ websiteUrl: 'https://chefweb.totvs.com.br/',
559
+ configSchema: totvs_chef_config_1.TOTVS_CHEF_CONFIG_SCHEMA,
560
+ }),
561
+ (0, common_1.Injectable)(),
562
+ __metadata("design:paramtypes", [core_1.EventsService,
563
+ axios_1.HttpService])
564
+ ], TotvsChefOrderOutput);
565
+ //# sourceMappingURL=totvs-chef.order-output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"totvs-chef.order-output.js","sourceRoot":"","sources":["../../../lib/order/totvs-chef/totvs-chef.order-output.ts"],"names":[],"mappings":"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"}