agregar cambios importantes

This commit is contained in:
2025-09-15 15:02:17 -06:00
parent 6ff17cf9aa
commit 1fde928d5e
8 changed files with 192 additions and 56 deletions

View File

@@ -2,6 +2,7 @@
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AAdminFinanceRCA_002EViewModels_002EMantenimiento_005FDepartTrabajoViewModel_002Eg_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FSourcesCache_003Fef78e682e56c19e39b0e3efe9d5c77fc453833_003FAdminFinanceRCA_002EViewModels_002EMantenimiento_005FDepartTrabajoViewModel_002Eg_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AAdminFinanceRCA_002EViewModels_002EMantenimiento_005FDepartTrabajoViewModel_002Eg_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FSourcesCache_003Fef78e682e56c19e39b0e3efe9d5c77fc453833_003FAdminFinanceRCA_002EViewModels_002EMantenimiento_005FDepartTrabajoViewModel_002Eg_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AApplication_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FSourcesCache_003F9a5cc8ddf36e8c8f422071f068cc8edb16e814991aa851aa131f3fa14425ed_003FApplication_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AApplication_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FSourcesCache_003F9a5cc8ddf36e8c8f422071f068cc8edb16e814991aa851aa131f3fa14425ed_003FApplication_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AExceptionDispatchInfo_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FSourcesCache_003Fbf9021a960b74107a7e141aa06bc9d8a0a53c929178c2fb95b1597be8af8dc_003FExceptionDispatchInfo_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AExceptionDispatchInfo_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FSourcesCache_003Fbf9021a960b74107a7e141aa06bc9d8a0a53c929178c2fb95b1597be8af8dc_003FExceptionDispatchInfo_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AInteractive_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FSourcesCache_003Fb23cb847f33b753542a42b3f20ac9361fcabd14fd166ec471fe468e3597a9b_003FInteractive_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ARelayCommand_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FSourcesCache_003F20c0f49b8854743afaecc2f359655fdbfc6c5264f49e9eb333686e85a87bf_003FRelayCommand_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ARelayCommand_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FSourcesCache_003F20c0f49b8854743afaecc2f359655fdbfc6c5264f49e9eb333686e85a87bf_003FRelayCommand_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ASqliteException_002Ecs_002Fl_003AC_0021_003FUsers_003FBonifacia_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FSourcesCache_003F154220569126135ad5d7314bf2bc694d3cf7c95840d481d44f0336f4f1f8e9c_003FSqliteException_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ASqliteException_002Ecs_002Fl_003AC_0021_003FUsers_003FBonifacia_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FSourcesCache_003F154220569126135ad5d7314bf2bc694d3cf7c95840d481d44f0336f4f1f8e9c_003FSqliteException_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AString_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FSourcesCache_003Fb90d6b47d6330753e855af18818b97d4207f32c6ee4b793faffc029f069f4_003FString_002Ecs/@EntryIndexedValue">ForceIncluded</s:String></wpf:ResourceDictionary> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AString_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FSourcesCache_003Fb90d6b47d6330753e855af18818b97d4207f32c6ee4b793faffc029f069f4_003FString_002Ecs/@EntryIndexedValue">ForceIncluded</s:String></wpf:ResourceDictionary>

View File

