public FixedAssetAssignmentModel(WorkEffortFixedAssetAssignment assignment)
        {
            var session = assignment.Strategy.Session;

            this.Name    = assignment.FixedAsset?.Name;
            this.Comment = assignment.FixedAsset?.Comment?.Split('\n');

            if (assignment.FixedAsset is SerialisedItem serialisedItem)
            {
                this.CustomerReferenceNumber = serialisedItem.CustomerReferenceNumber;
                this.ItemNumber   = serialisedItem.ItemNumber;
                this.SerialNumber = serialisedItem.SerialNumber;
                this.Brand        = serialisedItem.PartWhereSerialisedItem?.Brand?.Name;
                this.Model        = serialisedItem.PartWhereSerialisedItem?.Model?.Name;

                var hoursType           = new SerialisedItemCharacteristicTypes(session).FindBy(M.SerialisedItemCharacteristicType.Name, "Operating Hours");
                var hoursCharacteristic = serialisedItem.SerialisedItemCharacteristics.FirstOrDefault(v => v.SerialisedItemCharacteristicType.Equals(hoursType));
                this.Hours = $"{hoursCharacteristic?.Value} {hoursType?.UnitOfMeasure?.Abbreviation}";
            }
        }
        public QuoteItemModel(QuoteItem item, Dictionary <string, byte[]> imageByImageName)
        {
            var session = item.Strategy.Session;

            var product        = item.Product;
            var serialisedItem = item.SerialisedItem;

            this.Reference   = item.InvoiceItemType?.Name;
            this.Product     = serialisedItem?.Name ?? product?.Name;
            this.Description = serialisedItem?.Description ?? product?.Description;
            this.Details     = item.Details;
            this.Quantity    = item.Quantity.ToString("0");
            // TODO: Where does the currency come from?
            var currency = "€";

            this.Price = item.UnitPrice.ToString("N2", new CultureInfo("nl-BE")) + " " + currency;

            this.UnitAmount  = item.UnitPrice.ToString("N2", new CultureInfo("nl-BE")) + " " + currency;
            this.TotalAmount = item.TotalExVat.ToString("N2", new CultureInfo("nl-BE")) + " " + currency;

            this.Comment = item.Comment;

            if (product != null)
            {
                this.ProductCategory = string.Join(", ", product.ProductCategoriesWhereProduct.Select(v => v.Name));
            }

            var unifiedGood    = product as UnifiedGood;
            var nonUnifiedGood = product as NonUnifiedGood;

            if (unifiedGood != null)
            {
                this.BrandName = unifiedGood.Brand?.Name;
                this.ModelName = unifiedGood.Model?.Name;
            }
            else if (nonUnifiedGood != null)
            {
                this.BrandName = nonUnifiedGood?.Part?.Brand?.Name;
                this.ModelName = nonUnifiedGood?.Part?.Model?.Name;
            }

            if (serialisedItem != null)
            {
                this.IdentificationNumber = serialisedItem.ItemNumber;
                this.Year = serialisedItem.ManufacturingYear.ToString();

                var hoursType           = new SerialisedItemCharacteristicTypes(session).FindBy(M.SerialisedItemCharacteristicType.Name, "Hours");
                var hoursCharacteristic = serialisedItem.SerialisedItemCharacteristics.FirstOrDefault(v => v.SerialisedItemCharacteristicType.Equals(hoursType));
                if (hoursCharacteristic != null)
                {
                    this.Hours = $"{hoursCharacteristic.Value} {hoursType.UnitOfMeasure?.Abbreviation}";
                }

                if (serialisedItem.ExistPrimaryPhoto)
                {
                    this.PrimaryPhotoName = $"{item.Id}_primaryPhoto";
                    imageByImageName.Add(this.PrimaryPhotoName, serialisedItem.PrimaryPhoto.MediaContent.Data);
                }

                if (serialisedItem.AdditionalPhotos.Count > 0)
                {
                    this.SecondaryPhotoName1 = $"{item.Id}_secondaryPhoto1";
                    imageByImageName.Add(this.SecondaryPhotoName1, serialisedItem.AdditionalPhotos[0].MediaContent.Data);
                }

                if (serialisedItem.AdditionalPhotos.Count > 1)
                {
                    this.SecondaryPhotoName2 = $"{item.Id}_secondaryPhoto2";
                    imageByImageName.Add(this.SecondaryPhotoName2, serialisedItem.AdditionalPhotos[1].MediaContent.Data);
                }
            }
            else if (product != null)
            {
                this.IdentificationNumber = product.ProductIdentifications.FirstOrDefault(v => v.ProductIdentificationType.Equals(new ProductIdentificationTypes(session).Good)).Identification;

                if (product.ExistPrimaryPhoto)
                {
                    this.PrimaryPhotoName = $"{item.Id}_primaryPhoto";
                    imageByImageName.Add(this.PrimaryPhotoName, product.PrimaryPhoto.MediaContent.Data);
                }

                if (product.Photos.Count > 0)
                {
                    this.SecondaryPhotoName1 = $"{item.Id}_secondaryPhoto1";
                    imageByImageName.Add(this.SecondaryPhotoName1, product.Photos[0].MediaContent.Data);
                }

                if (product.Photos.Count > 1)
                {
                    this.SecondaryPhotoName2 = $"{item.Id}_secondaryPhoto2";
                    imageByImageName.Add(this.SecondaryPhotoName2, product.Photos[0].MediaContent.Data);
                }
            }
        }