/// <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); }