Agregar mantenimiento de Concepto y TipoMovimiento
This commit is contained in:
2
.idea/.idea.AdminFinanceRCA/.idea/avalonia.xml
generated
2
.idea/.idea.AdminFinanceRCA/.idea/avalonia.xml
generated
@@ -5,7 +5,9 @@
|
||||
<map>
|
||||
<entry key="AdminFinanceRCA/App.axaml" value="AdminFinanceRCA/AdminFinanceRCA.csproj" />
|
||||
<entry key="AdminFinanceRCA/Views/MainWindow.axaml" value="AdminFinanceRCA/AdminFinanceRCA.csproj" />
|
||||
<entry key="AdminFinanceRCA/Views/Mantenimiento_Concepto.axaml" value="AdminFinanceRCA/AdminFinanceRCA.csproj" />
|
||||
<entry key="AdminFinanceRCA/Views/Mantenimiento_DepartTrabajo.axaml" value="AdminFinanceRCA/AdminFinanceRCA.csproj" />
|
||||
<entry key="AdminFinanceRCA/Views/Mantenimiento_TipoMovimiento.axaml" value="AdminFinanceRCA/AdminFinanceRCA.csproj" />
|
||||
<entry key="AdminFinanceRCA/Views/MovimientoWindow.axaml" value="AdminFinanceRCA/AdminFinanceRCA.csproj" />
|
||||
</map>
|
||||
</option>
|
||||
|
||||
@@ -38,4 +38,15 @@
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Update="Views\Mantenimiento_Concepto.axaml.cs">
|
||||
<DependentUpon>Mantenimiento_Concepto.axaml</DependentUpon>
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Update="Views\Mantenimiento_TipoMovimiento.axaml.cs">
|
||||
<DependentUpon>Mantenimiento_TipoMovimiento.axaml</DependentUpon>
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
||||
@@ -180,6 +180,19 @@ public class FinanzasRepository
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<bool> 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<bool> 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
|
||||
|
||||
@@ -38,6 +38,28 @@ public partial class MainWindowViewModel : ViewModelBase
|
||||
};
|
||||
departTrabajo.ShowDialog(GetCurrentWindow<MainWindow>());
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
public void AgregarConcepto()
|
||||
{
|
||||
Mantenimiento_ConceptoViewModel mantenimiento = new Mantenimiento_ConceptoViewModel();
|
||||
Mantenimiento_Concepto conceptoWindow = new Mantenimiento_Concepto()
|
||||
{
|
||||
DataContext = mantenimiento
|
||||
};
|
||||
conceptoWindow.ShowDialog(GetCurrentWindow<MainWindow>());
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
public void AgregarTipoMovimiento()
|
||||
{
|
||||
Mantenimiento_TipoMovViewModel mantenimiento = new Mantenimiento_TipoMovViewModel();
|
||||
Mantenimiento_TipoMovimiento conceptoWindow = new Mantenimiento_TipoMovimiento()
|
||||
{
|
||||
DataContext = mantenimiento
|
||||
};
|
||||
conceptoWindow.ShowDialog(GetCurrentWindow<MainWindow>());
|
||||
}
|
||||
|
||||
[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<MainWindow>());
|
||||
}
|
||||
|
||||
|
||||
private async void MwvmOnReloadEvent(object? sender, EventArgs e)
|
||||
{
|
||||
|
||||
@@ -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<Concepto> _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<Concepto>(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<Mantenimiento_Concepto>());
|
||||
OnReloadEvent();
|
||||
await CargarDatosAsync();
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void Cancelar()
|
||||
{
|
||||
this.GetCurrentWindow<Mantenimiento_Concepto>().Close();
|
||||
}
|
||||
|
||||
protected virtual void OnReloadEvent()
|
||||
{
|
||||
ReloadEvent?.Invoke(this, EventArgs.Empty);
|
||||
}
|
||||
}
|
||||
97
AdminFinanceRCA/ViewModels/Mantenimiento_TipoMovViewModel.cs
Normal file
97
AdminFinanceRCA/ViewModels/Mantenimiento_TipoMovViewModel.cs
Normal file
@@ -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<TipoMovimiento> _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<TipoMovimiento>(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<Mantenimiento_TipoMovimiento>());
|
||||
OnReloadEvent();
|
||||
await CargarDatosAsync();
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void Cancelar()
|
||||
{
|
||||
this.GetCurrentWindow<Mantenimiento_TipoMovimiento>().Close();
|
||||
}
|
||||
|
||||
protected virtual void OnReloadEvent()
|
||||
{
|
||||
ReloadEvent?.Invoke(this, EventArgs.Empty);
|
||||
}
|
||||
}
|
||||
@@ -30,8 +30,8 @@
|
||||
<!-- Menú Herramientas -->
|
||||
<MenuItem Header="Herramientas">
|
||||
<MenuItem Header="Departamentos" Command="{Binding AgregarDepartamentoCommand}" />
|
||||
<MenuItem Header="Tipos de Movimiento" />
|
||||
<MenuItem Header="Conceptos"/>
|
||||
<MenuItem Header="Tipos de Movimiento" Command="{Binding AgregarTipoMovimientoCommand}" />
|
||||
<MenuItem Header="Conceptos" Command="{Binding AgregarConceptoCommand}"/>
|
||||
</MenuItem>
|
||||
</Menu>
|
||||
|
||||
|
||||
55
AdminFinanceRCA/Views/Mantenimiento_Concepto.axaml
Normal file
55
AdminFinanceRCA/Views/Mantenimiento_Concepto.axaml
Normal file
@@ -0,0 +1,55 @@
|
||||
<Window xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:vm="using:AdminFinanceRCA.ViewModels"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="350" CanResize="False"
|
||||
Width="800" Height="350"
|
||||
WindowStartupLocation="CenterScreen"
|
||||
x:DataType="vm:Mantenimiento_ConceptoViewModel"
|
||||
x:Class="AdminFinanceRCA.Views.Mantenimiento_Concepto"
|
||||
Title="Mantenimiento de Concepto">
|
||||
|
||||
<Design.DataContext>
|
||||
<vm:Mantenimiento_ConceptoViewModel/>
|
||||
</Design.DataContext>
|
||||
|
||||
<DockPanel Margin="10">
|
||||
<!-- Barra de herramientas -->
|
||||
<StackPanel DockPanel.Dock="Top" Orientation="Horizontal" Margin="0,0,0,10" Spacing="5">
|
||||
<Button Content="Nuevo" Background="DarkBlue" Foreground="White" HorizontalContentAlignment="Center" Width="90" Command="{Binding NuevoConceptoCommand}" />
|
||||
<Button Content="Guardar" Background="DarkGreen" Foreground="White" HorizontalContentAlignment="Center" Width="90" Command="{Binding GuardarRegistrosCommand}"/>
|
||||
<Button Content="Cancelar" Background="DarkRed" Foreground="White" HorizontalContentAlignment="Center" Width="90" Command="{Binding CancelarCommand}" />
|
||||
</StackPanel>
|
||||
|
||||
<Grid ColumnDefinitions="*,2*" Margin="0,10,0,0" ShowGridLines="False">
|
||||
<!-- Lista de grupos -->
|
||||
<StackPanel Grid.Column="0" Margin="0,0,10,0">
|
||||
<TextBlock Text="Conceptos" FontWeight="Bold" Margin="0,0,0,5"/>
|
||||
<ListBox ItemsSource="{Binding Conceptos}" DoubleTapped="OnListBoxDoubleTapped"
|
||||
Height="250">
|
||||
|
||||
<ListBox.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<StackPanel Orientation="Vertical" Margin="5">
|
||||
<TextBlock Text="{Binding Nombre}" VerticalAlignment="Center" />
|
||||
</StackPanel>
|
||||
</DataTemplate>
|
||||
</ListBox.ItemTemplate>
|
||||
</ListBox>
|
||||
</StackPanel>
|
||||
|
||||
<!-- Formulario de edición -->
|
||||
<Border Grid.Column="1" Margin="0 0 0 0" BorderBrush="LightGray" BorderThickness="3" Padding="10" Height="250" Width="500">
|
||||
<StackPanel Spacing="10">
|
||||
<TextBlock Text="Editar Concepto" FontSize="16" FontWeight="Bold"/>
|
||||
|
||||
<StackPanel>
|
||||
<TextBlock Text="Nombre *" Margin="0,0,0,2"/>
|
||||
<TextBox Watermark="Ingrese el nombre" Text="{Binding Nombre}"/>
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
</Grid>
|
||||
</DockPanel>
|
||||
</Window>
|
||||
29
AdminFinanceRCA/Views/Mantenimiento_Concepto.axaml.cs
Normal file
29
AdminFinanceRCA/Views/Mantenimiento_Concepto.axaml.cs
Normal file
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
55
AdminFinanceRCA/Views/Mantenimiento_TipoMovimiento.axaml
Normal file
55
AdminFinanceRCA/Views/Mantenimiento_TipoMovimiento.axaml
Normal file
@@ -0,0 +1,55 @@
|
||||
<Window xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:vm="using:AdminFinanceRCA.ViewModels"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="350" CanResize="False"
|
||||
Width="800" Height="350"
|
||||
WindowStartupLocation="CenterScreen"
|
||||
x:DataType="vm:Mantenimiento_TipoMovViewModel"
|
||||
x:Class="AdminFinanceRCA.Views.Mantenimiento_TipoMovimiento"
|
||||
Title="Mantenimiento de Tipo de Movimiento">
|
||||
|
||||
<Design.DataContext>
|
||||
<vm:Mantenimiento_TipoMovViewModel/>
|
||||
</Design.DataContext>
|
||||
|
||||
<DockPanel Margin="10">
|
||||
<!-- Barra de herramientas -->
|
||||
<StackPanel DockPanel.Dock="Top" Orientation="Horizontal" Margin="0,0,0,10" Spacing="5">
|
||||
<Button Content="Nuevo" Background="DarkBlue" Foreground="White" HorizontalContentAlignment="Center" Width="90" Command="{Binding NuevoTipoMovCommand}" />
|
||||
<Button Content="Guardar" Background="DarkGreen" Foreground="White" HorizontalContentAlignment="Center" Width="90" Command="{Binding GuardarRegistrosCommand}"/>
|
||||
<Button Content="Cancelar" Background="DarkRed" Foreground="White" HorizontalContentAlignment="Center" Width="90" Command="{Binding CancelarCommand}" />
|
||||
</StackPanel>
|
||||
|
||||
<Grid ColumnDefinitions="*,2*" Margin="0,10,0,0" ShowGridLines="False">
|
||||
<!-- Lista de grupos -->
|
||||
<StackPanel Grid.Column="0" Margin="0,0,10,0">
|
||||
<TextBlock Text="Tipo de Movimientos" FontWeight="Bold" Margin="0,0,0,5"/>
|
||||
<ListBox ItemsSource="{Binding TipoMovimientos}" DoubleTapped="OnListBoxDoubleTapped"
|
||||
Height="250">
|
||||
|
||||
<ListBox.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<StackPanel Orientation="Vertical" Margin="5">
|
||||
<TextBlock Text="{Binding Nombre}" VerticalAlignment="Center" />
|
||||
</StackPanel>
|
||||
</DataTemplate>
|
||||
</ListBox.ItemTemplate>
|
||||
</ListBox>
|
||||
</StackPanel>
|
||||
|
||||
<!-- Formulario de edición -->
|
||||
<Border Grid.Column="1" Margin="0 0 0 0" BorderBrush="LightGray" BorderThickness="3" Padding="10" Height="250" Width="500">
|
||||
<StackPanel Spacing="10">
|
||||
<TextBlock Text="Editar Tipo de Movimiento" FontSize="16" FontWeight="Bold"/>
|
||||
|
||||
<StackPanel>
|
||||
<TextBlock Text="Nombre *" Margin="0,0,0,2"/>
|
||||
<TextBox Watermark="Ingrese el nombre" Text="{Binding Nombre}"/>
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
</Grid>
|
||||
</DockPanel>
|
||||
</Window>
|
||||
27
AdminFinanceRCA/Views/Mantenimiento_TipoMovimiento.axaml.cs
Normal file
27
AdminFinanceRCA/Views/Mantenimiento_TipoMovimiento.axaml.cs
Normal file
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user