async Task <Guid> AddProductAttributeTerm(ProductAttributeTerm sourcePAT, Guid sourceParentAttributeId, WooProductAttributeTermMap sourceWooAttributeTermMapsourceParentAttributeId)
        {
            Guid _itemAttributeTermId = Guid.Empty;
            IAppRepository <WooProductAttributeTermMap> _wooAttributeTermMapRepository = _AppUnitOfWork.Repository <WooProductAttributeTermMap>();

            // Add Item AttributeTerm if it does not exist
            _itemAttributeTermId = await AddOrGetIDItemAttributeVariety(sourcePAT, sourceParentAttributeId);

            if (sourceWooAttributeTermMapsourceParentAttributeId == null)
            {
                sourceWooAttributeTermMapsourceParentAttributeId = new WooProductAttributeTermMap
                {
                    WooProductAttributeTermId    = (int)sourcePAT.id,
                    ItemAttributeVarietyLookupId = _itemAttributeTermId
                };
            }
            else
            {
                sourceWooAttributeTermMapsourceParentAttributeId.WooProductAttributeTermId    = (int)sourcePAT.id;
                sourceWooAttributeTermMapsourceParentAttributeId.ItemAttributeVarietyLookupId = _itemAttributeTermId;
            }
            if (await _wooAttributeTermMapRepository.AddAsync(sourceWooAttributeTermMapsourceParentAttributeId) == AppUnitOfWork.CONST_WASERROR)
            {
                // did not add so set _ItemAttributeTermId to ItemAttributeTermID to Guid.Empty = error
                _itemAttributeTermId = Guid.Empty;
            }
            return(_itemAttributeTermId);
        }
        async Task <Guid> ImportAndMapAttributeTermData(ProductAttributeTerm sourcePAT, Guid sourceParentAttributeId)
        {
            Guid _itemAttributeTermId = Guid.Empty;
            // Get repository for each database we are accessing. ItemAttributeTerm. WooProductAttributeTermMap & WooSyncLog
            IAppRepository <WooProductAttributeTermMap> _wooAttributeTermMapRepository = _AppUnitOfWork.Repository <WooProductAttributeTermMap>();

            // Import the AttributeTerm and set sync data
            ///first check if it exists in the mapping, just in case there has been a name change
            WooProductAttributeTermMap _wooAttributeTermMap = await _wooAttributeTermMapRepository.FindFirstAsync(wa => wa.WooProductAttributeTermId == sourcePAT.id);

            if (_wooAttributeTermMap != null)   // the id exists so update
            {
                _itemAttributeTermId = await UpdateProductAttributeTerm(sourcePAT, sourceParentAttributeId, _wooAttributeTermMap);

                currImportCounters.TotalUpdated++;
            }
            else      // the id does not exists so add
            {
                _itemAttributeTermId = await AddProductAttributeTerm(sourcePAT, sourceParentAttributeId, _wooAttributeTermMap);

                currImportCounters.TotalAdded++;
            }

            return(_itemAttributeTermId);
        }
        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);
        }
        private async Task <int> MapOurItemToWooItemSync(ProductAttributeTerm newWooProductAttributeTerm, ItemAttributeVarietyLookup addViewEntity)
        {
            // create a map to the woo AttributeVariety maps using the id and the AttributeVariety
            //
            IAppRepository <WooProductAttributeTermMap> _wooProductAttributeTermMapRepository = _AppUnitOfWork.Repository <WooProductAttributeTermMap>();

            return(await _wooProductAttributeTermMapRepository.AddAsync(new WooProductAttributeTermMap
            {
                ItemAttributeVarietyLookupId = addViewEntity.ItemAttributeVarietyLookupId,
                WooProductAttributeTermId = Convert.ToInt32(newWooProductAttributeTerm.id),
                CanUpdate = true,
            }));
        }
        async Task <Guid> UpdateProductAttributeTerm(ProductAttributeTerm sourcePAT, Guid sourceParentAttributeId, WooProductAttributeTermMap sourceWooAttributeTermMap)
        {
            // we have found a mapping between the woo Product AttributeTerm and our AttributeTerm id so update the Attribute table just in case.
            Guid _itemAttributeTermId = Guid.Empty;
            IAppRepository <WooProductAttributeTermMap> _wooProductAttributeTermMapRepository = _AppUnitOfWork.Repository <WooProductAttributeTermMap>();

            _itemAttributeTermId = await AddOrUpdateItemAttributeVariety(sourcePAT, sourceParentAttributeId, sourceWooAttributeTermMap.ItemAttributeVarietyLookupId);

            /// Now update the woo AttributeTerm using the _ItemAttributeTermId returned.
            if (await _wooProductAttributeTermMapRepository.UpdateAsync(sourceWooAttributeTermMap) == AppUnitOfWork.CONST_WASERROR)
            {   // did not updated so set _ItemAttributeTermId to ItemAttributeTermID to Guid.Empty = error
                _itemAttributeTermId = Guid.Empty;
            }

            return(_itemAttributeTermId);
        }
        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);
        }
        private async Task <ProductAttributeTerm> AddItemToWooOnlySync(ItemAttributeVarietyLookup addEntity)
        {
            IWooProductAttributeTerm _wooProductAttributeTermRepository = await GetIWooProductAttributeTerm();

            if (_wooProductAttributeTermRepository == null)
            {
                return(null);
            }

            ProductAttributeTerm _wooProductAttributeTerm = new ProductAttributeTerm
            {
                name = addEntity.VarietyName,
                //                 order_by = ConvertToWooOrderBy(addEntity.OrderBy),
            };
            int _parentAttributeId = await GetAttributeTermParentId();

            return(await _wooProductAttributeTermRepository.AddProductAttributeTermAsync(_wooProductAttributeTerm, _parentAttributeId));  // should return a new version with ID
        }
