oxpi-nglib 1.0.9 → 1.0.13

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 (28) hide show
  1. package/esm2020/lib/cadastros/produtos/produto-add-dialog/produto-add-dialog.component.mjs +20 -16
  2. package/esm2020/lib/cadastros/produtos/produto-composicao/produto-composicao.component.mjs +148 -0
  3. package/esm2020/lib/cadastros/produtos/produto-composicao-add-dialog/produto-composicao-add-dialog.component.mjs +68 -0
  4. package/esm2020/lib/cadastros/produtos/produto-selecao-dialog/produto-selecao-dialog.component.mjs +135 -0
  5. package/esm2020/lib/cadastros/produtos/produtos/produtos.component.mjs +45 -17
  6. package/esm2020/lib/cadastros/produtos-subgrupos/produto-subgrupo-selecao-dialog/produto-subgrupo-selecao-dialog.component.mjs +11 -8
  7. package/esm2020/lib/models/entidades/login-result.mjs +1 -1
  8. package/esm2020/lib/models/entidades/produto-composicao.mjs +9 -0
  9. package/esm2020/lib/oxpi-nglib.module.mjs +12 -3
  10. package/esm2020/lib/providers/auth-data.service.mjs +5 -1
  11. package/esm2020/lib/providers/common-web-service.mjs +21 -1
  12. package/esm2020/public-api.mjs +5 -1
  13. package/fesm2015/oxpi-nglib.mjs +422 -41
  14. package/fesm2015/oxpi-nglib.mjs.map +1 -1
  15. package/fesm2020/oxpi-nglib.mjs +418 -41
  16. package/fesm2020/oxpi-nglib.mjs.map +1 -1
  17. package/lib/cadastros/produtos/produto-composicao/produto-composicao.component.d.ts +29 -0
  18. package/lib/cadastros/produtos/produto-composicao-add-dialog/produto-composicao-add-dialog.component.d.ts +29 -0
  19. package/lib/cadastros/produtos/produto-selecao-dialog/produto-selecao-dialog.component.d.ts +37 -0
  20. package/lib/cadastros/produtos/produtos/produtos.component.d.ts +2 -0
  21. package/lib/models/entidades/login-result.d.ts +2 -0
  22. package/lib/models/entidades/produto-composicao.d.ts +10 -0
  23. package/lib/oxpi-nglib.module.d.ts +13 -10
  24. package/lib/providers/auth-data.service.d.ts +2 -0
  25. package/lib/providers/common-web-service.d.ts +6 -0
  26. package/package.json +1 -1
  27. package/public-api.d.ts +4 -0
  28. package/styles/cadastros-listagens-form.scss +1 -0
@@ -141,12 +141,14 @@ class CommonWebService {
141
141
  this.ESTOQUE_URL = '';
142
142
  this.MEDIA_BASE_URL = '';
143
143
  this.MEDIA_PRODUTO_IMAGEM_URL = '';
144
+ this.PRODUTO_COMPOSICAO_BASE_URL = '';
144
145
  }
145
146
  setToken(token) {
146
147
  this.token = token;
147
148
  }
