Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Import product csv, if categories change, it's adding to the existing instead of replacing #7930

Closed
MattDelac opened this issue Dec 22, 2016 · 27 comments
Labels
bug report Component: ImportExport Issue: Cannot Reproduce Cannot reproduce the issue on the latest `2.4-develop` branch Issue: Format is valid Gate 1 Passed. Automatic verification of issue format passed

Comments

@MattDelac
Copy link

MattDelac commented Dec 22, 2016

Preconditions

  1. Version: Magento CE 2.1.2
  2. Environment: Php7, MariaDB, Varnish, Redis

Steps to reproduce

  1. Create a product with the native import and set the categories as "Root/Category1/Sub_cat1"
  2. Change the categories in the csv as "Root/Category2"
  3. Run a new import with the Add/Update attributes
    selection_274
    selection_275

Expected result

  1. The product now has two categories: "Root/Category1/Sub_cat1" & "Root/Category2"
  2. I would expect to have the product in the new category only instead of an addition.

Actual result

  1. The product should only appear in the category "Root/Category2"

Comments

There is the same issue with the picture, if I run multiple imports with different images, thus the product will have all the images as extra image and the one specified as base image (even if I only have 1 additional image)

Thank you

@nikolaevas
Copy link
Contributor

Hi,

Why did you use Add/Update behavior instead of Replace?

How to replace products:

  1. Remove or empty columns store_view_code and _store from csv file. Because products can be replaced only in default scope.
  2. Run a new import with Replace behavior.
  3. Old products will be deleted and new will be added:

Notes:

  • only products with SKUs from your csv file will be replaced
  • new IDs will be generated for replaced products

@LiamFielding
Copy link

Because he wanted to update a value as "Add/Update" would appear to be capable of to any reasonable person. If you're saying that the already useless import process that contains no documentation, awful validation is also incapable of this for one specific column...

Have you ever tried importing real products?

@tsifra
Copy link

tsifra commented Apr 19, 2017

Hello, does anyone have solution for this? Very strange behaviour in my opinion. Using "replace" is very strange for such situation. Actualy this means, that i have to use replace function all the time. I guess it will cause problems with products returns and everything that is related with product id.

@Ylmzef
Copy link

Ylmzef commented Aug 27, 2017

Any solution for this?

@MattDelac
Copy link
Author

Dear Super Magento team ( @veloraven ),

This bug is from December 2016. Could it be possible to fix it as soon as possible and stop waiting a year for bug updates ?

Thank you in advance
Matt

@magento-engcom-team magento-engcom-team added 2.1.x bug report Issue: Format is valid Gate 1 Passed. Automatic verification of issue format passed Component: ImportExport labels Sep 11, 2017
@magento-engcom-team magento-engcom-team added the Issue: Cannot Reproduce Cannot reproduce the issue on the latest `2.4-develop` branch label Sep 29, 2017
@magento-engcom-team
Copy link
Contributor

@MattDelac, thank you for your report.
We were not able to reproduce this issue by following the steps you provided. If you'd like to update it, please reopen the issue.
We tested the issue on 2.3.0, 2.2.0, 2.1.9

@mzenner1
Copy link

This is not fixed in either 2.1.9 or 2.2.x. It appends categories indefinitely. Even if you wipe out the category field in the csv and import, the previously tagged categories will still be there. Using the "replace" method would be a very bad thing as it would be a brand new product and I'm guessing the customer reviews would not follow to the new product.

@erfanimani
Copy link
Contributor

erfanimani commented Nov 23, 2017

This really needs to be reopened.. if I import a product and assign it to category A, and then change my mind, and replace A with B in the import sheet, I expect the product to now be in category B. In reality the product is now in both A and B, which is not what anyone would want.

More specifically, if I first had A in the categories column, but now B, I would like it to update. If I first did not have a categories column at all, but then I imported another sheet with a categories column, I expect the categories data to be added. That's how I interpret the Add/Update functionality to work.

@erfanimani
Copy link
Contributor

Hmm, from looking at the code, this seems like this is a feature, not a bug:

        if (Import::BEHAVIOR_APPEND != $this->getBehavior()) {
            $this->_connection->delete(
                $tableName,
                $this->_connection->quoteInto('product_id IN (?)', $delProductId)
            );
        }

Source: https://github.com/magento/magento2/blob/2.2-develop/app/code/Magento/CatalogImportExport/Model/Import/Product.php#L1343

