primera parte de añadir lo de contratos
This commit is contained in:
@@ -1,6 +1,13 @@
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using AlquilaFacil.Config;
|
||||
using Modelo;
|
||||
|
||||
using Entidades.Dto;
|
||||
using Entidades;
|
||||
using Minio;
|
||||
using Minio.DataModel;
|
||||
using Minio.DataModel.Args;
|
||||
using Minio.Exceptions;
|
||||
using System.Text.Json;
|
||||
|
||||
[ApiController]
|
||||
public class CargarContratoAdminController: ControllerBase{
|
||||
@@ -42,4 +49,233 @@ public class CargarContratoAdminController: ControllerBase{
|
||||
var propiedades = RepositorioPropiedades.Singleton.ObtenerPropiedadEnAlquilerPorDni(dnipropietario);
|
||||
return Ok(propiedades);
|
||||
}
|
||||
|
||||
[HttpPost("api/admin/contrato/carga")]
|
||||
public async Task<IActionResult> CargaContrato([FromHeader(Name="Auth")]string Auth) {
|
||||
var cli = RepositorioUsuarios.Singleton.ObtenerClientePorToken(Auth);
|
||||
if (cli == null) return BadRequest(new { message = "No hay usuario por ese token"});
|
||||
|
||||
var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 20);
|
||||
if (validacion1 == false) return Unauthorized();
|
||||
|
||||
if (!Request.HasFormContentType)
|
||||
{
|
||||
return BadRequest(new { message = "La solicitud debe contener datos de formulario (FormData)." });
|
||||
}
|
||||
|
||||
var formData = await Request.ReadFormAsync();
|
||||
if (formData == null)
|
||||
{
|
||||
return BadRequest(new { message = "No se pudieron leer los datos del formulario." });
|
||||
}
|
||||
|
||||
var archivoContrato = Request.Form.Files.FirstOrDefault(x=>x.FileName =="archivoContrato");
|
||||
if (archivoContrato == null) return BadRequest(new { message = "Falto Subir el archivo" });
|
||||
|
||||
if (archivoContrato.ContentType != "application/pdf")
|
||||
{
|
||||
return BadRequest(new { message = "El archivo debe ser un PDF." });
|
||||
}
|
||||
|
||||
Contrato? cont; ActionResult? req;
|
||||
|
||||
(cont, req) = ParseContratoFromForm(formData);
|
||||
if (req != null && cont == null) return req;
|
||||
|
||||
var ret = RepositorioContratos.Singleton.AdminCargaContrato(cont, cli.Dni);
|
||||
|
||||
//WIP
|
||||
//Falta Carga del archivo a minio
|
||||
//Falta añadir la url al contrato
|
||||
//Falta generar canones
|
||||
//Falta mandar notificaciones
|
||||
|
||||
|
||||
}
|
||||
|
||||
private (Contrato? contratoDto, IActionResult? errorResult) ParseContratoFromForm(IFormCollection formData) {
|
||||
if (formData == null) {
|
||||
return (null, BadRequest(new { message = "No se pudieron leer los datos del formulario." }));
|
||||
}
|
||||
|
||||
bool TryParseInt(string? value, out int result) => int.TryParse(value, out result);
|
||||
bool TryParseLong(string? value, out long result) => long.TryParse(value, out result);
|
||||
bool TryParseDecimal(string? value, out decimal result) => decimal.TryParse(value, out result);
|
||||
bool TryParseBool(string? value, out bool result) => bool.TryParse(value, out result);
|
||||
|
||||
int cantGarantMin = 0;
|
||||
if (formData.TryGetValue("cantgarantemin", out var cantGarantMinValues) &&
|
||||
!string.IsNullOrEmpty(cantGarantMinValues.FirstOrDefault()) &&
|
||||
!TryParseInt(cantGarantMinValues.FirstOrDefault(), out cantGarantMin)) {
|
||||
return (null, BadRequest(new { message = "Campo 'cantgarantemin' inválido." }));
|
||||
}
|
||||
if (cantGarantMin<1) return (null, BadRequest(new { message = "Minimo 1 garante" }));
|
||||
|
||||
if (!formData.TryGetValue("dniinquilino", out var dniInqValues) ||
|
||||
string.IsNullOrEmpty(dniInqValues.FirstOrDefault()) ||
|
||||
!TryParseLong(dniInqValues.FirstOrDefault(), out long dniInquilino)) {
|
||||
return (null, BadRequest(new { message = "Campo 'dniinquilino' inválido o faltante." }));
|
||||
}
|
||||
if (dniInquilino<=0) return (null, BadRequest(new { message = "No pueden haber dni 0 o menor" }));
|
||||
|
||||
if (!formData.TryGetValue("dnipropietario", out var dniPropValues) ||
|
||||
string.IsNullOrEmpty(dniPropValues.FirstOrDefault()) ||
|
||||
!TryParseLong(dniPropValues.FirstOrDefault(), out long dniPropietario)) {
|
||||
return (null, BadRequest(new { message = "Campo 'dnipropietario' inválido o faltante." }));
|
||||
}
|
||||
if (dniPropietario<=0) return (null, BadRequest(new { message = "No pueden haber dni 0 o menor" }));
|
||||
|
||||
if (!formData.TryGetValue("iddivisa", out var idDivisaValues) ||
|
||||
string.IsNullOrEmpty(idDivisaValues.FirstOrDefault()) ||
|
||||
!TryParseInt(idDivisaValues.FirstOrDefault(), out int idDivisa)) {
|
||||
return (null, BadRequest(new { message = "Campo 'iddivisa' inválido o faltante." }));
|
||||
}
|
||||
|
||||
if (!formData.TryGetValue("idpropiedad", out var idPropValues) ||
|
||||
string.IsNullOrEmpty(idPropValues.FirstOrDefault()) ||
|
||||
!TryParseInt(idPropValues.FirstOrDefault(), out int idPropiedad)) {
|
||||
return (null, BadRequest(new { message = "Campo 'idpropiedad' inválido o faltante." }));
|
||||
}
|
||||
|
||||
if (!formData.TryGetValue("mesesDurationContrato", out var mesesDurValues) ||
|
||||
string.IsNullOrEmpty(mesesDurValues.FirstOrDefault()) ||
|
||||
!TryParseInt(mesesDurValues.FirstOrDefault(), out int mesesDuration)) {
|
||||
return (null, BadRequest(new { message = "Campo 'mesesDurationContrato' inválido o faltante." }));
|
||||
}
|
||||
|
||||
if (mesesDuration <= 0){
|
||||
return (null, BadRequest(new { message = "No se cargaron los meses de duracion del contrato" }));
|
||||
}
|
||||
|
||||
int mesesHastaAumento = 0;
|
||||
if (formData.TryGetValue("mesesHastaAumento", out var mesesHastaValues) &&
|
||||
!string.IsNullOrEmpty(mesesHastaValues.FirstOrDefault())) {
|
||||
if (!TryParseInt(mesesHastaValues.FirstOrDefault(), out mesesHastaAumento))
|
||||
{
|
||||
return (null, BadRequest(new { message = "Campo 'mesesHastaAumento' inválido." }));
|
||||
}
|
||||
}
|
||||
|
||||
if (mesesHastaAumento <= 0){
|
||||
return (null, BadRequest(new { message = "No se cargaron los meses hasta el aumento" }));
|
||||
}
|
||||
|
||||
if (!formData.TryGetValue("monto", out var montoValues) ||
|
||||
string.IsNullOrEmpty(montoValues.FirstOrDefault()) ||
|
||||
!TryParseDecimal(montoValues.FirstOrDefault(), out decimal monto)) {
|
||||
return (null, BadRequest(new { message = "Campo 'monto' inválido o faltante." }));
|
||||
}
|
||||
|
||||
if (monto <= 0.0m){
|
||||
return (null, BadRequest(new { message = "No se cargo el monto de alquiler" }));
|
||||
}
|
||||
|
||||
bool tieneOpcionVenta = false;
|
||||
if (formData.TryGetValue("tieneopcionventa", out var tieneOpcionValues) &&
|
||||
!string.IsNullOrEmpty(tieneOpcionValues.FirstOrDefault())) {
|
||||
if (!TryParseBool(tieneOpcionValues.FirstOrDefault(), out tieneOpcionVenta)) {
|
||||
return (null, BadRequest(new { message = "Campo 'tieneopcionventa' inválido." }));
|
||||
}
|
||||
}
|
||||
|
||||
int divisaOpcionVenta = 0;
|
||||
decimal montoOpcionVenta = 0m;
|
||||
|
||||
if (tieneOpcionVenta) {
|
||||
if (formData.TryGetValue("divisaOpcionVenta", out var divisaOpcValues) &&
|
||||
!string.IsNullOrEmpty(divisaOpcValues.FirstOrDefault())) {
|
||||
if (!TryParseInt(divisaOpcValues.FirstOrDefault(), out int divisaOpcParsed)) {
|
||||
return (null, BadRequest(new { message = "Campo 'divisaOpcionVenta' inválido." }));
|
||||
}
|
||||
divisaOpcionVenta = divisaOpcParsed;
|
||||
}
|
||||
|
||||
if (formData.TryGetValue("montoOpcionVenta", out var montoOpcValues) &&
|
||||
!string.IsNullOrEmpty(montoOpcValues.FirstOrDefault())) {
|
||||
if (!TryParseDecimal(montoOpcValues.FirstOrDefault(), out decimal montoOpcParsed)) {
|
||||
return (null, BadRequest(new { message = "Campo 'montoOpcionVenta' inválido." }));
|
||||
}
|
||||
montoOpcionVenta = montoOpcParsed;
|
||||
}
|
||||
}
|
||||
|
||||
if (montoOpcionVenta <= 0.0m){
|
||||
return (null, BadRequest(new { message = "No se cargo el monto de la opcion de venta" }));
|
||||
}
|
||||
|
||||
var cont = new Contrato{
|
||||
Cancelado=0,
|
||||
Habilitado=1,
|
||||
Cantgarantemin=cantGarantMin,
|
||||
Dniinquilino=dniInquilino,
|
||||
Dnipropietario=dniPropietario,
|
||||
Fechainicio=DateTime.Now,
|
||||
Iddivisa=idDivisa,
|
||||
Idpropiedad=idPropiedad,
|
||||
Monto=monto,
|
||||
MesesDurationContrato = mesesDuration,
|
||||
MesesHastaAumento=mesesHastaAumento,
|
||||
|
||||
Idgarantes = ParseGarantes(formData),
|
||||
|
||||
Tieneopcionventa=tieneOpcionVenta?1ul:0ul,
|
||||
|
||||
|
||||
};
|
||||
|
||||
if(cont.Tieneopcionventa==1ul){
|
||||
cont.IdventaNavigation = new Venta{
|
||||
Idestado = 1,
|
||||
Monto= montoOpcionVenta,
|
||||
Iddivisa = divisaOpcionVenta
|
||||
};
|
||||
}
|
||||
|
||||
return (cont, null);
|
||||
}
|
||||
|
||||
private Garante[] ParseGarantes(IFormCollection formData) {
|
||||
var garantes = new List<Garante>();
|
||||
|
||||
var garanteKeys = formData.Keys.Where(k => k.StartsWith("garantes[")).ToList();
|
||||
var garanteCount = garanteKeys.Count / 6;
|
||||
|
||||
for (int i = 0; i < garanteCount; i++) {
|
||||
var dni = formData.TryGetValue($"garantes[{i}].dni", out var dniValue) ? dniValue.ToString() ?? "" : "";
|
||||
var nombre = formData.TryGetValue($"garantes[{i}].nombre", out var nombreValue) ? nombreValue.ToString() ?? "" : "";
|
||||
var apellido = formData.TryGetValue($"garantes[{i}].apellido", out var apellidoValue) ? apellidoValue.ToString() ?? "" : "";
|
||||
var domicilio = formData.TryGetValue($"garantes[{i}].domicilio", out var domicilioValue) ? domicilioValue.ToString() ?? "" : "";
|
||||
var celular = formData.TryGetValue($"garantes[{i}].celular", out var celularValue) ? celularValue.ToString() ?? "" : "";
|
||||
var domicilioLaboral = formData.TryGetValue($"garantes[{i}].domicilioLaboral", out var domLaboralValue) ? domLaboralValue.ToString() ?? "" : "";
|
||||
|
||||
var garante = new Garante{
|
||||
Dni = dni,
|
||||
Nombre = nombre,
|
||||
Apellido = apellido,
|
||||
Domicilio = domicilio,
|
||||
Celular = celular,
|
||||
Domiciliolaboral = domicilioLaboral
|
||||
};
|
||||
garantes.Add(garante);
|
||||
}
|
||||
|
||||
return garantes.ToArray();
|
||||
}
|
||||
|
||||
|
||||
private readonly IMinioClient mc;
|
||||
public CargarContratoAdminController(IMinioClient minioClient)
|
||||
{
|
||||
mc = minioClient;
|
||||
if (mc == null)
|
||||
{
|
||||
MinioConfigcus? mcon = JsonSerializer.Deserialize<MinioConfigcus>(System.IO.File.ReadAllText("./settings.json")) ?? null;
|
||||
if (mcon == null) throw new Exception();
|
||||
|
||||
mc = new MinioClient().WithCredentials(mcon.usr, mcon.scrt)
|
||||
.WithEndpoint("0.0.0.0:9000")
|
||||
.WithSSL(false)
|
||||
.Build();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,8 +11,6 @@
|
||||
dnipropietario: 0n,
|
||||
iddivisa: 0,
|
||||
idpropiedad: 0,
|
||||
idventa: 0n,
|
||||
indiceactualizacion: 0,
|
||||
mesesDurationContrato: 0,
|
||||
mesesHastaAumento: 0,
|
||||
monto: 0,
|
||||
@@ -137,8 +135,6 @@
|
||||
formData.append('dnipropietario', contrato.dnipropietario.toString());
|
||||
formData.append('iddivisa', contrato.iddivisa.toString());
|
||||
formData.append('idpropiedad', contrato.idpropiedad.toString());
|
||||
formData.append('idventa', contrato.idventa.toString());
|
||||
formData.append('indiceactualizacion', contrato.indiceactualizacion.toString());
|
||||
formData.append('mesesDurationContrato', contrato.mesesDurationContrato.toString());
|
||||
formData.append('mesesHastaAumento', contrato.mesesHastaAumento.toString());
|
||||
formData.append('monto', contrato.monto.toString());
|
||||
@@ -180,8 +176,6 @@
|
||||
dnipropietario: 0n,
|
||||
iddivisa: 0,
|
||||
idpropiedad: 0,
|
||||
idventa: 0n,
|
||||
indiceactualizacion: 0,
|
||||
mesesDurationContrato: 0,
|
||||
mesesHastaAumento: 0,
|
||||
monto: 0,
|
||||
@@ -323,20 +317,6 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="indiceactualizacion" class="col-sm-3 col-form-label">Índice de Actualización</label>
|
||||
<div class="col-sm-9">
|
||||
<input
|
||||
type="number"
|
||||
step="0.01"
|
||||
min="0"
|
||||
class="form-control"
|
||||
id="indiceactualizacion"
|
||||
bind:value={contrato.indiceactualizacion}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="cantgarantemin" class="col-sm-3 col-form-label">Cantidad Garantes Mínimos</label>
|
||||
<div class="col-sm-9">
|
||||
|
||||
@@ -4,6 +4,29 @@ using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace Modelo;
|
||||
public class RepositorioContratos: RepositorioBase<RepositorioContratos> {
|
||||
|
||||
|
||||
public bool AdminCargaContrato(Contrato? cont, long dni){
|
||||
if (cont == null) return false;
|
||||
|
||||
var con = Context;
|
||||
|
||||
cont.Id = (con.Contratos.Any() ? con.Contratos.Max(x => x.Id) : 0) + 1;
|
||||
|
||||
if (cont.IdventaNavigation != null){
|
||||
cont.IdventaNavigation.Id = (con.Ventas.Any()?con.Ventas.Count():0)+1;
|
||||
con.Ventas.Add(cont.IdventaNavigation);
|
||||
}
|
||||
|
||||
var prop = con.Propiedades.FirstOrDefault(x=>x.Id == cont.Idpropiedad);
|
||||
if (prop == null)return false;
|
||||
|
||||
prop.Idestado = 2;
|
||||
con.Contratos.Add(cont);
|
||||
GenerarLog(con, dni, "Carga del contrato por parte de admin");
|
||||
return Guardar(con);
|
||||
}
|
||||
|
||||
public IQueryable<Contrato>? ObtenerContratosPorEmailInquilino(string email) {
|
||||
var con = Context;
|
||||
try{
|
||||
|
||||
Reference in New Issue
Block a user