示例#8
0
        public async Task <ProductAttributeTerm> GetProductAttributeTermByIdAsync(int sourceWooEntityId, int parentWooAttributeId)
        {
            RestAPI _RestAPI = _Woo.GetJSONRestAPI;
            ProductAttributeTerm _productAttributeTerm = null;

            try
            {
                WCObject _WC = new WCObject(_RestAPI);
                _productAttributeTerm = await _WC.Attribute.Terms.Get(sourceWooEntityId, parentWooAttributeId);
            }
            catch (Exception ex)
            {
                if (_Woo.Logger != null)
                {
                    _Woo.Logger.LogError("Error calling WOO REST JSON API: " + ex.Message);
                }
            }
            return(_productAttributeTerm);
        }
示例#9
0
        public async Task <ProductAttributeTerm> UpdateProductAttributeTermAsync(ProductAttributeTerm updateWooProductAttribute, int parentWooAttributeId)
        {
            ProductAttributeTerm _ProductAttributeTerm = null;
            WCObject             _WC = GetWCObject;

            try
            {
                // looks like it may need a force parameter, is this a good thing?
                _ProductAttributeTerm = await _WC.Attribute.Terms.Update((int)updateWooProductAttribute.id, updateWooProductAttribute, parentWooAttributeId);   // force = true
            }
            catch (Exception ex)
            {
                if (_Woo.Logger != null)
                {
                    _Woo.Logger.LogError($"Error calling deleting product category by id: {updateWooProductAttribute} Async. Error:  {ex.Message}");
                }
            }
            return(_ProductAttributeTerm);
        }
