//Constructors
            #region InvoiceLayout
            public InvoiceLayout(Invoice invoice, DocumentTypes documentType, Boolean isCopy)
            {
                this.Invoice      = invoice;
                this.DocumentType = documentType;
                this.IsCopy       = isCopy;

                List <InvoiceItem> itemsWithShipping = new List <InvoiceItem>(this.Invoice.InvoiceItems.OrderBy(runner => runner.ArticleNumber).ToArray());

                itemsWithShipping.Add(InvoiceItem.CreateShippingCosts(this.Invoice));

                Int32 pageCount =
                    itemsWithShipping.Count % InvoiceLayout.InvoiceItemsPerPage == 0 ?
                    itemsWithShipping.Count / InvoiceLayout.InvoiceItemsPerPage :
                    itemsWithShipping.Count / InvoiceLayout.InvoiceItemsPerPage + 1;

                Int32 pageIndex = 0;

                this.InvoiceLayoutPages = new List <InvoiceLayoutPage>();
                while (pageIndex < pageCount)
                {
                    InvoiceLayoutPage lastPage = this.InvoiceLayoutPages.LastOrDefault();
                    InvoiceLayoutPage newPage  = new InvoiceLayoutPage(
                        this,
                        lastPage,
                        itemsWithShipping.Skip(pageIndex * InvoiceLayout.InvoiceItemsPerPage).Take(InvoiceLayout.InvoiceItemsPerPage));

                    if (lastPage != null)
                    {
                        lastPage.NextPage = newPage;
                    }

                    this.InvoiceLayoutPages.Add(newPage);
                    pageIndex++;
                }
            }