public IActionResult PUT([FromBody] ContratoEditDto contrato, int id)
        {
            if (contrato.Id != id)
            {
                return(BadRequest(ModelState));
            }
            var c = context.Contratos.FirstOrDefault(s => s.Id == id);

            c.Id               = contrato.Id;
            c.Nombre           = contrato.Nombre;
            c.Tipo             = contrato.Tipo;
            c.AdminContratoId  = contrato.AdminContrato;
            c.EntidadId        = contrato.Entidad.Id;
            c.ObjetoDeContrato = contrato.ObjetoDeContrato;
            c.Numero           = contrato.Numero;
            c.TerminoDePago    = contrato.TerminoDePago;

            if (contrato.FechaDeRecepcion != null)
            {
                c.FechaDeRecepcion = contrato.FechaDeRecepcion;
            }
            else
            {
                c.FechaDeRecepcion = DateTime.Now;
            }
            if (contrato.FechaDeVenOferta != null)
            {
                c.FechaDeVenOferta = contrato.FechaDeVenOferta;
            }
            else
            {
                c.FechaDeVenOferta = DateTime.Now.AddDays(20);
            }
            context.Entry(c).State = EntityState.Modified;

            //   Agregar monto por monedas
            if (contrato.Montos != null)
            {
                var montos = context.Montos.Where(s => s.ContratoId == contrato.Id);
                foreach (var item in montos)
                {
                    context.Montos.Remove(item);
                }
                foreach (var item in contrato.Montos)
                {
                    var monto = new Monto {
                        Cantidad   = item.Cantidad,
                        Moneda     = item.Moneda,
                        ContratoId = contrato.Id
                    };
                    context.Montos.Add(monto);
                    context.SaveChanges();
                }
            }

            if (contrato.FormasDePago != null)
            {
                var formasDePago = context.ContratoId_FormaPagoId.Where(s => s.ContratoId == contrato.Id);
                foreach (var item in formasDePago)
                {
                    context.ContratoId_FormaPagoId.Remove(item);
                }
            }
            foreach (var item in contrato.FormasDePago)
            {
                var contratoId_FormaPagoId = new ContratoId_FormaPagoId {
                    ContratoId  = contrato.Id,
                    FormaDePago = item
                };
                context.ContratoId_FormaPagoId.Add(contratoId_FormaPagoId);
                context.SaveChanges();
            }

            // Agregar Departamentos del contrato
            if (contrato.Departamentos != null)
            {
                var departamentos = context.ContratoId_DepartamentoId.Where(s => s.ContratoId == contrato.Id);
                foreach (var item in departamentos)
                {
                    context.ContratoId_DepartamentoId.Remove(item);
                }
                foreach (var item in contrato.Departamentos)
                {
                    var contratoId_DepartamentoId = new ContratoId_DepartamentoId {
                        ContratoId     = contrato.Id,
                        DepartamentoId = item.Id
                    };
                    context.ContratoId_DepartamentoId.Add(contratoId_DepartamentoId);
                    context.SaveChanges();
                }
            }
            else
            {
                return(BadRequest($"Tienen que dictaminar el contrato el económico y el jurídico"));
            }

            //Agregar Especialistas externos como Dictaminador/es del contrato
            if (contrato.EspecialistasExternos != null)
            {
                var espExternos = context.EspExternoId_ContratoId.Where(s => s.ContratoId == contrato.Id);
                foreach (var item in espExternos)
                {
                    context.EspExternoId_ContratoId.Remove(item);
                }
                foreach (var item in contrato.EspecialistasExternos)
                {
                    var espExternoId_ContratoId = new EspExternoId_ContratoId {
                        ContratoId            = contrato.Id,
                        EspecialistaExternoId = item.Id
                    };
                    context.EspExternoId_ContratoId.Add(espExternoId_ContratoId);
                    context.SaveChanges();
                }
            }
            var HistoricoEstadoContrato = new HistoricoEstadoContrato {
                ContratoId = contrato.Id,
                Estado     = contrato.Estado,
                Fecha      = DateTime.Now,
                Usuario    = contrato.Usuario,
            };

            context.Add(HistoricoEstadoContrato);
            context.SaveChanges();
            return(Ok());
        }
        public async Task <IActionResult> POST(ContratoDto contratoDto)
        {
            if (ModelState.IsValid)
            {
                var contrato = new Contrato {
                    Id               = contratoDto.Id,
                    Nombre           = contratoDto.Nombre,
                    Tipo             = contratoDto.Tipo,
                    AdminContratoId  = contratoDto.AdminContrato,
                    EntidadId        = contratoDto.Entidad,
                    ObjetoDeContrato = contratoDto.ObjetoDeContrato,
                    Numero           = contratoDto.Numero,
                    TerminoDePago    = contratoDto.TerminoDePago,
                    Cliente          = contratoDto.Cliente,
                    Estado           = Estado.Circulando
                };
                if (contratoDto.FechaDeRecepcion != null)
                {
                    contrato.FechaDeRecepcion = contratoDto.FechaDeRecepcion;
                }
                else
                {
                    contrato.FechaDeRecepcion = DateTime.Now;
                }
                if (contratoDto.FechaDeVenOferta != null)
                {
                    contrato.FechaDeVenOferta = contratoDto.FechaDeVenOferta;
                }
                else
                {
                    contrato.FechaDeVenOferta = DateTime.Now.AddDays(20);
                }
                context.Contratos.Add(contrato);
                context.SaveChanges();

                if (contratoDto.Montos != null)
                {
                    foreach (var item in contratoDto.Montos)
                    {
                        var monto = new Monto {
                            Cantidad   = item.Cantidad,
                            Moneda     = item.Moneda,
                            ContratoId = contrato.Id
                        };
                        context.Montos.Add(monto);
                    }
                    context.SaveChanges();
                }
                foreach (var item in contratoDto.FormasDePago)
                {
                    var contratoId_FormaPagoId = new ContratoId_FormaPagoId {
                        ContratoId  = contrato.Id,
                        FormaDePago = item
                    };
                    context.ContratoId_FormaPagoId.Add(contratoId_FormaPagoId);
                    context.SaveChanges();
                }
                // Subir el Fichero del Contrato
                // var uploads = Path.Combine (_hostingEnvironment.WebRootPath, "uploadContratos");
                // if (file != null) {
                //     var filePath = Path.Combine (uploads, file.FileName);
                //     using (var fileStream = new FileStream (filePath, FileMode.Create)) {
                //        await file.CopyToAsync (fileStream);
                //     }
                //     contrato.FilePath=filePath;
                // }

                // Agregar Departamentos de los Dictaminadores
                if (contratoDto.Departamentos != null)
                {
                    foreach (var item in contratoDto.Departamentos)
                    {
                        var contratoId_DepartamentoId = new ContratoId_DepartamentoId {
                            ContratoId     = contrato.Id,
                            DepartamentoId = item
                        };
                        context.ContratoId_DepartamentoId.Add(contratoId_DepartamentoId);
                        context.SaveChanges();
                    }
                }

                //Agregar Especialistas externos como Dictaminador/es del contrato
                if (contratoDto.EspecialistasExternos != null)
                {
                    foreach (var item in contratoDto.EspecialistasExternos)
                    {
                        var espExternoId_ContratoId = new EspExternoId_ContratoId {
                            ContratoId            = contrato.Id,
                            EspecialistaExternoId = item
                        };
                        context.EspExternoId_ContratoId.Add(espExternoId_ContratoId);
                        context.SaveChanges();
                    }
                }
                var HistoricoEstadoContrato = new HistoricoEstadoContrato {
                    ContratoId = contrato.Id,
                    Estado     = Estado.Circulando,
                    Fecha      = DateTime.Now,
                    Usuario    = contratoDto.Usuario,
                };
                context.Add(HistoricoEstadoContrato);
                context.SaveChanges();
                return(new CreatedAtRouteResult("GetContrato", new { id = contrato.Id }));
            }
            return(BadRequest(ModelState));
        }