@@ -1,4 +1,5 @@
using System; using System;
using Avalonia.Media;
using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.ComponentModel;
namespace AdminFinanceRCA.Models; namespace AdminFinanceRCA.Models;
@@ -63,6 +64,7 @@ public class Movimiento : ObservableObject
public DateTime FechaRegistro { get; set; } public DateTime FechaRegistro { get; set; }
public int Concepto { get; set; } public int Concepto { get; set; }
public string Descripcion { get; set; } = string.Empty; public string Descripcion { get; set; } = string.Empty;
public string Nota { get; set; } = string.Empty;
// Propiedades de navegación para las relaciones (opcionales pero útiles) // Propiedades de navegación para las relaciones (opcionales pero útiles)
public TipoMovimiento TipoMovimientoNav { get; set; } = new TipoMovimiento(); public TipoMovimiento TipoMovimientoNav { get; set; } = new TipoMovimiento();
@@ -72,7 +74,7 @@ public class Movimiento : ObservableObject
public Movimiento() { } public Movimiento() { }
public Movimiento(decimal monto, int tipoMov, int deptoTrabajo, public Movimiento(decimal monto, int tipoMov, int deptoTrabajo,
DateTime fechaMovimiento, int concepto, string descripcion = "") DateTime fechaMovimiento, int concepto, string descripcion = "", string nota ="")
{ {
Monto = monto; Monto = monto;
TipoMov = tipoMov; TipoMov = tipoMov;
@@ -81,6 +83,20 @@ public class Movimiento : ObservableObject
FechaRegistro = DateTime.Now; FechaRegistro = DateTime.Now;
Concepto = concepto; Concepto = concepto;
Descripcion = descripcion; Descripcion = descripcion;
Nota = nota;
}
public Movimiento(int id, decimal monto, int tipoMov, int deptoTrabajo,
DateTime fechaMovimiento, int concepto, string descripcion = "", string nota = "")
{
ID = id;
Monto = monto;
TipoMov = tipoMov;
DeptoTrabajo = deptoTrabajo;
FechaMovimiento = fechaMovimiento;
FechaRegistro = DateTime.Now;
Concepto = concepto;
Descripcion = descripcion;
Nota = nota;
} }
} }
@@ -104,4 +120,7 @@ public class MovimientoCompleto : ObservableObject
// Datos de Concepto // Datos de Concepto
public int ConceptoID { get; set; } public int ConceptoID { get; set; }
public string ConceptoNombre { get; set; } = string.Empty; public string ConceptoNombre { get; set; } = string.Empty;
public string Nota { get; set; } = string.Empty;
public IBrush ForegroundColor => TipoMovNombre == "Egreso" ? Brushes.Red : Brushes.Black;
} }

View File

