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

how do i generate compatible csv files #69

Closed
mices opened this issue Jun 11, 2018 · 8 comments
Closed

how do i generate compatible csv files #69

mices opened this issue Jun 11, 2018 · 8 comments

Comments

@mices
Copy link

mices commented Jun 11, 2018

Suggested use is to import csv files created by what?

@autotelik
Copy link
Owner

Hi ... there is a helper : thor datashift:generate:csv -m, --model=MODEL -r, --result=RESULT

That will generate a template file with the headers of the model. So you can generate this for Spree::Product

Also, there is equivalent cli to generate Excel instead of CSV.

Then you can take you data from another system, and place it in the right columns for Spree

This may help (unfortunately I have not worked with Spree for a while so may need tweaking for latest versions)

https://github.com/autotelik/datashift/wiki/Walkthroughs

@autotelik
Copy link
Owner

autotelik commented Jun 14, 2018 via email

@autotelik
Copy link
Owner

Just to confirm - to create a basic Product, you only need to set the Price field
i.e Add a price column and run with datashift:import:excel with --force price

As I mentioned the force is required because price is a method delegated from the master Variant so it does not show up in normal Rails/Ruby reflection methods

You can then setup complex variants and pricing through GUI or a custom script

Prices are now stored in a separate table, called spree_prices. This table tracks the variant, the price amount, and the currency. This allows for variants to have different prices in different currencies.

@autotelik
Copy link
Owner

autotelik commented Jun 14, 2018

FYI - was playing around in console and this is a way to create the complex Prices

product.master.prices.create(currency: "GBP", amount: "2.0", variant: product.master)

@mices
Copy link
Author

mices commented Jul 10, 2018

By what magic will currency, amount and variant insert into spree_prices ? datashift is know to do this from the model name Spree::Product (besides --force price) ?

@mices
Copy link
Author

mices commented Jul 10, 2018

t datashift:import:excel -i /tmp/product.xls -m Spree::Product --force price

t is short for thor?

@autotelik
Copy link
Owner

t is just my alias for bundle exec thor

datashift uses active record reflection to find all the available columns and associations on a model.

the issue with Spree is it is very complex data model and Product has many delegated methods, down to Variant. these do not show up in the reflections so datashift thinks it cannot use an incoming file column called 'price'

the force flag tells datashift that even though it will find no matching Price attribute on Product itself, it is still possible to call product.price i.e product has a price method that does not show up in the reflection.

if anyone know a way to get round this and can guide me to a way to discover delegated methods on a Rails model that would be awesome but for now the force flag is a way to inform datashift to attempt to call these methods

@mices
Copy link
Author

mices commented Jul 12, 2018

Do you recommend using that method, with datashift using the active record associations or generate separate templates for every model/table for simplicity and certainty's sake ?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants