Пример #1
0
        private void MapShippedItemInstance(Model.ShippedItemInstance shippedItemInstance)
        {
            //-----------------------
            //PackagedProductInstance
            //-----------------------
            //The PackagedProductInstance represents a single product shipment and maps 1:1 to the ShippedItemInstance
            PackagedProductInstance packagedProductInstance = new PackagedProductInstance();

            //Description and quantity are set on the related class properties
            packagedProductInstance.Description = string.Format("Shipment {0}", shippedItemInstance.Identifier?.Content);
            if (double.TryParse(shippedItemInstance.Quantity?.Content, out double quantity))
            {
                packagedProductInstance.ProductQuantity = CreateRepresentationValue(quantity, shippedItemInstance.Quantity.UnitCode);
            }
            else
            {
                Errors.Add(new Error(string.Empty, "ShippedItemInstanceMapper.MapShippedItemInstance", $"Quantity {shippedItemInstance.Quantity?.Content} is invalid.", string.Empty));
            }

            //The remaining data is somewhat specific to the ShippedItemInstance and is persisted as ContextItems
            //The ContextItem data generally is intended to be passed out of the ApplicationDataModel and passed back in unaltered,
            //in order that the data may return, e.g., on a logged planting operation and reconcile that planting operation
            //back to this ShippedItemInstance.
            packagedProductInstance.ContextItems.AddRange(CreatePackagedProductInstanceContextItems(shippedItemInstance));

            //-----------------------
            //PackagedProduct
            //-----------------------
            //Packaged product is defined a product within a specific packaging.
            //Multiple ShippedItemInstances may map to the same PackagedProduct
            PackagedProduct packagedProduct = GetPackagedProduct(shippedItemInstance);

            if (packagedProduct != null)
            {
                packagedProductInstance.PackagedProductId = packagedProduct.Id.ReferenceId;
            }
            else
            {
                Errors.Add(new Error(null, "Mapper.MapShippedItemInstance", $"Couldn't create PackagedProduct for PackageProductInstance {packagedProductInstance.Id.ReferenceId}", null));
            }

            //Add the PackagedProductInstance to the Catalog.   The PackagedProduct is added in the subroutine above.
            Catalog.PackagedProductInstances.Add(packagedProductInstance);

            //Set other contextual information from the ShippedItemInstance into relevant ADAPT classes
            SetManufacturerAndBrand(shippedItemInstance);
            SetCrop(shippedItemInstance);
            SetGrower(shippedItemInstance);
        }
Пример #2
0
        /// <summary>
        /// Import any PackagedProduct & PackagedProductInstance classes as may be defined in the LinkList/ContextItems
        /// Any export process (above) will have named the context items with with integer prefixes so that we can identify
        /// the source object hierarchy.
        /// E.g., 1.1.Code|Value is the first PackagedProduct and the first PackagedProduct belonging to it.
        /// The 1.1, etc. convention is internal to this plugin.  As LinkList.xml items classified in ManufacturerGLN LGP's, the
        /// data carries a proprietary definition that, in this case, is internal to the Import/Export methods in this class and serves
        /// no purpose other than ensuring exported data is reimported in its same form.   If in future there is a need to expose
        /// other product data in this way, we need simply alter these to methods to allow for the same.
        /// </summary>
        /// <param name="isoProduct"></param>
        /// <param name="product"></param>
        private void ImportPackagedProductClasses(ISOProduct isoProduct, Product product)
        {
            List <ContextItem> ppContextItems  = ImportContextItems(isoProduct.ProductId, "ADAPT_Context_Items:PackagedProduct");
            List <ContextItem> ppiContextItems = ImportContextItems(isoProduct.ProductId, "ADAPT_Context_Items:PackagedProductInstance");
            int         packagedProductIndex   = 1;
            ContextItem relevantPPContextItem  = ppContextItems.FirstOrDefault(ci => ci.Code == packagedProductIndex.ToString());

            while (relevantPPContextItem != null)
            {
                //PackagedProduct
                PackagedProduct packagedProduct = new PackagedProduct();
                packagedProduct.ProductId    = product.Id.ReferenceId;
                packagedProduct.ContextItems = relevantPPContextItem.NestedItems;
                packagedProduct.Description  = packagedProduct.ContextItems.FirstOrDefault()?.Value;
                DataModel.Catalog.PackagedProducts.Add(packagedProduct);

                //PackagedProductInstance
                ContextItem containingContextItem = ppiContextItems.FirstOrDefault(ci => ci.Code == packagedProductIndex.ToString());
                if (containingContextItem != null)
                {
                    int         packagedProductInstanceIndex = 1;
                    ContextItem relevantPPIContextItem       = containingContextItem.NestedItems.FirstOrDefault(ci => ci.Code == packagedProductInstanceIndex.ToString());
                    while (relevantPPIContextItem != null)
                    {
                        PackagedProductInstance packagedProductInstance = new PackagedProductInstance();
                        packagedProductInstance.PackagedProductId = packagedProduct.Id.ReferenceId;
                        packagedProductInstance.ContextItems      = relevantPPIContextItem.NestedItems;
                        packagedProductInstance.Description       = packagedProductInstance.ContextItems.FirstOrDefault()?.Value;
                        DataModel.Catalog.PackagedProductInstances.Add(packagedProductInstance);

                        //Increment the counter and see if there is a PackagedProductInstance 1.2, etc.
                        int index = ++packagedProductInstanceIndex;
                        relevantPPIContextItem = containingContextItem.NestedItems.FirstOrDefault(ci => ci.Code == index.ToString());
                    }
                }

                //Increment the counter and see if there is a PackagedProduct 2, etc.
                relevantPPContextItem = ppContextItems.FirstOrDefault(ci => ci.Code == (++packagedProductIndex).ToString());
            }
        }