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 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/AdminFinanceRCA/Views/Mantenimiento_Concepto.axaml.cs b/AdminFinanceRCA/Views/Mantenimiento_Concepto.axaml.cs
new file mode 100644
index 0000000..b703fb8
--- /dev/null
+++ b/AdminFinanceRCA/Views/Mantenimiento_Concepto.axaml.cs
@@ -0,0 +1,29 @@
+using AdminFinanceRCA.Models;
+using AdminFinanceRCA.ViewModels;
+using Avalonia;
+using Avalonia.Controls;
+using Avalonia.Input;
+using Avalonia.Markup.Xaml;
+
+namespace AdminFinanceRCA.Views;
+
+public partial class Mantenimiento_Concepto : Window
+{
+ public Mantenimiento_Concepto()
+ {
+ InitializeComponent();
+ }
+
+ private void OnListBoxDoubleTapped(object sender, TappedEventArgs e)
+ {
+ if (DataContext is Mantenimiento_ConceptoViewModel viewModel &&
+ sender is ListBox listBox &&
+ listBox.SelectedItem is Concepto selected)
+ {
+ viewModel.ConceptoSeleccionado = selected;
+ viewModel.Nombre = selected.Nombre;
+ // viewModel.Descripcion = selected.Descripcion;
+ viewModel.EstaEditando = true;
+ }
+ }
+}
\ No newline at end of file
diff --git a/AdminFinanceRCA/Views/Mantenimiento_TipoMovimiento.axaml b/AdminFinanceRCA/Views/Mantenimiento_TipoMovimiento.axaml
new file mode 100644
index 0000000..28d2552
--- /dev/null
+++ b/AdminFinanceRCA/Views/Mantenimiento_TipoMovimiento.axaml
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/AdminFinanceRCA/Views/Mantenimiento_TipoMovimiento.axaml.cs b/AdminFinanceRCA/Views/Mantenimiento_TipoMovimiento.axaml.cs
new file mode 100644
index 0000000..ebc4079
--- /dev/null
+++ b/AdminFinanceRCA/Views/Mantenimiento_TipoMovimiento.axaml.cs
@@ -0,0 +1,27 @@
+using AdminFinanceRCA.Models;
+using AdminFinanceRCA.ViewModels;
+using Avalonia.Controls;
+using Avalonia.Input;
+
+namespace AdminFinanceRCA.Views;
+
+public partial class Mantenimiento_TipoMovimiento : Window
+{
+ public Mantenimiento_TipoMovimiento()
+ {
+ InitializeComponent();
+ }
+
+ private void OnListBoxDoubleTapped(object sender, TappedEventArgs e)
+ {
+ if (DataContext is Mantenimiento_TipoMovViewModel viewModel &&
+ sender is ListBox listBox &&
+ listBox.SelectedItem is TipoMovimiento selected)
+ {
+ viewModel.TipoMovSeleccionado = selected;
+ viewModel.Nombre = selected.Nombre;
+ // viewModel.Descripcion = selected.Descripcion;
+ viewModel.EstaEditando = true;
+ }
+ }
+}
\ No newline at end of file