Example #1
0
        /// <summary>
        /// Add or update variation of this item
        /// </summary>
        /// <param name="currItem">the item </param>
        /// <param name="prodAttrib">the attribute</param>
        /// <returns>Item modified with new data</returns>
        async Task <Item> AddOrUpdateVarieties(Item currItem, ProductAttributeLine prodAttrib, WooProductAttributeMap currWooProductAttributeMap) //, bool IsAttributeVarietyUpddate)
        {
            IAppRepository <ItemAttributeVarietyLookup> _itemAttribVarietyLookupRepo = _AppUnitOfWork.Repository <ItemAttributeVarietyLookup>();
            ItemAttributeVarietyLookup _itemAttributeVarietyLookup = null;

            foreach (var attrbiTerm in prodAttrib.options)
            {
                _itemAttributeVarietyLookup = await _itemAttribVarietyLookupRepo.FindFirstAsync(ItemAttributeVariety => ItemAttributeVariety.VarietyName == attrbiTerm);

                if (_itemAttributeVarietyLookup != null)
                {
                    // found so update or add
                    ItemAttribute _itemAttribute = currItem.ItemAttributes.Find(ic => ic.ItemAttributeLookupId == currWooProductAttributeMap.ItemAttributeLookupId);
                    if (_itemAttribute == null)
                    {
                        return(currItem); // this should never occur
                    }
                    // does this attribute have this variety, if so update otherwise add
                    if ((_itemAttribute.ItemAttributeVarieties != null) && (_itemAttribute.ItemAttributeVarieties.Exists(iav => iav.ItemAttributeVarietyLookupId == _itemAttributeVarietyLookup.ItemAttributeVarietyLookupId)))
                    {
                        // this attribute variety / term exists so just update it. Do stuff here if we need - so far nada
                        //make sure this matches
                        ItemAttributeVariety _itemAttributeVariety = _itemAttribute.ItemAttributeVarieties.FirstOrDefault(iav => iav.ItemAttributeVarietyLookupId == _itemAttributeVarietyLookup.ItemAttributeVarietyLookupId);
                        ///-> can this be null? It should never be
                        // copy the whole item across just in case there have been changes
                        _itemAttributeVariety.ItemAttributeVarietyLookupDetail = _itemAttributeVarietyLookup;
                        _itemAttributeVariety.ItemAttributeId = _itemAttribute.ItemAttributeId;
                    }
                    else
                    {
                        // we have a attribute variety, this means we should have an attribute that, that belongs too.

                        if (_itemAttribute.ItemAttributeVarieties == null)
                        {
                            _itemAttribute.ItemAttributeVarieties = new List <ItemAttributeVariety>();
                        }
                        // create a new variety assume 1.0 as in 1-1 QTY and update the ItemDetails. Do not change Item Id as then EF core knows it is a new record.
                        _itemAttribute.ItemAttributeVarieties.Add(new ItemAttributeVariety
                        {
                            ItemAttributeVarietyLookupId     = _itemAttributeVarietyLookup.ItemAttributeVarietyLookupId,
                            ItemAttributeVarietyLookupDetail = _itemAttributeVarietyLookup,    // copy the whole attribute across
                            ItemAttributeId = _itemAttribute.ItemAttributeId,
                            UoMId           = _itemAttributeVarietyLookup.UoMId,
                            UoM             = _itemAttributeVarietyLookup.UoM,
                            UoMQtyPerItem   = 1.0
                        });
                    }
                }
            }
            return(currItem);
        }
        async Task <Guid> AddOrUpdateItemAttributeVariety(ProductAttributeTerm sourcePAT, Guid sourceParentAttributeId, Guid sourceWooMappedItemAttributeTermId)
        {
            Guid _itemAttributeVarietyId = Guid.Empty;
            IAppRepository <ItemAttributeVarietyLookup> _itemAttributeVarietyRepository = _AppUnitOfWork.Repository <ItemAttributeVarietyLookup>();
            // check if the AttributeTerm exists
            ItemAttributeVarietyLookup _ItemAttributeVariety = await _itemAttributeVarietyRepository.FindFirstAsync(ic => ic.ItemAttributeVarietyLookupId == sourceWooMappedItemAttributeTermId);

            if (_ItemAttributeVariety != null)
            {
                _itemAttributeVarietyId = await UpdateItemAttributeVariety(sourcePAT, sourceParentAttributeId, _ItemAttributeVariety);
            }
            else
            {
                _itemAttributeVarietyId = await AddOrGetIDItemAttributeVariety(sourcePAT, sourceParentAttributeId);
            }
            return(_itemAttributeVarietyId);
        }
        // check if the a product if the name product.name exists if so get that ID (and update), or add it and return the id.
        async Task <Guid> AddOrGetIDItemAttributeVariety(ProductAttributeTerm sourcePAT, Guid sourceParentAttributeId)
        {
            IAppRepository <ItemAttributeVarietyLookup> _itemAttributeVarietyRepository = _AppUnitOfWork.Repository <ItemAttributeVarietyLookup>();

            ItemAttributeVarietyLookup _ItemAttributeVariety = await _itemAttributeVarietyRepository.FindFirstAsync(ic => ic.VarietyName == sourcePAT.name);

            if (_ItemAttributeVariety == null)
            {
                ItemAttributeVarietyLookup _newItemAttributeVariety = new ItemAttributeVarietyLookup
                {
                    ItemAttributeLookupId = sourceParentAttributeId,
                    VarietyName           = sourcePAT.name,
                    Notes = $"Imported Woo Attribute Term ID {sourcePAT.id}"
                };

                int _recsAdded = await _itemAttributeVarietyRepository.AddAsync(_newItemAttributeVariety);

                return((_recsAdded != AppUnitOfWork.CONST_WASERROR) ? _newItemAttributeVariety.ItemAttributeVarietyLookupId : Guid.Empty);
            }
            else
            {
                return(_ItemAttributeVariety.ItemAttributeVarietyLookupId);   // we found one with the same name so assume this is the correct one.
            }
        }
        async Task <Guid> UpdateItemAttributeVariety(ProductAttributeTerm sourcePAT, Guid sourceParentAttributeId, ItemAttributeVarietyLookup currItemAttributeVariety)
        {
            IAppRepository <ItemAttributeVarietyLookup> _ItemAttributeVarietyRepository = _AppUnitOfWork.Repository <ItemAttributeVarietyLookup>();
            bool _success = false;

            currItemAttributeVariety.ItemAttributeLookupId = sourceParentAttributeId;
            currItemAttributeVariety.VarietyName           = sourcePAT.name;
            currItemAttributeVariety.Notes = $"Updated Woo AttributeTerm ID {sourcePAT.id}";
            _success = await _ItemAttributeVarietyRepository.UpdateAsync(currItemAttributeVariety) != AppUnitOfWork.CONST_WASERROR;

            return(_success ? currItemAttributeVariety.ItemAttributeVarietyLookupId : Guid.Empty);
        }