public ActionResult Add(AddEditInvoiceViewModel viewModel)
        {
            // This is bad, we probably need to implement some type of
            // login here in the future
            var createdBy = _Mediator.Send(new GetInvoices())
                            .First()
                            .CreatedBy;

            var invoice = _Mediator.Send(new CreateInvoice()
            {
                CompanyId     = viewModel.CompanyId,
                CreatedById   = createdBy.Id,
                Id            = _GuidGenerator.Generate(),
                InvoiceNumber = viewModel.InvoiceNumber
            });

            foreach (var lineItem in viewModel.LineItems)
            {
                _Mediator.Send(new AddLineItem()
                {
                    Amount      = Convert.ToDecimal(lineItem.Amount),
                    CreatedById = createdBy.Id,
                    Description = lineItem.Description,
                    Id          = _GuidGenerator.Generate(),
                    InvoiceId   = invoice.Id
                });

                throw new Exception("Testing rollback");
            }

            return(Json(_Mapper.Map <InvoiceViewModel>(invoice)));
        }
        public ActionResult Add()
        {
            var viewModel = new AddEditInvoiceViewModel();

            viewModel.Companies = _Mediator.Send(new GetCompanies())
                                  .Select(c => new SelectListItem()
            {
                Text = c.Name, Value = c.Id.ToString()
            })
                                  .ToList();

            var json = JsonConvert.SerializeObject(viewModel, new JsonSerializerSettings
            {
                ContractResolver = new CamelCasePropertyNamesContractResolver()
            });

            return(View((object)json));
        }