130 lines
4.2 KiB
C#
130 lines
4.2 KiB
C#
using Microsoft.AspNetCore.Authorization;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using OnProfNext.Server.Data;
|
|
using OnProfNext.Shared.Models;
|
|
using OnProfNext.Shared.Models.DTOs;
|
|
|
|
namespace OnProfNext.Server.Controllers
|
|
{
|
|
[Route("api/[controller]")]
|
|
[ApiController]
|
|
[Authorize]
|
|
public class OrdersController : ControllerBase
|
|
{
|
|
private readonly AppDbContext _context;
|
|
|
|
public OrdersController(AppDbContext context)
|
|
{
|
|
_context = context;
|
|
}
|
|
|
|
//Get: api/orders/byproject/5
|
|
[HttpGet("byproject/{projectId}")]
|
|
public async Task<ActionResult<IEnumerable<OrderDto>>> GetOrdersByProject(int projectId)
|
|
{
|
|
var orders = await _context.Orders
|
|
.Where(o => o.ProjectId == projectId)
|
|
.Select(o => new OrderDto
|
|
{
|
|
Id = o.Id,
|
|
ProjectId = o.ProjectId,
|
|
Auftragsnummer = o.Auftragsnummer,
|
|
Titel = o.Titel,
|
|
Status = o.Status,
|
|
Planstunden = o.Planstunden,
|
|
Iststunden = o.Iststunden,
|
|
Projektcode = o.Projektcode,
|
|
MandantId = o.MandantId,
|
|
CreatedAt = o.CreatedAt,
|
|
UpdatedAt = o.UpdatedAt
|
|
})
|
|
.ToListAsync();
|
|
|
|
return Ok(orders);
|
|
}
|
|
|
|
//GET: api/orders/5
|
|
[HttpGet("{id}")]
|
|
public async Task<ActionResult<OrderDto>> GetOrder(int id)
|
|
{
|
|
var o = await _context.Orders.FindAsync(id);
|
|
if (o == null) return NotFound();
|
|
|
|
return new OrderDto
|
|
{
|
|
Id = o.Id,
|
|
ProjectId = o.ProjectId,
|
|
Auftragsnummer = o.Auftragsnummer,
|
|
Titel = o.Titel,
|
|
Status = o.Status,
|
|
Planstunden = o.Planstunden,
|
|
Iststunden = o.Iststunden,
|
|
Projektcode = o.Projektcode,
|
|
MandantId = o.MandantId,
|
|
CreatedAt = o.CreatedAt,
|
|
UpdatedAt = o.UpdatedAt
|
|
};
|
|
}
|
|
|
|
//POST: api/orders
|
|
[HttpPost]
|
|
public async Task<ActionResult<OrderDto>> CreateOrder(OrderDto dto)
|
|
{
|
|
var order = new Order
|
|
{
|
|
ProjectId = dto.ProjectId,
|
|
Auftragsnummer = dto.Auftragsnummer,
|
|
Titel = dto.Titel,
|
|
Status = dto.Status,
|
|
Planstunden = dto.Planstunden,
|
|
Iststunden = dto.Iststunden,
|
|
Projektcode = dto.Projektcode,
|
|
MandantId = dto.MandantId,
|
|
CreatedAt = DateTime.UtcNow,
|
|
UpdatedAt = DateTime.UtcNow
|
|
};
|
|
|
|
_context.Orders.Add(order);
|
|
await _context.SaveChangesAsync();
|
|
|
|
dto.Id = order.Id;
|
|
dto.CreatedAt = order.CreatedAt;
|
|
dto.UpdatedAt = order.UpdatedAt;
|
|
|
|
return CreatedAtAction(nameof(GetOrder), new { id = order.Id }, dto);
|
|
}
|
|
|
|
//PUT: api/orders/5
|
|
[HttpPut("{id}")]
|
|
public async Task<IActionResult> UpdateOrder(int id, OrderDto dto)
|
|
{
|
|
var order = await _context.Orders.FindAsync(id);
|
|
if (order == null) return NotFound();
|
|
|
|
order.Titel = dto.Titel;
|
|
order.Status = dto.Status;
|
|
order.Planstunden = dto.Planstunden;
|
|
order.Iststunden = dto.Iststunden;
|
|
order.Projektcode = dto.Projektcode;
|
|
order.UpdatedAt = DateTime.UtcNow;
|
|
|
|
await _context.SaveChangesAsync();
|
|
return NoContent();
|
|
}
|
|
|
|
// DELETE: api/orders/5
|
|
[HttpDelete("{id}")]
|
|
public async Task<IActionResult> DeleteOrder(int id)
|
|
{
|
|
var order = await _context.Orders.FindAsync(id);
|
|
if (order == null) return NotFound();
|
|
|
|
_context.Orders.Remove(order);
|
|
await _context.SaveChangesAsync();
|
|
return NoContent();
|
|
}
|
|
|
|
}
|
|
}
|