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({
@@ -987,6 +1007,8 @@ class AuthDataService {
987
1007
  this.userId = 0;
988
1008
  this.email = '';
989
1009
  this.nome = '';
1010
+ this.usaEstoqueOnline = false;
1011
+ this.usaFinancasOnline = false;
990
1012
  }
991
1013
  login(result) {
992
1014
  this.isLoggedIn = true;
@@ -999,6 +1021,8 @@ class AuthDataService {
999
1021
  this.userId = result.userId;
1000
1022
  this.nome = result.nome;
1001
1023
  this.email = result.email;
1024
+ this.usaEstoqueOnline = result.usaEstoqueOnline;
1025
+ this.usaFinancasOnline = result.usaFinancasOnline;
1002
1026
  }
1003
1027
  }
1004
1028
  AuthDataService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: AuthDataService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
@@ -1944,13 +1968,16 @@ class ProdutoSubgrupoSelecaoDialogComponent {
1944
1968
  atualiza() {
1945
1969
  this.isBusy = true;
1946
1970
  this.ws.buscaProdutoSubgrupo(this.setting)
1947
- .subscribe(r => {
1948
- this.isBusy = false;
1949
- this.items = r;
1950
- console.info(r);
1951
- }, err => {
1952
- this.isBusy = false;
1953
- this.notification.showHttpError(err);
1971
+ .subscribe({
1972
+ next: r => {
1973
+ this.isBusy = false;
1974
+ this.items = r;
1975
+ console.info(r);
1976
+ },
1977
+ error: err => {
1978
+ this.isBusy = false;
1979
+ this.notification.showHttpError(err);
1980
+ }
1954
1981
  });
1955
1982
  }
1956
1983
  selectItem(i) {
@@ -2429,26 +2456,30 @@ class ProdutoAddDialogComponent {
2429
2456
  }
2430
2457
  this.isBusy = true;
2431
2458
  this.ws.addProduto(this.model)
2432
- .subscribe(r => {
2433
- this.isBusy = false;
2434
- this.notification.showMsg("Salvo com sucesso.");
2435
- if (this.dialogRef)
2436
- this.dialogRef.close(true);
2437
- }, err => {
2438
- this.isBusy = false;
2439
- this.notification.showMsg(err.error);
2459
+ .subscribe({
2460
+ next: r => {
2461
+ this.isBusy = false;
2462
+ this.notification.showMsg("Salvo com sucesso.");
2463
+ if (this.dialogRef)
2464
+ this.dialogRef.close(true);
2465
+ }, error: err => {
2466
+ this.isBusy = false;
2467
+ this.notification.showMsg(err.error);
2468
+ }
2440
2469
  });
2441
2470
  }
2442
2471
  getNextId() {
2443
2472
  this.isBusy = true;
2444
2473
  this.ws.getNextIdProduto()
2445
- .subscribe(r => {
2446
- this.model.id = r;
2447
- this.model.referencia = '' + r;
2448
- this.isBusy = false;
2449
- }, err => {
2450
- this.isBusy = false;
2451
- this.notification.showMsg(err.error);
2474
+ .subscribe({
2475
+ next: r => {
2476
+ this.model.id = r;
2477
+ this.model.referencia = '' + r;
2478
+ this.isBusy = false;
2479
+ }, error: err => {
2480
+ this.isBusy = false;
2481
+ this.notification.showMsg(err.error);
2482
+ }
2452
2483
  });
2453
2484
  }
2454
2485
  }
@@ -2576,6 +2607,323 @@ class ProdutoSearchSetting extends SearchSetting {
2576
2607
  }
2577
2608
  }
2578
2609
 
2610
+ function validaProdutoComposicao(item, focus) {
2611
+ if (valNumberMin(item.quantidade, 0)) {
2612
+ focus.set('quantidade');
2613
+ return 'Digite uma quantidade válida.';
2614
+ }
2615
+ return null;
2616
+ }
2617
+
2618
+ class ProdutoComposicaoAddDialogComponent {
2619
+ constructor(model, ws, notification, dialogRef, screenHelper) {
2620
+ this.model = model;
2621
+ this.ws = ws;
2622
+ this.notification = notification;
2623
+ this.dialogRef = dialogRef;
2624
+ this.screenHelper = screenHelper;
2625
+ this.isBusy = false;
2626
+ this.focus = new FocusService();
2627
+ this.mobile = this.screenHelper.isMedium;
2628
+ this.screenHelper.changedMediumScreen.subscribe(x => this.mobile = x);
2629
+ }
2630
+ ngOnInit() {
2631
+ }
2632
+ salvar() {
2633
+ if (!this.model)
2634
+ return;
2635
+ const valMsg = validaProdutoComposicao(this.model, this.focus);
2636
+ if (valMsg) {
2637
+ this.notification.showMsgError(valMsg);
2638
+ return;
2639
+ }
2640
+ this.isBusy = true;
2641
+ const onFinished = {
2642
+ next: (r) => {
2643
+ this.isBusy = false;
2644
+ this.notification.showMsg("Salvo com sucesso.");
2645
+ if (this.dialogRef)
2646
+ this.dialogRef.close(true);
2647
+ },
2648
+ error: (err) => {
2649
+ this.isBusy = false;
2650
+ this.notification.showMsg(err.error);
2651
+ }
2652
+ };
2653
+ if (this.model.id === 0) {
2654
+ this.ws.addProdutoComposicao(this.model)
2655
+ .subscribe(onFinished);
2656
+ }
2657
+ else {
2658
+ this.ws.saveProdutoComposicao(this.model)
2659
+ .subscribe(onFinished);
2660
+ }
2661
+ }
2662
+ }
2663
+ 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 });
2664
+ 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"] }] });
2665
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: ProdutoComposicaoAddDialogComponent, decorators: [{
2666
+ type: Component,
2667
+ 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"] }]
2668
+ }], ctorParameters: function () {
2669
+ return [{ type: undefined, decorators: [{
2670
+ type: Inject,
2671
+ args: [MAT_DIALOG_DATA]
2672
+ }] }, { type: CommonWebService }, { type: NotificationService }, { type: i3.MatDialogRef }, { type: ScreenHelperService }];
2673
+ } });
2674
+
2675
+ class ProdutoSelecaoDialogComponent {
2676
+ constructor(dialogRef, dialog, ws, notification, auth, screenHelper) {
2677
+ this.dialogRef = dialogRef;
2678
+ this.dialog = dialog;
2679
+ this.ws = ws;
2680
+ this.notification = notification;
2681
+ this.screenHelper = screenHelper;
2682
+ this.items = [];
2683
+ this.selectedItem = null;
2684
+ this.isBusy = false;
2685
+ this.setting = new SearchSetting();
2686
+ this.lazyTrigger = new LazyTrigger(() => { this.atualiza(); });
2687
+ this.nav = new NavegacaoSelecaoDialogUtil(this);
2688
+ this.mobile = this.screenHelper.isMedium;
2689
+ this.allowAdd = auth.permissoes.adminProdutoAdd;
2690
+ this.allowEdit = auth.permissoes.adminProdutoPesquisa;
2691
+ }
2692
+ ngOnInit() {
2693
+ this.atualiza();
2694
+ }
2695
+ atualiza() {
2696
+ this.isBusy = true;
2697
+ this.ws.buscaPaginadaProdutos(this.setting, 1, 50)
2698
+ .subscribe({
2699
+ next: r => {
2700
+ this.isBusy = false;
2701
+ this.items = r.items;
2702
+ console.info(r);
2703
+ },
2704
+ error: err => {
2705
+ this.isBusy = false;
2706
+ this.notification.showHttpError(err);
2707
+ }
2708
+ });
2709
+ }
2710
+ selectItem(i) {
2711
+ if (this.selectedItem === i) {
2712
+ this.dialogRef.close(i);
2713
+ }
2714
+ this.selectedItem = i;
2715
+ }
2716
+ editar() {
2717
+ const item = this.selectedItem;
2718
+ if (!item)
2719
+ return;
2720
+ this.abreCadastro(item);
2721
+ }
2722
+ abreCadastro(item) {
2723
+ let height = undefined;
2724
+ let width = 550 + 'px';
2725
+ if (this.mobile) {
2726
+ width = (window.innerWidth * 0.99) + 'px';
2727
+ height = (window.innerHeight * 0.99) + 'px';
2728
+ }
2729
+ const dialog = this.dialog.open(ProdutoEditDialogComponent, {
2730
+ data: item,
2731
+ width: width,
2732
+ height: height,
2733
+ maxWidth: '100%',
2734
+ panelClass: 'dialog-p0',
2735
+ });
2736
+ dialog.afterClosed().subscribe(result => {
2737
+ if (result !== true)
2738
+ return;
2739
+ this.notification.showMsg("Salvo com sucesso.");
2740
+ this.atualiza();
2741
+ });
2742
+ }
2743
+ novo() {
2744
+ let height = (window.innerHeight * 0.90) + 'px';
2745
+ let width = 550 + 'px';
2746
+ if (this.mobile) {
2747
+ width = (window.innerWidth * 0.99) + 'px';
2748
+ //height = (window.innerHeight * 0.98) + 'px';
2749
+ }
2750
+ const dialog = this.dialog.open(ProdutoAddDialogComponent, {
2751
+ width: width,
2752
+ height: height,
2753
+ maxWidth: '100%',
2754
+ panelClass: 'dialog-p0',
2755
+ });
2756
+ dialog.afterClosed().subscribe(result => {
2757
+ if (result === undefined)
2758
+ return;
2759
+ this.notification.showMsg("Salvo com sucesso.");
2760
+ this.atualiza();
2761
+ });
2762
+ }
2763
+ excluir() {
2764
+ const item = this.selectedItem;
2765
+ if (!item)
2766
+ return;
2767
+ confirmaExclusao(this.dialog, `Deseja prosseguir com a exclusão do produto ${item.nome}?`, () => {
2768
+ this.isBusy = true;
2769
+ this.ws.deleteProduto(item.id)
2770
+ .subscribe({
2771
+ next: r => {
2772
+ this.notification.showMsg("O produto foi excluído com sucesso.");
2773
+ this.items.remove(item);
2774
+ this.selectedItem = null;
2775
+ this.isBusy = false;
2776
+ },
2777
+ error: err => {
2778
+ this.isBusy = false;
2779
+ this.notification.showMsg(err.error);
2780
+ }
2781
+ });
2782
+ });
2783
+ }
2784
+ }
2785
+ 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 });
2786
+ 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"] }] });
2787
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: ProdutoSelecaoDialogComponent, decorators: [{
2788
+ type: Component,
2789
+ 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"] }]
2790
+ }], ctorParameters: function () { return [{ type: i3.MatDialogRef }, { type: i3.MatDialog }, { type: CommonWebService }, { type: NotificationService }, { type: AuthDataService }, { type: ScreenHelperService }]; } });
2791
+
2792
+ class ProdutoComposicaoComponent {
2793
+ constructor(dialogRef, dialog, produto, ws, notification, screenHelper) {
2794
+ this.dialogRef = dialogRef;
2795
+ this.dialog = dialog;
2796
+ this.produto = produto;
2797
+ this.ws = ws;
2798
+ this.notification = notification;
2799
+ this.screenHelper = screenHelper;
2800
+ this.items = [];
2801
+ this.selectedItem = null;
2802
+ this.isBusy = false;
2803
+ this.mobile = this.screenHelper.isMedium;
2804
+ }
2805
+ ngOnInit() {
2806
+ this.atualiza();
2807
+ }
2808
+ atualiza() {
2809
+ this.isBusy = true;
2810
+ this.ws.getProdutoComposicao(this.produto.id)
2811
+ .subscribe({
2812
+ next: r => {
2813
+ this.isBusy = false;
2814
+ for (const item of r) {
2815
+ item.produtoId = this.produto.id;
2816
+ item.produtoNome = this.produto.nome;
2817
+ }
2818
+ this.items = r;
2819
+ console.info(r);
2820
+ },
2821
+ error: err => {
2822
+ this.isBusy = false;
2823
+ this.notification.showHttpError(err);
2824
+ }
2825
+ });
2826
+ }
2827
+ selectItem(i) {
2828
+ this.selectedItem = i;
2829
+ }
2830
+ novo() {
2831
+ let height = (window.innerHeight * 0.90) + 'px';
2832
+ let width = 550 + 'px';
2833
+ if (this.mobile) {
2834
+ width = (window.innerWidth * 0.99) + 'px';
2835
+ //height = (window.innerHeight * 0.98) + 'px';
2836
+ }
2837
+ const dialog = this.dialog.open(ProdutoSelecaoDialogComponent, {
2838
+ width: width,
2839
+ //height: height,
2840
+ maxWidth: '100%',
2841
+ panelClass: 'dialog-p0',
2842
+ });
2843
+ dialog.afterClosed().subscribe(result => {
2844
+ if (result === undefined)
2845
+ return;
2846
+ const p = result;
2847
+ const composicao = {
2848
+ id: 0,
2849
+ produtoId: this.produto.id,
2850
+ produtoNome: this.produto.nome,
2851
+ produtoItemId: p.id,
2852
+ produtoItemNome: p.nome,
2853
+ quantidade: 1
2854
+ };
2855
+ const dialog2 = this.dialog.open(ProdutoComposicaoAddDialogComponent, {
2856
+ width: width,
2857
+ //height: height,
2858
+ data: composicao,
2859
+ maxWidth: '100%',
2860
+ panelClass: 'dialog-p0',
2861
+ });
2862
+ dialog2.afterClosed().subscribe(result => {
2863
+ if (result === undefined)
2864
+ return;
2865
+ this.notification.showMsg("Salvo com sucesso.");
2866
+ this.atualiza();
2867
+ });
2868
+ });
2869
+ }
2870
+ editar() {
2871
+ if (!this.selectedItem)
2872
+ return;
2873
+ let height = (window.innerHeight * 0.90) + 'px';
2874
+ let width = 550 + 'px';
2875
+ if (this.mobile) {
2876
+ width = (window.innerWidth * 0.99) + 'px';
2877
+ //height = (window.innerHeight * 0.98) + 'px';
2878
+ }
2879
+ const dialog = this.dialog.open(ProdutoSelecaoDialogComponent, {
2880
+ width: width,
2881
+ //height: height,
2882
+ data: this.selectedItem,
2883
+ maxWidth: '100%',
2884
+ panelClass: 'dialog-p0',
2885
+ });
2886
+ dialog.afterClosed().subscribe(result => {
2887
+ if (result === undefined)
2888
+ return;
2889
+ this.notification.showMsg("Salvo com sucesso.");
2890
+ this.atualiza();
2891
+ });
2892
+ }
2893
+ excluir() {
2894
+ const item = this.selectedItem;
2895
+ if (!item)
2896
+ return;
2897
+ confirmaExclusao(this.dialog, `Deseja prosseguir com a exclusão do produto '${item.produtoItemNome}'?`, () => {
2898
+ this.isBusy = true;
2899
+ this.ws.deleteProdutoComposicao(item.id)
2900
+ .subscribe({
2901
+ next: r => {
2902
+ this.notification.showMsg("O produto foi excluído com sucesso.");
2903
+ this.items.remove(item);
2904
+ this.selectedItem = null;
2905
+ this.isBusy = false;
2906
+ },
2907
+ error: err => {
2908
+ this.isBusy = false;
2909
+ this.notification.showMsg(err.error);
2910
+ }
2911
+ });
2912
+ });
2913
+ }
2914
+ }
2915
+ 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 });
2916
+ 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"] }] });
2917
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: ProdutoComposicaoComponent, decorators: [{
2918
+ type: Component,
2919
+ 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"] }]
2920
+ }], ctorParameters: function () {
2921
+ return [{ type: i3.MatDialogRef }, { type: i3.MatDialog }, { type: undefined, decorators: [{
2922
+ type: Inject,
2923
+ args: [MAT_DIALOG_DATA]
2924
+ }] }, { type: CommonWebService }, { type: NotificationService }, { type: ScreenHelperService }];
2925
+ } });
2926
+
2579
2927
  class PaginatorComponent {
2580
2928
  constructor() {
2581
2929
  this.paginaAtualChange = new EventEmitter();
@@ -2668,6 +3016,7 @@ class ProdutosComponent {
2668
3016
  this.allowAdd = auth.permissoes.adminProdutoAdd;
2669
3017
  this.allowExcluir = auth.permissoes.adminProdutoDelete;
2670
3018
  this.mobile = this.screenHelper.isMedium;
3019
+ this.usaEstoqueOnline = auth.usaEstoqueOnline;
2671
3020
  this.screenHelper.changedMediumScreen.subscribe(x => this.mobile = x);
2672
3021
  this.setting.exibeNaoControladoEstoque = true;
2673
3022
  this.setting.exibeImprimiCozinha = true;
@@ -2725,14 +3074,17 @@ class ProdutosComponent {
2725
3074
  confirmaExclusao(this.dialog, `Deseja prosseguir com a exclusão do produto ${item.nome}?`, () => {
2726
3075
  this.isBusy = true;
2727
3076
  this.ws.deleteProduto(item.id)
2728
- .subscribe(r => {
2729
- this.notification.showMsg("O produto foi excluído com sucesso.");
2730
- this.items.remove(item);
2731
- this.selectedItem = null;
2732
- this.isBusy = false;
2733
- }, err => {
2734
- this.isBusy = false;
2735
- this.notification.showMsg(err.error);
3077
+ .subscribe({
3078
+ next: r => {
3079
+ this.notification.showMsg("O produto foi excluído com sucesso.");
3080
+ this.items.remove(item);
3081
+ this.selectedItem = null;
3082
+ this.isBusy = false;
3083
+ },
3084
+ error: err => {
3085
+ this.isBusy = false;
3086
+ this.notification.showMsg(err.error);
3087
+ }
2736
3088
  });
2737
3089
  });
2738
3090
  }
@@ -2787,12 +3139,15 @@ class ProdutosComponent {
2787
3139
  }
2788
3140
  this.isBusy = true;
2789
3141
  this.ws.saveProduto(this.selectedItem)
2790
- .subscribe(r => {
2791
- this.notification.showMsg("Salvo com sucesso.");
2792
- this.isBusy = false;
2793
- }, err => {
2794
- this.isBusy = false;
2795
- this.notification.showMsg(err.error);
3142
+ .subscribe({
3143
+ next: r => {
3144
+ this.notification.showMsg("Salvo com sucesso.");
3145
+ this.isBusy = false;
3146
+ },
3147
+ error: err => {
3148
+ this.isBusy = false;
3149
+ this.notification.showMsg(err.error);
3150
+ }
2796
3151
  });
2797
3152
  }
2798
3153
  filtros() {
@@ -2821,12 +3176,32 @@ class ProdutosComponent {
2821
3176
  this.atualiza();
2822
3177
  });
2823
3178
  }
3179
+ composicao() {
3180
+ let height = (window.innerHeight * 0.90) + 'px';
3181
+ let width = 550 + 'px';
3182
+ if (this.mobile) {
3183
+ width = (window.innerWidth * 0.99) + 'px';
3184
+ //height = (window.innerHeight * 0.98) + 'px';
3185
+ }
3186
+ const dialog = this.dialog.open(ProdutoComposicaoComponent, {
3187
+ width: width,
3188
+ height: height,
3189
+ maxWidth: '100%',
3190
+ panelClass: 'dialog-p0',
3191
+ });
3192
+ dialog.afterClosed().subscribe(result => {
3193
+ if (result === undefined)
3194
+ return;
3195
+ this.notification.showMsg("Salvo com sucesso.");
3196
+ this.atualiza();
3197
+ });
3198
+ }
2824
3199
  }
2825
3200
  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 });
2826
- 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] });
3201
+ 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] });
2827
3202
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: ProdutosComponent, decorators: [{
2828
3203
  type: Component,
2829
- 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"] }]
3204
+ 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"] }]
2830
3205
  }], ctorParameters: function () { return [{ type: CommonWebService }, { type: NotificationService }, { type: i3.MatDialog }, { type: AuthDataService }, { type: ScreenHelperService }]; } });
