Leandro Hernan Rojas bba48a7e28
All checks were successful
CI/CD Pipeline / Build and Deploy with Docker Compose (push) Successful in 10m52s
Update UI y API Vendedores y Mapeo de Quote
2025-04-28 14:38:00 -03:00

168 lines
5.8 KiB
Plaintext

@page "/sales/personform"
@page "/sales/personform/{PersonId:int}"
@using System.ComponentModel.DataAnnotations
@using phronCare.UIBlazor.Pages.Shared.Modals
@using phronCare.UIBlazor.Services.Sales
@inject IModalService Modal
@inject IToastService toastService
@inject PeopleService peopleService
@inject NavigationManager Navigation
@inject BusinessUnitService businessUnitService
<div class="card" style="zoom:80%">
<div class="card-header d-flex justify-content-center align-items-center">
<h3 class="card-title m-0">Información de la Persona</h3>
</div>
<div class="card-body">
<EditForm Model="@person" OnValidSubmit="@HandleValidSubmit">
<DataAnnotationsValidator />
<ValidationSummary />
<div class="row">
<div class="col-md-6">
<label for="Name">Nombre completo:</label>
<InputText id="Name" @bind-Value="person.Name" class="form-control" />
</div>
<div class="col-md-6">
<label for="Phone">Teléfono:</label>
<InputText id="Phone" @bind-Value="person.Phone" class="form-control" />
</div>
</div>
<div class="row">
<div class="col-md-6">
<label for="Email">Email:</label>
<InputText id="Email" @bind-Value="person.Email" class="form-control" />
</div>
<div class="col-md-6">
<label for="DefaultCommissionPercent">Porcentaje Comisión (%):</label>
<InputNumber id="DefaultCommissionPercent" @bind-Value="person.DefaultCommissionPercent" class="form-control" step="0.01" />
</div>
</div>
<div class="row">
<div class="col-md-6">
<label for="BusinessunitsId">Unidad de Negocio:</label>
<InputSelect id="BusinessunitsId" @bind-Value="person.BusinessunitsId" class="form-control">
<option value="">-- Seleccionar --</option>
@foreach (var unit in businessUnits)
{
<option value="@unit.Id">@unit.Description</option>
}
</InputSelect>
</div>
<div class="col-md-6">
<label for="PeoplegroupsId">Grupo Comercial (opcional):</label>
<InputSelect id="PeoplegroupsId" @bind-Value="person.PeoplegroupsId" class="form-control">
<option value="">-- Seleccionar --</option>
@foreach (var group in peopleGroups)
{
<option value="@group.Id">@group.Name</option>
}
</InputSelect>
</div>
</div>
<div class="row mt-3">
<div class="col-md-6 d-flex align-items-center justify-content-start">
<div class="form-check form-switch">
<InputCheckbox id="Active" @bind-Value="person.Active" class="form-check-input" />
<label class="form-check-label ms-2" for="Active">Activo</label>
</div>
</div>
</div>
</EditForm>
</div>
<div class="card-footer">
<div class="d-flex justify-content-end align-items-center py-3">
<button class="btn btn-primary me-2" type="button" @onclick="HandleValidSubmit" disabled="@isSaving">
@(isSaving ? "Guardando..." : "Guardar Persona")
</button>
<button type="button" class="btn btn-secondary" @onclick="Cancel">Cancelar</button>
</div>
</div>
</div>
@code {
[Parameter]
public int? PersonId { get; set; }
private EPerson person { get; set; } = new();
private bool isSaving = false;
private string returnUrl = "/sales/people";
private List<EBusinessUnit> businessUnits = new();
private List<EPeopleGroup> peopleGroups = new();
protected override async Task OnInitializedAsync()
{
await LoadBusinessUnits();
await LoadPeopleGroups();
if (PersonId.HasValue)
{
person = await peopleService.GetPersonByIdAsync(PersonId.Value) ?? new();
}
}
private async Task HandleValidSubmit()
{
var parameters = new ModalParameters();
parameters.Add("Message", "¿Desea guardar los cambios de la persona?");
var modal = Modal.Show<ConfirmModal>("Confirmación", parameters);
var result = await modal.Result;
if (result.Cancelled)
return;
try
{
isSaving = true;
if (PersonId.HasValue)
{
await peopleService.UpdatePersonAsync(person);
}
else
{
await peopleService.CreatePersonAsync(person);
}
toastService.ShowSuccess("Persona guardada exitosamente.");
Navigation.NavigateTo(returnUrl);
}
catch (Exception ex)
{
toastService.ShowError($"Error: {ex.Message}");
}
finally
{
isSaving = false;
}
}
private void Cancel()
{
Navigation.NavigateTo(returnUrl);
}
private async Task LoadBusinessUnits()
{
businessUnits = await businessUnitService.GetAllAsync();
}
private async Task LoadPeopleGroups()
{
// Simulamos carga de Grupos Comerciales. Debería venir de un servicio real.
peopleGroups = new List<EPeopleGroup>
{
new EPeopleGroup { Id = 1, Name = "Grupo 1" },
new EPeopleGroup { Id = 2, Name = "Grupo 2" },
};
}
}