def setUp(self): self.US = Country.objects.get(iso2_code__iexact = 'US') self.site = Site.objects.get_current() tax = config_get('TAX','MODULE') tax.update('satchmo.tax.modules.no') c = Contact(first_name="Jim", last_name="Tester", role="Customer", email="*****@*****.**") c.save() ad = AddressBook(contact=c, description="home", street1 = "test", state="OR", city="Portland", country = self.US, is_default_shipping=True, is_default_billing=True) ad.save() o = Order(contact=c, shipping_cost=Decimal('6.00'), site=self.site) o.save() small = Order(contact=c, shipping_cost=Decimal('6.00'), site=self.site) small.save() p = Product.objects.get(slug='neat-book-soft') price = p.unit_price item1 = OrderItem(order=o, product=p, quantity=1, unit_price=price, line_item_price=price) item1.save() item1s = OrderItem(order=small, product=p, quantity=1, unit_price=price, line_item_price=price) item1s.save() p = Product.objects.get(slug='neat-book-hard') price = p.unit_price item2 = OrderItem(order=o, product=p, quantity=1, unit_price=price, line_item_price=price) item2.save() self.order = o self.small = small
def make_test_order(country, state, include_non_taxed=False, site=None): if not site: site = Site.objects.get_current() c = Contact(first_name="Tax", last_name="Tester", role="Customer", email="*****@*****.**") c.save() if not isinstance(country, Country): country = Country.objects.get(iso2_code__iexact=country) ad = AddressBook( contact=c, description="home", street1="test", state=state, city="Portland", country=country, is_default_shipping=True, is_default_billing=True, ) ad.save() o = Order(contact=c, shipping_cost=Decimal("10.00"), site=site) o.save() p = Product.objects.get(slug="dj-rocks-s-b") price = p.unit_price item1 = OrderItem(order=o, product=p, quantity=5, unit_price=price, line_item_price=price * 5) item1.save() if include_non_taxed: p = Product.objects.get(slug="neat-book-hard") price = p.unit_price item2 = OrderItem(order=o, product=p, quantity=1, unit_price=price, line_item_price=price) item2.save() return o
def test_base_contact(self): """Test creating a contact""" contact1 = Contact.objects.create(first_name="Jim", last_name="Tester", role="Customer", email="*****@*****.**") self.assertEqual(contact1.full_name, u'Jim Tester') # Add a phone number for this person and make sure that it's the default phone1 = PhoneNumber.objects.create(contact=contact1, type='Home', phone="800-111-9900") self.assert_(contact1.primary_phone) self.assertEqual(contact1.primary_phone.phone, '800-111-9900') self.assertEqual(phone1.type, 'Home') # Make sure that new primary phones become the default, and that # non-primary phones don't become the default when a default already exists. phone2 = PhoneNumber.objects.create(contact=contact1, type='Work', phone="800-222-9901", primary=True) PhoneNumber.objects.create(contact=contact1, type="Mobile", phone="800-333-9902") self.assertEqual(contact1.primary_phone, phone2) #Add an address & make sure it is default billing and shipping add1 = AddressBook.objects.create(contact=contact1, description="Home Address", street1="56 Cool Lane", city="Niftyville", state="IA", postal_code="12344", country=self.us) self.assert_(contact1.billing_address) self.assertEqual(contact1.billing_address, add1) self.assertEqual(contact1.billing_address.description, "Home Address") self.assertEqual(add1.street1, "56 Cool Lane") self.assertEqual(contact1.billing_address, contact1.shipping_address) self.assertEqual(contact1.billing_address.street1, "56 Cool Lane") #Add a new shipping address add2 = AddressBook(description="Work Address", street1="56 Industry Way", city="Niftytown", state="IA", postal_code="12366", country=self.us, is_default_shipping=True) add2.contact = contact1 add2.save() contact1.save() self.assertNotEqual(contact1.billing_address, contact1.shipping_address) self.assertEqual(contact1.billing_address.description, "Home Address") self.assertEqual(contact1.shipping_address.description, "Work Address")
def make_test_order(country, state): c = Contact(first_name="Gift", last_name="Tester", role="Customer", email="*****@*****.**") c.save() if not isinstance(country, Country): country = Country.objects.get(iso2_code__iexact = country) ad = AddressBook(contact=c, description="home", street1 = "test", state=state, city="Portland", country = country, is_default_shipping=True, is_default_billing=True) ad.save() site = Site.objects.get_current() o = Order(contact=c, shipping_cost=Decimal('0.00'), site=site) o.save() p = Product.objects.get(slug='GIFT10') price = p.unit_price log.debug("creating with price: %s", price) item1 = OrderItem(order=o, product=p, quantity=2, unit_price=price, line_item_price=price*2) item1.save() detail = OrderItemDetail(name = 'email', value='*****@*****.**', sort_order=0, item=item1) detail.save() detail = OrderItemDetail(name = 'message', value='hello there', sort_order=0, item=item1) detail.save() return o
def setUp(self): self.US = Country.objects.get(iso2_code__iexact='US') self.site = Site.objects.get_current() tax = config_get('TAX', 'MODULE') tax.update('satchmo.tax.modules.no') c = Contact(first_name="Jim", last_name="Tester", role="Customer", email="*****@*****.**") c.save() ad = AddressBook(contact=c, description="home", street1="test", state="OR", city="Portland", country=self.US, is_default_shipping=True, is_default_billing=True) ad.save() o = Order(contact=c, shipping_cost=Decimal('6.00'), site=self.site) o.save() small = Order(contact=c, shipping_cost=Decimal('6.00'), site=self.site) small.save() p = Product.objects.get(slug='neat-book-soft') price = p.unit_price item1 = OrderItem(order=o, product=p, quantity=1, unit_price=price, line_item_price=price) item1.save() item1s = OrderItem(order=small, product=p, quantity=1, unit_price=price, line_item_price=price) item1s.save() p = Product.objects.get(slug='neat-book-hard') price = p.unit_price item2 = OrderItem(order=o, product=p, quantity=1, unit_price=price, line_item_price=price) item2.save() self.order = o self.small = small
def make_test_order(country, state, include_non_taxed=False): warnings.warn( "make_test_order is deprecated - Use TestOrderFactory instead", DeprecationWarning, ) c = Contact(first_name="Tax", last_name="Tester", role="Customer", email="*****@*****.**") c.save() if not isinstance(country, Country): country = Country.objects.get(iso2_code__iexact=country) ad = AddressBook( contact=c, description="home", street1="test", state=state, city="Portland", country=country, is_default_shipping=True, is_default_billing=True, ) ad.save() o = Order(contact=c, shipping_cost=Decimal("10.00")) o.save() p = Product.objects.get(slug="dj-rocks-s-b") price = p.unit_price item1 = OrderItem(order=o, product=p, quantity=5, unit_price=price, line_item_price=price * 5) item1.save() if include_non_taxed: p = Product.objects.get(slug="neat-book-hard") price = p.unit_price item2 = OrderItem(order=o, product=p, quantity=1, unit_price=price, line_item_price=price) item2.save() return o
def make_test_order(country, state): c = Contact(first_name="Gift", last_name="Tester", role="Customer", email="*****@*****.**") c.save() if not isinstance(country, Country): country = Country.objects.get(iso2_code__iexact=country) ad = AddressBook( contact=c, description="home", street1="test", state=state, city="Portland", country=country, is_default_shipping=True, is_default_billing=True, ) ad.save() o = Order(contact=c, shipping_cost=Decimal("0.00")) o.save() p = Product.objects.get(slug="GIFT10") price = p.unit_price log.debug("creating with price: %s", price) item1 = OrderItem(order=o, product=p, quantity=2, unit_price=price, line_item_price=price * 2) item1.save() detail = OrderItemDetail(name="email", value="*****@*****.**", sort_order=0, item=item1) detail.save() detail = OrderItemDetail(name="message", value="hello there", sort_order=0, item=item1) detail.save() return o
def load_data(): from satchmo.contact.models import Contact, AddressBook, PhoneNumber from satchmo.product.models import Product, Price, ConfigurableProduct, ProductVariation, Category, OptionGroup, Option, ProductImage #, DownloadableProduct from satchmo.supplier.models import Organization from satchmo.shop.models import Config from django.conf import settings from satchmo.l10n.models import Country #Load basic configuration information print "Creating site..." site = Site.objects.get(id=settings.SITE_ID) site.domain = settings.SITE_DOMAIN site.name = settings.SITE_NAME site.save() store_country = Country.objects.get(iso3_code='USA') config = Config(site=site, store_name=settings.SITE_NAME, no_stock_checkout=False, country=store_country, sales_country=store_country) config.save() print "Creating Customers..." # Import some customers c1 = Contact(first_name="Chris", last_name="Smith", email="*****@*****.**", role="Customer", notes="Really cool stuff") c1.save() p1 = PhoneNumber(contact=c1, phone="601-555-5511", type="Home", primary=True) p1.save() c2 = Contact(first_name="John", last_name="Smith", email="*****@*****.**", role="Customer", notes="Second user") c2.save() p2 = PhoneNumber(contact=c2, phone="999-555-5111", type="Work", primary=True) p2.save() # Import some addresses for these customers a1 = AddressBook(description="Home", street1="8235 Pike Street", city="Anywhere Town", state="TN", postal_code="38138", country="US", is_default_shipping=True, contact=c1) a1.save() a2 = AddressBook(description="Work", street1="1245 Main Street", city="Stillwater", state="MN", postal_code="55082", country="US", is_default_shipping=True, contact=c2) a2.save() print "Creating Suppliers..." #Import some suppliers org1 = Organization(name="Rhinestone Ronny", type="Company", role="Supplier") org1.save() c4 = Contact(first_name="Fred", last_name="Jones", email="*****@*****.**", role="Supplier", organization=org1) c4.save() p4 = PhoneNumber(contact=c4, phone="800-188-7611", type="Work", primary=True) p4.save() p5 = PhoneNumber(contact=c4, phone="755-555-1111", type="Fax") p5.save() a3 = AddressBook(contact=c4, description="Mailing address", street1="Receiving Dept", street2="918 Funky Town St", city="Fishkill", state="NJ", postal_code="19010") a3.save() #s1 = Supplier(name="Rhinestone Ronny", address1="918 Funky Town St", address2="Suite 200", # city="Fishkill", state="NJ", zip="19010", phone1="800-188-7611", fax="900-110-1909", email="*****@*****.**", # notes="My main supplier") #s1.save() #s2 = Supplier(name="Shirt Sally", address1="9 ABC Lane", # city="Happyville", state="MD", zip="190111", phone1="888-888-1111", fax="999-110-1909", email="*****@*****.**", # notes="Shirt Supplier") #s2.save() print "Creating Categories..." #Create some categories cat1 = Category(name="Shirts", slug="shirts", description="Women's Shirts") cat1.save() cat2 = Category(name="Short Sleeve", slug="shortsleeve", description="Short sleeve shirts", parent=cat1) cat2.save() cat3 = Category(name="Books", slug="book", description="Books") cat3.save() cat4 = Category(name="Fiction", slug="fiction", description="Fiction Books", parent=cat3) cat4.save() cat5 = Category(name="Science Fiction", slug="scifi", description="Science Fiction", parent=cat4) cat5.save() cat6 = Category(name="Non Fiction", slug="nonfiction", description="Non Fiction", parent=cat3) cat6.save() cat7 = Category(name="Software", slug="software") cat7.save() print "Creating products..." #Create some items i1 = Product(name="Django Rocks shirt", slug="DJ-Rocks", description="Really cool shirt", active=True, featured=True) i1.save() p1 = Price(price="20.00", product=i1) p1.save() i1.category.add(cat1) i1.save() i2 = Product(name="Python Rocks shirt", slug="PY-Rocks", description="Really cool python shirt - One Size Fits All", active=True, featured=True) i2.save() p2 = Price(price="19.50", product=i2) p2.save() i2.category.add(cat2) i2.save() i3 = Product(name="A really neat book", slug="neat-book", description="A neat book. You should buy it.", active=True, featured=True) i3.save() p3 = Price(price="5.00", product=i3) p3.save() i3.category.add(cat4) i3.save() i4 = Product(name="Robots Attack!", slug="robot-attack", description="Robots try to take over the world.", active=True, featured=True) i4.save() p4 = Price(price="7.99", product=i4) p4.save() i4.category.add(cat5) i4.save() # i5 = Product(name="Really Neat Software", slug="neat-software", description="Example Configurable/Downloadable product", active=True, featured=True) # i5.save() # i5.category.add(cat7) # i5.save() #Create an attribute set optSet1 = OptionGroup(name="sizes", sort_order=1) optSet2 = OptionGroup(name="colors", sort_order=2) optSet1.save() optSet2.save() optSet3 = OptionGroup(name="Book type", sort_order=1) optSet3.save() optSet4 = OptionGroup(name="Full/Upgrade", sort_order=5) optSet4.save() optItem1a = Option(name="Small", value="S", displayOrder=1, optionGroup=optSet1) optItem1a.save() optItem1b = Option(name="Medium", value="M", displayOrder=2, optionGroup=optSet1) optItem1b.save() optItem1c = Option(name="Large", value="L", displayOrder=3, price_change=1.00, optionGroup=optSet1) optItem1c.save() optItem2a = Option(name="Black", value="B", displayOrder=1, optionGroup=optSet2) optItem2a.save() optItem2b = Option(name="White", value="W", displayOrder=2, optionGroup=optSet2) optItem2b.save() optItem2c = Option(name="Blue", value="BL", displayOrder=3, price_change=2.00, optionGroup=optSet2) optItem2c.save() optItem3a = Option(name="Hard cover", value="hard", displayOrder=1, optionGroup=optSet3) optItem3a.save() optItem3b = Option(name="Soft cover", value="soft", displayOrder=2, price_change=1.00, optionGroup=optSet3) optItem3b.save() optItem3c = Option(name="On tape", value="tape", displayOrder=3, optionGroup=optSet3) optItem3c.save() optItem4a = Option(name="Full Version", value="full", optionGroup=optSet4, displayOrder=1) optItem4a.save() optItem4b = Option(name="Upgrade Version", value="upgrade", optionGroup=optSet4, displayOrder=2) optItem4b.save() #Add the option group to our items pg1 = ConfigurableProduct(product=i1) pg1.save() pg1.option_group.add(optSet1) pg1.save() pg1.option_group.add(optSet2) pg1.save() pg3 = ConfigurableProduct(product=i3) pg3.save() pg3.option_group.add(optSet3) pg3.save() pg4 = ConfigurableProduct(product=i4) pg4.save() pg4.option_group.add(optSet3) pg4.save() # pg5 = ConfigurableProduct(product=i5) # pg5.option_group.add(optSet4) # pg5.save() print "Creating product variations..." #Create the required sub_items pg1.create_products() pg3.create_products() pg4.create_products() #pg5.create_products() #set prices for full and upgrade versions of neat-software, this is an alternative to using the price_change in options, it allows for more flexability when required. # pv1 = pg5.get_product_from_options([optItem4a]) # Price(product=pv1, price='5.00').save() # Price(product=pv1, price='2.00', quantity=50).save() # DownloadableProduct(product=pv1).save() # pv2 = pg5.get_product_from_options([optItem4b]) # Price(product=pv2, price='1.00').save() # DownloadableProduct(product=pv2).save() print "Create a test user..." #First see if our test user is still there, then use or create that user try: test_user = User.objects.get(username="******") except: test_user = User.objects.create_user('csmith', '*****@*****.**', 'test') test_user.save() c1.user = test_user c1.save()
def save_info(self, contact=None, **kwargs): """Save the contact info into the database. Checks to see if contact exists. If not, creates a contact and copies in the address and phone number.""" if not contact: customer = Contact() log.debug('creating new contact') else: customer = contact log.debug('Saving contact info for %s', contact) data = self.cleaned_data.copy() country = data['country'] if not isinstance(country, Country): country = Country.objects.get(pk=country) data['country'] = country data['country_id'] = country.id shipcountry = data['ship_country'] if not isinstance(shipcountry, Country): shipcountry = Country.objects.get(pk=shipcountry) data['ship_country'] = shipcountry data['ship_country_id'] = shipcountry.id companyname = data.pop('company', None) if companyname: org = Organization.objects.by_name(companyname, create=True) customer.organization = org for field in customer.__dict__.keys(): try: setattr(customer, field, data[field]) except KeyError: pass if not customer.role: customer.role = "Customer" customer.save() # we need to make sure we don't blindly add new addresses # this isn't ideal, but until we have a way to manage addresses # this will force just the two addresses, shipping and billing # TODO: add address management like Amazon. bill_address = customer.billing_address if not bill_address: bill_address = AddressBook(contact=customer) changed_location = False address_keys = bill_address.__dict__.keys() for field in address_keys: if (not changed_location) and field in ('state', 'country', 'city'): if getattr(bill_address, field) != data[field]: changed_location = True try: setattr(bill_address, field, data[field]) except KeyError: pass bill_address.is_default_billing = True copy_address = data['copy_address'] ship_address = customer.shipping_address if copy_address: # make sure we don't have any other default shipping address if ship_address and ship_address.id != bill_address.id: ship_address.delete() bill_address.is_default_shipping = True bill_address.save() if not copy_address: if not ship_address or ship_address.id == bill_address.id: ship_address = AddressBook() for field in address_keys: if (not changed_location) and field in ('state', 'country', 'city'): if getattr(ship_address, field) != data[field]: changed_location = True try: setattr(ship_address, field, data['ship_' + field]) except KeyError: pass ship_address.is_default_shipping = True ship_address.is_default_billing = False ship_address.contact = customer ship_address.save() if not customer.primary_phone: phone = PhoneNumber() phone.primary = True else: phone = customer.primary_phone phone.phone = data['phone'] phone.contact = customer phone.save() signals.form_save.send(ContactInfoForm, object=customer, formdata=data, form=self) if changed_location: signals.satchmo_contact_location_changed.send(self, contact=customer) return customer.id
def load_data(): from satchmo.contact.models import Contact, AddressBook, PhoneNumber from satchmo.product.models import Product, Price, ConfigurableProduct, ProductVariation, Category, OptionGroup, Option, ProductImage#, DownloadableProduct from satchmo.supplier.models import Organization from satchmo.shop.models import Config from django.conf import settings from satchmo.l10n.models import Country #Load basic configuration information print "Creating site..." site = Site.objects.get(id=settings.SITE_ID) site.domain = settings.SITE_DOMAIN site.name = settings.SITE_NAME site.save() store_country = Country.objects.get(iso3_code='USA') config = Config(site=site, store_name = settings.SITE_NAME, no_stock_checkout=False, country=store_country, sales_country=store_country) config.save() config.shipping_countries.add(store_country) config.save() print "Creating Customers..." # Import some customers c1 = Contact(first_name="Chris", last_name="Smith", email="*****@*****.**", role="Customer", notes="Really cool stuff") c1.save() p1 = PhoneNumber(contact=c1, phone="601-555-5511", type="Home",primary=True) p1.save() c2 = Contact(first_name="John", last_name="Smith", email="*****@*****.**", role="Customer", notes="Second user") c2.save() p2 = PhoneNumber(contact=c2, phone="999-555-5111", type="Work",primary=True) p2.save() # Import some addresses for these customers a1 = AddressBook(description="Home", street1="8235 Pike Street", city="Anywhere Town", state="TN", postal_code="38138", country="US", is_default_shipping=True, contact=c1) a1.save() a2 = AddressBook(description="Work", street1="1245 Main Street", city="Stillwater", state="MN", postal_code="55082", country="US", is_default_shipping=True, contact=c2) a2.save() print "Creating Suppliers..." #Import some suppliers org1 = Organization(name="Rhinestone Ronny", type="Company",role="Supplier") org1.save() c4 = Contact(first_name="Fred", last_name="Jones", email="*****@*****.**", role="Supplier", organization=org1) c4.save() p4 = PhoneNumber(contact=c4,phone="800-188-7611", type="Work", primary=True) p4.save() p5 = PhoneNumber(contact=c4,phone="755-555-1111",type="Fax") p5.save() a3 = AddressBook(contact=c4, description="Mailing address", street1="Receiving Dept", street2="918 Funky Town St", city="Fishkill", state="NJ", postal_code="19010") a3.save() #s1 = Supplier(name="Rhinestone Ronny", address1="918 Funky Town St", address2="Suite 200", # city="Fishkill", state="NJ", zip="19010", phone1="800-188-7611", fax="900-110-1909", email="*****@*****.**", # notes="My main supplier") #s1.save() #s2 = Supplier(name="Shirt Sally", address1="9 ABC Lane", # city="Happyville", state="MD", zip="190111", phone1="888-888-1111", fax="999-110-1909", email="*****@*****.**", # notes="Shirt Supplier") #s2.save() print "Creating Categories..." #Create some categories cat1 = Category(name="Shirts",slug="shirts",description="Women's Shirts", site=site) cat1.save() cat2 = Category(name="Short Sleeve",slug="shortsleeve",description="Short sleeve shirts", parent=cat1, site=site) cat2.save() cat3 = Category(name="Books",slug="book",description="Books", site=site) cat3.save() cat4 = Category(name="Fiction",slug="fiction",description="Fiction Books", parent=cat3, site=site) cat4.save() cat5 = Category(name="Science Fiction",slug="scifi",description="Science Fiction",parent=cat4, site=site) cat5.save() cat6 = Category(name="Non Fiction",slug="nonfiction",description="Non Fiction",parent=cat3, site=site) cat6.save() cat7 = Category(name="Software", slug="software", site=site) cat7.save() print "Creating products..." #Create some items i1 = Product(name="Django Rocks shirt", slug="dj-rocks", description="Really cool shirt", active=True, featured=True, site=site) i1.save() p1 = Price(price="20.00", product=i1) p1.save() i1.category.add(cat1) i1.save() i2 = Product(name="Python Rocks shirt", slug="PY-Rocks", description="Really cool python shirt - One Size Fits All", active=True, featured=True, site=site) i2.save() p2 = Price(price="19.50", product=i2) p2.save() i2.category.add(cat2) i2.save() i3 = Product(name="A really neat book", slug="neat-book", description="A neat book. You should buy it.", active=True, featured=True, site=site) i3.save() p3 = Price(price="5.00", product=i3) p3.save() i3.category.add(cat4) i3.save() i4 = Product(name="Robots Attack!", slug="robot-attack", description="Robots try to take over the world.", active=True, featured=True, site=site) i4.save() p4 = Price(price="7.99", product=i4) p4.save() i4.category.add(cat5) i4.save() # i5 = Product(name="Really Neat Software", slug="neat-software", description="Example Configurable/Downloadable product", active=True, featured=True) # i5.save() # i5.category.add(cat7) # i5.save() #Create an attribute set optSet1 = OptionGroup(name="sizes", sort_order=1, site=site) optSet2 = OptionGroup(name="colors", sort_order=2, site=site) optSet1.save() optSet2.save() optSet3 = OptionGroup(name="Book type", sort_order=1, site=site) optSet3.save() optSet4 = OptionGroup(name="Full/Upgrade", sort_order=5, site=site) optSet4.save() optItem1a = Option(name="Small", value="S", sort_order=1, option_group=optSet1) optItem1a.save() optItem1b = Option(name="Medium", value="M", sort_order=2, option_group=optSet1) optItem1b.save() optItem1c = Option(name="Large", value="L", sort_order=3, price_change = Decimal("1.00"), option_group=optSet1) optItem1c.save() optItem2a = Option(name="Black", value="B", sort_order=1, option_group=optSet2) optItem2a.save() optItem2b = Option(name="White", value="W", sort_order=2, option_group=optSet2) optItem2b.save() optItem2c = Option(name="Blue", value="BL", sort_order=3, price_change=Decimal("2.00"), option_group=optSet2) optItem2c.save() optItem3a = Option(name="Hard cover", value="hard", sort_order=1, option_group=optSet3) optItem3a.save() optItem3b = Option(name="Soft cover", value="soft", sort_order=2, price_change=Decimal("1.00"), option_group=optSet3) optItem3b.save() optItem3c = Option(name="On tape", value="tape", sort_order=3, option_group=optSet3) optItem3c.save() optItem4a = Option(name="Full Version", value="full", option_group=optSet4, sort_order=1) optItem4a.save() optItem4b = Option(name="Upgrade Version", value="upgrade", option_group=optSet4, sort_order=2) optItem4b.save() #Add the option group to our items pg1 = ConfigurableProduct(product=i1) pg1.save() pg1.option_group.add(optSet1) pg1.save() pg1.option_group.add(optSet2) pg1.save() pg3 = ConfigurableProduct(product=i3) pg3.save() pg3.option_group.add(optSet3) pg3.save() pg4 = ConfigurableProduct(product=i4) pg4.save() pg4.option_group.add(optSet3) pg4.save() # pg5 = ConfigurableProduct(product=i5) # pg5.option_group.add(optSet4) # pg5.save() print "Creating product variations..." #Create the required sub_items pg1.create_all_variations() pg3.create_all_variations() pg4.create_all_variations() #pg5.create_all_variations() #set prices for full and upgrade versions of neat-software, this is an alternative to using the price_change in options, it allows for more flexability when required. # pv1 = pg5.get_product_from_options([optItem4a]) # Price(product=pv1, price='5.00').save() # Price(product=pv1, price='2.00', quantity=50).save() # DownloadableProduct(product=pv1).save() # pv2 = pg5.get_product_from_options([optItem4b]) # Price(product=pv2, price='1.00').save() # DownloadableProduct(product=pv2).save() print "Create a test user..." #First see if our test user is still there, then use or create that user try: test_user = User.objects.get(username="******") except: test_user = User.objects.create_user('csmith', '*****@*****.**', 'test') test_user.save() c1.user = test_user c1.save()
def handle_noargs(self, **options): from satchmo.contact.models import Contact, AddressBook, PhoneNumber from satchmo.product.models import ( Product, Price, ConfigurableProduct, ProductVariation, Category, OptionGroup, Option, ProductImage, ) # , DownloadableProduct from satchmo.shop.models import Config from django.conf import settings from satchmo.l10n.models import Country from django.contrib.sites.models import Site from django.contrib.auth.models import User # idempotency test print("Checking for existing sample data.") try: p = Product.objects.get(slug="dj-rocks") print( "It looks like you already have loaded the sample store data, quitting." ) import sys sys.exit(1) except Product.DoesNotExist: pass print("Loading sample store data.") # Load basic configuration information print("Creating site...") try: site = Site.objects.get(id=settings.SITE_ID) print(("Using existing site #%i" % settings.SITE_ID)) except Site.DoesNotExist: print("Creating Example Store Site") site = Site(domain="localhost", name="Sample Store") site.domain = settings.SITE_DOMAIN site.name = settings.SITE_NAME site.save() store_country = Country.objects.get(iso3_code="USA") config = Config( site=site, store_name=settings.SITE_NAME, no_stock_checkout=True, country=store_country, sales_country=store_country, ) config.save() config.shipping_countries.add(store_country) config.save() print("Creating Customers...") # Import some customers c1 = Contact( first_name="Chris", last_name="Smith", email="*****@*****.**", role="Customer", notes="Really cool stuff", ) c1.save() p1 = PhoneNumber(contact=c1, phone="601-555-5511", type="Home", primary=True) p1.save() c2 = Contact( first_name="John", last_name="Smith", email="*****@*****.**", role="Customer", notes="Second user", ) c2.save() p2 = PhoneNumber(contact=c2, phone="999-555-5111", type="Work", primary=True) p2.save() # Import some addresses for these customers us = Country.objects.get(iso2_code="US") a1 = AddressBook( description="Home", street1="8235 Pike Street", city="Anywhere Town", state="TN", postal_code="38138", country=us, is_default_shipping=True, contact=c1, ) a1.save() a2 = AddressBook( description="Work", street1="1245 Main Street", city="Stillwater", state="MN", postal_code="55082", country=us, is_default_shipping=True, contact=c2, ) a2.save() print("Creating Categories...") # Create some categories cat1 = Category(name="Shirts", slug="shirts", description="Women's Shirts") cat1.save() cat2 = Category( name="Short Sleeve", slug="shortsleeve", description="Short sleeve shirts", parent=cat1, ) cat2.save() cat3 = Category(name="Books", slug="book", description="Books") cat3.save() cat4 = Category( name="Fiction", slug="fiction", description="Fiction Books", parent=cat3 ) cat4.save() cat5 = Category( name="Science Fiction", slug="scifi", description="Science Fiction", parent=cat4, ) cat5.save() cat6 = Category( name="Non Fiction", slug="nonfiction", description="Non Fiction", parent=cat3, ) cat6.save() cat7 = Category(name="Software", slug="software") cat7.save() print("Creating products...") # Create some items i1 = Product( name="Django Rocks shirt", slug="dj-rocks", description="Really cool shirt", active=True, featured=True, ) i1.save() p1 = Price(price="20.00", product=i1) p1.save() i1.category.add(cat1) i1.save() i2 = Product( name="Python Rocks shirt", slug="PY-Rocks", description="Really cool python shirt - One Size Fits All", active=True, featured=True, ) i2.save() p2 = Price(price="19.50", product=i2) p2.save() i2.category.add(cat2) i2.save() i3 = Product( name="A really neat book", slug="neat-book", description="A neat book. You should buy it.", active=True, featured=True, ) i3.save() p3 = Price(price="5.00", product=i3) p3.save() i3.category.add(cat4) i3.save() i4 = Product( name="Robots Attack!", slug="robot-attack", description="Robots try to take over the world.", active=True, featured=True, ) i4.save() p4 = Price(price="7.99", product=i4) p4.save() i4.category.add(cat5) i4.save() # i5 = Product(name="Really Neat Software", slug="neat-software", description="Example Configurable/Downloadable product", active=True, featured=True) # i5.save() # i5.category.add(cat7) # i5.save() # Create an attribute set optSet1 = OptionGroup(name="sizes", sort_order=1) optSet2 = OptionGroup(name="colors", sort_order=2) optSet1.save() optSet2.save() optSet3 = OptionGroup(name="Book type", sort_order=1) optSet3.save() optSet4 = OptionGroup(name="Full/Upgrade", sort_order=5) optSet4.save() optItem1a = Option(name="Small", value="S", sort_order=1, option_group=optSet1) optItem1a.save() optItem1b = Option(name="Medium", value="M", sort_order=2, option_group=optSet1) optItem1b.save() optItem1c = Option( name="Large", value="L", sort_order=3, price_change="1.00", option_group=optSet1, ) optItem1c.save() optItem2a = Option(name="Black", value="B", sort_order=1, option_group=optSet2) optItem2a.save() optItem2b = Option(name="White", value="W", sort_order=2, option_group=optSet2) optItem2b.save() optItem2c = Option( name="Blue", value="BL", sort_order=3, price_change="2.00", option_group=optSet2, ) optItem2c.save() optItem3a = Option( name="Hard cover", value="hard", sort_order=1, option_group=optSet3 ) optItem3a.save() optItem3b = Option( name="Soft cover", value="soft", sort_order=2, price_change="1.00", option_group=optSet3, ) optItem3b.save() optItem3c = Option( name="On tape", value="tape", sort_order=3, option_group=optSet3 ) optItem3c.save() optItem4a = Option( name="Full Version", value="full", option_group=optSet4, sort_order=1 ) optItem4a.save() optItem4b = Option( name="Upgrade Version", value="upgrade", option_group=optSet4, sort_order=2 ) optItem4b.save() # Add the option group to our items pg1 = ConfigurableProduct(product=i1) pg1.save() pg1.option_group.add(optSet1) pg1.save() pg1.option_group.add(optSet2) pg1.save() pg3 = ConfigurableProduct(product=i3) pg3.save() pg3.option_group.add(optSet3) pg3.save() pg4 = ConfigurableProduct(product=i4) pg4.save() pg4.option_group.add(optSet3) pg4.save() # pg5 = ConfigurableProduct(product=i5) # pg5.option_group.add(optSet4) # pg5.save() print("Creating product variations...") # Create the required sub_items pg1.create_all_variations() pg3.create_all_variations() pg4.create_all_variations() # pg5.create_all_variations() # set prices for full and upgrade versions of neat-software, this is an alternative to using the price_change in options, it allows for more flexability when required. # pv1 = pg5.get_product_from_options([optItem4a]) # Price(product=pv1, price='5.00').save() # Price(product=pv1, price='2.00', quantity=50).save() # DownloadableProduct(product=pv1).save() # pv2 = pg5.get_product_from_options([optItem4b]) # Price(product=pv2, price='1.00').save() # DownloadableProduct(product=pv2).save() print("Create a test user...") # First see if our test user is still there, then use or create that user try: test_user = User.objects.get(username="******") except: test_user = User.objects.create_user( "csmith", "*****@*****.**", "test" ) test_user.save() c1.user = test_user c1.save()
def handle_noargs(self, **options): from satchmo.contact.models import Contact, AddressBook, PhoneNumber from satchmo.product.models import ( Product, Price, ConfigurableProduct, ProductVariation, Category, OptionGroup, Option, ProductImage, ) # , DownloadableProduct from satchmo.shop.models import Config from django.conf import settings from satchmo.l10n.models import Country from django.contrib.sites.models import Site from django.contrib.auth.models import User # idempotency test print("Checking for existing sample data.") try: p = Product.objects.get(slug="dj-rocks") print( "It looks like you already have loaded the sample store data, quitting." ) import sys sys.exit(1) except Product.DoesNotExist: pass print("Loading sample store data.") # Load basic configuration information print("Creating site...") try: site = Site.objects.get(id=settings.SITE_ID) print(("Using existing site #%i" % settings.SITE_ID)) except Site.DoesNotExist: print("Creating Example Store Site") site = Site(domain="localhost", name="Sample Store") site.domain = settings.SITE_DOMAIN site.name = settings.SITE_NAME site.save() store_country = Country.objects.get(iso3_code="USA") config = Config( site=site, store_name=settings.SITE_NAME, no_stock_checkout=True, country=store_country, sales_country=store_country, ) config.save() config.shipping_countries.add(store_country) config.save() print("Creating Customers...") # Import some customers c1 = Contact( first_name="Chris", last_name="Smith", email="*****@*****.**", role="Customer", notes="Really cool stuff", ) c1.save() p1 = PhoneNumber(contact=c1, phone="601-555-5511", type="Home", primary=True) p1.save() c2 = Contact( first_name="John", last_name="Smith", email="*****@*****.**", role="Customer", notes="Second user", ) c2.save() p2 = PhoneNumber(contact=c2, phone="999-555-5111", type="Work", primary=True) p2.save() # Import some addresses for these customers us = Country.objects.get(iso2_code="US") a1 = AddressBook( description="Home", street1="8235 Pike Street", city="Anywhere Town", state="TN", postal_code="38138", country=us, is_default_shipping=True, contact=c1, ) a1.save() a2 = AddressBook( description="Work", street1="1245 Main Street", city="Stillwater", state="MN", postal_code="55082", country=us, is_default_shipping=True, contact=c2, ) a2.save() print("Creating Categories...") # Create some categories cat1 = Category( site=site, name="Shirts", slug="shirts", description="Women's Shirts" ) cat1.save() cat2 = Category( site=site, name="Short Sleeve", slug="shortsleeve", description="Short sleeve shirts", parent=cat1, ) cat2.save() cat3 = Category(site=site, name="Books", slug="book", description="Books") cat3.save() cat4 = Category( site=site, name="Fiction", slug="fiction", description="Fiction Books", parent=cat3, ) cat4.save() cat5 = Category( site=site, name="Science Fiction", slug="scifi", description="Science Fiction", parent=cat4, ) cat5.save() cat6 = Category( site=site, name="Non Fiction", slug="nonfiction", description="Non Fiction", parent=cat3, ) cat6.save() cat7 = Category(site=site, name="Software", slug="software") cat7.save() print("Creating products...") # Create some items i1 = Product( site=site, name="Django Rocks shirt", slug="dj-rocks", description="Really cool shirt", active=True, featured=True, ) i1.save() p1 = Price(price="20.00", product=i1) p1.save() i1.category.add(cat1) i1.save() i2 = Product( site=site, name="Python Rocks shirt", slug="PY-Rocks", description="Really cool python shirt - One Size Fits All", active=True, featured=True, ) i2.save() p2 = Price(price="19.50", product=i2) p2.save() i2.category.add(cat2) i2.save() i3 = Product( site=site, name="A really neat book", slug="neat-book", description="A neat book. You should buy it.", active=True, featured=True, ) i3.save() p3 = Price(price="5.00", product=i3) p3.save() i3.category.add(cat4) i3.save() i4 = Product( site=site, name="Robots Attack!", slug="robot-attack", description="Robots try to take over the world.", active=True, featured=True, ) i4.save() p4 = Price(price="7.99", product=i4) p4.save() i4.category.add(cat5) i4.save() # i5 = Product(site=site, name="Really Neat Software", slug="neat-software", description="Example Configurable/Downloadable product", active=True, featured=True) # i5.save() # i5.category.add(cat7) # i5.save() # Create an attribute set optSet1 = OptionGroup(site=site, name="sizes", sort_order=1) optSet2 = OptionGroup(site=site, name="colors", sort_order=2) optSet1.save() optSet2.save() optSet3 = OptionGroup(site=site, name="Book type", sort_order=1) optSet3.save() optSet4 = OptionGroup(site=site, name="Full/Upgrade", sort_order=5) optSet4.save() optItem1a = Option(name="Small", value="S", sort_order=1, option_group=optSet1) optItem1a.save() optItem1b = Option(name="Medium", value="M", sort_order=2, option_group=optSet1) optItem1b.save() optItem1c = Option( name="Large", value="L", sort_order=3, price_change="1.00", option_group=optSet1, ) optItem1c.save() optItem2a = Option(name="Black", value="B", sort_order=1, option_group=optSet2) optItem2a.save() optItem2b = Option(name="White", value="W", sort_order=2, option_group=optSet2) optItem2b.save() optItem2c = Option( name="Blue", value="BL", sort_order=3, price_change="2.00", option_group=optSet2, ) optItem2c.save() optItem3a = Option( name="Hard cover", value="hard", sort_order=1, option_group=optSet3 ) optItem3a.save() optItem3b = Option( name="Soft cover", value="soft", sort_order=2, price_change="1.00", option_group=optSet3, ) optItem3b.save() optItem3c = Option( name="On tape", value="tape", sort_order=3, option_group=optSet3 ) optItem3c.save() optItem4a = Option( name="Full Version", value="full", option_group=optSet4, sort_order=1 ) optItem4a.save() optItem4b = Option( name="Upgrade Version", value="upgrade", option_group=optSet4, sort_order=2 ) optItem4b.save() # Add the option group to our items pg1 = ConfigurableProduct(product=i1) pg1.save() pg1.option_group.add(optSet1) pg1.save() pg1.option_group.add(optSet2) pg1.save() pg3 = ConfigurableProduct(product=i3) pg3.save() pg3.option_group.add(optSet3) pg3.save() pg4 = ConfigurableProduct(product=i4) pg4.save() pg4.option_group.add(optSet3) pg4.save() # pg5 = ConfigurableProduct(product=i5) # pg5.option_group.add(optSet4) # pg5.save() print("Creating product variations...") # Create the required sub_items pg1.create_all_variations() pg3.create_all_variations() pg4.create_all_variations() # pg5.create_all_variations() # set prices for full and upgrade versions of neat-software, this is an alternative to using the price_change in options, it allows for more flexability when required. # pv1 = pg5.get_product_from_options([optItem4a]) # Price(product=pv1, price='5.00').save() # Price(product=pv1, price='2.00', quantity=50).save() # DownloadableProduct(product=pv1).save() # pv2 = pg5.get_product_from_options([optItem4b]) # Price(product=pv2, price='1.00').save() # DownloadableProduct(product=pv2).save() print("Create a test user...") # First see if our test user is still there, then use or create that user try: test_user = User.objects.get(username="******") except: test_user = User.objects.create_user( "csmith", "*****@*****.**", "test" ) test_user.save() c1.user = test_user c1.save()
def pp_express_pay_ship_info_verify(request, payment_module): """Verify customer and cart. Returns: True, contact, cart on success False, destination of failure """ # Get Customer Info from Paypal Express Checkout paypal = PayPal(payment_module) if 'paypal_express_token' in request.session: paypal_express_token = request.session['paypal_express_token'] else: # If the user didn't get the authorization I redirect to the request authorization page return False response_dict = paypal.GetExpressCheckoutDetails(paypal_express_token, return_all=True) if 'SHIPTOSTREET' not in response_dict: # If the user didn't get the authorization I redirect to the request authorization page return False email = response_dict["EMAIL"][0] first_name = response_dict["FIRSTNAME"][0] last_name = response_dict["LASTNAME"][0] addressee = response_dict["SHIPTONAME"][0] street1 = response_dict["SHIPTOSTREET"][0] try: street2 = response_dict["SHIPTOSTREET2"][0] except: street2 = "" city = response_dict["SHIPTOCITY"][0] try: state = response_dict["SHIPTOSTATE"][0] except: state = " " postal_code = response_dict["SHIPTOZIP"][0] country_code = response_dict["SHIPTOCOUNTRY"][0] country = Country.objects.get(iso2_code__iexact=country_code) # I get users notes if request.user.is_authenticated(): try: contact = Contact.objects.get(user=request.user) # If the user is authenticated I don't neet to create a new contact contact.email = email contact.first_name = first_name contact.last_name = last_name # I delete the user shipping address to overwrite with paypal express data try: contact.shipping_address.delete() except: pass # I delete the user phone number to overwrite with paypal express data try: contact.primary_phone.delete() except: pass except: pass elif request.session.get(CUSTOMER_ID): try: contact = Contact.objects.get(id=request.session[CUSTOMER_ID]) contact.email = email contact.first_name = first_name contact.last_name = last_name # I delete the user shipping address to overwrite with paypal express data try: contact.shipping_address.delete() except: pass # I delete the user phone number to overwrite with paypal express data try: contact.primary_phone.delete() except: pass except Contact.DoesNotExist: del request.session[CUSTOMER_ID] try: contact except NameError: try: # If a user with the same name, email and last name exists, I get that instead of a new contact creation contact = Contact.objects.filter(email__iexact=email).filter(first_name__iexact=first_name).filter(last_name__iexact=last_name)[0] except: # if it doesn't exists, I create it contact = Contact(email=email, first_name = first_name, last_name=last_name) # If the user wrote a note, I save it try: #if the user exists, I overwrite his contact data contact.notes = contact.notes + '\n' + response_dict["NOTE"][0] except: pass # I save my contact contact.save() #request.session['CUSTOMER_ID'] = contact.id request.session[CUSTOMER_ID] = contact.id shipping_address = AddressBook(addressee=addressee, contact=contact, street1=street1, street2=street2,city = city, state=state, postal_code=postal_code,\ country=country, is_default_shipping=True) shipping_address.save() #billing_address = AddressBook(addressee=addressee, contact=contact, street1=street1, street2=street2,city = city, state=state, postal_code=postal_code,\ # country=country, is_default_shipping=True) #billing_address.save() try: phone = PhoneNumber(contact=contact, phone=response_dict["PHONENUM"][0], primary=True, type="Home") phone.save() except: log.debug("PayPal Error importing phone number: " + repr(response_dict)) # Verify that we still have items in the cart. tempCart = Cart.objects.from_request(request) tempCart.customer = contact tempCart.save() if tempCart.numItems == 0: template = lookup_template(payment_module, 'checkout/empty_cart.html') return (False, render_to_response(template, RequestContext(request))) return (True, contact, tempCart)
def save(self, contact=None, update_newsletter=True): """Save the contact info into the database. Checks to see if contact exists. If not, creates a contact and copies in the address and phone number.""" if not contact: customer = Contact() else: customer = contact data = self.cleaned_data for field in customer.__dict__.keys(): try: setattr(customer, field, data[field]) except KeyError: pass if update_newsletter and config_get_group('NEWSLETTER'): from satchmo.newsletter import update_subscription if 'newsletter' not in data: subscribed = False else: subscribed = data['newsletter'] update_subscription(contact, subscribed) if not customer.role: customer.role = "Customer" customer.save() # we need to make sure we don't blindly add new addresses # this isn't ideal, but until we have a way to manage addresses # this will force just the two addresses, shipping and billing # TODO: add address management like Amazon. bill_address = customer.billing_address if not bill_address: bill_address = AddressBook(contact=customer) address_keys = bill_address.__dict__.keys() for field in address_keys: try: setattr(bill_address, field, data[field]) except KeyError: pass bill_address.is_default_billing = True copy_address = data['copy_address'] ship_address = customer.shipping_address if copy_address: # make sure we don't have any other default shipping address if ship_address and ship_address.id != bill_address.id: ship_address.delete() bill_address.is_default_shipping = True bill_address.save() if not copy_address: if not ship_address or ship_address.id == bill_address.id: ship_address = AddressBook() for field in address_keys: try: setattr(ship_address, field, data['ship_' + field]) except KeyError: pass ship_address.is_default_shipping = True ship_address.is_default_billing = False ship_address.contact = customer ship_address.country = bill_address.country ship_address.save() if not customer.primary_phone: phone = PhoneNumber() phone.primary = True else: phone = customer.primary_phone phone.phone = data['phone'] phone.contact = customer phone.save() return customer.id
class DummyContact: if country: shipping_address = AddressBook(country_id=country.id)