oxpi-nglib 1.0.7 → 1.0.11

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