@@ -83,8 +83,8 @@ public class FinanzasRepository
using (var connection = GetConnection()) using (var connection = GetConnection())
{ {
var sql = @"INSERT INTO Movimientos var sql = @"INSERT INTO Movimientos
(Monto, TipoMov, DeptoTrabajo, FechaMovimiento, FechaRegistro, Concepto, Descripcion) (Monto, TipoMov, DeptoTrabajo, FechaMovimiento, FechaRegistro, Concepto, Descripcion, Nota)
VALUES (@Monto, @TipoMov, @DeptoTrabajo, @FechaMovimiento, @FechaRegistro, @Concepto, @Descripcion); VALUES (@Monto, @TipoMov, @DeptoTrabajo, @FechaMovimiento, @FechaRegistro, @Concepto, @Descripcion, @Nota);
SELECT last_insert_rowid();"; SELECT last_insert_rowid();";
var id = await connection.ExecuteScalarAsync<int>(sql, movimiento); var id = await connection.ExecuteScalarAsync<int>(sql, movimiento);
@@ -110,7 +110,8 @@ public class FinanzasRepository
m.ID, m.Monto, m.FechaMovimiento, m.FechaRegistro, m.Descripcion, m.ID, m.Monto, m.FechaMovimiento, m.FechaRegistro, m.Descripcion,
tm.ID as TipoMovID, tm.Nombre as TipoMovNombre, tm.ID as TipoMovID, tm.Nombre as TipoMovNombre,
dt.Id as DeptoTrabajoID, dt.Nombre as DeptoTrabajoNombre, dt.Id as DeptoTrabajoID, dt.Nombre as DeptoTrabajoNombre,
c.ID as ConceptoID, c.Nombre as ConceptoNombre c.ID as ConceptoID, c.Nombre as ConceptoNombre,
m.Nota as Nota
FROM Movimientos m FROM Movimientos m
INNER JOIN TipoMovimiento tm ON m.TipoMov = tm.ID INNER JOIN TipoMovimiento tm ON m.TipoMov = tm.ID
INNER JOIN DepartTrabajo dt ON m.DeptoTrabajo = dt.Id INNER JOIN DepartTrabajo dt ON m.DeptoTrabajo = dt.Id
@@ -140,7 +141,8 @@ public class FinanzasRepository
DeptoTrabajo = @DeptoTrabajo, DeptoTrabajo = @DeptoTrabajo,
FechaMovimiento = @FechaMovimiento, FechaMovimiento = @FechaMovimiento,
Concepto = @Concepto, Concepto = @Concepto,
Descripcion = @Descripcion Descripcion = @Descripcion,
Nota = @Nota
WHERE ID = @ID"; WHERE ID = @ID";
var affectedRows = await connection.ExecuteAsync(sql, movimiento); var affectedRows = await connection.ExecuteAsync(sql, movimiento);
@@ -193,9 +195,27 @@ public class FinanzasRepository
} }
} }
public async Task<Concepto?> GetConceptoByIdAsync(int id)
{
using (var connection = GetConnection())
{
var sql = "SELECT * FROM Concepto WHERE ID = @Id";
return await connection.QueryFirstOrDefaultAsync<Concepto>(sql, new { Id = id });
}
}
#endregion #endregion
#region Operaciones para DepartTrabajo #region Operaciones para DepartTrabajo
public async Task<DepartTrabajo?> GetDepartamentoTrabajoByIdAsync(int id)
{
using (var connection = GetConnection())
{
var sql = "SELECT * FROM DepartTrabajo WHERE ID = @Id";
return await connection.QueryFirstOrDefaultAsync<DepartTrabajo>(sql, new { Id = id });
}
}
public async Task<IEnumerable<DepartTrabajo>> GetAllDepartamentosAsync() public async Task<IEnumerable<DepartTrabajo>> GetAllDepartamentosAsync()
{ {
using (var connection = GetConnection()) using (var connection = GetConnection())
@@ -238,16 +258,6 @@ public class FinanzasRepository
return await connection.QueryAsync<TipoMovimiento>(sql); return await connection.QueryAsync<TipoMovimiento>(sql);
} }
} }
public async Task<int> CreateTipoMovimientoAsync(TipoMovimiento tipoMovimiento)
{
using (var connection = GetConnection())
{
var sql = "INSERT INTO TipoMovimiento (Nombre) VALUES (@Nombre); SELECT last_insert_rowid();";
return await connection.ExecuteScalarAsync<int>(sql, tipoMovimiento);
}
}
public async Task<bool> UpdateTipoMovimientoAsync(TipoMovimiento tipomov) public async Task<bool> UpdateTipoMovimientoAsync(TipoMovimiento tipomov)
{ {
using (var connection = GetConnection()) using (var connection = GetConnection())
@@ -260,7 +270,24 @@ public class FinanzasRepository
return rowsAffected > 0; return rowsAffected > 0;
} }
} }
public async Task<int> CreateTipoMovimientoAsync(TipoMovimiento tipoMovimiento)
{
using (var connection = GetConnection())
{
var sql = "INSERT INTO TipoMovimiento (Nombre) VALUES (@Nombre); SELECT last_insert_rowid();";
return await connection.ExecuteScalarAsync<int>(sql, tipoMovimiento);
}
}
public async Task<TipoMovimiento?> GetTipoMovimientoByIdAsync(int id)
{
using (var connection = GetConnection())
{
var sql = "SELECT * FROM TipoMovimiento WHERE ID = @Id";
return await connection.QueryFirstOrDefaultAsync<TipoMovimiento>(sql, new { Id = id });
}
}
#endregion #endregion
#region Métodos de exportación #region Métodos de exportación

View File

