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);
        }
示例#2
0
        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);
        }