@senior-gestao-empresarial/erpx-components 4.10.0 → 4.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -33403,10 +33403,6 @@
33403
33403
  this.editingCCContaIndex = null;
33404
33404
  this.editingCCIndex = null;
33405
33405
  this.ngUnsubscribe = new rxjs.Subject();
33406
- /** Cache de opções de menu por conta (referência estável evita loop de change detection). */
33407
- this.contaMenuOptionsCache = new Map();
33408
- /** Cache de opções de menu por centro de custo (referência estável). */
33409
- this.ccMenuOptionsCache = new Map();
33410
33406
  this.formGroup = this.fb.group({
33411
33407
  contas: this.fb.array([])
33412
33408
  });
@@ -33431,6 +33427,20 @@
33431
33427
  enumerable: true,
33432
33428
  configurable: true
33433
33429
  });
33430
+ Object.defineProperty(ErpRateioEditorComponent.prototype, "requiresCentroCusto", {
33431
+ /**
33432
+ * Indica se o critério de rateio exige distribuição por centro de custo.
33433
+ * O critério 'V5' (Nenhum) não distribui por C. Custos; os demais exigem
33434
+ * ao menos um centro de custo por conta financeira.
33435
+ */
33436
+ get: function () {
33437
+ var _a, _b;
33438
+ var criterio = (_b = (_a = this.loadedContext) === null || _a === void 0 ? void 0 : _a.criRat) !== null && _b !== void 0 ? _b : this.criRat;
33439
+ return criterio !== ErpRateioEditorComponent_1.CRITERIO_SEM_CENTRO_CUSTO;
33440
+ },
33441
+ enumerable: true,
33442
+ configurable: true
33443
+ });
33434
33444
  Object.defineProperty(ErpRateioEditorComponent.prototype, "valorBase", {
33435
33445
  get: function () {
33436
33446
  var _a, _b;
@@ -33457,6 +33467,42 @@
33457
33467
  enumerable: true,
33458
33468
  configurable: true
33459
33469
  });
33470
+ Object.defineProperty(ErpRateioEditorComponent.prototype, "valorRestanteDisplay", {
33471
+ /**
33472
+ * Valor restante a ser exibido nos cards de resumo.
33473
+ * Quando o critério exige centro de custo, considera o total já distribuído
33474
+ * nos CCs de todas as contas em vez do total das contas financeiras.
33475
+ * Assim o card reflete a distribuição real ponta-a-ponta.
33476
+ */
33477
+ get: function () {
33478
+ var _a;
33479
+ if (!this.requiresCentroCusto) {
33480
+ return this.valorRestante;
33481
+ }
33482
+ var totalCC = this.contasDataSource.reduce(function (acc, conta) { return acc + (conta.rateiosCCusto || []).reduce(function (ccAcc, cc) { return ccAcc + (cc.valor || 0); }, 0); }, 0);
33483
+ return +(this.valorBase - totalCC).toFixed((_a = this.config.currencyScale) !== null && _a !== void 0 ? _a : 2);
33484
+ },
33485
+ enumerable: true,
33486
+ configurable: true
33487
+ });
33488
+ Object.defineProperty(ErpRateioEditorComponent.prototype, "percentualRestanteDisplay", {
33489
+ /**
33490
+ * Percentual restante a ser exibido nos cards de resumo.
33491
+ * Derivado de `valorRestanteDisplay` para manter consistência com o valor.
33492
+ */
33493
+ get: function () {
33494
+ var _a;
33495
+ if (!this.requiresCentroCusto) {
33496
+ return this.percentualRestante;
33497
+ }
33498
+ if (!this.valorBase) {
33499
+ return 0;
33500
+ }
33501
+ return +(this.valorRestanteDisplay / this.valorBase * 100).toFixed((_a = this.config.percentageScale) !== null && _a !== void 0 ? _a : 4);
33502
+ },
33503
+ enumerable: true,
33504
+ configurable: true
33505
+ });
33460
33506
  Object.defineProperty(ErpRateioEditorComponent.prototype, "numberFormatOptions", {
33461
33507
  get: function () {
33462
33508
  var _a, _b;
@@ -33536,6 +33582,16 @@
33536
33582
  if (this.effectiveReadOnly) {
33537
33583
  return;
33538
33584
  }
33585
+ if (this.requiresCentroCusto && this.hasContaSemCentroCusto()) {
33586
+ var message = this.translate.instant('erpx.rateio_editor.erro_centro_custo_obrigatorio');
33587
+ this.messageService.add({
33588
+ severity: 'error',
33589
+ summary: this.translate.instant('erpx.rateio_editor.erro_titulo'),
33590
+ detail: message
33591
+ });
33592
+ this.error.emit({ operacao: 'save', message: message });
33593
+ return;
33594
+ }
33539
33595
  if (!this.isDistribuicaoCompleta()) {
33540
33596
  var message = this.translate.instant('erpx.rateio_editor.erro_distribuicao_incompleta');
33541
33597
  this.messageService.add({
@@ -33659,11 +33715,14 @@
33659
33715
  var remainingPct = this.editingContaIndex != null
33660
33716
  ? this.percentualRestante + this.contasDataSource[this.editingContaIndex].percentual
33661
33717
  : this.percentualRestante;
33718
+ // Usa o valor restante real em vez de recalcular via percentual, evitando
33719
+ // diferenças de arredondamento acumuladas nas entradas anteriores.
33720
+ var remainingValor = this.editingContaIndex != null
33721
+ ? +(this.valorRestante + this.contasDataSource[this.editingContaIndex].valorRateadoConta).toFixed((_a = this.config.currencyScale) !== null && _a !== void 0 ? _a : 2)
33722
+ : this.valorRestante;
33662
33723
  var contaValue = null;
33663
33724
  var percentualValue = remainingPct > 0 ? remainingPct : null;
33664
- var valorValue = percentualValue != null
33665
- ? +((percentualValue / 100) * this.valorBase).toFixed((_a = this.config.currencyScale) !== null && _a !== void 0 ? _a : 2)
33666
- : null;
33725
+ var valorValue = percentualValue != null ? remainingValor : null;
33667
33726
  if (this.editingContaIndex != null) {
33668
33727
  var conta = this.contasDataSource[this.editingContaIndex];
33669
33728
  contaValue = { id: conta.idContaFinanceira, label: conta.contaFinanceira };
@@ -33738,25 +33797,32 @@
33738
33797
  this.editingCCIndex = editCCIndex != null ? editCCIndex : null;
33739
33798
  var conta = this.contasDataSource[contaIndex];
33740
33799
  var ccList = conta.rateiosCCusto || [];
33741
- var somaCC = ccList.reduce(function (acc, cc, i) { return acc + (i === _this.editingCCIndex ? 0 : (cc.percentual || 0)); }, 0);
33742
- var remainingPct = +(100 - somaCC).toFixed((_a = this.config.percentageScale) !== null && _a !== void 0 ? _a : 4);
33743
33800
  var valorBaseCC = conta.valorRateadoConta || 0;
33801
+ // Calcula o restante excluindo o item em edição (para que edição possa manter o próprio valor)
33802
+ var somaCCPct = ccList.reduce(function (acc, cc, i) { return acc + (i === _this.editingCCIndex ? 0 : (cc.percentual || 0)); }, 0);
33803
+ var somaCCValor = ccList.reduce(function (acc, cc, i) { return acc + (i === _this.editingCCIndex ? 0 : (cc.valor || 0)); }, 0);
33804
+ var remainingPct = +(100 - somaCCPct).toFixed((_a = this.config.percentageScale) !== null && _a !== void 0 ? _a : 4);
33805
+ var remainingValor = +(valorBaseCC - somaCCValor).toFixed((_b = this.config.currencyScale) !== null && _b !== void 0 ? _b : 2);
33744
33806
  var ccValue = null;
33745
33807
  var percentualValue = remainingPct > 0 ? remainingPct : null;
33746
- var valorValue = percentualValue != null
33747
- ? +((percentualValue / 100) * valorBaseCC).toFixed((_b = this.config.currencyScale) !== null && _b !== void 0 ? _b : 2)
33748
- : null;
33808
+ // Usa o valor restante real (já calculado acima) em vez de recalcular via percentual,
33809
+ // evitando diferenças de arredondamento acumuladas nos CCs anteriores.
33810
+ var valorValue = percentualValue != null ? remainingValor : null;
33749
33811
  if (this.editingCCIndex != null) {
33750
33812
  var cc = ccList[this.editingCCIndex];
33751
33813
  ccValue = { id: cc.idCentroCusto, label: cc.descCCusto || cc.idCentroCusto };
33752
33814
  percentualValue = cc.percentual;
33753
33815
  valorValue = cc.valor;
33754
33816
  }
33817
+ // maxPct: percentual máximo que este CC pode ter (não pode ultrapassar o restante da conta)
33818
+ var maxPct = remainingPct;
33819
+ // maxValor: valor máximo que este CC pode ter (não pode ultrapassar o restante em dinheiro)
33820
+ var maxValor = remainingValor;
33755
33821
  this.selectedCC = ccValue;
33756
33822
  this.ccDialogFormGroup = this.fb.group({
33757
33823
  centroCusto: [{ value: ccValue, disabled: this.editingCCIndex != null }, forms.Validators.required],
33758
- percentual: [{ value: percentualValue, disabled: false }, forms.Validators.required],
33759
- valor: [{ value: valorValue, disabled: false }, [forms.Validators.required, forms.Validators.max(valorBaseCC)]]
33824
+ percentual: [{ value: percentualValue, disabled: false }, [forms.Validators.required, forms.Validators.max(maxPct)]],
33825
+ valor: [{ value: valorValue, disabled: false }, [forms.Validators.required, forms.Validators.max(maxValor)]]
33760
33826
  });
33761
33827
  this.ccDialogFormGroup.get('centroCusto').valueChanges
33762
33828
  .pipe(operators.takeUntil(this.ngUnsubscribe))
@@ -33851,34 +33917,6 @@
33851
33917
  this.contasDataSource = __spread(this.contasDataSource);
33852
33918
  this.emitChange();
33853
33919
  };
33854
- ErpRateioEditorComponent.prototype.getMenuOptionsPerRow = function (rowData) {
33855
- var _this = this;
33856
- var id = rowData.idContaFinanceira;
33857
- var options = this.contaMenuOptionsCache.get(id);
33858
- if (!options) {
33859
- options = [
33860
- { label: this.translate.instant('erpx.rateio_editor.editar'), command: function () { return _this.openContaDialog(_this.getContaIndex(rowData)); } },
33861
- { label: this.translate.instant('erpx.rateio_editor.adicionar_centro_custo'), command: function () { return _this.openCCDialog(_this.getContaIndex(rowData)); } },
33862
- { label: this.translate.instant('erpx.rateio_editor.remover_centro_custo'), command: function () { return _this.onDeleteSelectedCC(rowData); } },
33863
- { label: this.translate.instant('erpx.rateio_editor.excluir'), command: function () { return _this.removerConta(_this.getContaIndex(rowData)); } }
33864
- ];
33865
- this.contaMenuOptionsCache.set(id, options);
33866
- }
33867
- return options;
33868
- };
33869
- ErpRateioEditorComponent.prototype.getCCMenuOptions = function (conta, cc) {
33870
- var _this = this;
33871
- var key = conta.idContaFinanceira + "::" + cc.idCentroCusto;
33872
- var options = this.ccMenuOptionsCache.get(key);
33873
- if (!options) {
33874
- options = [
33875
- { label: this.translate.instant('erpx.rateio_editor.editar'), command: function () { return _this.openCCDialog(_this.getContaIndex(conta), _this.getCCIndex(conta, cc)); } },
33876
- { label: this.translate.instant('erpx.rateio_editor.excluir'), command: function () { return _this.removerCentroCusto(_this.getContaIndex(conta), _this.getCCIndex(conta, cc)); } }
33877
- ];
33878
- this.ccMenuOptionsCache.set(key, options);
33879
- }
33880
- return options;
33881
- };
33882
33920
  ErpRateioEditorComponent.prototype.getContaIndex = function (rowData) {
33883
33921
  return this.contasDataSource.indexOf(rowData);
33884
33922
  };
@@ -33915,26 +33953,41 @@
33915
33953
  var _this = this;
33916
33954
  this.contasDataSource = __spread(rateios);
33917
33955
  this.ccSelection = {};
33918
- this.contaMenuOptionsCache.clear();
33919
- this.ccMenuOptionsCache.clear();
33920
33956
  this.contasDataSource.forEach(function (conta) {
33921
33957
  _this.ccSelection[conta.idContaFinanceira] = [];
33922
33958
  });
33923
33959
  };
33924
- /** Distribuição completa: restantes globais e de cada conta iguais a zero. */
33960
+ Object.defineProperty(ErpRateioEditorComponent.prototype, "distribuicaoCompleta", {
33961
+ /**
33962
+ * Distribuição completa: restantes globais e de cada conta iguais a zero.
33963
+ * Exposto publicamente para que o template possa reagir ao estado real de
33964
+ * completude (contas + centros de custo).
33965
+ */
33966
+ get: function () {
33967
+ var _this = this;
33968
+ if (this.percentualRestante !== 0 || this.valorRestante !== 0) {
33969
+ return false;
33970
+ }
33971
+ return this.contasDataSource.every(function (conta) { return _this.isContaCCCompleta(conta); });
33972
+ },
33973
+ enumerable: true,
33974
+ configurable: true
33975
+ });
33976
+ /** @deprecated Usar o getter `distribuicaoCompleta`. Mantido para compatibilidade interna. */
33925
33977
  ErpRateioEditorComponent.prototype.isDistribuicaoCompleta = function () {
33926
- var _this = this;
33927
- if (this.percentualRestante !== 0 || this.valorRestante !== 0) {
33928
- return false;
33929
- }
33930
- return this.contasDataSource.every(function (conta) { return _this.isContaCCCompleta(conta); });
33978
+ return this.distribuicaoCompleta;
33979
+ };
33980
+ /** Indica se há ao menos uma conta financeira sem nenhum centro de custo vinculado. */
33981
+ ErpRateioEditorComponent.prototype.hasContaSemCentroCusto = function () {
33982
+ return this.contasDataSource.some(function (conta) { return (conta.rateiosCCusto || []).length === 0; });
33931
33983
  };
33932
33984
  /** Restante de % e de valor dos centros de custo de uma conta igual a zero. */
33933
33985
  ErpRateioEditorComponent.prototype.isContaCCCompleta = function (conta) {
33934
33986
  var _a, _b;
33935
33987
  var ccs = conta.rateiosCCusto || [];
33936
33988
  if (ccs.length === 0) {
33937
- return true;
33989
+ // Sem centro de custo só é válido quando o critério não exige rateio por C. Custos.
33990
+ return !this.requiresCentroCusto;
33938
33991
  }
33939
33992
  var somaPct = ccs.reduce(function (acc, cc) { return acc + (cc.percentual || 0); }, 0);
33940
33993
  var somaValor = ccs.reduce(function (acc, cc) { return acc + (cc.valor || 0); }, 0);
@@ -34059,13 +34112,15 @@
34059
34112
  ErpRateioEditorComponent.prototype.emitChange = function () {
34060
34113
  this.change.emit({
34061
34114
  isDirty: true,
34062
- isValid: this.percentualRestante === 0 && this.valorRestante === 0,
34115
+ isValid: this.isDistribuicaoCompleta(),
34063
34116
  rateios: this.contasDataSource
34064
34117
  });
34065
34118
  };
34066
34119
  var ErpRateioEditorComponent_1;
34067
34120
  /** Valor de anaSin que indica registro sintético (não analítico). */
34068
34121
  ErpRateioEditorComponent.ANA_SIN_SINTETICO = 'VS';
34122
+ /** Critério de rateio que não distribui por centro de custo (Nenhum). */
34123
+ ErpRateioEditorComponent.CRITERIO_SEM_CENTRO_CUSTO = 'V5';
34069
34124
  ErpRateioEditorComponent.ctorParameters = function () { return [
34070
34125
  { type: forms.FormBuilder },
34071
34126
  { type: ErpRateioEditorService },
@@ -34149,7 +34204,8 @@
34149
34204
  ErpRateioEditorComponent = ErpRateioEditorComponent_1 = __decorate([
34150
34205
  core.Component({
34151
34206
  selector: 'erp-rateio-editor',
34152
- template: "<s-loading-state [loading]=\"loading\" [blockWindow]=\"true\">\n <!-- Se\u00E7\u00E3o 1: Informa\u00E7\u00F5es do movimento -->\n <div class=\"sds-section-title\" *ngIf=\"isReady\">\n {{ 'erpx.rateio_editor.titulo' | translate }}\n </div>\n\n <div class=\"ui-g custom-stats\" *ngIf=\"isReady\">\n <div class=\"ui-sm-12 ui-md-4\">\n <s-stats-card\n [animateNumbers]=\"true\"\n color=\"#0C9348\"\n [lightMode]=\"true\"\n [lightVersion]=\"true\"\n iconClass=\"far fa-dollar-sign\"\n [label]=\"'erpx.rateio_editor.valor_base' | translate\"\n [value]=\"valorBase | numeric:numberFormatOptions | async\"\n ></s-stats-card>\n </div>\n <div class=\"ui-sm-12 ui-md-4\">\n <s-stats-card\n [animateNumbers]=\"true\"\n color=\"#428BCA\"\n [lightMode]=\"true\"\n [lightVersion]=\"true\"\n iconClass=\"far fa-percent\"\n [label]=\"'erpx.rateio_editor.percentual_restante' | translate\"\n [value]=\"percentualRestante + '%'\"\n ></s-stats-card>\n </div>\n <div class=\"ui-sm-12 ui-md-4\">\n <s-stats-card\n [animateNumbers]=\"true\"\n [color]=\"valorRestante === 0 ? '#0C9348' : '#C13018'\"\n [lightMode]=\"true\"\n [lightVersion]=\"true\"\n iconClass=\"far fa-dollar-sign\"\n [label]=\"'erpx.rateio_editor.valor_restante' | translate\"\n [value]=\"valorRestante | numeric:numberFormatOptions | async\"\n ></s-stats-card>\n </div>\n </div>\n\n <!-- Se\u00E7\u00E3o 2: Tabela de rateios -->\n <div class=\"sds-section-title\" *ngIf=\"isReady\">\n {{ 'erpx.rateio_editor.lista_rateios' | translate }}\n </div>\n\n <s-empty-state\n *ngIf=\"isReady && contasDataSource?.length === 0\"\n iconClass=\"far fa-dollar-sign\"\n [title]=\"'erpx.rateio_editor.sem_rateios_titulo' | translate\"\n [description]=\"'erpx.rateio_editor.sem_rateios_descricao' | translate\"\n ></s-empty-state>\n\n <div class=\"ui-g\" *ngIf=\"isReady && contasDataSource?.length > 0\">\n <div class=\"ui-g-12\" *ngIf=\"!effectiveReadOnly\">\n <s-button\n [label]=\"'erpx.rateio_editor.adicionar_conta' | translate\"\n iconClass=\"fa fa-plus\"\n (onClick)=\"openContaDialog()\"\n ></s-button>\n <s-button\n *ngIf=\"showSugestaoButton\"\n [label]=\"'erpx.rateio_editor.sugerir_rateio' | translate\"\n [priority]=\"ButtonPriority.Secondary\"\n iconClass=\"fa fa-magic\"\n (onClick)=\"onSugerir()\"\n ></s-button>\n <s-button\n [label]=\"'erpx.rateio_editor.remover_conta' | translate\"\n [priority]=\"ButtonPriority.Secondary\"\n (onClick)=\"onDeleteSelected()\"\n [disabled]=\"!selection.length\"\n ></s-button>\n </div>\n <div class=\"ui-g-12\">\n <p-table\n #tableRateio\n [value]=\"contasDataSource\"\n [columns]=\"gridColumns\"\n dataKey=\"idContaFinanceira\"\n [resizableColumns]=\"true\"\n [totalRecords]=\"contasDataSource.length\"\n [(selection)]=\"selection\"\n [paginator]=\"false\"\n [rows]=\"10\"\n >\n <ng-template pTemplate=\"header\" let-columns>\n <tr>\n <th scope=\"col\" style=\"width: 3em\"></th>\n <th scope=\"col\" class=\"col-checkbox\" style=\"width: 50px\">\n <p-tableHeaderCheckbox *ngIf=\"!effectiveReadOnly\"></p-tableHeaderCheckbox>\n </th>\n <th *ngFor=\"let col of columns\" scope=\"col\" pResizableColumn>\n <div class=\"senior-header\">\n <span class=\"senior-header-title\">{{ col.header }}</span>\n </div>\n </th>\n <th scope=\"col\" *ngIf=\"!effectiveReadOnly\">\n <div class=\"senior-header\">\n <span class=\"senior-header-title\">{{ 'erpx.rateio_editor.acoes' | translate }}</span>\n </div>\n </th>\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"body\" let-rowData let-rowIndex=\"rowIndex\" let-expanded=\"expanded\">\n <tr>\n <td style=\"width: 3em; text-align: center\">\n <a *ngIf=\"rowData.rateiosCCusto?.length\" [pRowToggler]=\"rowData\" role=\"button\" tabindex=\"0\">\n <i [class]=\"expanded ? 'fa fa-minus' : 'fa fa-plus'\"></i>\n </a>\n </td>\n <td class=\"col-checkbox\" style=\"width: 50px\">\n <p-tableCheckbox *ngIf=\"!effectiveReadOnly\" [value]=\"rowData\"></p-tableCheckbox>\n </td>\n <td>{{ rowData.contaFinanceira || rowData.idContaFinanceira }}</td>\n <td style=\"text-align: right\">{{ rowData.percentual }}</td>\n <td style=\"text-align: right\">{{ rowData.valorRateadoConta | numeric:numberFormatOptions | async }}</td>\n <td *ngIf=\"!effectiveReadOnly\">\n <s-button\n [auxiliary]=\"true\"\n [priority]=\"ButtonPriority.Default\"\n [size]=\"ButtonSize.Small\"\n [label]=\"'erpx.rateio_editor.acoes' | translate\"\n [menuOptions]=\"getMenuOptionsPerRow(rowData)\"\n ></s-button>\n </td>\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"rowexpansion\" let-rowData let-rowIndex=\"rowIndex\">\n <tr>\n <td [attr.colspan]=\"effectiveReadOnly ? gridColumns.length + 2 : gridColumns.length + 3\">\n <div class=\"ui-g\" style=\"padding: 8px 16px\">\n <p-table\n [value]=\"rowData.rateiosCCusto\"\n dataKey=\"idCentroCusto\"\n [(selection)]=\"ccSelection[rowData.idContaFinanceira]\"\n [responsive]=\"true\"\n >\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"col\" class=\"col-checkbox\" style=\"width: 50px\">\n <p-tableHeaderCheckbox *ngIf=\"!effectiveReadOnly\"></p-tableHeaderCheckbox>\n </th>\n <th scope=\"col\">{{ 'erpx.rateio_editor.centro_custo' | translate }}</th>\n <th scope=\"col\">{{ 'erpx.rateio_editor.percentual' | translate }}</th>\n <th scope=\"col\">{{ 'erpx.rateio_editor.valor' | translate }}</th>\n <th scope=\"col\" *ngIf=\"!effectiveReadOnly\">{{ 'erpx.rateio_editor.acoes' | translate }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-cc let-ccIndex=\"rowIndex\">\n <tr>\n <td class=\"col-checkbox\" style=\"width: 50px\">\n <p-tableCheckbox *ngIf=\"!effectiveReadOnly\" [value]=\"cc\"></p-tableCheckbox>\n </td>\n <td>{{ cc.descCCusto || cc.idCentroCusto }}</td>\n <td style=\"text-align: right\">{{ cc.percentual }}</td>\n <td style=\"text-align: right\">{{ cc.valor | numeric:numberFormatOptions | async }}</td>\n <td *ngIf=\"!effectiveReadOnly\">\n <s-button\n [auxiliary]=\"true\"\n [priority]=\"ButtonPriority.Default\"\n [size]=\"ButtonSize.Small\"\n [label]=\"'erpx.rateio_editor.acoes' | translate\"\n [menuOptions]=\"getCCMenuOptions(rowData, cc)\"\n ></s-button>\n </td>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"emptymessage\">\n <tr>\n <td [attr.colspan]=\"effectiveReadOnly ? 3 : 5\">\n {{ 'erpx.rateio_editor.sem_centros_custo' | translate }}\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n </div>\n\n <!-- Bot\u00F5es de a\u00E7\u00E3o -->\n <div *ngIf=\"isReady\" class=\"ui-g rateio-editor-actions\">\n <div class=\"ui-g-12\">\n <div *ngIf=\"!effectiveReadOnly && contasDataSource?.length === 0\" style=\"margin-bottom: 8px\">\n <s-button\n [label]=\"'erpx.rateio_editor.adicionar_conta' | translate\"\n iconClass=\"fa fa-plus\"\n (onClick)=\"openContaDialog()\"\n ></s-button>\n <s-button\n *ngIf=\"showSugestaoButton\"\n [label]=\"'erpx.rateio_editor.sugerir_rateio' | translate\"\n [priority]=\"ButtonPriority.Secondary\"\n iconClass=\"fa fa-magic\"\n (onClick)=\"onSugerir()\"\n ></s-button>\n </div>\n <s-button\n *ngIf=\"!effectiveReadOnly && !isStandalone\"\n priority=\"primary\"\n iconClass=\"fa fa-check\"\n [label]=\"'erpx.rateio_editor.salvar' | translate\"\n (onClick)=\"onSalvar()\"\n ></s-button>\n </div>\n </div>\n</s-loading-state>\n\n<!-- Modal: Adicionar/Editar Conta Financeira -->\n<p-dialog\n [header]=\"'erpx.rateio_editor.adicionar_conta' | translate\"\n appendTo=\"body\"\n [modal]=\"true\"\n [(visible)]=\"displayContaDialog\"\n (onHide)=\"onHideContaDialog()\"\n [blockScroll]=\"true\"\n [focusOnShow]=\"false\"\n styleClass=\"custom-dialog\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n [style]=\"{width: '40%'}\"\n>\n <form *ngIf=\"contaDialogFormGroup\" [formGroup]=\"contaDialogFormGroup\" (ngSubmit)=\"onSaveContaDialog()\">\n <div class=\"ui-fluid\">\n <s-dynamic-form\n [fields]=\"contaDialogFields\"\n [form]=\"contaDialogFormGroup\"\n [errorMessages]=\"{\n required: ('erpx.rateio_editor.erro_obrigatorio' | translate),\n duplicate: ('erpx.rateio_editor.conta_duplicada' | translate),\n contaSintetica: ('erpx.rateio_editor.erro_conta_sintetica' | translate),\n max: ('erpx.rateio_editor.erro_valor_maximo_conta' | translate)\n }\"\n ></s-dynamic-form>\n </div>\n </form>\n <p-footer>\n <s-button\n id=\"dialog-conta-save\"\n type=\"button\"\n priority=\"primary\"\n [label]=\"'erpx.rateio_editor.salvar' | translate\"\n (onClick)=\"onSaveContaDialog()\"\n ></s-button>\n <s-button\n id=\"dialog-conta-cancel\"\n type=\"button\"\n priority=\"secondary\"\n [label]=\"'erpx.rateio_editor.cancelar' | translate\"\n (onClick)=\"onHideContaDialog()\"\n ></s-button>\n </p-footer>\n</p-dialog>\n\n<!-- Modal: Adicionar/Editar Centro de Custo -->\n<p-dialog\n [header]=\"'erpx.rateio_editor.adicionar_centro_custo' | translate\"\n appendTo=\"body\"\n [modal]=\"true\"\n [(visible)]=\"displayCCDialog\"\n (onHide)=\"onHideCCDialog()\"\n [blockScroll]=\"true\"\n [focusOnShow]=\"false\"\n styleClass=\"custom-dialog\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n [style]=\"{width: '40%'}\"\n>\n <form *ngIf=\"ccDialogFormGroup\" [formGroup]=\"ccDialogFormGroup\" (ngSubmit)=\"onSaveCCDialog()\">\n <div class=\"ui-fluid\">\n <s-dynamic-form\n [fields]=\"ccDialogFields\"\n [form]=\"ccDialogFormGroup\"\n [errorMessages]=\"{\n required: ('erpx.rateio_editor.erro_obrigatorio' | translate),\n duplicate: ('erpx.rateio_editor.centro_custo_duplicado' | translate),\n centroCustoInvalido: ('erpx.rateio_editor.erro_centro_custo_invalido' | translate),\n max: ('erpx.rateio_editor.erro_valor_maximo_centro_custo' | translate)\n }\"\n ></s-dynamic-form>\n </div>\n </form>\n <p-footer>\n <s-button\n id=\"dialog-cc-save\"\n type=\"button\"\n priority=\"primary\"\n [label]=\"'erpx.rateio_editor.salvar' | translate\"\n (onClick)=\"onSaveCCDialog()\"\n ></s-button>\n <s-button\n id=\"dialog-cc-cancel\"\n type=\"button\"\n priority=\"secondary\"\n [label]=\"'erpx.rateio_editor.cancelar' | translate\"\n (onClick)=\"onHideCCDialog()\"\n ></s-button>\n </p-footer>\n</p-dialog>\n"
34207
+ template: "<s-loading-state [loading]=\"loading\" [blockWindow]=\"true\">\n <!-- Se\u00E7\u00E3o 1: Informa\u00E7\u00F5es do movimento -->\n <div class=\"sds-section-title\" *ngIf=\"isReady\">\n {{ 'erpx.rateio_editor.titulo' | translate }}\n </div>\n\n <div class=\"ui-g custom-stats\" *ngIf=\"isReady\">\n <div class=\"ui-sm-12 ui-md-4\">\n <s-stats-card\n [animateNumbers]=\"true\"\n color=\"#0C9348\"\n [lightMode]=\"true\"\n [lightVersion]=\"true\"\n iconClass=\"far fa-dollar-sign\"\n [label]=\"'erpx.rateio_editor.valor_base' | translate\"\n [value]=\"valorBase | numeric:numberFormatOptions | async\"\n ></s-stats-card>\n </div>\n <div class=\"ui-sm-12 ui-md-4\">\n <s-stats-card\n [animateNumbers]=\"true\"\n color=\"#428BCA\"\n [lightMode]=\"true\"\n [lightVersion]=\"true\"\n iconClass=\"far fa-percent\"\n [label]=\"'erpx.rateio_editor.percentual_restante' | translate\"\n [value]=\"percentualRestanteDisplay + '%'\"\n ></s-stats-card>\n </div>\n <div class=\"ui-sm-12 ui-md-4\">\n <s-stats-card\n [animateNumbers]=\"true\"\n [color]=\"distribuicaoCompleta ? '#0C9348' : '#C13018'\"\n [lightMode]=\"true\"\n [lightVersion]=\"true\"\n iconClass=\"far fa-dollar-sign\"\n [label]=\"'erpx.rateio_editor.valor_restante' | translate\"\n [value]=\"valorRestanteDisplay | numeric:numberFormatOptions | async\"\n ></s-stats-card>\n </div>\n </div>\n\n <!-- Se\u00E7\u00E3o 2: Tabela de rateios -->\n <div class=\"sds-section-title\" *ngIf=\"isReady\">\n {{ 'erpx.rateio_editor.lista_rateios' | translate }}\n </div>\n\n <s-empty-state\n *ngIf=\"isReady && contasDataSource?.length === 0\"\n iconClass=\"far fa-dollar-sign\"\n [title]=\"'erpx.rateio_editor.sem_rateios_titulo' | translate\"\n [description]=\"'erpx.rateio_editor.sem_rateios_descricao' | translate\"\n [showPrimaryAction]=\"!effectiveReadOnly\"\n [primaryActionLabel]=\"'erpx.rateio_editor.adicionar_conta' | translate\"\n (primaryAction)=\"openContaDialog()\"\n [showSecondaryAction]=\"!effectiveReadOnly && showSugestaoButton\"\n [secondaryActionLabel]=\"'erpx.rateio_editor.sugerir_rateio' | translate\"\n (secondaryAction)=\"onSugerir()\"\n ></s-empty-state>\n\n <div class=\"ui-g\" *ngIf=\"isReady && contasDataSource?.length > 0\">\n <div class=\"ui-g-12\" *ngIf=\"!effectiveReadOnly\">\n <s-button\n [label]=\"'erpx.rateio_editor.adicionar_conta' | translate\"\n iconClass=\"fa fa-plus\"\n (onClick)=\"openContaDialog()\"\n ></s-button>\n <s-button\n *ngIf=\"showSugestaoButton\"\n [label]=\"'erpx.rateio_editor.sugerir_rateio' | translate\"\n [priority]=\"ButtonPriority.Secondary\"\n iconClass=\"fa fa-magic\"\n (onClick)=\"onSugerir()\"\n ></s-button>\n <s-button\n [label]=\"'erpx.rateio_editor.remover_conta' | translate\"\n [priority]=\"ButtonPriority.Secondary\"\n (onClick)=\"onDeleteSelected()\"\n [disabled]=\"!selection.length\"\n ></s-button>\n </div>\n\n <div class=\"ui-g-12\">\n <p-table\n #tableRateio\n [value]=\"contasDataSource\"\n [columns]=\"gridColumns\"\n dataKey=\"idContaFinanceira\"\n [resizableColumns]=\"true\"\n [totalRecords]=\"contasDataSource.length\"\n [(selection)]=\"selection\"\n [paginator]=\"false\"\n [rows]=\"10\"\n >\n <ng-template pTemplate=\"header\" let-columns>\n <tr>\n <th scope=\"col\" style=\"width: 3em\"></th>\n <th scope=\"col\" class=\"col-checkbox\" style=\"width: 50px\">\n <p-tableHeaderCheckbox *ngIf=\"!effectiveReadOnly\"></p-tableHeaderCheckbox>\n </th>\n <th *ngFor=\"let col of columns\" scope=\"col\" pResizableColumn>\n <div class=\"senior-header\">\n <span class=\"senior-header-title\">{{ col.header }}</span>\n </div>\n </th>\n <th scope=\"col\" *ngIf=\"!effectiveReadOnly\">\n <div class=\"senior-header\">\n <span class=\"senior-header-title\">{{ 'erpx.rateio_editor.acoes' | translate }}</span>\n </div>\n </th>\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"body\" let-rowData let-rowIndex=\"rowIndex\" let-expanded=\"expanded\">\n <tr>\n <td style=\"width: 3em; text-align: center\">\n <a *ngIf=\"rowData.rateiosCCusto?.length || (!effectiveReadOnly && requiresCentroCusto)\" [pRowToggler]=\"rowData\" role=\"button\" tabindex=\"0\">\n <i [class]=\"expanded ? 'fa fa-minus' : 'fa fa-plus'\"></i>\n </a>\n </td>\n <td class=\"col-checkbox\" style=\"width: 50px\">\n <p-tableCheckbox *ngIf=\"!effectiveReadOnly\" [value]=\"rowData\"></p-tableCheckbox>\n </td>\n <td>{{ rowData.contaFinanceira || rowData.idContaFinanceira }}</td>\n <td style=\"text-align: right\">{{ rowData.percentual }}</td>\n <td style=\"text-align: right\">{{ rowData.valorRateadoConta | numeric:numberFormatOptions | async }}</td>\n <td *ngIf=\"!effectiveReadOnly\">\n <s-button\n [auxiliary]=\"true\"\n [priority]=\"ButtonPriority.Default\"\n [size]=\"ButtonSize.Small\"\n iconClass=\"fa fa-pencil\"\n [label]=\"'erpx.rateio_editor.editar' | translate\"\n (onClick)=\"openContaDialog(getContaIndex(rowData))\"\n ></s-button>\n </td>\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"rowexpansion\" let-rowData let-rowIndex=\"rowIndex\">\n <tr>\n <td [attr.colspan]=\"effectiveReadOnly ? gridColumns.length + 2 : gridColumns.length + 3\">\n <div class=\"ui-g\" style=\"padding: 8px 16px\">\n <div class=\"ui-g-12 rateio-cc-toolbar\" *ngIf=\"!effectiveReadOnly\">\n <s-button\n [label]=\"'erpx.rateio_editor.adicionar_centro_custo' | translate\"\n iconClass=\"fa fa-plus\"\n (onClick)=\"openCCDialog(getContaIndex(rowData))\"\n ></s-button>\n <s-button\n [label]=\"'erpx.rateio_editor.remover_centro_custo' | translate\"\n [priority]=\"ButtonPriority.Secondary\"\n (onClick)=\"onDeleteSelectedCC(rowData)\"\n [disabled]=\"!(ccSelection[rowData.idContaFinanceira]?.length)\"\n ></s-button>\n </div>\n <div class=\"ui-g-12\">\n <p-table\n [value]=\"rowData.rateiosCCusto\"\n dataKey=\"idCentroCusto\"\n [(selection)]=\"ccSelection[rowData.idContaFinanceira]\"\n [responsive]=\"true\"\n >\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"col\" class=\"col-checkbox\" style=\"width: 50px\">\n <p-tableHeaderCheckbox *ngIf=\"!effectiveReadOnly\"></p-tableHeaderCheckbox>\n </th>\n <th scope=\"col\">{{ 'erpx.rateio_editor.centro_custo' | translate }}</th>\n <th scope=\"col\">{{ 'erpx.rateio_editor.percentual' | translate }}</th>\n <th scope=\"col\">{{ 'erpx.rateio_editor.valor' | translate }}</th>\n <th scope=\"col\" *ngIf=\"!effectiveReadOnly\">{{ 'erpx.rateio_editor.acoes' | translate }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-cc let-ccIndex=\"rowIndex\">\n <tr>\n <td class=\"col-checkbox\" style=\"width: 50px\">\n <p-tableCheckbox *ngIf=\"!effectiveReadOnly\" [value]=\"cc\"></p-tableCheckbox>\n </td>\n <td>{{ cc.descCCusto || cc.idCentroCusto }}</td>\n <td style=\"text-align: right\">{{ cc.percentual }}</td>\n <td style=\"text-align: right\">{{ cc.valor | numeric:numberFormatOptions | async }}</td>\n <td *ngIf=\"!effectiveReadOnly\">\n <s-button\n [auxiliary]=\"true\"\n [priority]=\"ButtonPriority.Default\"\n [size]=\"ButtonSize.Small\"\n iconClass=\"fa fa-pencil\"\n [label]=\"'erpx.rateio_editor.editar' | translate\"\n (onClick)=\"openCCDialog(getContaIndex(rowData), getCCIndex(rowData, cc))\"\n ></s-button>\n </td>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"emptymessage\">\n <tr>\n <td [attr.colspan]=\"effectiveReadOnly ? 3 : 5\">\n {{ 'erpx.rateio_editor.sem_centros_custo' | translate }}\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n </div>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n </div>\n\n <!-- Bot\u00F5es de a\u00E7\u00E3o -->\n <div *ngIf=\"isReady\" class=\"ui-g rateio-editor-actions\">\n <div class=\"ui-g-12\">\n <s-button\n *ngIf=\"!effectiveReadOnly && !isStandalone\"\n priority=\"primary\"\n iconClass=\"fa fa-check\"\n [label]=\"'erpx.rateio_editor.salvar' | translate\"\n (onClick)=\"onSalvar()\"\n ></s-button>\n </div>\n </div>\n</s-loading-state>\n\n<!-- Modal: Adicionar/Editar Conta Financeira -->\n<p-dialog\n [header]=\"'erpx.rateio_editor.adicionar_conta' | translate\"\n appendTo=\"body\"\n [modal]=\"true\"\n [(visible)]=\"displayContaDialog\"\n (onHide)=\"onHideContaDialog()\"\n [blockScroll]=\"true\"\n [focusOnShow]=\"false\"\n styleClass=\"custom-dialog\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n [style]=\"{width: '40%'}\"\n>\n <form *ngIf=\"contaDialogFormGroup\" [formGroup]=\"contaDialogFormGroup\" (ngSubmit)=\"onSaveContaDialog()\">\n <div class=\"ui-fluid\">\n <s-dynamic-form\n [fields]=\"contaDialogFields\"\n [form]=\"contaDialogFormGroup\"\n [errorMessages]=\"{\n required: ('erpx.rateio_editor.erro_obrigatorio' | translate),\n duplicate: ('erpx.rateio_editor.conta_duplicada' | translate),\n contaSintetica: ('erpx.rateio_editor.erro_conta_sintetica' | translate),\n max: ('erpx.rateio_editor.erro_valor_maximo_conta' | translate)\n }\"\n ></s-dynamic-form>\n </div>\n </form>\n <p-footer>\n <s-button\n id=\"dialog-conta-save\"\n type=\"button\"\n priority=\"primary\"\n [label]=\"'erpx.rateio_editor.salvar' | translate\"\n (onClick)=\"onSaveContaDialog()\"\n ></s-button>\n <s-button\n id=\"dialog-conta-cancel\"\n type=\"button\"\n priority=\"secondary\"\n [label]=\"'erpx.rateio_editor.cancelar' | translate\"\n (onClick)=\"onHideContaDialog()\"\n ></s-button>\n </p-footer>\n</p-dialog>\n\n<!-- Modal: Adicionar/Editar Centro de Custo -->\n<p-dialog\n [header]=\"'erpx.rateio_editor.adicionar_centro_custo' | translate\"\n appendTo=\"body\"\n [modal]=\"true\"\n [(visible)]=\"displayCCDialog\"\n (onHide)=\"onHideCCDialog()\"\n [blockScroll]=\"true\"\n [focusOnShow]=\"false\"\n styleClass=\"custom-dialog\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n [style]=\"{width: '40%'}\"\n>\n <form *ngIf=\"ccDialogFormGroup\" [formGroup]=\"ccDialogFormGroup\" (ngSubmit)=\"onSaveCCDialog()\">\n <div class=\"ui-fluid\">\n <s-dynamic-form\n [fields]=\"ccDialogFields\"\n [form]=\"ccDialogFormGroup\"\n [errorMessages]=\"{\n required: ('erpx.rateio_editor.erro_obrigatorio' | translate),\n duplicate: ('erpx.rateio_editor.centro_custo_duplicado' | translate),\n centroCustoInvalido: ('erpx.rateio_editor.erro_centro_custo_invalido' | translate),\n max: ('erpx.rateio_editor.erro_maximo_centro_custo' | translate)\n }\"\n ></s-dynamic-form>\n </div>\n </form>\n <p-footer>\n <s-button\n id=\"dialog-cc-save\"\n type=\"button\"\n priority=\"primary\"\n [label]=\"'erpx.rateio_editor.salvar' | translate\"\n (onClick)=\"onSaveCCDialog()\"\n ></s-button>\n <s-button\n id=\"dialog-cc-cancel\"\n type=\"button\"\n priority=\"secondary\"\n [label]=\"'erpx.rateio_editor.cancelar' | translate\"\n (onClick)=\"onHideCCDialog()\"\n ></s-button>\n </p-footer>\n</p-dialog>\n",
34208
+ styles: [":host ::ng-deep .rateio-cc-toolbar .s-button-text{overflow:visible;-ms-flex-pack:start;justify-content:flex-start}"]
34153
34209
  })
34154
34210
  ], ErpRateioEditorComponent);
34155
34211
  return ErpRateioEditorComponent;