@@ -6,6 +6,7 @@ using System.Threading.Tasks;
using AdminFinanceRCA.Models; using AdminFinanceRCA.Models;
using AdminFinanceRCA.Views; using AdminFinanceRCA.Views;
using Avalonia.Controls; using Avalonia.Controls;
using Avalonia.Media;
using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input; using CommunityToolkit.Mvvm.Input;
@@ -14,20 +15,18 @@ namespace AdminFinanceRCA.ViewModels;
public partial class MainWindowViewModel : ViewModelBase public partial class MainWindowViewModel : ViewModelBase
{ {
private readonly FinanzasRepository _repository; private readonly FinanzasRepository _repository;
[ObservableProperty] [ObservableProperty] private ObservableCollection<MovimientoCompleto> _movimientos;
private ObservableCollection<MovimientoCompleto> _movimientos; [ObservableProperty] private ObservableCollection<Concepto> _conceptos;
[ObservableProperty] [ObservableProperty] private ObservableCollection<DepartTrabajo> _departamentos;
private ObservableCollection<Concepto> _conceptos; [ObservableProperty] private ObservableCollection<TipoMovimiento> _tiposMovimiento;
[ObservableProperty] [ObservableProperty] private MovimientoCompleto _movimientoSeleccionado;
private ObservableCollection<DepartTrabajo> _departamentos;
[ObservableProperty]
private ObservableCollection<TipoMovimiento> _tiposMovimiento;
public MainWindowViewModel() public MainWindowViewModel()
{ {
_repository = new FinanzasRepository(); _repository = new FinanzasRepository();
CargarDatos(); CargarDatos();
} }
[RelayCommand] [RelayCommand]
public void AgregarDepartamento() public void AgregarDepartamento()
{ {
@@ -60,7 +59,22 @@ public partial class MainWindowViewModel : ViewModelBase
}; };
conceptoWindow.ShowDialog(GetCurrentWindow<MainWindow>()); conceptoWindow.ShowDialog(GetCurrentWindow<MainWindow>());
} }
[RelayCommand]
public async Task UpdateMovimiento(MovimientoCompleto _mvMovimientoCompleto)
{
MovimientoWindowViewModel mwvm = new MovimientoWindowViewModel();
mwvm.ReloadEvent+= MwvmOnReloadEvent;
MovimientoWindow mw = new MovimientoWindow()
{
Width = 600,
Height = 500,
};
mw.DataContext = mwvm;
mw.ShowDialog(GetCurrentWindow<MainWindow>());
mw.Loaded += async (sender, args) => { await mwvm.ActualizarMovimientoAsync(_mvMovimientoCompleto); };
}
[RelayCommand] [RelayCommand]
public void AgregarMovimiento() public void AgregarMovimiento()
{ {
@@ -69,13 +83,12 @@ public partial class MainWindowViewModel : ViewModelBase
MovimientoWindow mw = new MovimientoWindow() MovimientoWindow mw = new MovimientoWindow()
{ {
Width = 600, Width = 600,
Height = 450, Height = 500,
}; };
mw.DataContext = mwvm; mw.DataContext = mwvm;
mw.ShowDialog(GetCurrentWindow<MainWindow>()); mw.ShowDialog(GetCurrentWindow<MainWindow>());
} }
private async void MwvmOnReloadEvent(object? sender, EventArgs e) private async void MwvmOnReloadEvent(object? sender, EventArgs e)
{ {
var movimientosTask = _repository.GetAllMovimientosCompletosAsync(); var movimientosTask = _repository.GetAllMovimientosCompletosAsync();

View File

@@ -1,6 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using AdminFinanceRCA.Models; using AdminFinanceRCA.Models;
using AdminFinanceRCA.Views; using AdminFinanceRCA.Views;
@@ -24,6 +25,9 @@ public partial class MovimientoWindowViewModel : ViewModelBase
[ObservableProperty] private TipoMovimiento _tipoMovimientoSelecionado; [ObservableProperty] private TipoMovimiento _tipoMovimientoSelecionado;
[ObservableProperty] private DepartTrabajo _departaDepartTrabajoSeleccionado; [ObservableProperty] private DepartTrabajo _departaDepartTrabajoSeleccionado;
[ObservableProperty] private Concepto _conceptoSeleccionado; [ObservableProperty] private Concepto _conceptoSeleccionado;
[ObservableProperty] private string _nota;
private int IdMovimiento { get; set; }
private bool modificando = false;
public MovimientoWindowViewModel() public MovimientoWindowViewModel()
{ {
@@ -45,6 +49,26 @@ public partial class MovimientoWindowViewModel : ViewModelBase
ConceptoSeleccionado = Conceptos[0]; ConceptoSeleccionado = Conceptos[0];
} }
public async Task ActualizarMovimientoAsync(MovimientoCompleto mc)
{
try
{
IdMovimiento = mc.ID;
FechaMov = mc.FechaMovimiento;
MontoDecimal = mc.Monto;
TipoMovimientoSelecionado = TipoMovimientos.Where(e => e.ID == mc.TipoMovID).FirstOrDefault(); //await _finanzasRepository.GetTipoMovimientoByIdAsync(mc.TipoMovID) ?? new TipoMovimiento();
ConceptoSeleccionado = Conceptos.Where(e => e.ID == mc.ConceptoID).FirstOrDefault(); // await _finanzasRepository.GetConceptoByIdAsync(mc.ConceptoID) ?? new Concepto();
DepartaDepartTrabajoSeleccionado = DepartTrabajos.Where(e => e.Id == mc.DeptoTrabajoID).FirstOrDefault(); //await _finanzasRepository.GetDepartamentoTrabajoByIdAsync(mc.DeptoTrabajoID) ?? new DepartTrabajo();
Descripcion = mc.Descripcion;
Nota = mc.Nota;
modificando = true;
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
[RelayCommand] [RelayCommand]
public async void GuardarDatosAsync() public async void GuardarDatosAsync()
{ {
@@ -55,15 +79,30 @@ public partial class MovimientoWindowViewModel : ViewModelBase
{ {
return; // Detener ejecución si hay campos inválidos return; // Detener ejecución si hay campos inválidos
} }
Movimiento mv = new Movimiento(MontoDecimal, TipoMovimientoSelecionado.ID, DepartaDepartTrabajoSeleccionado.Id,
DateTime.Parse(FechaMov.ToString("yyyy-MM-dd")), ConceptoSeleccionado.ID, Descripcion); if (!modificando)
await _finanzasRepository.CreateMovimientoAsync(mv); {
var dt = MessageBoxManager.GetMessageBoxStandard("", "Se guardo con exito", ButtonEnum.Ok); Movimiento mv = new Movimiento(MontoDecimal, TipoMovimientoSelecionado.ID, DepartaDepartTrabajoSeleccionado.Id,
await dt.ShowAsPopupAsync(GetCurrentWindow<MovimientoWindow>()); DateTime.Parse(FechaMov.ToString("yyyy-MM-dd")), ConceptoSeleccionado.ID, Descripcion, Nota);
await _finanzasRepository.CreateMovimientoAsync(mv);
var dt = MessageBoxManager.GetMessageBoxStandard("", "Se guardo con exito", ButtonEnum.Ok);
await dt.ShowAsPopupAsync(GetCurrentWindow<MovimientoWindow>());
MontoDecimal = 0; MontoDecimal = 0;
Descripcion = ""; Descripcion = "";
OnReloadEvent(); OnReloadEvent();
}else
{
Movimiento mv = new Movimiento(IdMovimiento, MontoDecimal, TipoMovimientoSelecionado.ID, DepartaDepartTrabajoSeleccionado.Id,
DateTime.Parse(FechaMov.ToString("yyyy-MM-dd")), ConceptoSeleccionado.ID, Descripcion, Nota);
await _finanzasRepository.UpdateMovimientoAsync(mv);
var dt = MessageBoxManager.GetMessageBoxStandard("", "Se actualizo con exito", ButtonEnum.Ok);
await dt.ShowAsPopupAsync(GetCurrentWindow<MovimientoWindow>());
MontoDecimal = 0;
Descripcion = "";
OnReloadEvent();
}
}catch(Exception ex){ }catch(Exception ex){
var errorMsg = MessageBoxManager.GetMessageBoxStandard("Error", $"Ocurrió un error: {ex.Message}", ButtonEnum.Ok); var errorMsg = MessageBoxManager.GetMessageBoxStandard("Error", $"Ocurrió un error: {ex.Message}", ButtonEnum.Ok);
await errorMsg.ShowAsPopupAsync(GetCurrentWindow<MovimientoWindow>()); await errorMsg.ShowAsPopupAsync(GetCurrentWindow<MovimientoWindow>());

View File

@@ -16,6 +16,13 @@
<vm:MainWindowViewModel/> <vm:MainWindowViewModel/>
</Design.DataContext> </Design.DataContext>
<Window.Styles>
<Style Selector="DataGridColumnHeader">
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
</Style>
</Window.Styles>
<DockPanel LastChildFill="True" Background="#F5F5F5"> <DockPanel LastChildFill="True" Background="#F5F5F5">
<!-- Menú superior estilo moderno --> <!-- Menú superior estilo moderno -->
@@ -49,13 +56,14 @@
</StackPanel> </StackPanel>
<!-- DataGrid con estilo moderno --> <!-- DataGrid con estilo moderno -->
<DataGrid Margin="15" HorizontalAlignment="Stretch" BorderThickness="1" CornerRadius="3" ItemsSource="{Binding Movimientos}"> <DataGrid Margin="15" HorizontalAlignment="Stretch" BorderThickness="1" CornerRadius="3" ItemsSource="{Binding Movimientos}" DoubleTapped="InputElement_OnDoubleTapped" >
<!-- Estilo para los encabezados -->
<DataGrid.Columns> <DataGrid.Columns>
<DataGridTemplateColumn Header="ID" Width="80"> <DataGridTemplateColumn Header="ID" Width="80" IsVisible="False">
<DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellTemplate>
<DataTemplate> <DataTemplate>
<TextBlock Text="{Binding ID}" Foreground="Black" /> <TextBlock Text="{Binding ID}" Foreground="{Binding ForegroundColor}" />
</DataTemplate> </DataTemplate>
</DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn> </DataGridTemplateColumn>
@@ -63,15 +71,15 @@
<DataGridTemplateColumn Header="Fecha Mov" Width="120"> <DataGridTemplateColumn Header="Fecha Mov" Width="120">
<DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellTemplate>
<DataTemplate> <DataTemplate>
<TextBlock Text="{Binding FechaMovimiento}" Foreground="Black" /> <TextBlock Text="{Binding FechaMovimiento, StringFormat='{}{0:dd/MM/yyyy}'}" Foreground="{Binding ForegroundColor}" />
</DataTemplate> </DataTemplate>
</DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn> </DataGridTemplateColumn>
<DataGridTemplateColumn Header="Grupo de Trabajo" Width="150"> <DataGridTemplateColumn Header="Grupo de Trabajo" Width="250">
<DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellTemplate>
<DataTemplate> <DataTemplate>
<TextBlock Text="{Binding DeptoTrabajoNombre}" Foreground="Black" /> <TextBlock Text="{Binding DeptoTrabajoNombre}" Foreground="{Binding ForegroundColor}" />
</DataTemplate> </DataTemplate>
</DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn> </DataGridTemplateColumn>
@@ -79,7 +87,7 @@
<DataGridTemplateColumn Header="Monto" Width="120"> <DataGridTemplateColumn Header="Monto" Width="120">
<DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellTemplate>
<DataTemplate> <DataTemplate>
<TextBlock Text="{Binding Monto}" Foreground="Black" /> <TextBlock Text="{Binding Monto, StringFormat='{}{0:C}'}" Margin="0 0 25 0" TextAlignment="Right" Foreground="{Binding ForegroundColor}" />
</DataTemplate> </DataTemplate>
</DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn> </DataGridTemplateColumn>
@@ -87,23 +95,31 @@
<DataGridTemplateColumn Header="Tipo Movimiento" Width="150"> <DataGridTemplateColumn Header="Tipo Movimiento" Width="150">
<DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellTemplate>
<DataTemplate> <DataTemplate>
<TextBlock Text="{Binding TipoMovNombre}" Foreground="Black" /> <TextBlock Text="{Binding TipoMovNombre}" Foreground="{Binding ForegroundColor}" Margin="20 0 0 0" />
</DataTemplate> </DataTemplate>
</DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn> </DataGridTemplateColumn>
<DataGridTemplateColumn Header="Concepto" Width="150"> <DataGridTemplateColumn Header="Concepto" Width="225">
<DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellTemplate>
<DataTemplate> <DataTemplate>
<TextBlock Text="{Binding ConceptoNombre}" Foreground="Black" /> <TextBlock Text="{Binding ConceptoNombre}" Foreground="{Binding ForegroundColor}" />
</DataTemplate> </DataTemplate>
</DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn> </DataGridTemplateColumn>
<DataGridTemplateColumn Header="Descripcion" Width="250"> <DataGridTemplateColumn Header="Descripcion" Width="300">
<DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellTemplate>
<DataTemplate> <DataTemplate>
<TextBlock Text="{Binding Descripcion}" Foreground="Black" /> <TextBlock Text="{Binding Descripcion}" Foreground="{Binding ForegroundColor}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Notas" Width="300">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Nota}" Foreground="{Binding ForegroundColor}" />
</DataTemplate> </DataTemplate>
</DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn> </DataGridTemplateColumn>

View File

@@ -1,4 +1,7 @@
using AdminFinanceRCA.Models;
using AdminFinanceRCA.ViewModels;
using Avalonia.Controls; using Avalonia.Controls;
using Avalonia.Input;
namespace AdminFinanceRCA.Views; namespace AdminFinanceRCA.Views;
@@ -8,4 +11,16 @@ public partial class MainWindow : Window
{ {
InitializeComponent(); InitializeComponent();
} }
private void InputElement_OnDoubleTapped(object? sender, TappedEventArgs e)
{
if (DataContext is MainWindowViewModel vm)
{
if (((DataGrid)sender).SelectedItem is MovimientoCompleto)
{
var row = ((DataGrid)sender).SelectedItem as MovimientoCompleto;
vm.UpdateMovimientoCommand.Execute(row);
}
}
}
} }

View File

@@ -2,7 +2,7 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="600" d:DesignHeight="500" Width="600" Height="500" mc:Ignorable="d" d:DesignWidth="600" d:DesignHeight="500" Width="600" Height="520"
CanResize="False" CanResize="False"
x:Class="AdminFinanceRCA.Views.MovimientoWindow" x:Class="AdminFinanceRCA.Views.MovimientoWindow"
xmlns:vm="using:AdminFinanceRCA.ViewModels" xmlns:vm="using:AdminFinanceRCA.ViewModels"
@@ -28,6 +28,7 @@
<RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions> </Grid.RowDefinitions>
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="150"/> <ColumnDefinition Width="150"/>
@@ -69,20 +70,25 @@
</ComboBox.ItemTemplate> </ComboBox.ItemTemplate>
</ComboBox> </ComboBox>
<!-- Monto -->
<TextBlock Grid.Row="4" Grid.Column="0" Text="Monto:" VerticalAlignment="Center" Margin="0 5" FontSize="14"/>
<TextBox Grid.Row="4" Grid.Column="1" Margin="0 5" Width="70" HorizontalAlignment="Left" Height="35" Watermark="Ingrese el monto" Text="{Binding MontoDecimal, StringFormat='{}{0:0.00}'}" FontSize="14"/>
<!-- Fecha de Movimiento --> <!-- Fecha de Movimiento -->
<TextBlock Grid.Row="5" Grid.Column="0" Text="Fecha Movimiento:" VerticalAlignment="Center" Margin="0 5"/> <TextBlock Grid.Row="4" Grid.Column="0" Text="Fecha Movimiento:" VerticalAlignment="Center" Margin="0 5"/>
<DatePicker Grid.Row="5" Grid.Column="1" Margin="0 5" Height="35" SelectedDate="{Binding FechaMov}"/> <DatePicker Grid.Row="4" Grid.Column="1" Margin="0 5" Height="35" SelectedDate="{Binding FechaMov}"/>
<!-- Monto -->
<TextBlock Grid.Row="5" Grid.Column="0" Text="Monto:" VerticalAlignment="Center" Margin="0 5" FontSize="14"/>
<TextBox Grid.Row="5" Grid.Column="1" Margin="0 5" Width="70" HorizontalAlignment="Left" Height="35" Watermark="Ingrese el monto" Text="{Binding MontoDecimal, StringFormat='{}{0:0.00}'}" FontSize="14"/>
<!-- Descripción --> <!-- Descripción -->
<TextBlock Grid.Row="6" Grid.Column="0" Text="Descripción:" VerticalAlignment="Top" Margin="0 10 0 5"/> <TextBlock Grid.Row="6" Grid.Column="0" Text="Descripción:" VerticalAlignment="Top" Margin="0 10 0 5"/>
<TextBox Grid.Row="6" Grid.Column="1" Margin="0 5" Height="80" AcceptsReturn="True" TextWrapping="Wrap" Watermark="Ingrese una descripción opcional" Text="{Binding Descripcion}"/> <TextBox Grid.Row="6" Grid.Column="1" Margin="0 5" Height="40" AcceptsReturn="True" TextWrapping="Wrap" Watermark="Ingrese una descripción opcional" Text="{Binding Descripcion}"/>
<!-- Nota -->
<TextBlock Grid.Row="7" Grid.Column="0" Text="Nota:" VerticalAlignment="Top" Margin="0 10 0 5"/>
<TextBox Grid.Row="7" Grid.Column="1" Margin="0 5" Height="80" AcceptsReturn="True" TextWrapping="Wrap" Watermark="Ingrese una nota opcional" Text="{Binding Nota}"/>
<!-- Botones --> <!-- Botones -->
<StackPanel Grid.Row="7" Grid.ColumnSpan="2" Orientation="Horizontal" <StackPanel Grid.Row="8" Grid.ColumnSpan="2" Orientation="Horizontal"
HorizontalAlignment="Right" Margin="0 20 0 0"> HorizontalAlignment="Right" Margin="0 20 0 0">
<Button Content="Cancelar" Width="100" Height="35" Margin="0 0 10 0" <Button Content="Cancelar" Width="100" Height="35" Margin="0 0 10 0"
Background="#E74C3C" Foreground="White" Command="{Binding SalirCommand}" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/> Background="#E74C3C" Foreground="White" Command="{Binding SalirCommand}" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/>