コード例 #1
0
        public async Task <IActionResult> AddEntry(
            [FromRoute] int tenantId,
            JournalEntryBaseViewModel journalEntryViewModel)
        {
            // TODO: Either in here or in an attribute, verify authorization for the tenant

            ViewBag.PostBack       = true;
            ViewBag.SuccessfulSave = false;

            var isJournalEntryValid = ModelState.IsValid;

            if (isJournalEntryValid)
            {
                // Basic view model validation has passed
                // Perform additional validation (i.e. represents a non-empty, valid, balanced transaction)
                // TODO: Move most of this to an attribute hopefully
                isJournalEntryValid = journalEntryViewModel.Validate(ModelState);

                // TODO: Validate Accounting Period based on Post Date coalesce Entry Date
                //       It is an error to try and add a Journal Entry to a Closed Accounting Period!
            }

            if (!isJournalEntryValid)
            {
                await HydrateViewBagLookupValues(tenantId);

                return(View(journalEntryViewModel));
            }

            var contextUserId = User.GetUserId();
            var postingUserId = journalEntryViewModel.PostDate.HasValue ? contextUserId : (Guid?)null;

            var journalEntry = new JournalEntry(
                tenantId,
                journalEntryViewModel.EntryDate,
                journalEntryViewModel.PostDate,
                journalEntryViewModel.Description,
                journalEntryViewModel.CheckNumber,
                contextUserId,
                postingUserId);

            if (!string.IsNullOrWhiteSpace(journalEntryViewModel.Note))
            {
                journalEntry.Note = journalEntryViewModel.Note;
            }

            journalEntry.Accounts = journalEntryViewModel
                                    .Accounts
                                    .Select(a => a.ToModel())
                                    .ToList();

            var savedJournalEntry = await _journalEntryRepository.CreateJournalEntryAsync(journalEntry);

            var savedJournalEntryViewModel = JournalEntryDetailedViewModel.FromModel(savedJournalEntry);

            ViewBag.Tenant         = savedJournalEntry.Tenant;
            ViewBag.SuccessfulSave = true;

            return(View(savedJournalEntryViewModel));
        }
コード例 #2
0
        private async Task <IActionResult> HandleJournalEntryDetailsReadRequest(int tenantId, int entryId)
        {
            var journalEntry = await _journalEntryRepository.GetDetailedByTenantAndEntryIdAsync(tenantId, entryId);

            // If null then 404 not found
            if (journalEntry == null)
            {
                return(NotFound());
            }

            var viewModel = JournalEntryDetailedViewModel.FromModel(journalEntry);

            return(View(viewModel));
        }
コード例 #3
0
        public async Task <IActionResult> EditEntry(int tenantId, int entryId)
        {
            var journalEntry = await _journalEntryRepository.GetDetailedByTenantAndEntryIdAsync(tenantId, entryId);

            // If null then 404 not found
            if (journalEntry == null)
            {
                return(NotFound());
            }

            await HydrateViewBagLookupValues(tenantId);

            var viewModel = JournalEntryDetailedViewModel.FromModel(journalEntry);

            return(View(viewModel));
        }
コード例 #4
0
        public async Task <IActionResult> PostEntry(
            int tenantId,
            int entryId,
            JournalEntryBaseViewModel journalEntryViewModel)
        {
            ViewBag.PostBack       = true;
            ViewBag.SuccessfulSave = false;

            var isJournalEntryValid = ModelState.IsValid;

            if (isJournalEntryValid)
            {
                // Validate that it has a Post Date ... not normally required for this view model, but required for Posting!
                if (!journalEntryViewModel.PostDate.HasValue)
                {
                    ModelState.AddModelError("PostDate", "Post date is required to post the journal entry");
                }

                // TODO: Validate Accounting Period based on Post Date
                //       It is an error to try and add a Journal Entry to a Closed Accounting Period!
            }

            if (!isJournalEntryValid)
            {
                return(await HandleJournalEntryDetailsReadRequest(tenantId, entryId));
            }

            var contextUserId = User.GetUserId();
            var postedEntry   = await _journalEntryRepository.PostJournalEntryAsync(
                journalEntryViewModel.Id,
                journalEntryViewModel.PostDate.Value,
                contextUserId,
                journalEntryViewModel.Note);

            var postedJournalEntryViewModel = JournalEntryDetailedViewModel.FromModel(postedEntry);

            ViewBag.Tenant         = postedEntry.Tenant;
            ViewBag.SuccessfulSave = true;

            return(View(postedJournalEntryViewModel));
        }