148
149
  start(rootUrl) {
149
150
  this.ROOT_URL = rootUrl;
151
+ this.PRODUTO_COMPOSICAO_BASE_URL = rootUrl + "ProdutoComposicao/";
150
152
  this.FUNCIONARIO_BASE_URL = rootUrl + "Funcionario/";
151
153
  this.FUNCIONARIO_CARGO_BASE_URL = rootUrl + "FuncionarioCargo/";
152
154
  this.PRODUTO_BASE_URL = rootUrl + "ProdutoFiscal/";
@@ -296,6 +298,24 @@ class CommonWebService {
296
298
  const url = this.ESTOQUE_URL + 'Setor/';
297
299
  return this.http.get(url, this.getHttpOptions()).pipe(map(data => data));
298
300
  }
301
+ getProdutoComposicao(produtoId) {
302
+ const url = this.PRODUTO_COMPOSICAO_BASE_URL;
303
+ const params = new HttpParams()
304
+ .set("produtoId", '' + produtoId);
305
+ return this.http.get(url, this.getHttpOptions(params)).pipe(map(data => data));
306
+ }
307
+ saveProdutoComposicao(s) {
308
+ const url = this.PRODUTO_COMPOSICAO_BASE_URL;
309
+ return this.http.post(url, JSON.stringify(s), this.getHttpOptions()).pipe(map(data => data));
310
+ }
311
+ addProdutoComposicao(p) {
312
+ const url = this.PRODUTO_COMPOSICAO_BASE_URL;
313
+ return this.http.put(url, JSON.stringify(p), this.getHttpOptions()).pipe(map(data => data));
314
+ }
315
+ deleteProdutoComposicao(id) {
316
+ const url = this.PRODUTO_COMPOSICAO_BASE_URL + id;
317
+ return this.http.delete(url, this.getHttpOptions()).pipe(map(data => data));
318
+ }
299
319
  getHttpOptions(parameters) {
300
320
  return {
301
321
  headers: new HttpHeaders({
@@ -981,6 +1001,8 @@ class AuthDataService {
981
1001
  this.userId = 0;
982
1002
  this.email = '';
983
1003
  this.nome = '';
1004
+ this.usaEstoqueOnline = false;
1005
+ this.usaFinancasOnline = false;
984
1006
  }
985
1007
  login(result) {
986
1008
  this.isLoggedIn = true;
@@ -993,6 +1015,8 @@ class AuthDataService {
993
1015
  this.userId = result.userId;
994
1016
  this.nome = result.nome;
995
1017
  this.email = result.email;
1018
+ this.usaEstoqueOnline = result.usaEstoqueOnline;
1019
+ this.usaFinancasOnline = result.usaFinancasOnline;
996
1020
  }
997
1021
  }
998
1022
  AuthDataService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: AuthDataService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
@@ -1926,13 +1950,16 @@ class ProdutoSubgrupoSelecaoDialogComponent {
1926
1950
  atualiza() {
1927
1951
  this.isBusy = true;
1928
1952
  this.ws.buscaProdutoSubgrupo(this.setting)
1929
- .subscribe(r => {
1930
- this.isBusy = false;
1931
- this.items = r;
1932
- console.info(r);
1933
- }, err => {
1934
- this.isBusy = false;
1935
- this.notification.showHttpError(err);
1953
+ .subscribe({
1954
+ next: r => {
1955
+ this.isBusy = false;
1956
+ this.items = r;
1957
+ console.info(r);
1958
+ },
1959
+ error: err => {
1960
+ this.isBusy = false;
1961
+ this.notification.showHttpError(err);
1962
+ }
1936
1963
  });
1937
1964
  }
1938
1965
  selectItem(i) {
@@ -2410,26 +2437,30 @@ class ProdutoAddDialogComponent {
2410
2437
  }
2411
2438
  this.isBusy = true;
2412
2439
  this.ws.addProduto(this.model)
2413
- .subscribe(r => {
2414
- this.isBusy = false;
2415
- this.notification.showMsg("Salvo com sucesso.");
2416
- if (this.dialogRef)
2417
- this.dialogRef.close(true);
2418
- }, err => {
2419
- this.isBusy = false;
2420
- this.notification.showMsg(err.error);
2440
+ .subscribe({
2441
+ next: r => {
2442
+ this.isBusy = false;
2443
+ this.notification.showMsg("Salvo com sucesso.");
2444
+ if (this.dialogRef)
2445
+ this.dialogRef.close(true);
2446
+ }, error: err => {
2447
+ this.isBusy = false;
2448
+ this.notification.showMsg(err.error);
2449
+ }
2421
2450
  });
2422
2451
  }
2423
2452
  getNextId() {
2424
2453
  this.isBusy = true;
2425
2454
  this.ws.getNextIdProduto()
2426
- .subscribe(r => {
2427
- this.model.id = r;
2428
- this.model.referencia = '' + r;
2429
- this.isBusy = false;
2430
- }, err => {
2431
- this.isBusy = false;
2432
- this.notification.showMsg(err.error);
2455
+ .subscribe({
2456
+ next: r => {
2457
+ this.model.id = r;
2458
+ this.model.referencia = '' + r;
2459
+ this.isBusy = false;
2460
+ }, error: err => {
2461
+ this.isBusy = false;
2462
+ this.notification.showMsg(err.error);
2463
+ }
2433
2464
  });
2434
2465
  }
2435
2466
  }
@@ -2551,6 +2582,319 @@ class ProdutoSearchSetting extends SearchSetting {
2551
2582
  }
2552
2583
  }
2553
2584
 
2585
+ function validaProdutoComposicao(item, focus) {
2586
+ if (valNumberMin(item.quantidade, 0)) {
2587
+ focus.set('quantidade');
2588
+ return 'Digite uma quantidade válida.';
2589
+ }
2590
+ return null;
2591
+ }
2592
+
2593
+ class ProdutoComposicaoAddDialogComponent {
2594
+ constructor(model, ws, notification, dialogRef, screenHelper) {
2595
+ this.model = model;
2596
+ this.ws = ws;
2597
+ this.notification = notification;
2598
+ this.dialogRef = dialogRef;
2599
+ this.screenHelper = screenHelper;
2600
+ this.isBusy = false;
2601
+ this.focus = new FocusService();
2602
+ this.mobile = this.screenHelper.isMedium;
2603
+ this.screenHelper.changedMediumScreen.subscribe(x => this.mobile = x);
2604
+ }
2605
+ ngOnInit() {
2606
+ }
2607
+ salvar() {
2608
+ if (!this.model)
2609
+ return;
2610
+ const valMsg = validaProdutoComposicao(this.model, this.focus);
2611
+ if (valMsg) {
2612
+ this.notification.showMsgError(valMsg);
2613
+ return;
2614
+ }
2615
+ this.isBusy = true;
2616
+ const onFinished = {
2617
+ next: (r) => {
2618
+ this.isBusy = false;
2619
+ this.notification.showMsg("Salvo com sucesso.");
2620
+ if (this.dialogRef)
2621
+ this.dialogRef.close(true);
2622
+ },
2623
+ error: (err) => {
2624
+ this.isBusy = false;
2625
+ this.notification.showMsg(err.error);
2626
+ }
2627
+ };
2628
+ if (this.model.id === 0) {
2629
+ this.ws.addProdutoComposicao(this.model)
2630
+ .subscribe(onFinished);
2631
+ }
2632
+ else {
2633
+ this.ws.saveProdutoComposicao(this.model)
2634
+ .subscribe(onFinished);
2635
+ }
2636
+ }
2637
+ }
2638
+ ProdutoComposicaoAddDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: ProdutoComposicaoAddDialogComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: CommonWebService }, { token: NotificationService }, { token: i3.MatDialogRef }, { token: ScreenHelperService }], target: i0.ɵɵFactoryTarget.Component });
2639
+ ProdutoComposicaoAddDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.5", type: ProdutoComposicaoAddDialogComponent, selector: "lib-produto-composicao-add-dialog", ngImport: i0, template: "<div class=\"ox-header\">\n <span class=\"titulo\">Composi\u00E7\u00E3o do '{{model.produtoNome}}'</span>\n <button mat-icon-button mat-dialog-close>\n <mat-icon>close</mat-icon>\n </button>\n</div>\n<ox-busy-indicator [isBusy]=\"isBusy\"></ox-busy-indicator>\n<div class=\"dialog-content\">\n <h4>{{model.produtoItemNome}}</h4>\n <div class=\"vbox margin-top-32\">\n <div class=\"form-group\">\n <label>Quantidade</label>\n <input id=\"quantidade\" [(ngModel)]=\"model.quantidade\" class=\"form-control input-120\" maxlength=\"10\" type=\"number\">\n </div>\n </div>\n</div>\n<div class=\"dialog-footer\">\n <button mat-button (click)=\"salvar()\">CONFIRMAR</button>\n</div>", styles: [":host{background:#fafafa;display:flex;flex-direction:column;height:100%;max-height:99vh}\n"], dependencies: [{ kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6$1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i7$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i3.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "component", type: BusyIndicatorComponent, selector: "ox-busy-indicator", inputs: ["isBusy"] }] });
2640
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: ProdutoComposicaoAddDialogComponent, decorators: [{
2641
+ type: Component,
2642
+ args: [{ selector: 'lib-produto-composicao-add-dialog', template: "<div class=\"ox-header\">\n <span class=\"titulo\">Composi\u00E7\u00E3o do '{{model.produtoNome}}'</span>\n <button mat-icon-button mat-dialog-close>\n <mat-icon>close</mat-icon>\n </button>\n</div>\n<ox-busy-indicator [isBusy]=\"isBusy\"></ox-busy-indicator>\n<div class=\"dialog-content\">\n <h4>{{model.produtoItemNome}}</h4>\n <div class=\"vbox margin-top-32\">\n <div class=\"form-group\">\n <label>Quantidade</label>\n <input id=\"quantidade\" [(ngModel)]=\"model.quantidade\" class=\"form-control input-120\" maxlength=\"10\" type=\"number\">\n </div>\n </div>\n</div>\n<div class=\"dialog-footer\">\n <button mat-button (click)=\"salvar()\">CONFIRMAR</button>\n</div>", styles: [":host{background:#fafafa;display:flex;flex-direction:column;height:100%;max-height:99vh}\n"] }]
2643
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
2644
+ type: Inject,
2645
+ args: [MAT_DIALOG_DATA]
2646
+ }] }, { type: CommonWebService }, { type: NotificationService }, { type: i3.MatDialogRef }, { type: ScreenHelperService }]; } });
2647
+
2648
+ class ProdutoSelecaoDialogComponent {
2649
+ constructor(dialogRef, dialog, ws, notification, auth, screenHelper) {
2650
+ this.dialogRef = dialogRef;
2651
+ this.dialog = dialog;
2652
+ this.ws = ws;
2653
+ this.notification = notification;
2654
+ this.screenHelper = screenHelper;
2655
+ this.items = [];
2656
+ this.selectedItem = null;
2657
+ this.isBusy = false;
2658
+ this.setting = new SearchSetting();
2659
+ this.lazyTrigger = new LazyTrigger(() => { this.atualiza(); });
2660
+ this.nav = new NavegacaoSelecaoDialogUtil(this);
2661
+ this.mobile = this.screenHelper.isMedium;
2662
+ this.allowAdd = auth.permissoes.adminProdutoAdd;
2663
+ this.allowEdit = auth.permissoes.adminProdutoPesquisa;
2664
+ }
2665
+ ngOnInit() {
2666
+ this.atualiza();
2667
+ }
2668
+ atualiza() {
2669
+ this.isBusy = true;
2670
+ this.ws.buscaPaginadaProdutos(this.setting, 1, 50)
2671
+ .subscribe({
2672
+ next: r => {
2673
+ this.isBusy = false;
2674
+ this.items = r.items;
2675
+ console.info(r);
2676
+ },
2677
+ error: err => {
2678
+ this.isBusy = false;
2679
+ this.notification.showHttpError(err);
2680
+ }
2681
+ });
2682
+ }
2683
+ selectItem(i) {
2684
+ if (this.selectedItem === i) {
2685
+ this.dialogRef.close(i);
2686
+ }
2687
+ this.selectedItem = i;
2688
+ }
2689
+ editar() {
2690
+ const item = this.selectedItem;
2691
+ if (!item)
2692
+ return;
2693
+ this.abreCadastro(item);
2694
+ }
2695
+ abreCadastro(item) {
2696
+ let height = undefined;
2697
+ let width = 550 + 'px';
2698
+ if (this.mobile) {
2699
+ width = (window.innerWidth * 0.99) + 'px';
2700
+ height = (window.innerHeight * 0.99) + 'px';
2701
+ }
2702
+ const dialog = this.dialog.open(ProdutoEditDialogComponent, {
2703
+ data: item,
2704
+ width: width,
2705
+ height: height,
2706
+ maxWidth: '100%',
2707
+ panelClass: 'dialog-p0',
2708
+ });
2709
+ dialog.afterClosed().subscribe(result => {
2710
+ if (result !== true)
2711
+ return;
2712
+ this.notification.showMsg("Salvo com sucesso.");
2713
+ this.atualiza();
2714
+ });
2715
+ }
2716
+ novo() {
2717
+ let height = (window.innerHeight * 0.90) + 'px';
2718
+ let width = 550 + 'px';
2719
+ if (this.mobile) {
2720
+ width = (window.innerWidth * 0.99) + 'px';
2721
+ //height = (window.innerHeight * 0.98) + 'px';
2722
+ }
2723
+ const dialog = this.dialog.open(ProdutoAddDialogComponent, {
2724
+ width: width,
2725
+ height: height,
2726
+ maxWidth: '100%',
2727
+ panelClass: 'dialog-p0',
2728
+ });
2729
+ dialog.afterClosed().subscribe(result => {
2730
+ if (result === undefined)
2731
+ return;
2732
+ this.notification.showMsg("Salvo com sucesso.");
2733
+ this.atualiza();
2734
+ });
2735
+ }
2736
+ excluir() {
2737
+ const item = this.selectedItem;
2738
+ if (!item)
2739
+ return;
2740
+ confirmaExclusao(this.dialog, `Deseja prosseguir com a exclusão do produto ${item.nome}?`, () => {
2741
+ this.isBusy = true;
2742
+ this.ws.deleteProduto(item.id)
2743
+ .subscribe({
2744
+ next: r => {
2745
+ this.notification.showMsg("O produto foi excluído com sucesso.");
2746
+ this.items.remove(item);
2747
+ this.selectedItem = null;
2748
+ this.isBusy = false;
2749
+ },
2750
+ error: err => {
2751
+ this.isBusy = false;
2752
+ this.notification.showMsg(err.error);
2753
+ }
2754
+ });
2755
+ });
2756
+ }
2757
+ }
2758
+ ProdutoSelecaoDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: ProdutoSelecaoDialogComponent, deps: [{ token: i3.MatDialogRef }, { token: i3.MatDialog }, { token: CommonWebService }, { token: NotificationService }, { token: AuthDataService }, { token: ScreenHelperService }], target: i0.ɵɵFactoryTarget.Component });
2759
+ ProdutoSelecaoDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.5", type: ProdutoSelecaoDialogComponent, selector: "lib-produto-selecao-dialog", ngImport: i0, template: "<div class=\"dialog-header\">\n <h2>Sele\u00E7\u00E3o de Subgrupos</h2>\n </div>\n <div class=\"tool-panel\">\n <div class=\"tool-section\">\n <label>Pesquisa</label>\n <div class=\"search-input-container\">\n <input (keydown)=\"nav.onKeyDown($event)\" cdkFocusInitial [(ngModel)]=\"setting.frase\" placeholder=\"Digite um termo de busca...\" (input)=\"lazyTrigger.fire()\">\n </div>\n </div>\n <div class=\"tool-section\">\n <label>A\u00E7\u00F5es</label>\n <div class=\"tool-row\">\n <button mat-icon-button (click)=\"atualiza()\">\n <mat-icon aria-label=\"Atualizar\">refresh</mat-icon>\n </button>\n <button mat-icon-button (click)=\"novo()\" *ngIf=\"allowAdd\">\n <mat-icon aria-label=\"novo\">add</mat-icon>\n </button>\n <button mat-icon-button (click)=\"editar()\" *ngIf=\"selectedItem && allowEdit\">\n <mat-icon aria-label=\"editar\">edit</mat-icon>\n </button>\n </div>\n </div>\n </div>\n <div class=\"dialog-content\">\n <ox-item-card [nome]=\"i.nome\" (click)=\"selectItem(i)\" *ngFor=\"let i of items\" [class.selected]=\"i === selectedItem\"></ox-item-card>\n </div>\n <div class=\"dialog-footer\">\n <button mat-button [disabled]=\"selectedItem == null\" color=\"primary\" [mat-dialog-close]=\"selectedItem\">CONFIRMAR</button>\n <button mat-button [mat-dialog-close]=\"undefined\">VOLTAR</button>\n </div>\n <ox-busy-indicator [isBusy]=\"isBusy\"></ox-busy-indicator>", styles: [":host{background:#fafafa;display:flex;flex-direction:column;height:100%;max-height:99vh}\n"], dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6$1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i7$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i3.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "component", type: BusyIndicatorComponent, selector: "ox-busy-indicator", inputs: ["isBusy"] }, { kind: "component", type: ItemCardComponent, selector: "ox-item-card", inputs: ["nome", "codigo", "star", "cloud", "desativado"] }] });
2760
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: ProdutoSelecaoDialogComponent, decorators: [{
2761
+ type: Component,
2762
+ args: [{ selector: 'lib-produto-selecao-dialog', template: "<div class=\"dialog-header\">\n <h2>Sele\u00E7\u00E3o de Subgrupos</h2>\n </div>\n <div class=\"tool-panel\">\n <div class=\"tool-section\">\n <label>Pesquisa</label>\n <div class=\"search-input-container\">\n <input (keydown)=\"nav.onKeyDown($event)\" cdkFocusInitial [(ngModel)]=\"setting.frase\" placeholder=\"Digite um termo de busca...\" (input)=\"lazyTrigger.fire()\">\n </div>\n </div>\n <div class=\"tool-section\">\n <label>A\u00E7\u00F5es</label>\n <div class=\"tool-row\">\n <button mat-icon-button (click)=\"atualiza()\">\n <mat-icon aria-label=\"Atualizar\">refresh</mat-icon>\n </button>\n <button mat-icon-button (click)=\"novo()\" *ngIf=\"allowAdd\">\n <mat-icon aria-label=\"novo\">add</mat-icon>\n </button>\n <button mat-icon-button (click)=\"editar()\" *ngIf=\"selectedItem && allowEdit\">\n <mat-icon aria-label=\"editar\">edit</mat-icon>\n </button>\n </div>\n </div>\n </div>\n <div class=\"dialog-content\">\n <ox-item-card [nome]=\"i.nome\" (click)=\"selectItem(i)\" *ngFor=\"let i of items\" [class.selected]=\"i === selectedItem\"></ox-item-card>\n </div>\n <div class=\"dialog-footer\">\n <button mat-button [disabled]=\"selectedItem == null\" color=\"primary\" [mat-dialog-close]=\"selectedItem\">CONFIRMAR</button>\n <button mat-button [mat-dialog-close]=\"undefined\">VOLTAR</button>\n </div>\n <ox-busy-indicator [isBusy]=\"isBusy\"></ox-busy-indicator>", styles: [":host{background:#fafafa;display:flex;flex-direction:column;height:100%;max-height:99vh}\n"] }]
2763
+ }], ctorParameters: function () { return [{ type: i3.MatDialogRef }, { type: i3.MatDialog }, { type: CommonWebService }, { type: NotificationService }, { type: AuthDataService }, { type: ScreenHelperService }]; } });
2764
+
2765
+ class ProdutoComposicaoComponent {
2766
+ constructor(dialogRef, dialog, produto, ws, notification, screenHelper) {
2767
+ this.dialogRef = dialogRef;
2768
+ this.dialog = dialog;
2769
+ this.produto = produto;
2770
+ this.ws = ws;
2771
+ this.notification = notification;
2772
+ this.screenHelper = screenHelper;
2773
+ this.items = [];
2774
+ this.selectedItem = null;
2775
+ this.isBusy = false;
2776
+ this.mobile = this.screenHelper.isMedium;
2777
+ }
2778
+ ngOnInit() {
2779
+ this.atualiza();
2780
+ }
2781
+ atualiza() {
2782
+ this.isBusy = true;
2783
+ this.ws.getProdutoComposicao(this.produto.id)
2784
+ .subscribe({
2785
+ next: r => {
2786
+ this.isBusy = false;
2787
+ for (const item of r) {
2788
+ item.produtoId = this.produto.id;
2789
+ item.produtoNome = this.produto.nome;
2790
+ }
2791
+ this.items = r;
2792
+ console.info(r);
2793
+ },
2794
+ error: err => {
2795
+ this.isBusy = false;
2796
+ this.notification.showHttpError(err);
2797
+ }
2798
+ });
2799
+ }
2800
+ selectItem(i) {
2801
+ this.selectedItem = i;
2802
+ }
2803
+ novo() {
2804
+ let height = (window.innerHeight * 0.90) + 'px';
2805
+ let width = 550 + 'px';
2806
+ if (this.mobile) {
2807
+ width = (window.innerWidth * 0.99) + 'px';
2808
+ //height = (window.innerHeight * 0.98) + 'px';
2809
+ }
2810
+ const dialog = this.dialog.open(ProdutoSelecaoDialogComponent, {
2811
+ width: width,
2812
+ //height: height,
2813
+ maxWidth: '100%',
2814
+ panelClass: 'dialog-p0',
2815
+ });
2816
+ dialog.afterClosed().subscribe(result => {
2817
+ if (result === undefined)
2818
+ return;
2819
+ const p = result;
2820
+ const composicao = {
2821
+ id: 0,
2822
+ produtoId: this.produto.id,
2823
+ produtoNome: this.produto.nome,
2824
+ produtoItemId: p.id,
2825
+ produtoItemNome: p.nome,
2826
+ quantidade: 1
2827
+ };
2828
+ const dialog2 = this.dialog.open(ProdutoComposicaoAddDialogComponent, {
2829
+ width: width,
2830
+ //height: height,
2831
+ data: composicao,
2832
+ maxWidth: '100%',
2833
+ panelClass: 'dialog-p0',
2834
+ });
2835
+ dialog2.afterClosed().subscribe(result => {
2836
+ if (result === undefined)
2837
+ return;
2838
+ this.notification.showMsg("Salvo com sucesso.");
2839
+ this.atualiza();
2840
+ });
2841
+ });
2842
+ }
2843
+ editar() {
2844
+ if (!this.selectedItem)
2845
+ return;
2846
+ let height = (window.innerHeight * 0.90) + 'px';
2847
+ let width = 550 + 'px';
2848
+ if (this.mobile) {
2849
+ width = (window.innerWidth * 0.99) + 'px';
2850
+ //height = (window.innerHeight * 0.98) + 'px';
2851
+ }
2852
+ const dialog = this.dialog.open(ProdutoSelecaoDialogComponent, {
2853
+ width: width,
2854
+ //height: height,
2855
+ data: this.selectedItem,
2856
+ maxWidth: '100%',
2857
+ panelClass: 'dialog-p0',
2858
+ });
2859
+ dialog.afterClosed().subscribe(result => {
2860
+ if (result === undefined)
2861
+ return;
2862
+ this.notification.showMsg("Salvo com sucesso.");
2863
+ this.atualiza();
2864
+ });
2865
+ }
2866
+ excluir() {
2867
+ const item = this.selectedItem;
2868
+ if (!item)
2869
+ return;
2870
+ confirmaExclusao(this.dialog, `Deseja prosseguir com a exclusão do produto '${item.produtoItemNome}'?`, () => {
2871
+ this.isBusy = true;
2872
+ this.ws.deleteProdutoComposicao(item.id)
2873
+ .subscribe({
2874
+ next: r => {
2875
+ this.notification.showMsg("O produto foi excluído com sucesso.");
2876
+ this.items.remove(item);
2877
+ this.selectedItem = null;
2878
+ this.isBusy = false;
2879
+ },
2880
+ error: err => {
2881
+ this.isBusy = false;
2882
+ this.notification.showMsg(err.error);
2883
+ }
2884
+ });
2885
+ });
2886
+ }
2887
+ }
2888
+ ProdutoComposicaoComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: ProdutoComposicaoComponent, deps: [{ token: i3.MatDialogRef }, { token: i3.MatDialog }, { token: MAT_DIALOG_DATA }, { token: CommonWebService }, { token: NotificationService }, { token: ScreenHelperService }], target: i0.ɵɵFactoryTarget.Component });
2889
+ ProdutoComposicaoComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.5", type: ProdutoComposicaoComponent, selector: "ox-produto-composicao", ngImport: i0, template: "<div class=\"dialog-header\">\n <h2>Composi\u00E7\u00E3o do Produto '{{produto.nome}}'</h2>\n </div>\n <div class=\"tool-panel\">\n <div class=\"tool-section\">\n <label>A\u00E7\u00F5es</label>\n <div class=\"tool-row\">\n <button mat-icon-button (click)=\"atualiza()\">\n <mat-icon aria-label=\"Atualizar\">refresh</mat-icon>\n </button>\n <button mat-icon-button (click)=\"novo()\">\n <mat-icon aria-label=\"novo\">add</mat-icon>\n </button>\n <button mat-icon-button (click)=\"editar()\" *ngIf=\"selectedItem\">\n <mat-icon aria-label=\"editar\">edit</mat-icon>\n </button>\n <button mat-icon-button (click)=\"excluir()\" *ngIf=\"selectedItem\">\n <mat-icon aria-label=\"editar\">delete</mat-icon>\n </button>\n </div>\n </div>\n </div>\n <div class=\"dialog-content\">\n <ox-item-card [codigo]=\"i.quantidade\" [nome]=\"i.produtoItemNome\" (click)=\"selectItem(i)\" *ngFor=\"let i of items\" [class.selected]=\"i === selectedItem\"></ox-item-card>\n </div>\n <div class=\"dialog-footer\">\n <button mat-button [disabled]=\"selectedItem == undefined\" color=\"primary\" [mat-dialog-close]=\"selectedItem\">CONFIRMAR</button>\n <button mat-button [mat-dialog-close]=\"undefined\">VOLTAR</button>\n </div>\n <ox-busy-indicator [isBusy]=\"isBusy\"></ox-busy-indicator>", styles: [":host{background:#fafafa;display:flex;flex-direction:column;height:100%;max-height:99vh}\n"], dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6$1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i7$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i3.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "component", type: BusyIndicatorComponent, selector: "ox-busy-indicator", inputs: ["isBusy"] }, { kind: "component", type: ItemCardComponent, selector: "ox-item-card", inputs: ["nome", "codigo", "star", "cloud", "desativado"] }] });
2890
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: ProdutoComposicaoComponent, decorators: [{
2891
+ type: Component,
2892
+ args: [{ selector: 'ox-produto-composicao', template: "<div class=\"dialog-header\">\n <h2>Composi\u00E7\u00E3o do Produto '{{produto.nome}}'</h2>\n </div>\n <div class=\"tool-panel\">\n <div class=\"tool-section\">\n <label>A\u00E7\u00F5es</label>\n <div class=\"tool-row\">\n <button mat-icon-button (click)=\"atualiza()\">\n <mat-icon aria-label=\"Atualizar\">refresh</mat-icon>\n </button>\n <button mat-icon-button (click)=\"novo()\">\n <mat-icon aria-label=\"novo\">add</mat-icon>\n </button>\n <button mat-icon-button (click)=\"editar()\" *ngIf=\"selectedItem\">\n <mat-icon aria-label=\"editar\">edit</mat-icon>\n </button>\n <button mat-icon-button (click)=\"excluir()\" *ngIf=\"selectedItem\">\n <mat-icon aria-label=\"editar\">delete</mat-icon>\n </button>\n </div>\n </div>\n </div>\n <div class=\"dialog-content\">\n <ox-item-card [codigo]=\"i.quantidade\" [nome]=\"i.produtoItemNome\" (click)=\"selectItem(i)\" *ngFor=\"let i of items\" [class.selected]=\"i === selectedItem\"></ox-item-card>\n </div>\n <div class=\"dialog-footer\">\n <button mat-button [disabled]=\"selectedItem == undefined\" color=\"primary\" [mat-dialog-close]=\"selectedItem\">CONFIRMAR</button>\n <button mat-button [mat-dialog-close]=\"undefined\">VOLTAR</button>\n </div>\n <ox-busy-indicator [isBusy]=\"isBusy\"></ox-busy-indicator>", styles: [":host{background:#fafafa;display:flex;flex-direction:column;height:100%;max-height:99vh}\n"] }]
2893
+ }], ctorParameters: function () { return [{ type: i3.MatDialogRef }, { type: i3.MatDialog }, { type: undefined, decorators: [{
2894
+ type: Inject,
2895
+ args: [MAT_DIALOG_DATA]
2896
+ }] }, { type: CommonWebService }, { type: NotificationService }, { type: ScreenHelperService }]; } });
2897
+
2554
2898
  class PaginatorComponent {
2555
2899
  constructor() {
2556
2900
  this.paginaAtualChange = new EventEmitter();
@@ -2643,6 +2987,7 @@ class ProdutosComponent {
2643
2987
  this.allowAdd = auth.permissoes.adminProdutoAdd;
2644
2988
  this.allowExcluir = auth.permissoes.adminProdutoDelete;
2645
2989
  this.mobile = this.screenHelper.isMedium;
2990
+ this.usaEstoqueOnline = auth.usaEstoqueOnline;
2646
2991
  this.screenHelper.changedMediumScreen.subscribe(x => this.mobile = x);
2647
2992
  this.setting.exibeNaoControladoEstoque = true;
2648
2993
  this.setting.exibeImprimiCozinha = true;
@@ -2700,14 +3045,17 @@ class ProdutosComponent {
2700
3045
  confirmaExclusao(this.dialog, `Deseja prosseguir com a exclusão do produto ${item.nome}?`, () => {
2701
3046
  this.isBusy = true;
2702
3047
  this.ws.deleteProduto(item.id)
2703
- .subscribe(r => {
2704
- this.notification.showMsg("O produto foi excluído com sucesso.");
2705
- this.items.remove(item);
2706
- this.selectedItem = null;
2707
- this.isBusy = false;
2708
- }, err => {
2709
- this.isBusy = false;
2710
- this.notification.showMsg(err.error);
3048
+ .subscribe({
3049
+ next: r => {
3050
+ this.notification.showMsg("O produto foi excluído com sucesso.");
3051
+ this.items.remove(item);
3052
+ this.selectedItem = null;
3053
+ this.isBusy = false;
3054
+ },
3055
+ error: err => {
3056
+ this.isBusy = false;
3057
+ this.notification.showMsg(err.error);
3058
+ }
2711
3059
  });
2712
3060
  });
2713
3061
  }
@@ -2762,12 +3110,15 @@ class ProdutosComponent {
2762
3110
  }
2763
3111
  this.isBusy = true;
2764
3112
  this.ws.saveProduto(this.selectedItem)
2765
- .subscribe(r => {
2766
- this.notification.showMsg("Salvo com sucesso.");
2767
- this.isBusy = false;
2768
- }, err => {
2769
- this.isBusy = false;
2770
- this.notification.showMsg(err.error);
3113
+ .subscribe({
3114
+ next: r => {
3115
+ this.notification.showMsg("Salvo com sucesso.");
3116
+ this.isBusy = false;
3117
+ },
3118
+ error: err => {
3119
+ this.isBusy = false;
3120
+ this.notification.showMsg(err.error);
3121
+ }
2771
3122
  });
2772
3123
  }
2773
3124
  filtros() {
@@ -2796,12 +3147,32 @@ class ProdutosComponent {
2796
3147
  this.atualiza();
2797
3148
  });
2798
3149
  }
3150
+ composicao() {
3151
+ let height = (window.innerHeight * 0.90) + 'px';
3152
+ let width = 550 + 'px';
3153
+ if (this.mobile) {
3154
+ width = (window.innerWidth * 0.99) + 'px';
3155
+ //height = (window.innerHeight * 0.98) + 'px';
3156
+ }
3157
+ const dialog = this.dialog.open(ProdutoComposicaoComponent, {
3158
+ width: width,
3159
+ height: height,
3160
+ maxWidth: '100%',
3161
+ panelClass: 'dialog-p0',
3162
+ });
3163
+ dialog.afterClosed().subscribe(result => {
3164
+ if (result === undefined)
3165
+ return;
3166
+ this.notification.showMsg("Salvo com sucesso.");
3167
+ this.atualiza();
3168
+ });
3169
+ }
2799
3170
  }
2800
3171
  ProdutosComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: ProdutosComponent, deps: [{ token: CommonWebService }, { token: NotificationService }, { token: i3.MatDialog }, { token: AuthDataService }, { token: ScreenHelperService }], target: i0.ɵɵFactoryTarget.Component });
2801
- ProdutosComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.5", type: ProdutosComponent, selector: "ox-produtos", ngImport: i0, template: "<ox-busy-indicator [isBusy]=\"isBusy\"></ox-busy-indicator>\n<div class=\"tool-panel\" *ngIf=\"mobile\">\n <div class=\"tool-section\">\n <label>Pesquisa</label>\n <div class=\"search-input-container\">\n <input [(ngModel)]=\"setting.frase\" placeholder=\"Digite um termo de busca...\" (input)=\"lazyTrigger.fire()\">\n <button mat-icon-button (click)=\"filtros()\">\n <mat-icon aria-label=\"Filtros\">manage_search</mat-icon>\n </button>\n </div>\n </div>\n <div class=\"tool-section ordem-sm2\">\n <label>A\u00E7\u00F5es</label>\n <div class=\"tool-row\">\n <button mat-icon-button (click)=\"atualiza()\">\n <mat-icon aria-label=\"Atualizar\">refresh</mat-icon>\n </button>\n <button mat-icon-button (click)=\"novo()\" *ngIf=\"allowAdd\">\n <mat-icon aria-label=\"Novo Grupo\">add</mat-icon>\n </button>\n <button mat-icon-button (click)=\"excluir()\" *ngIf=\"selectedItem && allowExcluir\" [@fade]>\n <mat-icon aria-label=\"Excluir Grupo\">delete</mat-icon>\n </button>\n </div>\n </div>\n</div>\n<div class=\"result-container\" *ngIf=\"items\">\n <div class=\"cards-container cards-container-shadow\" *ngIf=\"mobile\">\n <ox-item-card [desativado]=\"!i.isAtivo\" [cloud]=\"i.enviadoPC\" [nome]=\"i.nome\" *ngFor=\"let i of items\" (click)=\"abreCadastro(i)\"></ox-item-card>\n </div> \n <div class=\"hbox\" *ngIf=\"mobile\">\n <ox-paginator (change)=\"trocaPagina()\" [(paginaAtual)]=\"paginaAtual\" [(totalPaginas)]=\"result.totalPaginas\">\n </ox-paginator>\n </div>\n <div class=\"listagem-desktop-grid\" *ngIf=\"!mobile\">\n <div class=\"listagem-column-container listagem-list-column\">\n <h3>Produtos</h3>\n <div class=\"tool-panel tool-panel-float\">\n <div class=\"tool-section\">\n <label>Pesquisa</label>\n <div class=\"search-input-container\">\n <input [(ngModel)]=\"setting.frase\" placeholder=\"Digite um termo de busca...\" (input)=\"lazyTrigger.fire()\">\n <button mat-icon-button (click)=\"filtros()\">\n <mat-icon aria-label=\"Filtros\">manage_search</mat-icon>\n </button>\n </div>\n </div>\n <div class=\"tool-section ordem-sm2\">\n <label>A\u00E7\u00F5es</label>\n <div class=\"tool-row\">\n <button mat-icon-button (click)=\"atualiza()\">\n <mat-icon aria-label=\"Atualizar\">refresh</mat-icon>\n </button>\n <button mat-icon-button (click)=\"novo()\" *ngIf=\"allowAdd\">\n <mat-icon aria-label=\"Novo\">add</mat-icon>\n </button>\n <button mat-icon-button (click)=\"excluir()\" *ngIf=\"selectedItem && allowExcluir\" [@fade]>\n <mat-icon aria-label=\"Excluir\">delete</mat-icon>\n </button>\n </div>\n </div>\n </div>\n <div class=\"listagem-list-container\">\n <h4 *ngIf=\"items.length === 0\" class=\"nenhum-item-msg\">A busca n\u00E3o retornou resultados</h4>\n\n <ox-item-card [desativado]=\"!i.isAtivo\" [cloud]=\"i.enviadoPC\" [codigo]=\"i.id\" [nome]=\"i.nome\" *ngFor=\"let i of items\" [class.selected]=\"i === selectedItem\"\n (click)=\"selectedItem = i;\"></ox-item-card>\n\n </div>\n <div class=\"hbox\">\n <ox-paginator (change)=\"trocaPagina()\" [(paginaAtual)]=\"paginaAtual\" [(totalPaginas)]=\"result.totalPaginas\">\n </ox-paginator>\n <div class=\"total-qtd\">Exibindo {{result.inicioQtd}}-{{result.finalQtd}} de {{result.quantidade}}</div>\n \n </div>\n </div>\n <div class=\"listagem-column-container listagem-column-form\">\n <h3 *ngIf=\"!selectedItem\">Selecione um produto no lado direito</h3>\n <h3 *ngIf=\"selectedItem\">{{selectedItem.nome | uppercase}}</h3>\n <div class=\"listagem-form-container\">\n <ox-produto-form [@fade] [model]=\"selectedItem\" *ngIf=\"selectedItem\" [editMode]=\"true\">\n </ox-produto-form>\n </div>\n\n <div class=\"listagem-form-acoes\">\n <button (click)=\"salvar()\" mat-fab color=\"primary\" *ngIf=\"selectedItem\" tabindex=\"20\">\n <mat-icon>save</mat-icon>\n </button>\n </div>\n </div>\n </div>\n</div>", styles: [":host{height:calc(100% - 48px);display:flex;flex-grow:1;flex-direction:column;background:#F0F0F0}:host{background-color:#fdfdfd}.total-qtd{align-self:center;font-size:small}\n"], dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6$1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i7$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: BusyIndicatorComponent, selector: "ox-busy-indicator", inputs: ["isBusy"] }, { kind: "component", type: PaginatorComponent, selector: "ox-paginator", inputs: ["pageSize", "paginaAtual", "totalPaginas"], outputs: ["paginaAtualChange", "totalPaginasChange", "change"] }, { kind: "component", type: ItemCardComponent, selector: "ox-item-card", inputs: ["nome", "codigo", "star", "cloud", "desativado"] }, { kind: "component", type: ProdutoFormComponent, selector: "ox-produto-form", inputs: ["editMode", "model"], outputs: ["nextIdClick"] }, { kind: "pipe", type: i6.UpperCasePipe, name: "uppercase" }], animations: [fadeAnimation] });
3172
+ ProdutosComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.5", type: ProdutosComponent, selector: "ox-produtos", ngImport: i0, template: "<ox-busy-indicator [isBusy]=\"isBusy\"></ox-busy-indicator>\n<div class=\"tool-panel\" *ngIf=\"mobile\">\n <div class=\"tool-section\">\n <label>Pesquisa</label>\n <div class=\"search-input-container\">\n <input [(ngModel)]=\"setting.frase\" placeholder=\"Digite um termo de busca...\" (input)=\"lazyTrigger.fire()\">\n <button mat-icon-button (click)=\"filtros()\">\n <mat-icon aria-label=\"Filtros\">manage_search</mat-icon>\n </button>\n </div>\n </div>\n <div class=\"tool-section ordem-sm2\">\n <label>A\u00E7\u00F5es</label>\n <div class=\"tool-row\">\n <button mat-icon-button (click)=\"atualiza()\">\n <mat-icon aria-label=\"Atualizar\">refresh</mat-icon>\n </button>\n <button mat-icon-button (click)=\"novo()\" *ngIf=\"allowAdd\">\n <mat-icon aria-label=\"Novo Grupo\">add</mat-icon>\n </button>\n <button mat-icon-button (click)=\"excluir()\" *ngIf=\"selectedItem && allowExcluir\" [@fade]>\n <mat-icon aria-label=\"Excluir Grupo\">delete</mat-icon>\n </button>\n </div>\n </div>\n</div>\n<div class=\"result-container\" *ngIf=\"items\">\n <div class=\"cards-container cards-container-shadow\" *ngIf=\"mobile\">\n <ox-item-card [desativado]=\"!i.isAtivo\" [cloud]=\"i.enviadoPC\" [nome]=\"i.nome\" *ngFor=\"let i of items\" (click)=\"abreCadastro(i)\"></ox-item-card>\n </div> \n <div class=\"hbox\" *ngIf=\"mobile\">\n <ox-paginator (change)=\"trocaPagina()\" [(paginaAtual)]=\"paginaAtual\" [(totalPaginas)]=\"result.totalPaginas\">\n </ox-paginator>\n </div>\n <div class=\"listagem-desktop-grid\" *ngIf=\"!mobile\">\n <div class=\"listagem-column-container listagem-list-column\">\n <h3>Produtos</h3>\n <div class=\"tool-panel tool-panel-float\">\n <div class=\"tool-section\">\n <label>Pesquisa</label>\n <div class=\"search-input-container\">\n <input [(ngModel)]=\"setting.frase\" placeholder=\"Digite um termo de busca...\" (input)=\"lazyTrigger.fire()\">\n <button mat-icon-button (click)=\"filtros()\">\n <mat-icon aria-label=\"Filtros\">manage_search</mat-icon>\n </button>\n </div>\n </div>\n <div class=\"tool-section ordem-sm2\">\n <label>A\u00E7\u00F5es</label>\n <div class=\"tool-row\">\n <button mat-icon-button (click)=\"atualiza()\">\n <mat-icon aria-label=\"Atualizar\">refresh</mat-icon>\n </button>\n <button mat-icon-button (click)=\"novo()\" *ngIf=\"allowAdd\">\n <mat-icon aria-label=\"Novo\">add</mat-icon>\n </button>\n <button mat-icon-button (click)=\"excluir()\" *ngIf=\"selectedItem && allowExcluir\" [@fade]>\n <mat-icon aria-label=\"Excluir\">delete</mat-icon>\n </button>\n </div>\n </div>\n </div>\n <div class=\"listagem-list-container\">\n <h4 *ngIf=\"items.length === 0\" class=\"nenhum-item-msg\">A busca n\u00E3o retornou resultados</h4>\n\n <ox-item-card [desativado]=\"!i.isAtivo\" [cloud]=\"i.enviadoPC\" [codigo]=\"i.id\" [nome]=\"i.nome\" *ngFor=\"let i of items\" [class.selected]=\"i === selectedItem\"\n (click)=\"selectedItem = i;\"></ox-item-card>\n\n </div>\n <div class=\"hbox\">\n <ox-paginator (change)=\"trocaPagina()\" [(paginaAtual)]=\"paginaAtual\" [(totalPaginas)]=\"result.totalPaginas\">\n </ox-paginator>\n <div class=\"total-qtd\">Exibindo {{result.inicioQtd}}-{{result.finalQtd}} de {{result.quantidade}}</div>\n \n </div>\n </div>\n <div class=\"listagem-column-container listagem-column-form\">\n <h3 *ngIf=\"!selectedItem\">Selecione um produto no lado direito</h3>\n <h3 *ngIf=\"selectedItem\">{{selectedItem.nome | uppercase}}</h3>\n <div class=\"listagem-form-container\">\n <ox-produto-form [@fade] [model]=\"selectedItem\" *ngIf=\"selectedItem\" [editMode]=\"true\">\n </ox-produto-form>\n </div>\n\n <div class=\"listagem-form-acoes\">\n <button (click)=\"salvar()\" mat-raised-button color=\"primary\" *ngIf=\"selectedItem\" tabindex=\"20\">Salvar</button>\n <button (click)=\"composicao()\" mat-raised-button *ngIf=\"selectedItem && usaEstoqueOnline\" tabindex=\"20\">Composi\u00E7\u00E3o</button>\n </div>\n </div>\n </div>\n</div>", styles: [":host{height:calc(100% - 48px);display:flex;flex-grow:1;flex-direction:column;background:#F0F0F0}:host{background-color:#fdfdfd}.total-qtd{align-self:center;font-size:small}\n"], dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6$1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i7$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: BusyIndicatorComponent, selector: "ox-busy-indicator", inputs: ["isBusy"] }, { kind: "component", type: PaginatorComponent, selector: "ox-paginator", inputs: ["pageSize", "paginaAtual", "totalPaginas"], outputs: ["paginaAtualChange", "totalPaginasChange", "change"] }, { kind: "component", type: ItemCardComponent, selector: "ox-item-card", inputs: ["nome", "codigo", "star", "cloud", "desativado"] }, { kind: "component", type: ProdutoFormComponent, selector: "ox-produto-form", inputs: ["editMode", "model"], outputs: ["nextIdClick"] }, { kind: "pipe", type: i6.UpperCasePipe, name: "uppercase" }], animations: [fadeAnimation] });
2802
3173
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: ProdutosComponent, decorators: [{
2803
3174
  type: Component,
2804
- args: [{ selector: 'ox-produtos', animations: [fadeAnimation], template: "<ox-busy-indicator [isBusy]=\"isBusy\"></ox-busy-indicator>\n<div class=\"tool-panel\" *ngIf=\"mobile\">\n <div class=\"tool-section\">\n <label>Pesquisa</label>\n <div class=\"search-input-container\">\n <input [(ngModel)]=\"setting.frase\" placeholder=\"Digite um termo de busca...\" (input)=\"lazyTrigger.fire()\">\n <button mat-icon-button (click)=\"filtros()\">\n <mat-icon aria-label=\"Filtros\">manage_search</mat-icon>\n </button>\n </div>\n </div>\n <div class=\"tool-section ordem-sm2\">\n <label>A\u00E7\u00F5es</label>\n <div class=\"tool-row\">\n <button mat-icon-button (click)=\"atualiza()\">\n <mat-icon aria-label=\"Atualizar\">refresh</mat-icon>\n </button>\n <button mat-icon-button (click)=\"novo()\" *ngIf=\"allowAdd\">\n <mat-icon aria-label=\"Novo Grupo\">add</mat-icon>\n </button>\n <button mat-icon-button (click)=\"excluir()\" *ngIf=\"selectedItem && allowExcluir\" [@fade]>\n <mat-icon aria-label=\"Excluir Grupo\">delete</mat-icon>\n </button>\n </div>\n </div>\n</div>\n<div class=\"result-container\" *ngIf=\"items\">\n <div class=\"cards-container cards-container-shadow\" *ngIf=\"mobile\">\n <ox-item-card [desativado]=\"!i.isAtivo\" [cloud]=\"i.enviadoPC\" [nome]=\"i.nome\" *ngFor=\"let i of items\" (click)=\"abreCadastro(i)\"></ox-item-card>\n </div> \n <div class=\"hbox\" *ngIf=\"mobile\">\n <ox-paginator (change)=\"trocaPagina()\" [(paginaAtual)]=\"paginaAtual\" [(totalPaginas)]=\"result.totalPaginas\">\n </ox-paginator>\n </div>\n <div class=\"listagem-desktop-grid\" *ngIf=\"!mobile\">\n <div class=\"listagem-column-container listagem-list-column\">\n <h3>Produtos</h3>\n <div class=\"tool-panel tool-panel-float\">\n <div class=\"tool-section\">\n <label>Pesquisa</label>\n <div class=\"search-input-container\">\n <input [(ngModel)]=\"setting.frase\" placeholder=\"Digite um termo de busca...\" (input)=\"lazyTrigger.fire()\">\n <button mat-icon-button (click)=\"filtros()\">\n <mat-icon aria-label=\"Filtros\">manage_search</mat-icon>\n </button>\n </div>\n </div>\n <div class=\"tool-section ordem-sm2\">\n <label>A\u00E7\u00F5es</label>\n <div class=\"tool-row\">\n <button mat-icon-button (click)=\"atualiza()\">\n <mat-icon aria-label=\"Atualizar\">refresh</mat-icon>\n </button>\n <button mat-icon-button (click)=\"novo()\" *ngIf=\"allowAdd\">\n <mat-icon aria-label=\"Novo\">add</mat-icon>\n </button>\n <button mat-icon-button (click)=\"excluir()\" *ngIf=\"selectedItem && allowExcluir\" [@fade]>\n <mat-icon aria-label=\"Excluir\">delete</mat-icon>\n </button>\n </div>\n </div>\n </div>\n <div class=\"listagem-list-container\">\n <h4 *ngIf=\"items.length === 0\" class=\"nenhum-item-msg\">A busca n\u00E3o retornou resultados</h4>\n\n <ox-item-card [desativado]=\"!i.isAtivo\" [cloud]=\"i.enviadoPC\" [codigo]=\"i.id\" [nome]=\"i.nome\" *ngFor=\"let i of items\" [class.selected]=\"i === selectedItem\"\n (click)=\"selectedItem = i;\"></ox-item-card>\n\n </div>\n <div class=\"hbox\">\n <ox-paginator (change)=\"trocaPagina()\" [(paginaAtual)]=\"paginaAtual\" [(totalPaginas)]=\"result.totalPaginas\">\n </ox-paginator>\n <div class=\"total-qtd\">Exibindo {{result.inicioQtd}}-{{result.finalQtd}} de {{result.quantidade}}</div>\n \n </div>\n </div>\n <div class=\"listagem-column-container listagem-column-form\">\n <h3 *ngIf=\"!selectedItem\">Selecione um produto no lado direito</h3>\n <h3 *ngIf=\"selectedItem\">{{selectedItem.nome | uppercase}}</h3>\n <div class=\"listagem-form-container\">\n <ox-produto-form [@fade] [model]=\"selectedItem\" *ngIf=\"selectedItem\" [editMode]=\"true\">\n </ox-produto-form>\n </div>\n\n <div class=\"listagem-form-acoes\">\n <button (click)=\"salvar()\" mat-fab color=\"primary\" *ngIf=\"selectedItem\" tabindex=\"20\">\n <mat-icon>save</mat-icon>\n </button>\n </div>\n </div>\n </div>\n</div>", styles: [":host{height:calc(100% - 48px);display:flex;flex-grow:1;flex-direction:column;background:#F0F0F0}:host{background-color:#fdfdfd}.total-qtd{align-self:center;font-size:small}\n"] }]
3175
+ args: [{ selector: 'ox-produtos', animations: [fadeAnimation], template: "<ox-busy-indicator [isBusy]=\"isBusy\"></ox-busy-indicator>\n<div class=\"tool-panel\" *ngIf=\"mobile\">\n <div class=\"tool-section\">\n <label>Pesquisa</label>\n <div class=\"search-input-container\">\n <input [(ngModel)]=\"setting.frase\" placeholder=\"Digite um termo de busca...\" (input)=\"lazyTrigger.fire()\">\n <button mat-icon-button (click)=\"filtros()\">\n <mat-icon aria-label=\"Filtros\">manage_search</mat-icon>\n </button>\n </div>\n </div>\n <div class=\"tool-section ordem-sm2\">\n <label>A\u00E7\u00F5es</label>\n <div class=\"tool-row\">\n <button mat-icon-button (click)=\"atualiza()\">\n <mat-icon aria-label=\"Atualizar\">refresh</mat-icon>\n </button>\n <button mat-icon-button (click)=\"novo()\" *ngIf=\"allowAdd\">\n <mat-icon aria-label=\"Novo Grupo\">add</mat-icon>\n </button>\n <button mat-icon-button (click)=\"excluir()\" *ngIf=\"selectedItem && allowExcluir\" [@fade]>\n <mat-icon aria-label=\"Excluir Grupo\">delete</mat-icon>\n </button>\n </div>\n </div>\n</div>\n<div class=\"result-container\" *ngIf=\"items\">\n <div class=\"cards-container cards-container-shadow\" *ngIf=\"mobile\">\n <ox-item-card [desativado]=\"!i.isAtivo\" [cloud]=\"i.enviadoPC\" [nome]=\"i.nome\" *ngFor=\"let i of items\" (click)=\"abreCadastro(i)\"></ox-item-card>\n </div> \n <div class=\"hbox\" *ngIf=\"mobile\">\n <ox-paginator (change)=\"trocaPagina()\" [(paginaAtual)]=\"paginaAtual\" [(totalPaginas)]=\"result.totalPaginas\">\n </ox-paginator>\n </div>\n <div class=\"listagem-desktop-grid\" *ngIf=\"!mobile\">\n <div class=\"listagem-column-container listagem-list-column\">\n <h3>Produtos</h3>\n <div class=\"tool-panel tool-panel-float\">\n <div class=\"tool-section\">\n <label>Pesquisa</label>\n <div class=\"search-input-container\">\n <input [(ngModel)]=\"setting.frase\" placeholder=\"Digite um termo de busca...\" (input)=\"lazyTrigger.fire()\">\n <button mat-icon-button (click)=\"filtros()\">\n <mat-icon aria-label=\"Filtros\">manage_search</mat-icon>\n </button>\n </div>\n </div>\n <div class=\"tool-section ordem-sm2\">\n <label>A\u00E7\u00F5es</label>\n <div class=\"tool-row\">\n <button mat-icon-button (click)=\"atualiza()\">\n <mat-icon aria-label=\"Atualizar\">refresh</mat-icon>\n </button>\n <button mat-icon-button (click)=\"novo()\" *ngIf=\"allowAdd\">\n <mat-icon aria-label=\"Novo\">add</mat-icon>\n </button>\n <button mat-icon-button (click)=\"excluir()\" *ngIf=\"selectedItem && allowExcluir\" [@fade]>\n <mat-icon aria-label=\"Excluir\">delete</mat-icon>\n </button>\n </div>\n </div>\n </div>\n <div class=\"listagem-list-container\">\n <h4 *ngIf=\"items.length === 0\" class=\"nenhum-item-msg\">A busca n\u00E3o retornou resultados</h4>\n\n <ox-item-card [desativado]=\"!i.isAtivo\" [cloud]=\"i.enviadoPC\" [codigo]=\"i.id\" [nome]=\"i.nome\" *ngFor=\"let i of items\" [class.selected]=\"i === selectedItem\"\n (click)=\"selectedItem = i;\"></ox-item-card>\n\n </div>\n <div class=\"hbox\">\n <ox-paginator (change)=\"trocaPagina()\" [(paginaAtual)]=\"paginaAtual\" [(totalPaginas)]=\"result.totalPaginas\">\n </ox-paginator>\n <div class=\"total-qtd\">Exibindo {{result.inicioQtd}}-{{result.finalQtd}} de {{result.quantidade}}</div>\n \n </div>\n </div>\n <div class=\"listagem-column-container listagem-column-form\">\n <h3 *ngIf=\"!selectedItem\">Selecione um produto no lado direito</h3>\n <h3 *ngIf=\"selectedItem\">{{selectedItem.nome | uppercase}}</h3>\n <div class=\"listagem-form-container\">\n <ox-produto-form [@fade] [model]=\"selectedItem\" *ngIf=\"selectedItem\" [editMode]=\"true\">\n </ox-produto-form>\n </div>\n\n <div class=\"listagem-form-acoes\">\n <button (click)=\"salvar()\" mat-raised-button color=\"primary\" *ngIf=\"selectedItem\" tabindex=\"20\">Salvar</button>\n <button (click)=\"composicao()\" mat-raised-button *ngIf=\"selectedItem && usaEstoqueOnline\" tabindex=\"20\">Composi\u00E7\u00E3o</button>\n </div>\n </div>\n </div>\n</div>", styles: [":host{height:calc(100% - 48px);display:flex;flex-grow:1;flex-direction:column;background:#F0F0F0}:host{background-color:#fdfdfd}.total-qtd{align-self:center;font-size:small}\n"] }]
2805
3176
  }], ctorParameters: function () { return [{ type: CommonWebService }, { type: NotificationService }, { type: i3.MatDialog }, { type: AuthDataService }, { type: ScreenHelperService }]; } });