2831
3206
 
2832
3207
  class ProdutosCategoriasCardapioComponent {
@@ -3664,7 +4039,10 @@ OxpiNglibModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version
3664
4039
  ProdutosCategoriasCardapioComponent,
3665
4040
  ProdutoCategoriaCardapioAddDialogComponent,
3666
4041
  ProdutoCategoriaCardapioEditDialogComponent,
3667
- ProdutoCategoriaCardapioSelecaoDialogComponent], imports: [BrowserModule,
4042
+ ProdutoCategoriaCardapioSelecaoDialogComponent,
4043
+ ProdutoComposicaoComponent,
4044
+ ProdutoComposicaoAddDialogComponent,
4045
+ ProdutoSelecaoDialogComponent], imports: [BrowserModule,
3668
4046
  BrowserAnimationsModule,
3669
4047
  FormsModule,
3670
4048
  MatButtonModule,
@@ -3727,7 +4105,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.5", ngImpor
3727
4105
  ProdutosCategoriasCardapioComponent,
3728
4106
  ProdutoCategoriaCardapioAddDialogComponent,
3729
4107
  ProdutoCategoriaCardapioEditDialogComponent,
3730
- ProdutoCategoriaCardapioSelecaoDialogComponent
4108
+ ProdutoCategoriaCardapioSelecaoDialogComponent,
4109
+ ProdutoComposicaoComponent,
4110
+ ProdutoComposicaoAddDialogComponent,
4111
+ ProdutoSelecaoDialogComponent
3731
4112
  ],
3732
4113
  imports: [
3733
4114
  BrowserModule,
@@ -3951,5 +4332,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.5", ngImpor
3951
4332
  * Generated bundle index. Do not edit.
3952
4333
  */
3953
4334
 
3954
- 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 };
4335
+ 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 };
3955
4336
  //# sourceMappingURL=oxpi-nglib.mjs.map