I know I'll be patching this on my end.. Suggesting the replace method isn't great since it's very destructive on a live site. By changing the product IDs you'll be blasting away all customer carts, any re-order functionality, product/sales links, reports/statistics, etc.

@sharmstr
Copy link

@erfanimani - Did you come up with a patch for this? Thank you.

@erfanimani
Copy link
Contributor

@sharmstr Unfortunately I didn't. I think I ended up deleting the category and reimported everything again.

From what I can remember, fixing the issue wasn't as straightforward as I thought initially...

@sharmstr
Copy link

@erfanimani I cant believe it works this way. I'll give fixing it a shot and report back. Thank you.

@priti-rathee
Copy link

Getting this same error on magento2.2.2(latest version in today's date.)

@awahab445
Copy link

@magento-engcom-team , Can you please update on the status of this issue. In which version it got fixed please share. The issue was reported on Dec 2016 and till now, every one getting same issue. Please reopen it and recheck it again.

@dweerd
Copy link

dweerd commented Apr 13, 2018

Can't believe this is closed as 'can't reproduce'. It's very easy to reproduce.

@anebi
Copy link

anebi commented Apr 20, 2018

I just experienced same issue with Magento 2.2.3 and, yes, it is quite easy to reproduce it. I can't believe that such issue last 2+ more years without fixes.

@dweerd
Copy link

dweerd commented Apr 21, 2018

@alen9788
Copy link

It does still exist for the latest CE 2.2.5 when will it be fixed?

@kamilmaliszewski
Copy link

kamilmaliszewski commented Jul 24, 2018

I have created new issuse with better descirption which passed all tests and reproduced case. You can follow it here.

@mbreckcabinets
Copy link

It's very discouraging that Magento can be this obtuse about this issue.

@ulftietze
Copy link
Member

Hey guys,

i stepped into the same problem and solved it with a quite dirty workaorund. May you can use this too.
You have to overwrite the function "processRowCategories" in Magento\CatalogImportExport\Model\Import\Product. All the category links, which are not included in this script are deleted.

Take yourself the time to bind the sku and the categoryIds ^^ Ain't nobody have time for this 💃

/**
     * @param array $rowData
     * @return array
     */
    protected function processRowCategories($rowData)
    {
        $categoriesString = empty($rowData[self::COL_CATEGORY]) ? '' : $rowData[self::COL_CATEGORY];
        $categoryIds = [];
        if (!empty($categoriesString)) {
            $categoryIds = $this->categoryProcessor->upsertCategories(
                $categoriesString,
                $this->getMultipleValueSeparator()
            );

            // **** WORKAORUND START **** \\
            // This is a workaround for really updating the categories and not just simply add product to category
            $categoryNoDeleteIds = implode(",", $categoryIds);
            $deleteString = '
              delete
                ccp
              from
                catalog_category_product ccp
              left join
                catalog_product_entity cpe on ccp.product_id = cpe.entity_id
              where
                cpe.sku = "'. $rowData['sku'] . '"
              and
                ccp.category_id not in (' . $categoryNoDeleteIds .');';
            $this->_connection->query($deleteString);

            // **** WORKAROUND FINISH **** \\

            foreach ($this->categoryProcessor->getFailedCategories() as $error) {
                $this->errorAggregator->addError(
                    AbstractEntity::ERROR_CODE_CATEGORY_NOT_VALID,
                    ProcessingError::ERROR_LEVEL_NOT_CRITICAL,
                    $rowData['rowNum'],
                    self::COL_CATEGORY,
                    __('Category "%1" has not been created.', $error['category'])
                    . ' ' . $error['exception']->getMessage()
                );
            }
        }
        return $categoryIds;
    }

@Yonn-Trimoreau
Copy link

Any updates on this?

@nervusdm
Copy link

That's impressive.

@Yonn-Trimoreau
Copy link

The "fix" of @ulftietze works (I still don't know if it's a bug or a feature request). I used a plugin instead of his fix, but in the concept, it actually works.

@ulftietze
Copy link
Member

This is really not a fix. That's just a dirty workaround for something i don't find an appropriate solution.

@Yonn-Trimoreau
Copy link

"fix" ^^

@pasewebstudio
Copy link

As anyone found a solution? I have magento 2.4, same problem.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug report Component: ImportExport Issue: Cannot Reproduce Cannot reproduce the issue on the latest `2.4-develop` branch Issue: Format is valid Gate 1 Passed. Automatic verification of issue format passed
Projects
None yet
Development

No branches or pull requests