public async Task <ActionResult <InvoiceDataDTO> > PostInvoice(InvoiceDTO invoice) { var user = await _userManager.FindByNameAsync(User?.Identity?.Name); if (user == null) { return(Forbid()); } var isInvoiceValid = !_context.Invoice.Any(i => i.TimesheetId.Equals(invoice.TimesheetId)) && _context.Timesheet.Any(t => t.Id.Equals(invoice.TimesheetId) && t.State.Equals(Const.States.Closed)); if (!isInvoiceValid) { return(BadRequest(new { Message = "Cannot create new invoice for provided timesheet!" })); } var invoiceTimesheet = await _context.Timesheet.FindAsync(invoice.TimesheetId); var invoiceObj = DtoToModel.DtoToInvoice(invoice); invoiceObj.InvoiceNumber = $"1/{invoiceTimesheet.Date.Month}/{invoiceTimesheet.Date.Year}"; invoiceObj.UserId = user.Id; await _context.Invoice.AddAsync(invoiceObj); await _context.SaveChangesAsync(); var obj = _context.Invoice.Include(i => i.Timesheet).Include(i => i.Timesheet.Rows) .First(i => i.Id.Equals(invoiceObj.Id)); var invoiceSettings = await _context.UserInvoiceSettings.FirstAsync(settings => settings.UserId.Equals(user.Id)); var invoiceSettingsDto = ModelToDto.InvoiceSettingsToDTO(invoiceSettings); var rateTypes = _context.RateTypes.ToList(); var userRateAmounts = _context.UserRateAmount.Where(amount => amount.UserId.Equals(user.Id)).ToList(); var dto = ModelToDto.InvoiceToDto(obj, invoiceSettingsDto, rateTypes, userRateAmounts); return(dto); }
public void InvoiceToDTO_Should_ReturnValidInvoiceDataDTO() { var invoice = CreateMockInvoice(); var invoiceSettingsDto = CreateMockUserInvoiceSettingsDTO(); var rateTypes = CreateMockRateTypeCollection().ToList(); var rateAmounts = CreateMockRateAmountsForRateTypes(rateTypes).ToList(); var sut = ModelToDto.InvoiceToDto(invoice, invoiceSettingsDto, rateTypes, rateAmounts); Assert.AreEqual("1", sut.Id); Assert.AreEqual("Wroclaw", sut.IssuedPlace); Assert.AreEqual(invoice.InvoiceNumber, sut.InvoiceNumber); Assert.AreEqual(invoice.TimesheetId.ToString(), sut.TimesheetId); Assert.AreEqual(_sampleDate.Month.ToString(), sut.InvoiceForMonth); Assert.AreEqual(_sampleDate.Year.ToString(), sut.InvoiceForYear); Assert.AreEqual("23%", sut.TaxRate); Assert.AreEqual("6000", sut.SummaryNetAmount); Assert.AreEqual("1380", sut.SummaryTaxAmount); Assert.AreEqual("7380", sut.SummaryGrossAmount); Assert.AreEqual(_sampleDate.AddDays(30).ToShortDateString(), sut.PayToDate); Assert.AreEqual(_sampleDate.ToShortDateString(), sut.IssuedDate); Assert.AreEqual(invoiceSettingsDto.IssuedBy, sut.IssuedBy); Assert.AreSame(invoiceSettingsDto, sut.InvoiceSettings); }