From 6ff17cf9aa5278fbeaa160f42e5bfaed138e9d42 Mon Sep 17 00:00:00 2001 From: Bonifacia Date: Sat, 13 Sep 2025 21:10:34 -0600 Subject: [PATCH] Agregar mantenimiento de Concepto y TipoMovimiento --- .../.idea.AdminFinanceRCA/.idea/avalonia.xml | 2 + AdminFinanceRCA/AdminFinanceRCA.csproj | 11 +++ AdminFinanceRCA/Repository.cs | 26 +++++ .../ViewModels/MainWindowViewModel.cs | 25 ++++- .../Mantenimiento_ConceptoViewModel.cs | 97 +++++++++++++++++++ .../Mantenimiento_TipoMovViewModel.cs | 97 +++++++++++++++++++ AdminFinanceRCA/Views/MainWindow.axaml | 4 +- .../Views/Mantenimiento_Concepto.axaml | 55 +++++++++++ .../Views/Mantenimiento_Concepto.axaml.cs | 29 ++++++ .../Views/Mantenimiento_TipoMovimiento.axaml | 55 +++++++++++ .../Mantenimiento_TipoMovimiento.axaml.cs | 27 ++++++ 11 files changed, 425 insertions(+), 3 deletions(-) create mode 100644 AdminFinanceRCA/ViewModels/Mantenimiento_ConceptoViewModel.cs create mode 100644 AdminFinanceRCA/ViewModels/Mantenimiento_TipoMovViewModel.cs create mode 100644 AdminFinanceRCA/Views/Mantenimiento_Concepto.axaml create mode 100644 AdminFinanceRCA/Views/Mantenimiento_Concepto.axaml.cs create mode 100644 AdminFinanceRCA/Views/Mantenimiento_TipoMovimiento.axaml create mode 100644 AdminFinanceRCA/Views/Mantenimiento_TipoMovimiento.axaml.cs diff --git a/.idea/.idea.AdminFinanceRCA/.idea/avalonia.xml b/.idea/.idea.AdminFinanceRCA/.idea/avalonia.xml index 7e34302..62e3ab6 100644 --- a/.idea/.idea.AdminFinanceRCA/.idea/avalonia.xml +++ b/.idea/.idea.AdminFinanceRCA/.idea/avalonia.xml @@ -5,7 +5,9 @@ + + diff --git a/AdminFinanceRCA/AdminFinanceRCA.csproj b/AdminFinanceRCA/AdminFinanceRCA.csproj index 72f8fab..e9ab1af 100644 --- a/AdminFinanceRCA/AdminFinanceRCA.csproj +++ b/AdminFinanceRCA/AdminFinanceRCA.csproj @@ -38,4 +38,15 @@ Always + + + + Mantenimiento_Concepto.axaml + Code + + + Mantenimiento_TipoMovimiento.axaml + Code + + diff --git a/AdminFinanceRCA/Repository.cs b/AdminFinanceRCA/Repository.cs index f162976..245073a 100644 --- a/AdminFinanceRCA/Repository.cs +++ b/AdminFinanceRCA/Repository.cs @@ -180,6 +180,19 @@ public class FinanzasRepository } } + public async Task UpdateConceptoAsync(Concepto concepto) + { + using (var connection = GetConnection()) + { + var sql = @"UPDATE Concepto + SET Nombre = @Nombre + WHERE Id = @Id;"; + + var rowsAffected = await connection.ExecuteAsync(sql, concepto); + return rowsAffected > 0; + } + } + #endregion #region Operaciones para DepartTrabajo @@ -235,6 +248,19 @@ public class FinanzasRepository } } + public async Task UpdateTipoMovimientoAsync(TipoMovimiento tipomov) + { + using (var connection = GetConnection()) + { + var sql = @"UPDATE Concepto + SET Nombre = @Nombre + WHERE Id = @Id;"; + + var rowsAffected = await connection.ExecuteAsync(sql, tipomov); + return rowsAffected > 0; + } + } + #endregion #region Métodos de exportación diff --git a/AdminFinanceRCA/ViewModels/MainWindowViewModel.cs b/AdminFinanceRCA/ViewModels/MainWindowViewModel.cs index bbd9e9a..1088d23 100644 --- a/AdminFinanceRCA/ViewModels/MainWindowViewModel.cs +++ b/AdminFinanceRCA/ViewModels/MainWindowViewModel.cs @@ -38,6 +38,28 @@ public partial class MainWindowViewModel : ViewModelBase }; departTrabajo.ShowDialog(GetCurrentWindow()); } + + [RelayCommand] + public void AgregarConcepto() + { + Mantenimiento_ConceptoViewModel mantenimiento = new Mantenimiento_ConceptoViewModel(); + Mantenimiento_Concepto conceptoWindow = new Mantenimiento_Concepto() + { + DataContext = mantenimiento + }; + conceptoWindow.ShowDialog(GetCurrentWindow()); + } + + [RelayCommand] + public void AgregarTipoMovimiento() + { + Mantenimiento_TipoMovViewModel mantenimiento = new Mantenimiento_TipoMovViewModel(); + Mantenimiento_TipoMovimiento conceptoWindow = new Mantenimiento_TipoMovimiento() + { + DataContext = mantenimiento + }; + conceptoWindow.ShowDialog(GetCurrentWindow()); + } [RelayCommand] public void AgregarMovimiento() @@ -47,11 +69,12 @@ public partial class MainWindowViewModel : ViewModelBase MovimientoWindow mw = new MovimientoWindow() { Width = 600, - Height = 400, + Height = 450, }; mw.DataContext = mwvm; mw.ShowDialog(GetCurrentWindow()); } + private async void MwvmOnReloadEvent(object? sender, EventArgs e) { diff --git a/AdminFinanceRCA/ViewModels/Mantenimiento_ConceptoViewModel.cs b/AdminFinanceRCA/ViewModels/Mantenimiento_ConceptoViewModel.cs new file mode 100644 index 0000000..4c951aa --- /dev/null +++ b/AdminFinanceRCA/ViewModels/Mantenimiento_ConceptoViewModel.cs @@ -0,0 +1,97 @@ +using System; +using System.Collections.ObjectModel; +using System.Threading.Tasks; +using AdminFinanceRCA.Models; +using AdminFinanceRCA.Views; +using CommunityToolkit.Mvvm.ComponentModel; +using CommunityToolkit.Mvvm.Input; +using MsBox.Avalonia; +using MsBox.Avalonia.Enums; + +namespace AdminFinanceRCA.ViewModels; + +public partial class Mantenimiento_ConceptoViewModel : ViewModelBase +{ + private readonly FinanzasRepository _conceptoService; + public event EventHandler? ReloadEvent; + [ObservableProperty] private ObservableCollection _conceptos; + [ObservableProperty] private Concepto _conceptoSeleccionado; + [ObservableProperty] private Concepto _conceptoEditando; + [ObservableProperty] private bool _estaEditando; + [ObservableProperty] private string _nombre; + // [ObservableProperty] private string _descripcion; + + public Mantenimiento_ConceptoViewModel() + { + _conceptoService = new FinanzasRepository(); + _ = CargarDatosAsync(); + } + + async Task CargarDatosAsync() + { + var dt = await _conceptoService.GetAllConceptosAsync(); + Conceptos = new ObservableCollection(dt); + } + + [RelayCommand] + private void NuevoConcepto() + { + Nombre = string.Empty; + // Descripcion = string.Empty; + EstaEditando = false; + } + + [RelayCommand] + private async Task GuardarRegistros() + { + string[] mensaje = {"", string.Empty}; + if (EstaEditando) + { + try + { + ConceptoSeleccionado.Nombre = Nombre; + // GrupoSeleccionado.Descripcion = Descripcion; + await _conceptoService.UpdateConceptoAsync(ConceptoSeleccionado); + mensaje = new[] { "Exito", "Registro actualizado con exito" }; + } + catch (Exception ex) + { + mensaje = new[] { "Error", ex.Message }; + } + } + else + { + try + { + if(string.IsNullOrEmpty(Nombre)) + return; + + Concepto concept = new Concepto(Nombre); + await _conceptoService.CreateConceptoAsync(concept); + Nombre = string.Empty; + // Descripcion = string.Empty; + + mensaje = new[] { "Exito", "Registro agregado con exito" }; + } + catch (Exception ex) + { + mensaje = new[] { "Error", ex.Message }; + } + } + var dt = MessageBoxManager.GetMessageBoxStandard(mensaje[0], mensaje[1], ButtonEnum.Ok); + await dt.ShowAsPopupAsync(GetCurrentWindow()); + OnReloadEvent(); + await CargarDatosAsync(); + } + + [RelayCommand] + private void Cancelar() + { + this.GetCurrentWindow().Close(); + } + + protected virtual void OnReloadEvent() + { + ReloadEvent?.Invoke(this, EventArgs.Empty); + } +} \ No newline at end of file diff --git a/AdminFinanceRCA/ViewModels/Mantenimiento_TipoMovViewModel.cs b/AdminFinanceRCA/ViewModels/Mantenimiento_TipoMovViewModel.cs new file mode 100644 index 0000000..415e167 --- /dev/null +++ b/AdminFinanceRCA/ViewModels/Mantenimiento_TipoMovViewModel.cs @@ -0,0 +1,97 @@ +using System; +using System.Collections.ObjectModel; +using System.Threading.Tasks; +using AdminFinanceRCA.Models; +using AdminFinanceRCA.Views; +using CommunityToolkit.Mvvm.ComponentModel; +using CommunityToolkit.Mvvm.Input; +using MsBox.Avalonia; +using MsBox.Avalonia.Enums; + +namespace AdminFinanceRCA.ViewModels; + +public partial class Mantenimiento_TipoMovViewModel : ViewModelBase +{ + private readonly FinanzasRepository _repositoryService; + public event EventHandler? ReloadEvent; + [ObservableProperty] private ObservableCollection _tipoMovimientos; + [ObservableProperty] private TipoMovimiento _tipoMovSeleccionado; + [ObservableProperty] private TipoMovimiento _tipoMovEditando; + [ObservableProperty] private bool _estaEditando; + [ObservableProperty] private string _nombre; + // [ObservableProperty] private string _descripcion; + + public Mantenimiento_TipoMovViewModel() + { + _repositoryService = new FinanzasRepository(); + _ = CargarDatosAsync(); + } + + async Task CargarDatosAsync() + { + var dt = await _repositoryService.GetAllTiposMovimientoAsync(); + TipoMovimientos = new ObservableCollection(dt); + } + + [RelayCommand] + private void NuevoTipoMov() + { + Nombre = string.Empty; + // Descripcion = string.Empty; + EstaEditando = false; + } + + [RelayCommand] + private async Task GuardarRegistros() + { + string[] mensaje = {"", string.Empty}; + if (EstaEditando) + { + try + { + TipoMovSeleccionado.Nombre = Nombre; + // GrupoSeleccionado.Descripcion = Descripcion; + await _repositoryService.UpdateTipoMovimientoAsync(TipoMovSeleccionado); + mensaje = new[] { "Exito", "Registro actualizado con exito" }; + } + catch (Exception ex) + { + mensaje = new[] { "Error", ex.Message }; + } + } + else + { + try + { + if(string.IsNullOrEmpty(Nombre)) + return; + + TipoMovimiento tipomov = new TipoMovimiento(Nombre); + await _repositoryService.CreateTipoMovimientoAsync(tipomov); + Nombre = string.Empty; + // Descripcion = string.Empty; + + mensaje = new[] { "Exito", "Registro agregado con exito" }; + } + catch (Exception ex) + { + mensaje = new[] { "Error", ex.Message }; + } + } + var dt = MessageBoxManager.GetMessageBoxStandard(mensaje[0], mensaje[1], ButtonEnum.Ok); + await dt.ShowAsPopupAsync(GetCurrentWindow()); + OnReloadEvent(); + await CargarDatosAsync(); + } + + [RelayCommand] + private void Cancelar() + { + this.GetCurrentWindow().Close(); + } + + protected virtual void OnReloadEvent() + { + ReloadEvent?.Invoke(this, EventArgs.Empty); + } +} \ No newline at end of file diff --git a/AdminFinanceRCA/Views/MainWindow.axaml b/AdminFinanceRCA/Views/MainWindow.axaml index ceacdaa..a3fe1bf 100644 --- a/AdminFinanceRCA/Views/MainWindow.axaml +++ b/AdminFinanceRCA/Views/MainWindow.axaml @@ -30,8 +30,8 @@ - - + + diff --git a/AdminFinanceRCA/Views/Mantenimiento_Concepto.axaml b/AdminFinanceRCA/Views/Mantenimiento_Concepto.axaml new file mode 100644 index 0000000..c92f7f5 --- /dev/null +++ b/AdminFinanceRCA/Views/Mantenimiento_Concepto.axaml @@ -0,0 +1,55 @@ + + + + + + + + + +