From eb62ffb76a5d60f11cc363da10fab6e1bdd147a8 Mon Sep 17 00:00:00 2001 From: davidmm07 Date: Fri, 20 Dec 2019 01:41:05 -0500 Subject: [PATCH 1/2] mod source propagate apr se modifica vista para que tome los rubros del plan de adquisicion de fuentes y el rubro de ingreso registrado previamente para la respectiva fuente, se modifica resumen de movimientos y se agrega saldo restante del movimiento realizado en cuestion --- .../fuenteFinanciamientoInterface.ts | 2 +- .../@core/interfaces/modificationInterface.ts | 4 +- .../set-modificacion-fuente.component.html | 128 ++++++++++----- .../set-modificacion-fuente.component.ts | 150 +++++++++++++++--- .../show-modification-fuente.component.html | 28 ++-- .../show-modification-fuente.component.ts | 4 +- src/assets/i18n/es.json | 10 +- 7 files changed, 242 insertions(+), 84 deletions(-) diff --git a/src/app/@core/interfaces/fuenteFinanciamientoInterface.ts b/src/app/@core/interfaces/fuenteFinanciamientoInterface.ts index b1a22c59..b1c94513 100644 --- a/src/app/@core/interfaces/fuenteFinanciamientoInterface.ts +++ b/src/app/@core/interfaces/fuenteFinanciamientoInterface.ts @@ -13,5 +13,5 @@ export interface FuenteFinanciamientoInterface { NumeroDocumento: string; TipoDocumento: string; Codigo: string; -/* Rubros: Object; */ + Rubros?: Object; } diff --git a/src/app/@core/interfaces/modificationInterface.ts b/src/app/@core/interfaces/modificationInterface.ts index 94f1abcf..4982d1c5 100644 --- a/src/app/@core/interfaces/modificationInterface.ts +++ b/src/app/@core/interfaces/modificationInterface.ts @@ -18,7 +18,7 @@ export interface ModApropiationData { export interface ModFuenteData { Tipo: TypeGeneral; - MovimientoOrigen: FuenteFinanciamientoInterface; - MovimientoDestino?: FuenteFinanciamientoInterface; + MovimientoOrigen?: FuenteFinanciamientoInterface; + CuentaCredito?: ArbolRubroApropiacionInterface; Valor: number; } diff --git a/src/app/pages/plan-cuentas/modificacion-apropiacion/set-modificacion-fuente/set-modificacion-fuente.component.html b/src/app/pages/plan-cuentas/modificacion-apropiacion/set-modificacion-fuente/set-modificacion-fuente.component.html index c7c0f887..d8832f10 100644 --- a/src/app/pages/plan-cuentas/modificacion-apropiacion/set-modificacion-fuente/set-modificacion-fuente.component.html +++ b/src/app/pages/plan-cuentas/modificacion-apropiacion/set-modificacion-fuente/set-modificacion-fuente.component.html @@ -6,7 +6,7 @@ Modificación de fuentes
- +
@@ -22,28 +22,31 @@ - - {{'MODIF.fuente_origen' | translate }} - + + {{'MODIF.fuente_origen' | translate }} + + (click)="sourceSelection('origen')">{{'GLOBAL.seleccionar' | translate }} + {{'MODIF.fuente_origen' | translate }}
{{'GLOBAL.saldo' | translate }} : {{movOrigen.ValorActual | currency: "COP":"symbol":"4.2-2":"co"}}
- - - {{'MODIF.fuente_destino' | translate }} - - -
{{'GLOBAL.saldo' | translate }} : - {{movDestino.ValorActual | currency: "COP":"symbol":"4.2-2":"co"}}
+ + {{'MODIF.cuenta_credito' | translate }} + + +
{{'GLOBAL.saldo' | translate }} : + {{cuentaCredito.ValorActual | currency: "COP":"symbol":"4.2-2":"co"}}
- + + {{'GLOBAL.valor' | translate }} @@ -56,38 +59,83 @@
- +
-
{{ infoSaldoSuperado}} {{desfaseSaldo}}
+
+ {{ infoSaldoSuperado}} {{desfaseSaldo| currency: "COP":"symbol":"4.2-2":"co"}} + +
- - - - - - + + +
+
+ {{rubroGasto.rubro}} +
+
+
+
+ + {{'MODIF.cuenta_credito' | translate }} + + +
{{'GLOBAL.saldo_rubro' | translate }} + +
+
+ + {{'GLOBAL.valor' | translate }} + + +
+ +
+
+
+
+ {{ 'FUENTE_FINANCIAMIENTO.saldo_restante_mov' | translate}} + {{totalCurrentMov| currency: "COP":"symbol":"4.2-2":"co"}} +
+
+
+
+
+ + + + + + +
- + - -
-
- -
+ +
+ +
\ No newline at end of file diff --git a/src/app/pages/plan-cuentas/modificacion-apropiacion/set-modificacion-fuente/set-modificacion-fuente.component.ts b/src/app/pages/plan-cuentas/modificacion-apropiacion/set-modificacion-fuente/set-modificacion-fuente.component.ts index a30fb1c8..13df342b 100644 --- a/src/app/pages/plan-cuentas/modificacion-apropiacion/set-modificacion-fuente/set-modificacion-fuente.component.ts +++ b/src/app/pages/plan-cuentas/modificacion-apropiacion/set-modificacion-fuente/set-modificacion-fuente.component.ts @@ -1,5 +1,5 @@ import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core'; -import { FormGroup } from '@angular/forms'; +import { FormGroup, FormBuilder, Validators, FormArray } from '@angular/forms'; import { TypeGeneral } from '../../../../@core/interfaces/TypeGeneralInterface'; import { ModFuenteData } from '../../../../@core/interfaces/modificationInterface'; import { ModFuenteHelper } from '../../../../@core/helpers/modificaciones/modFuenteHelper'; @@ -8,6 +8,8 @@ import { FormManager } from '../../../../@core/managers/formManager'; import { CommonHelper } from '../../../../@core/helpers/commonHelper'; import { FuenteHelper } from '../../../../@core/helpers/fuentes/fuenteHelper'; import { PopUpManager } from '../../../../@core/managers/popUpManager'; +import { ArbolRubroApropiacionInterface } from '../../../../@core/interfaces/arbolRubroApropiacionInterface'; +import { ApropiacionHelper } from '../../../../@core/helpers/apropiaciones/apropiacionHelper'; @Component({ @@ -21,9 +23,10 @@ export class SetModificacionFuenteComponent implements OnInit { @Output() eventChange = new EventEmitter(); modValueForm: FormGroup; movimientoValidator: FormGroup; + modDinamicValueForm: FormGroup; modTypes: Array; movOrigen: FuenteFinanciamientoInterface; - movDestino: FuenteFinanciamientoInterface; + cuentaCredito: ArbolRubroApropiacionInterface; sourceTypeSelected: string; showMovSelection: boolean; selectedType: any; @@ -45,14 +48,20 @@ export class SetModificacionFuenteComponent implements OnInit { desfaseSaldo: number; sumaMovimientosFuente: any; localtabActived: boolean; - constructor(private modHelper: ModFuenteHelper, + viewMovAuxActived: boolean; + rubrosPlanAdquisicionFuente: any; + rubrosAllPlanAdquisicionFuente: any; + totalCurrentMov: any; + constructor(private modHelper: ModFuenteHelper, private comnHelper: CommonHelper, private fuenteHelper: FuenteHelper, - private popManager: PopUpManager) { + private popManager: PopUpManager, private formBuilder: FormBuilder, + private apHelper: ApropiacionHelper) { this.viewItemSelected = true; - } + } async ngOnInit() { await this.cleanData(); + this.buildFormRubros(); this.movAfectation = []; this.modHelper.getModTypes().subscribe((res) => { @@ -60,10 +69,13 @@ export class SetModificacionFuenteComponent implements OnInit { }); } + get f() { return this.modDinamicValueForm.controls; } + get target() { return this.f.rubros_array as FormArray; } + public getDataEvent(changeStep) { this.setStepValidationEvent.emit({ afectation: this.movAfectation, - balanced: this.limitSumFuentes, // si se necesita un booleano para este proceso se activa + balanced: this.limitSumFuentes, // si se necesita un booleano para este proceso se activa changeStep, }); } @@ -71,7 +83,7 @@ export class SetModificacionFuenteComponent implements OnInit { this.selectedType = undefined; this.showResumenTab = false; this.showMovSelection = false; - this.movDestino = undefined; + this.cuentaCredito = undefined; this.movOrigen = undefined; this.movimientoValidator = FormManager.BuildGroupForm(this.movimientoFormStruct); this.modValueForm = FormManager.BuildGroupForm(this.modValueFormStruct); @@ -86,15 +98,15 @@ export class SetModificacionFuenteComponent implements OnInit { } this.modTypeSelected = selected; if (this.modTypeSelected) { - if (selected.Parametros['MovimientoDestino']) { + if (selected.Parametros['MovOriginRubro']) { this.modValueForm = FormManager.addFormControl(this.modValueForm, { - movimientoDestino: true, + cuentaCredito: true, }); - this.modValueForm.controls['movimientoDestino'].disable(); + this.modValueForm.controls['cuentaCredito'].disable(); } else { - this.modValueForm.removeControl('movimientoDestino'); - this.movDestino = undefined; + this.modValueForm.removeControl('cuentaCredito'); + this.cuentaCredito = undefined; } } }); @@ -115,11 +127,17 @@ export class SetModificacionFuenteComponent implements OnInit { this.movOrigen = $event; console.info(this.movOrigen.Codigo); this.modValueForm.controls['movimientoOrigen'].patchValue(`${this.movOrigen.Codigo} / ${this.movOrigen.Nombre}`); - break; - case 'destino': - this.movDestino = $event; - this.modValueForm.controls['movimientoDestino'].patchValue(`${this.movDestino.Codigo} / ${this.movDestino.Nombre}`); - break; + for (const key in this.movOrigen.Rubros) { + const element = this.movOrigen.Rubros[key]; + if (element.Tipo === 'INGRESO') { + this.apHelper.getFullArbolByNode(key, this.movOrigen.Vigencia).subscribe((response) => { + if (response) { + this.cuentaCredito = response[0].data; + this.modValueForm.controls['cuentaCredito'].patchValue(`${this.cuentaCredito.Codigo} / ${this.cuentaCredito.Nombre}`); + } + }) + } + } default: break; @@ -128,28 +146,33 @@ export class SetModificacionFuenteComponent implements OnInit { } } public async addModToList() { + this.desfaseSaldo = 0; const modType = JSON.parse(JSON.stringify(this.modValueForm.value['modType'])); modType['Parametros'] = modType['Parametros'] ? JSON.stringify(modType['Parametros']) : undefined; const currentMovData: ModFuenteData = { Tipo: modType, MovimientoOrigen: this.movOrigen, - MovimientoDestino: this.movDestino ? this.movDestino : undefined, + CuentaCredito: this.cuentaCredito, Valor: this.modValueForm.value['value'] }; if (currentMovData.MovimientoOrigen !== undefined) { this.fuenteHelper.getPlanAdquisicionByFuente(this.vigenciaActual.toString(), currentMovData.MovimientoOrigen.Codigo).subscribe((response) => { if (response.fuente_financiamiento) { - let saldoFuente = currentMovData.MovimientoOrigen.ValorActual - response.fuente_financiamiento.total_saldo_fuente; - if(saldoFuente< currentMovData.Valor && this.movDestino !== undefined) { + + let saldoFuente = this.calculateTotalValue(currentMovData, response.fuente_financiamiento.total_saldo_fuente); + if (saldoFuente < currentMovData.Valor && currentMovData.Tipo.Acronimo === 'rd_fuente') { this.limitSumFuentes = false; this.infoSaldoSuperado = 'La fuente: ' + currentMovData.MovimientoOrigen.Nombre + ' se desfasa por un valor de: '; this.desfaseSaldo = currentMovData.Valor - saldoFuente; } else { this.limitSumFuentes = true; this.movAfectation.push(currentMovData); - this.returnToResume(); + this.rubrosAllPlanAdquisicionFuente = response.fuente_financiamiento.rubros; //TODO: para cuando este definido el plan de adquisiciones + this.rubrosPlanAdquisicionFuente = this.getUnique(response.fuente_financiamiento.rubros, 'rubro'); + this.totalCurrentMov = this.modValueForm.value['value']; + this.returnToMovRubros(); this.eventChange.emit(true); } } else { @@ -159,13 +182,96 @@ export class SetModificacionFuenteComponent implements OnInit { } } + public async buildFormRubros() { + this.modDinamicValueForm = this.formBuilder.group({ + numberOfRubro: ['', Validators.required], + rubros_array: this.formBuilder.array([]) + }); + } + public async addModRbToList(gasto) { + console.info(gasto); + const modType = JSON.parse(JSON.stringify(this.modValueForm.value['modType'])); + modType['Parametros'] = modType['Parametros'] ? JSON.stringify(modType['Parametros']) : undefined; + const currentMovData: ModFuenteData = { + Tipo: modType, + CuentaCredito: gasto.objCuentaCredito ? gasto.objCuentaCredito : undefined, + Valor: gasto.value + }; + console.info(currentMovData); + if (this.totalCurrentMov >= currentMovData.Valor) { + this.movAfectation.push(currentMovData); + this.totalCurrentMov -= currentMovData.Valor; + } + else { + this.popManager.showErrorAlert("El valor del rubro supera el agregado para la fuente"); + } + } + + //usado para limpiar array de datos repetidos por propiedad + getUnique(arr, comp) { + + //store the comparison values in array + const unique = arr.map(e => e[comp]). + // store the keys of the unique objects + map((e, i, final) => final.indexOf(e) === i && i) + // eliminate the dead keys & return unique objects + .filter((e) => arr[e]).map(e => arr[e]); + + return unique + + } + + public async checkedGasto($event, item, index) { + /* this.modValueFormStruct.cuentaCredito = true; + this.movimientoValidator = FormManager.BuildGroupForm(this.movimientoFormStruct); + this.modValueForm = FormManager.BuildGroupForm(this.modValueFormStruct); */ + this.rubrosPlanAdquisicionFuente[index]['checked'] = $event; + console.info(item); + console.info(this.rubrosPlanAdquisicionFuente); + if (item.checked) { + this.apHelper.getFullArbolByNode(item.rubro, this.vigenciaActual).subscribe((response) => { + if (response) { + item.rubroData = response[0].data; + this.target.push(this.formBuilder.group({ + objCuentaCredito: [item.rubroData,], + cuentaCredito: [{ value: `${item.rubroData.Codigo} / ${item.rubroData.Nombre}`, disabled: true }, Validators.required], + value: ['', Validators.required], + valorActual: [{ value: `${item.rubroData.ValorActual}`, disabled: true },] + })); + } + }) + } else { + this.target.removeAt(index); + } + } + + calculateTotalValue(movData, totalPlanAdquisiciones) { + let totalValue + switch (movData.Tipo.Acronimo) { + case 'ad_fuente': + totalValue = movData.MovimientoOrigen.ValorActual - totalPlanAdquisiciones + movData.Valor; + break; + case 'rd_fuente': + totalValue = movData.MovimientoOrigen.ValorActual - totalPlanAdquisiciones - movData.Valor; + break; + default: + break; + } + return totalValue; + + } returnToAdd() { this.localtabActived = false; this.cleanData(); } - returnToResume(){ + returnToResume() { + this.localtabActived = true; + } + + returnToMovRubros() { this.localtabActived = true; + this.viewMovAuxActived = true; } } diff --git a/src/app/pages/plan-cuentas/modificacion-apropiacion/show-modification-fuente/show-modification-fuente.component.html b/src/app/pages/plan-cuentas/modificacion-apropiacion/show-modification-fuente/show-modification-fuente.component.html index b670c556..6560618c 100644 --- a/src/app/pages/plan-cuentas/modificacion-apropiacion/show-modification-fuente/show-modification-fuente.component.html +++ b/src/app/pages/plan-cuentas/modificacion-apropiacion/show-modification-fuente/show-modification-fuente.component.html @@ -1,26 +1,26 @@ -
+
- {{'GLOBAL.tipo' | translate }} : {{afetctaionItem.Tipo.Nombre}} + {{'GLOBAL.tipo' | translate }} : {{afectationItem.Tipo.Nombre}} + (click)="removeAprData(afectationItem)">X
-
- {{'MODIF.fuente_origen' | translate }} : {{afetctaionItem.MovimientoOrigen.Codigo}} / {{afetctaionItem.MovimientoOrigen.Nombre}} -
- {{'MODIF.fuente_destino' | translate }} - : - {{afetctaionItem.MovimientoDestino.Codigo}}/{{afetctaionItem.MovimientoDestino.Codigo}} -
- {{'GLOBAL.valor' | translate }} : {{afetctaionItem.Valor | currency:'COP':'symbol':'4.2-2':'co' }} +
+ {{'MODIF.fuente_origen' | translate }} : {{afectationItem.MovimientoOrigen.Codigo}} / {{afectationItem.MovimientoOrigen.Nombre}} +
+ {{'GLOBAL.valor' | translate }} : {{afectationItem.Valor | currency:'COP':'symbol':'4.2-2':'co' }} +
+
+
+ {{'MODIF.cuenta_credito' | translate }} : {{afectationItem.CuentaCredito.Codigo}} / {{afectationItem.CuentaCredito.Nombre}}
- - + {{'GLOBAL.valor' | translate }} : {{afectationItem.Valor | currency:'COP':'symbol':'4.2-2':'co' }} + +
diff --git a/src/app/pages/plan-cuentas/modificacion-apropiacion/show-modification-fuente/show-modification-fuente.component.ts b/src/app/pages/plan-cuentas/modificacion-apropiacion/show-modification-fuente/show-modification-fuente.component.ts index d06508e6..b2c95613 100644 --- a/src/app/pages/plan-cuentas/modificacion-apropiacion/show-modification-fuente/show-modification-fuente.component.ts +++ b/src/app/pages/plan-cuentas/modificacion-apropiacion/show-modification-fuente/show-modification-fuente.component.ts @@ -11,11 +11,11 @@ export class ShowModificationFuenteComponent implements OnInit { this.afectationData = changes['afectationData'].currentValue; } constructor() { } -@Input() afectationData: Array; +@Input() afectationData: Array; @Output() afectationDataChange = new EventEmitter(); @Input() readonly: boolean = false; ngOnInit() { } -public removeAprData(daprData: ModFuenteData) { +public removeAprData(daprData: any) { this.afectationData = this.afectationData.filter(data => data !== daprData); this.afectationDataChange.emit(this.afectationData); } diff --git a/src/assets/i18n/es.json b/src/assets/i18n/es.json index 0baf1bd8..e6c62f62 100644 --- a/src/assets/i18n/es.json +++ b/src/assets/i18n/es.json @@ -190,7 +190,9 @@ "jefe_presupuesto": "JEFE SECCIÓN PRESUPUESTO", "cdp_modificacion": "CDP modificación presupuestal", "lista_anulaciones": "Lista anulaciones", - "consecutivo": "Consecutivo" + "consecutivo": "Consecutivo", + "saldo_rubro": "Saldo del rubro", + "relacionado": "relacionado" }, "RUBRO": { "asignar_rubro": "Asignar Rubro", @@ -220,7 +222,8 @@ "select_fuente": "Seleccione una fuente de financiamiento", "total_plan_ad": "Total Plan de Adquisiciones: ", "asignar_ingreso": "Asignar Ingreso", - "cambiar_ingreso": "Cambiar Ingreso" + "cambiar_ingreso": "Cambiar Ingreso", + "saldo_restante_mov": "Saldo restante del movimiento" }, "ACTIVIDAD":{ "comprobacion-diferencia": "El valor de la(s) actividad(es) supera el de la apropiación por un valor de: " @@ -278,7 +281,8 @@ "fuente_origen": "Fuente Origen", "fuente_destino": "Fuente Destino", "cuenta_credito": "Cuenta crédito", - "cuenta_contra_credito": "Cuenta contra crédito" + "cuenta_contra_credito": "Cuenta contra crédito", + "distribuir_rubros": "Distribuir Rubros" }, "PRODUCTO": { "mensaje_actualizar": "¿ Actualizar Producto ?", From d23aa66de95f64de7d61e83dae934110804de00c Mon Sep 17 00:00:00 2001 From: juancsr Date: Fri, 20 Dec 2019 06:57:55 -0500 Subject: [PATCH 2/2] Corrigiendo problemas con vigencia component --- .../listar-vigencia.component.html | 4 +- .../listar-vigencia.component.ts | 83 +++++++++---------- 2 files changed, 43 insertions(+), 44 deletions(-) diff --git a/src/app/pages/plan-cuentas/vigencia/listar-vigencia/listar-vigencia.component.html b/src/app/pages/plan-cuentas/vigencia/listar-vigencia/listar-vigencia.component.html index 297c3337..7c6c2109 100644 --- a/src/app/pages/plan-cuentas/vigencia/listar-vigencia/listar-vigencia.component.html +++ b/src/app/pages/plan-cuentas/vigencia/listar-vigencia/listar-vigencia.component.html @@ -1,4 +1,4 @@ -
+ diff --git a/src/app/pages/plan-cuentas/vigencia/listar-vigencia/listar-vigencia.component.ts b/src/app/pages/plan-cuentas/vigencia/listar-vigencia/listar-vigencia.component.ts index 73ea83c8..e1b99e0a 100644 --- a/src/app/pages/plan-cuentas/vigencia/listar-vigencia/listar-vigencia.component.ts +++ b/src/app/pages/plan-cuentas/vigencia/listar-vigencia/listar-vigencia.component.ts @@ -2,7 +2,7 @@ import { Component, OnInit } from '@angular/core'; import { Observable } from 'rxjs'; import { LocalDataSource } from 'ng2-smart-table'; import { TranslateService } from '@ngx-translate/core'; -import { VigenciaHelper } from '../../../../@core/helpers/vigencia/vigenciaHelper'; +// import { VigenciaHelper } from '../../../../@core/helpers/vigencia/vigenciaHelper'; import { RequestManager } from '../../../../@core/managers/requestManager'; @Component({ @@ -30,14 +30,13 @@ export class ListarVigenciaComponent implements OnInit { constructor( private translate: TranslateService, - private vigenciaHelper: VigenciaHelper, + // private vigenciaHelper: VigenciaHelper, private rqManager: RequestManager, ) { } ngOnInit() { - - this.loadDataFunction = this.vigenciaHelper.getFullVigencias; + // this.loadDataFunction = this.vigenciaHelper.getFullVigencias; this.listColumns = { _id: { @@ -77,44 +76,44 @@ export class ListarVigenciaComponent implements OnInit { columns: this.listColumns, }; - this.loadData(); - } - - loadData(): void { - vigencias: this.loadDataFunction( - ).subscribe(res =>{ - const data = >res; - console.log(data) - this.source.load(data); - }) - } - - onCustom(event: any) { - console.log(event.data) - event.data['Vigencia'] = event.data.valor; - event.data['AreaFuncional'] = event.data.areaFuncional; - event.data['Estado'] = event.data.estado; - event.data['FechaInicio'] = event.data.fechaCreacion; - event.data['FechaCierre'] = event.data.fechaCierre; - - switch (event.action) { - case 'ver': - this.verVigencia(event.data); - break; - } + // this.loadData(); } - verVigencia(vigencia) { - this.vigencia = vigencia; - this.onCambiotab(); - } - - onCambiotab(): void { - this.cambiotab = !this.cambiotab; - } - - returnToList() { - this.anularTab = false; - this.cambiotab = false; - } + // loadData(): void { + // vigencias: this.loadDataFunction( + // ).subscribe(res =>{ + // const data = >res; + // console.log(data) + // this.source.load(data); + // }) + // } + + // onCustom(event: any) { + // console.log(event.data) + // event.data['Vigencia'] = event.data.valor; + // event.data['AreaFuncional'] = event.data.areaFuncional; + // event.data['Estado'] = event.data.estado; + // event.data['FechaInicio'] = event.data.fechaCreacion; + // event.data['FechaCierre'] = event.data.fechaCierre; + + // switch (event.action) { + // case 'ver': + // this.verVigencia(event.data); + // break; + // } + // } + + // verVigencia(vigencia) { + // this.vigencia = vigencia; + // this.onCambiotab(); + // } + + // onCambiotab(): void { + // this.cambiotab = !this.cambiotab; + // } + + // returnToList() { + // this.anularTab = false; + // this.cambiotab = false; + // } }