2806
3177
 
2807
3178
  class ProdutosCategoriasCardapioComponent {
@@ -3637,7 +4008,10 @@ OxpiNglibModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version
3637
4008
  ProdutosCategoriasCardapioComponent,
3638
4009
  ProdutoCategoriaCardapioAddDialogComponent,
3639
4010
  ProdutoCategoriaCardapioEditDialogComponent,
3640
- ProdutoCategoriaCardapioSelecaoDialogComponent], imports: [BrowserModule,
4011
+ ProdutoCategoriaCardapioSelecaoDialogComponent,
4012
+ ProdutoComposicaoComponent,
4013
+ ProdutoComposicaoAddDialogComponent,
4014
+ ProdutoSelecaoDialogComponent], imports: [BrowserModule,
3641
4015
  BrowserAnimationsModule,
3642
4016
  FormsModule,
3643
4017
  MatButtonModule,
@@ -3700,7 +4074,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.5", ngImpor
3700
4074
  ProdutosCategoriasCardapioComponent,
3701
4075
  ProdutoCategoriaCardapioAddDialogComponent,
3702
4076
  ProdutoCategoriaCardapioEditDialogComponent,
3703
- ProdutoCategoriaCardapioSelecaoDialogComponent
4077
+ ProdutoCategoriaCardapioSelecaoDialogComponent,
4078
+ ProdutoComposicaoComponent,
4079
+ ProdutoComposicaoAddDialogComponent,
4080
+ ProdutoSelecaoDialogComponent
3704
4081
  ],