示例#10
0
        public async Task <ProductAttributeTerm> AddProductAttributeTermAsync(ProductAttributeTerm addWooProductAttribute, int parentWooAttributeId)
        {
            ProductAttributeTerm _ProductAttributeTerm = null;
            RestAPI _RestAPI = _Woo.GetJSONRestAPI;

            try
            {
                WCObject _WC = new(_RestAPI);
                _ProductAttributeTerm = await _WC.Attribute.Terms.Add(addWooProductAttribute, parentWooAttributeId);
            }
            catch (Exception ex)
            {
                if (_Woo.Logger != null)
                {
                    _Woo.Logger.LogError($"Error calling Add ProductAttributeAsync for product: {addWooProductAttribute.name}. Error:  {ex.Message}");
                }
            }
            return(_ProductAttributeTerm);
        }
        public override async Task <int> UpdateWooItemAsync(ItemAttributeVarietyLookupView updateViewEntity)
        {
            int _result = 0;  /// null or not found

            if ((updateViewEntity.HasWooAttributeVarietyMap) && ((bool)(updateViewEntity.CanUpdateWooMap)))
            {
                IWooProductAttributeTerm _wooProductAttributeTermRepository = await GetIWooProductAttributeTerm();

                if (_wooProductAttributeTermRepository != null)                     //  - > if it does not exist then what?
                {
                    WooProductAttributeTermMap _updateWooMapEntity = await GetWooProductAttributeTermMapFromID(updateViewEntity.ItemAttributeVarietyLookupId);

                    if (_updateWooMapEntity == null)
                    {
                        // need to add the AttributeVariety -> this is done later.
                        _result = await AddWooItemAndMapAsync(updateViewEntity);
                    }
                    else
                    {
                        int _parentAttributeId = await GetAttributeTermParentId();

                        ProductAttributeTerm _wooProductAttributeTerm = await _wooProductAttributeTermRepository.GetProductAttributeTermByIdAsync(_updateWooMapEntity.WooProductAttributeTermId, _parentAttributeId);

                        if (_wooProductAttributeTerm == null)
                        {
                            return(AppUnitOfWork.CONST_WASERROR);  /// oops what happened >?
                        }
                        else
                        {
                            // only update if different
                            if (!_wooProductAttributeTerm.name.Equals(updateViewEntity.VarietyName))                           //|| (!_wooProductAttributeTerm.order_by.Equals(updateViewEntity.OrderBy.ToString(), StringComparison.OrdinalIgnoreCase)))
                            {
                                _wooProductAttributeTerm.name = updateViewEntity.VarietyName;                                  // only update if necessary
                                                                                                                               //_wooProductAttributeTerm.order_by = ConvertToWooOrderBy(updateViewEntity.OrderBy);
                                var _res = ((await _wooProductAttributeTermRepository.UpdateProductAttributeTermAsync(_wooProductAttributeTerm, _parentAttributeId)));
                                _result = ((_res == null) || (_res.id == null)) ? AppUnitOfWork.CONST_WASERROR : (int)_res.id; // if null there is an issue
                            }
                        }
                    }
                }
            }
            return(_result);
        }
        //private async Task<ProductAttributeVariety> GetWooProductAttributeTermByName(string VarietyName)
        //{
        //    IWooProductAttributeTerm _wooProductAttributeTermRepository = await GetIWooProductAttributeTerm();
        //    if (_wooProductAttributeTermRepository == null)
        //        return null;

        //    return _wooProductAttributeTermRepository.FindProductAttributeVarietyByName(VarietyName);
        //}

        /// <summary>
        /// Add the item to woo
        /// </summary>
        /// <param name="addEntity"></param>
        /// <returns></returns>
        public override async Task <int> AddWooItemAndMapAsync(ItemAttributeVarietyLookup addEntity)
        {
            // check it the item exists in woo !!!!!!(we did not do this as there is no such call;, if so get is id and return, otherwise add it and get its id

            //ProductAttributeVariety _wooProductAttributeTerm = await GetWooProductAttributeTermByName(addEntity.VarietyName);
            //if (_wooProductAttributeTerm == null)
            //{
            ProductAttributeTerm _wooProductAttributeTerm = await AddItemToWooOnlySync(addEntity);

            if (_wooProductAttributeTerm == null)
            {
                return(AppUnitOfWork.CONST_WASERROR);
            }
            return(await MapOurItemToWooItemSync(_wooProductAttributeTerm, addEntity));

            //}
            //else
            //    return AppUnitOfWork.CONST_WASERROR;
        }
        // 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.
            }
        }
 string ProductAttributeTermToString(ProductAttributeTerm sourcePAT, Guid sourceImportedId)
 {
     return($"Product Attribute Term {sourcePAT.name}, id: {sourcePAT.id}, imported and Attribute Id is {sourceImportedId}");
 }