You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

import.py 3.6KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import MySQLdb
  2. from decimal import Decimal as D
  3. from django.core.management import setup_environ
  4. import settings as app_settings
  5. setup_environ(app_settings)
  6. from oscar.product.models import ItemClass, Item, AttributeType, ItemAttributeValue, Option
  7. from oscar.stock.models import Partner, StockRecord
  8. from django.db import connection as django_connection
  9. connection = MySQLdb.connect(host='localhost', user='root', passwd='gsiwmm', db='CWDM_app_production_copy')
  10. cursor = connection.cursor(MySQLdb.cursors.DictCursor)
  11. def create_stock_record(product, product_id, partner_ref):
  12. cursor.execute("SELECT * FROM Brd_ProductStock WHERE ProductId = %s", product_id)
  13. stock_row = cursor.fetchone()
  14. if stock_row:
  15. partner,_ = Partner.objects.get_or_create(name=stock_row['Partner'])
  16. price = D(stock_row['Price']) - D(stock_row['PriceSalesTax'])
  17. print " - Creating stock record"
  18. stock_record = StockRecord.objects.create(product=product, partner=partner, partner_reference=partner_ref,
  19. price_currency='GBP', price_excl_tax=price,
  20. num_in_stock=stock_row['NumInStock'])
  21. # Truncate tables
  22. print "Truncating tables"
  23. django_cursor = django_connection.cursor()
  24. django_cursor.execute("set foreign_key_checks=0")
  25. django_cursor.execute("TRUNCATE TABLE product_item")
  26. django_cursor.execute("TRUNCATE TABLE product_attributetype")
  27. django_cursor.execute("TRUNCATE TABLE product_attributevalueoption")
  28. django_cursor.execute("TRUNCATE TABLE product_itemattributevalue")
  29. django_cursor.execute("TRUNCATE TABLE stock_stockrecord")
  30. cursor.execute("SELECT * FROM Brd_ProductsCanonical WHERE Partner = 'Prolog' limit 10")
  31. for row in cursor.fetchall():
  32. print "Creating canonical product %s" % (row['ProductCode'],)
  33. pclass,_ = ItemClass.objects.get_or_create(name=row['MediaType'])
  34. p,_ = Item.objects.get_or_create(title=row['Title'], item_class=pclass, upc=row['ProductCode'])
  35. # Create variant products
  36. cursor.execute("SELECT * FROM Brd_Products WHERE CanonicalProductId = %s", row['CanonicalProductId'])
  37. product_rows = cursor.fetchall()
  38. if len(product_rows) > 1:
  39. for product_row in product_rows:
  40. print " - Creating child product %s" % product_row['SourceProductId']
  41. child_p,_ = Item.objects.get_or_create(parent=p, upc=product_row['SourceProductId'])
  42. # Fetch attributes
  43. cursor.execute("SELECT VariantType, VariantValue FROM Brd_ProductVariations WHERE ProductId = %s", product_row['ProductId'])
  44. variant_rows = cursor.fetchall()
  45. for variant_row in variant_rows:
  46. print " - Create attribute %s = %s" % (variant_row['VariantType'], variant_row['VariantValue'])
  47. attr_type,_ = AttributeType.objects.get_or_create(name=variant_row['VariantType'])
  48. item_attr_value = ItemAttributeValue.objects.create(product=child_p, type=attr_type,
  49. value=variant_row['VariantValue'])
  50. if variant_row['VariantType'] == 'CanBePersonalised' and variant_row['VariantValue'] == 'Y':
  51. option,_ = Option.objects.get_or_create(name="Personal message")
  52. child_p.options.add(option)
  53. child_p.save()
  54. # Stock record for child
  55. create_stock_record(child_p, product_row['ProductId'], product_row['SourceProductId'])
  56. else:
  57. product_row = product_rows[0]
  58. create_stock_record(p, product_row['ProductId'], product_row['SourceProductId'])
  59. cursor.close()
  60. print "Finished"