3705
4082
  imports: [
3706
4083
  BrowserModule,
@@ -3924,5 +4301,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.5", ngImpor
3924
4301
  * Generated bundle index. Do not edit.
3925
4302
  */
3926
4303
 
3927
- export { AlertDialogComponent, AuthDataService, BusyIndicatorComponent, BusyState, CheckButtonComponent, CommonWebService, ConsumoProdutoSearchSetting, DuplicataSearchSetting, ExportFileService, FocusService, FuncionarioAddDialogComponent, FuncionarioEditDialogComponent, FuncionarioFormComponent, FuncionariosComponent, ImageViewerComponent, ItemCardComponent, LazyTrigger, MonthYearPickerComponent, MoverGrupoDialogComponent, NavegacaoSelecaoDialogUtil, NotificationService, NumberParser, NumericPickerComponent, OcupacaoFilterSetting, OcupacaoSearchDateField, OcupacaoSearchSetting, OcupacaoSearchTipoEntrada, Ordem, OxpiNglibModule, PagamentoRecebimentoSearchSetting, PaginatorComponent, PorOcupacaoTipo, Preferences, ProdutoAddDialogComponent, ProdutoBuscaFiltrosDialogComponent, ProdutoCategoriaCardapioAddDialogComponent, ProdutoCategoriaCardapioEditDialogComponent, ProdutoCategoriaCardapioSelecaoDialogComponent, ProdutoEditDialogComponent, ProdutoFormComponent, ProdutoGrupoAddDialogComponent, ProdutoGrupoEditDialogComponent, ProdutoGrupoFormComponent, ProdutoGrupoSelecaoDialogComponent, ProdutoSearchSetting, ProdutoSubgrupoAddDialogComponent, ProdutoSubgrupoEditDialogComponent, ProdutoSubgrupoSelecaoDialogComponent, ProdutosCategoriasCardapioComponent, ProdutosComponent, ProdutosGruposComponent, ProdutosNcmDialogComponent, ProdutosSubgruposComponent, RadioButtonGroupComponent, SafeHtmlPipe, ScreenHelperService, SearchMode, SearchSetting, SuitesIntervencoesSetting, confirmaExclusao, createProduct, fadeAnimation, lateralAnimation, menuLateralAnimation, printHtml, printTxt, selectText, valNumberEmpty, valNumberMin, valTextEmpty, valTextMax, validaProduto, validaProdutoGrupo };
4304
+ export { AlertDialogComponent, AuthDataService, BusyIndicatorComponent, BusyState, CheckButtonComponent, CommonWebService, ConsumoProdutoSearchSetting, DuplicataSearchSetting, ExportFileService, FocusService, FuncionarioAddDialogComponent, FuncionarioEditDialogComponent, FuncionarioFormComponent, FuncionariosComponent, ImageViewerComponent, ItemCardComponent, LazyTrigger, MonthYearPickerComponent, MoverGrupoDialogComponent, NavegacaoSelecaoDialogUtil, NotificationService, NumberParser, NumericPickerComponent, OcupacaoFilterSetting, OcupacaoSearchDateField, OcupacaoSearchSetting, OcupacaoSearchTipoEntrada, Ordem, OxpiNglibModule, PagamentoRecebimentoSearchSetting, PaginatorComponent, PorOcupacaoTipo, Preferences, ProdutoAddDialogComponent, ProdutoBuscaFiltrosDialogComponent, ProdutoCategoriaCardapioAddDialogComponent, ProdutoCategoriaCardapioEditDialogComponent, ProdutoCategoriaCardapioSelecaoDialogComponent, ProdutoComposicaoAddDialogComponent, ProdutoComposicaoComponent, ProdutoEditDialogComponent, ProdutoFormComponent, ProdutoGrupoAddDialogComponent, ProdutoGrupoEditDialogComponent, ProdutoGrupoFormComponent, ProdutoGrupoSelecaoDialogComponent, ProdutoSearchSetting, ProdutoSelecaoDialogComponent, ProdutoSubgrupoAddDialogComponent, ProdutoSubgrupoEditDialogComponent, ProdutoSubgrupoSelecaoDialogComponent, ProdutosCategoriasCardapioComponent, ProdutosComponent, ProdutosGruposComponent, ProdutosNcmDialogComponent, ProdutosSubgruposComponent, RadioButtonGroupComponent, SafeHtmlPipe, ScreenHelperService, SearchMode, SearchSetting, SuitesIntervencoesSetting, confirmaExclusao, createProduct, fadeAnimation, lateralAnimation, menuLateralAnimation, printHtml, printTxt, selectText, valNumberEmpty, valNumberMin, valTextEmpty, valTextMax, validaProduto, validaProdutoComposicao, validaProdutoGrupo };
3928
4305
  //# sourceMappingURL=oxpi-nglib.mjs.map