def make_test_order(country, state, site=None, orderitems=None): if not orderitems: orderitems = [ ('formaggio-fresco-di-carmasciano', 5), ] if not site: site = Site.objects.get_current() c = Contact(first_name="Order", last_name="Tester", role=ContactRole.objects.get(pk='Customer'), email="*****@*****.**") c.save() if not isinstance(country, Country): country = Country.objects.get(iso2_code__iexact = country) ad = AddressBook(contact=c, description="home", street1 = "via prova 123", state=state, city="Napoli", 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() for slug, qty in orderitems: p = Product.objects.get(slug=slug) price = p.unit_price item = OrderItem(order=o, product=p, quantity=qty, unit_price=price, line_item_price=price*qty) item.save() return o
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 make_test_order(country, state): c = Contact(first_name="Gift", last_name="Tester", role=ContactRole.objects.get(pk='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.0', unit_price=price, line_item_price=price*2) item1.save() detl = OrderItemDetail(name = 'email', value='*****@*****.**', sort_order=0, item=item1) detl.save() detl = OrderItemDetail(name = 'message', value='hello there', sort_order=0, item=item1) detl.save() return o
def save_contact(self, request): log.debug("Saving contact") data = self.cleaned_data password = data['password1'] email = data['email'] first_name = data['first_name'] last_name = data['last_name'] username = generate_id(first_name, last_name, email) verify = (config_value('SHOP', 'ACCOUNT_VERIFICATION') == 'EMAIL') if verify: from registration.models import RegistrationProfile user = RegistrationProfile.objects.create_inactive_user( username, password, email, send_email=True) else: user = User.objects.create_user(username, email, password) user.first_name = first_name user.last_name = last_name user.save() # If the user already has a contact, retrieve it. # Otherwise, create a new one. try: contact = Contact.objects.from_request(request, create=False) except Contact.DoesNotExist: contact = Contact() contact.user = user contact.first_name = first_name contact.last_name = last_name contact.email = email contact.role = 'Customer' contact.title = data.get('title', '') contact.save() if 'newsletter' not in data: subscribed = False else: subscribed = data['newsletter'] signals.satchmo_registration.send(self, contact=contact, subscribed=subscribed, data=data) if not verify: user = authenticate(username=username, password=password) login(request, user) send_welcome_email(email, first_name, last_name) signals.satchmo_registration_verified.send(self, contact=contact) self.contact = contact return contact
def register(self, request, **kwargs): """Use HtmlRegistrationProfile instead of default RegistrationProfile """ username = kwargs['username'] email = kwargs['email'] password = kwargs['password1'] first_name = kwargs['first_name'] last_name = kwargs['last_name'] if not username: username = generate_id(first_name, last_name, email) if Site._meta.installed: site = Site.objects.get_current() else: site = RequestSite(request) new_user = HtmlRegistrationProfile.objects.create_inactive_user( username, email, password, site) new_user.first_name = first_name new_user.last_name = last_name new_user.save() signals.user_registered.send(sender=self.__class__, user=new_user, request=request) # If the user already has a contact, retrieve it. # Otherwise, create a new one. contact = None try: contact = Contact.objects.from_request(request, create=False) except Contact.DoesNotExist: pass if contact is None: contact = Contact() contact.user = new_user contact.first_name = first_name contact.last_name = last_name contact.email = email contact.role = ContactRole.objects.get(pk='Customer') contact.title = "%s %s" % (first_name, last_name) contact.save() return new_user
def make_test_order(site, orderitems, shipping_cost='10.00', contact_info={}): default_contact_info = { 'first_name': "Order", 'last_name': "Tester", 'role': ContactRole.objects.get(pk='Customer'), 'email': "*****@*****.**", 'address': { 'description': 'home', 'street1': 'Via delle Chiaie 21', 'city': 'Napoli', 'state': 'NA', 'country': Country.objects.get(iso2_code__iexact='IT'), 'is_default_shipping': True, 'is_default_billing': True } } default_contact_info.update(contact_info) address_info = default_contact_info.pop('address') contact = Contact(**default_contact_info) contact.save() address_info['contact'] = contact address_book = AddressBook(**address_info) address_book.save() order = Order( contact=contact, shipping_cost=Decimal(shipping_cost), site = site ) order.save() for slug, quantity in orderitems: product = Product.objects.get(slug=slug) price = product.unit_price item = OrderItem( order=order, product=product, quantity=quantity, unit_price=price, line_item_price=price*quantity ) item.save() return order
def make_test_order(country, state): c = Contact(first_name="Gift", last_name="Tester", role=ContactRole.objects.get(pk='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.0', unit_price=price, line_item_price=price * 2) item1.save() detl = OrderItemDetail(name='email', value='*****@*****.**', sort_order=0, item=item1) detl.save() detl = OrderItemDetail(name='message', value='hello there', sort_order=0, item=item1) detl.save() return o
def save_contact(self, request): log.debug("Saving contact") data = self.cleaned_data password = data['password1'] email = data['email'] username = data['username'] verify = (config_value('SHOP', 'ACCOUNT_VERIFICATION') == 'EMAIL') if verify: site = Site.objects.get_current() from registration.models import RegistrationProfile # TODO: # In django-registration trunk this signature has changed. # Satchmo is going to stick with the latest release so I'm changing # this to work with 0.7 # When 0.8 comes out we're going to have to refactor to this: #user = RegistrationProfile.objects.create_inactive_user( # username, email, password, site) # See ticket #1028 where we checked in the above line prematurely user = RegistrationProfile.objects.create_inactive_user(username, '', password, email) else: user = User.objects.create_user(username, email, password) user.save() # If the user already has a contact, retrieve it. # Otherwise, create a new one. try: contact = Contact.objects.from_request(request, create=False) except Contact.DoesNotExist: contact = Contact() contact.user = user contact.name = username contact.email = email contact.title = data.get('title', '') contact.save() if 'newsletter' not in data: subscribed = False else: subscribed = data['newsletter'] signals.satchmo_registration.send(self, contact=contact, subscribed=subscribed, data=data) if not verify: user = authenticate(username=username, password=password) login(request, user) send_welcome_email(email, username, '') signals.satchmo_registration_verified.send(self, contact=contact) self.contact = contact return contact
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 for field in customer.__dict__.keys(): try: setattr(customer, field, data[field]) except KeyError: pass 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. ship_address = customer.shipping_address form_postsave.send(ContactInfoForm, object=customer, formdata=data, form=self) #if changed_location: # signals.satchmo_contact_location_changed.send(self, contact=customer) return customer.id
def make_test_order(country, state, site=None, orderitems=None): if not orderitems: orderitems = [ ('formaggio-fresco-di-carmasciano', 5), ] if not site: site = Site.objects.get_current() c = Contact(first_name="Order", last_name="Tester", role=ContactRole.objects.get(pk='Customer'), email="*****@*****.**") c.save() if not isinstance(country, Country): country = Country.objects.get(iso2_code__iexact=country) ad = AddressBook(contact=c, description="home", street1="via prova 123", state=state, city="Napoli", 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() for slug, qty in orderitems: p = Product.objects.get(slug=slug) price = p.unit_price item = OrderItem(order=o, product=p, quantity=qty, unit_price=price, line_item_price=price * qty) item.save() return o
def make_test_order(site, orderitems, shipping_cost='10.00', contact_info={}): default_contact_info = { 'first_name': "Order", 'last_name': "Tester", 'role': ContactRole.objects.get(pk='Customer'), 'email': "*****@*****.**", 'address': { 'description': 'home', 'street1': 'Via delle Chiaie 21', 'city': 'Napoli', 'state': 'NA', 'country': Country.objects.get(iso2_code__iexact='IT'), 'is_default_shipping': True, 'is_default_billing': True } } default_contact_info.update(contact_info) address_info = default_contact_info.pop('address') contact = Contact(**default_contact_info) contact.save() address_info['contact'] = contact address_book = AddressBook(**address_info) address_book.save() order = Order(contact=contact, shipping_cost=Decimal(shipping_cost), site=site) order.save() for slug, quantity in orderitems: product = Product.objects.get(slug=slug) price = product.unit_price item = OrderItem(order=order, product=product, quantity=quantity, unit_price=price, line_item_price=price * quantity) item.save() return order
def handler_create_profile(sender, user, **kwargs): try: contact = Contact.objects.get(user=user) except Contact.DoesNotExist: contact = Contact() contact.user = user #contact.first_name = first_name #contact.last_name = last_name contact.email = user.email contact.role = ContactRole.objects.get(pk='Customer') contact.title = '' contact.save() l.debug("Signal Profile Create default -> satchmo_registration_verified") signals.satchmo_registration_verified.send(sender=sender, contact=contact)
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("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 form_valid(self, form): contact = self.get_contact() new_data = self.request.POST.copy() tempCart = self.get_cart() if contact is None and self.request.user \ and self.request.user.is_authenticated(): contact = Contact(user=self.request.user) custID = form.save(self.request, cart=tempCart, contact=contact) self.request.session[CUSTOMER_ID] = custID modulename = new_data['paymentmethod'] if not modulename.startswith('PAYMENT_'): modulename = 'PAYMENT_' + modulename paymentmodule = config_get_group(modulename) url = lookup_url(paymentmodule, 'satchmo_checkout-step2') self._success_url = url return super(CheckoutForm, self).form_valid(form)
def save(self, site_skin): cd = self.cleaned_data user = User() user.username=cd['username'] user.email = cd['email'] user.first_name = cd['first_name'] user.last_name = cd['last_name'] user.is_active = True user.save() user.set_password(cd['password1']) contact = Contact() contact.user = user contact.role = ContactRole.objects.get(key='Concierge') contact.email = cd['email'] contact.save() # the listeners.sfst_object_link creates the concierge and adds it to contact.concierge. concierge = contact.concierge concierge.site_skin = site_skin concierge.contact = contact concierge.booking_type = cd['booking_type'] if 'send_checks_to_bool' in cd and cd['send_checks_to_bool']: concierge.send_checks_to = Concierge.SEND_CHECKS_TO_HOME concierge.save() super(ConciergeRegistrationForm, self).save(concierge) # create default commissions for this new concierge for tour_type in TourType.objects.filter(active=True): ConciergeCommission.objects.create(concierge=concierge, tour_type=tour_type, amount=tour_type.default_commission) # shoot emails to concierge about this c_subject = 'Your Concierge Account with SF Shuttle Tours / NY Sprinter Tours has been setup!' c_message = 'Thank you for creating your Concierge Account with us! You will now be able to easily book tours online, track your sales commission, request brochures, and send us messages through your own account.\n\n' c_message += 'PLEASE BOOKMARK THIS LINK: http://%s%s\n\n' % (django_settings.SITE_DOMAIN, reverse('concierges_home')) c_message += 'This is the link you will use on a daily basis. If you are having any trouble with your account, please call us at 415-513-5400 (for NY concierges call 1-888-996-9286) and we will be happy to help you!\n\n' c_message += 'Regards,\nSF Shuttle Tours / NY Sprinter Tours Team!\n\n' start_thread(send_mail, c_subject, c_message, django_settings.DEFAULT_FROM_EMAIL, [django_settings.DEFAULT_TO_EMAIL, contact.email]) # shoot an email to admins about this a_subject = '"%s %s" has just created a Concierge Account' % (user.first_name, user.last_name) a_message = 'Concierge Name: %s %s\n' % (user.first_name, user.last_name) a_message += 'Hotel name: %s\n' % concierge.hotel_name a_message += 'Phone number: %s %s\n' % (concierge.hotel_phone(), concierge.home_phone()) a_message += 'How often they book our tours: %s\n' % concierge.frequency a_message += 'Average number of tours they book per week: %s\n' % concierge.per_week start_thread(send_mail, a_subject, a_message, django_settings.DEFAULT_FROM_EMAIL, [django_settings.DEFAULT_TO_EMAIL,])
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 organization_name = data.pop('organization', None) if organization_name: org = Organization.objects.by_name(organization_name, create=True) customer.organization = org else: # in case customer wants to remove organization name from their profile customer.organization = None for field in customer.__dict__.keys(): try: setattr(customer, field, data[field]) except KeyError: pass if not customer.role: customer.role = ContactRole.objects.get(pk='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_id', '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: ship_field = 'ship_' + field if (not changed_location) and field in ('state', 'country_id', 'city'): if getattr(ship_address, field) != data[ship_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() form_postsave.send(ContactInfoForm, object=customer, formdata=data, form=self) if changed_location: signals.satchmo_contact_location_changed.send(self, contact=customer) return customer.id
def save_contact(self, request, force_new_contact = False): log.debug("Saving contact") data = self.cleaned_data password = data['password1'] email = data['email'] first_name = data['first_name'] last_name = data['last_name'] allow_nickname = config_value('SHOP', 'ALLOW_NICKNAME_USERNAME') if allow_nickname and data['username']: username = data['username'] else: username = generate_id(first_name, last_name, email) verify = (config_value('SHOP', 'ACCOUNT_VERIFICATION') == 'EMAIL') if verify: site = Site.objects.get_current() from registration.models import RegistrationProfile user = RegistrationProfile.objects.create_inactive_user( username, email, password, site) else: user = User.objects.create_user(username, email, password) user.first_name = first_name user.last_name = last_name user.save() # If the user already has a contact, retrieve it. # Otherwise, create a new one. contact = None if not force_new_contact: try: contact = Contact.objects.from_request(request, create=False) except Contact.DoesNotExist: pass if contact is None: contact = Contact() contact.user = user contact.first_name = first_name contact.last_name = last_name contact.email = email contact.role = ContactRole.objects.get(pk='Customer') contact.title = data.get('title', '') contact.save() if 'newsletter' not in data: subscribed = False else: subscribed = data['newsletter'] signals.satchmo_registration.send(self, contact=contact, subscribed=subscribed, data=data) if not verify: username_field = getattr(User, "USERNAME_FIELD", 'username') if username_field == 'username': user = authenticate(username=username, password=password) else: user = authenticate(username=email, password=password) login(request, user) send_welcome_email(email, first_name, last_name) signals.satchmo_registration_verified.send(self, contact=contact) self.contact = contact return contact
def handle_noargs(self, **options): from satchmo_store.contact.models import ( AddressBook, Contact, ContactOrganization, ContactOrganizationRole, ContactRole, Organization, PhoneNumber, ) from product.models import ( Category, OptionGroup, Option, Price, Product, ) from product.modules.configurable.models import ConfigurableProduct from satchmo_store.shop.models import Config from django.conf import settings from 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() try: store_country = Country.objects.get(iso3_code='USA') except Country.DoesNotExist: print "\nError: Country data should be first loaded by: python manage.py satchmo_load_l10n" import sys sys.exit(1) config = Config(site=site, store_name=settings.SITE_NAME, country=store_country, sales_country=store_country) config.save() config.shipping_countries.add(store_country) config.save() print "Creating Customers..." # Import some customers customer = ContactRole.objects.get(pk='Customer') 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 Suppliers..." #Import some suppliers supplier = ContactOrganizationRole.objects.get(pk='Supplier') company = ContactOrganization.objects.get(pk='Company') contactsupplier = ContactRole.objects.get(pk='Supplier') org1 = Organization(name="Rhinestone Ronny", type=company, role=supplier) org1.save() c4 = Contact(first_name="Fred", last_name="Jones", email="*****@*****.**", role=contactsupplier, 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", country=us, 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(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.00').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 update_master_data(request): init_data = {} shop = Config.objects.get_current() try: contact = Contact.objects.from_request(request, create=False) except Contact.DoesNotExist: contact = None if request.method == "POST": new_data = request.POST.copy() form = ExtendedContactInfoForm(data=new_data, shop=shop, contact=contact, shippable=True, initial=init_data) if form.is_valid(): if contact is None and request.user: contact = Contact(user=request.user) custID = form.save(contact=contact) request.session[CUSTOMER_ID] = custID redirect_to = request.REQUEST.get(REDIRECT_FIELD_NAME, '') if not redirect_to or '//' in redirect_to or ' ' in redirect_to: redirect_to = urlresolvers.reverse('satchmo_account_info') return http.HttpResponseRedirect(redirect_to) else: signals.satchmo_contact_view.send(contact, contact=contact, contact_dict=init_data) else: if contact: #If a person has their contact info, make sure we populate it in the form for item in contact.__dict__.keys(): init_data[item] = getattr(contact, item) if contact.shipping_address: for item in contact.shipping_address.__dict__.keys(): init_data["ship_" + item] = getattr( contact.shipping_address, item) if contact.billing_address: for item in contact.billing_address.__dict__.keys(): init_data[item] = getattr(contact.billing_address, item) if contact.primary_phone: init_data['phone'] = contact.primary_phone.phone if contact.organization: init_data['organization'] = contact.organization.name else: #If a person has no contact info, try to get some from its user account if request.user: for field in ('email', 'first_name', 'last_name'): if getattr(request.user, field, False): init_data[field] = getattr(request.user, field) signals.satchmo_contact_view.send(contact, contact=contact, contact_dict=init_data) form = ExtendedContactInfoForm(shop=shop, contact=contact, shippable=True, initial=init_data) init_data['form'] = form if shop.in_country_only: init_data['country'] = shop.sales_country else: countries = shop.countries() if countries and countries.count() == 1: init_data['country'] = countries[0] init_data['next'] = request.REQUEST.get(REDIRECT_FIELD_NAME, '') context = RequestContext(request, init_data) return render_to_response('update_master_data.html', context_instance=context)
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 organization_name = data.pop('organization', None) if organization_name: org = Organization.objects.by_name(organization_name, create=True) customer.organization = org else: # in case customer wants to remove organization name from their profile customer.organization = None for field in customer.__dict__.keys(): try: setattr(customer, field, data[field]) except KeyError: pass if not customer.role: customer.role = ContactRole.objects.get(pk='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_id', '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 try: setattr(ship_address, "addressee",data.get('ship_addressee', "")) setattr(bill_address, "addressee",data.get('addressee', "")) except AttributeError: pass # If we are copying the address and one isn't in place for shipping # copy it if not getattr(ship_address, "addressee", False) and copy_address: try: ship_address.addressee = bill_address.addressee except AttributeError: pass # Make sure not to overwrite a custom ship to name if copy_address and getattr(ship_address, "addressee", "") == getattr(bill_address, "addressee", ""): # 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 we have different ship to and bill to names, preserve them if not copy_address or getattr(ship_address, "addressee", "") != getattr(bill_address, "addressee", ""): if not ship_address or ship_address.id == bill_address.id: ship_address = AddressBook() for field in address_keys: ship_field = 'ship_' + field if (not changed_location) and field in ('state', 'country_id', 'city'): if getattr(ship_address, field) != data[ship_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() form_postsave.send(ContactInfoForm, object=customer, formdata=data, form=self) if changed_location: signals.satchmo_contact_location_changed.send(self, contact=customer) return customer.id
null=True)) # # # TaxRate.add_to_class('site', models.ForeignKey(Site, blank=True, null=True)) # # satchmo_store.contact # ContactInteractionType.add_to_class('site', models.ForeignKey(Site, blank=True, null=True)) ContactOrganizationRole.add_to_class('site', models.ForeignKey(Site, blank=True, null=True)) ContactRole.add_to_class('site', models.ForeignKey(Site, blank=True, null=True)) Interaction.add_to_class('site', models.ForeignKey(Site, blank=True, null=True)) Contact.add_to_class('site', models.ForeignKey(Site, blank=True, null=True)) Organization.add_to_class('site', models.ForeignKey(Site, blank=True, null=True)) ContactOrganization.add_to_class('site', models.ForeignKey(Site, blank=True, null=True))
def save_contact(self, request): log.debug("Saving contact") data = self.cleaned_data password = data['password1'] email = data['email'] first_name = data['first_name'] last_name = data['last_name'] username = generate_id(first_name, last_name, email) verify = (config_value('SHOP', 'ACCOUNT_VERIFICATION') == 'EMAIL') if verify: site = Site.objects.get_current() from registration.models import RegistrationProfile # TODO: # In django-registration trunk this signature has changed. # Satchmo is going to stick with the latest release so I'm changing # this to work with 0.7 # When 0.8 comes out we're going to have to refactor to this: #user = RegistrationProfile.objects.create_inactive_user( # username, email, password, site) # See ticket #1028 where we checked in the above line prematurely user = RegistrationProfile.objects.create_inactive_user( username, password, email) else: user = User.objects.create_user(username, email, password) user.first_name = first_name user.last_name = last_name user.save() # If the user already has a contact, retrieve it. # Otherwise, create a new one. try: contact = Contact.objects.from_request(request, create=False) except Contact.DoesNotExist: contact = Contact() contact.user = user contact.first_name = first_name contact.last_name = last_name contact.email = email contact.role = ContactRole.objects.get(pk='Customer') contact.title = data.get('title', '') contact.save() if 'newsletter' not in data: subscribed = False else: subscribed = data['newsletter'] signals.satchmo_registration.send(self, contact=contact, subscribed=subscribed, data=data) if not verify: user = authenticate(username=username, password=password) login(request, user) send_welcome_email(email, first_name, last_name) signals.satchmo_registration_verified.send(self, contact=contact) self.contact = contact return contact
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 complete_process(request, backend, *args, **kwargs): """Authentication complete process""" # pop redirect value before the session is trashed on login() redirect_value = request.session.get(REDIRECT_FIELD_NAME, '') user = auth_complete(request, backend, *args, **kwargs) if isinstance(user, HttpResponse): return user if not user and request.user.is_authenticated(): return HttpResponseRedirect(redirect_value) if user: if getattr(user, 'is_active', True): # catch is_new flag before login() might reset the instance is_new = getattr(user, 'is_new', False) login(request, user) # add cart ljj-2012-10-12 from satchmo_store.contact.models import Contact from satchmo_store.contact.models import ContactRole try: contact = Contact.objects.from_request(request) except Contact.DoesNotExist: contact = None if contact == None: contact = Contact(user=request.user) contact.first_name = request.user.username # set customer role as default role contact.role = ContactRole.objects.get(pk='Customer') contact.save() from satchmo_store.accounts.views import _assign_cart, _get_prev_cart from livesettings import config_value _assign_cart(request) if config_value('SHOP','PERSISTENT_CART'): _get_prev_cart(request) # user.social_user is the used UserSocialAuth instance defined # in authenticate process social_user = user.social_user if redirect_value: request.session[REDIRECT_FIELD_NAME] = redirect_value or \ DEFAULT_REDIRECT if setting('SOCIAL_AUTH_SESSION_EXPIRATION', True): # Set session expiration date if present and not disabled by # setting. Use last social-auth instance for current provider, # users can associate several accounts with a same provider. expiration = social_user.expiration_datetime() if expiration: try: request.session.set_expiry(expiration) except OverflowError: # Handle django time zone overflow, set default expiry. request.session.set_expiry(None) # store last login backend name in session key = setting('SOCIAL_AUTH_LAST_LOGIN', 'social_auth_last_login_backend') request.session[key] = social_user.provider # Remove possible redirect URL from session, if this is a new # account, send him to the new-users-page if defined. new_user_redirect = backend_setting(backend, 'SOCIAL_AUTH_NEW_USER_REDIRECT_URL') if new_user_redirect and is_new: url = new_user_redirect else: url = redirect_value or \ backend_setting(backend, 'SOCIAL_AUTH_LOGIN_REDIRECT_URL') or \ DEFAULT_REDIRECT else: url = backend_setting(backend, 'SOCIAL_AUTH_INACTIVE_USER_URL', LOGIN_ERROR_URL) else: msg = setting('LOGIN_ERROR_MESSAGE', None) if msg: messages.error(request, msg) url = backend_setting(backend, 'LOGIN_ERROR_URL', LOGIN_ERROR_URL) return HttpResponseRedirect(url)
def save_contact(self, request, force_new_contact = False): log.debug("Saving contact") data = self.cleaned_data password = data['password1'] email = data['email'] first_name = data['first_name'] last_name = data['last_name'] allow_nickname = config_value('SHOP', 'ALLOW_NICKNAME_USERNAME') if allow_nickname and data['username']: username = data['username'] else: username = generate_id(first_name, last_name, email) verify = (config_value('SHOP', 'ACCOUNT_VERIFICATION') == 'EMAIL') if verify: site = Site.objects.get_current() from registration.models import RegistrationProfile user = RegistrationProfile.objects.create_inactive_user( username, email, password, site) else: user = User.objects.create_user(username, email, password) user.first_name = first_name user.last_name = last_name user.save() # If the user already has a contact, retrieve it. # Otherwise, create a new one. contact = None if not force_new_contact: try: contact = Contact.objects.from_request(request, create=False) except Contact.DoesNotExist: pass if contact is None: contact = Contact() contact.user = user contact.first_name = first_name contact.last_name = last_name contact.email = email contact.role = ContactRole.objects.get(pk='Customer') contact.title = data.get('title', '') contact.save() if 'newsletter' not in data: subscribed = False else: subscribed = data['newsletter'] signals.satchmo_registration.send(self, contact=contact, subscribed=subscribed, data=data) if not verify: user = authenticate(username=username, password=password) login(request, user) send_welcome_email(email, first_name, last_name) signals.satchmo_registration_verified.send(self, contact=contact) self.contact = contact return contact
def handle_noargs(self, **options): from satchmo_store.contact.models import ( AddressBook, Contact, ContactOrganization, ContactOrganizationRole, ContactRole, Organization, PhoneNumber, ) from product.models import ( Category, OptionGroup, Option, Price, Product, ) from product.modules.configurable.models import ConfigurableProduct from satchmo_store.shop.models import Config from django.conf import settings from 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() try: store_country = Country.objects.get(iso3_code='USA') except Country.DoesNotExist: print "\nError: Country data should be first loaded by: python manage.py satchmo_load_l10n" import sys sys.exit(1) config = Config(site=site, store_name=settings.SITE_NAME, country=store_country, sales_country=store_country) config.save() config.shipping_countries.add(store_country) config.save() print "Creating Customers..." # Import some customers customer = ContactRole.objects.get(pk='Customer') 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 Suppliers..." #Import some suppliers supplier = ContactOrganizationRole.objects.get(pk='Supplier') company = ContactOrganization.objects.get(pk='Company') contactsupplier = ContactRole.objects.get(pk='Supplier') org1 = Organization(name="Rhinestone Ronny", type=company, role=supplier) org1.save() c4 = Contact(first_name="Fred", last_name="Jones", email="*****@*****.**", role=contactsupplier, 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", country=us, 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(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(name="Books",slug="book",description="Books") cat3.save() cat3.site.add(site) '''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(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="Purusha Suktam", slug="Advyata", description="A neat book. You should buy it.", active=True, featured=True) i3.save() i3.site.add(site) p3 = Price(price="5.00", product=i3) p3.save() i3.category.add(cat3) i3.save() i3.site.add(site) '''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(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(name="Book type", sort_order=1) optSet3.save() optSet3.site.add(site) '''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.00').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 contact_info(request, **kwargs): """View which collects demographic information from customer.""" #First verify that the cart exists and has items tempCart = Cart.objects.from_request(request) if tempCart.numItems == 0: return render_to_response('shop/checkout/empty_cart.html', context_instance=RequestContext(request)) if not request.user.is_authenticated() and config_value( 'SHOP', 'AUTHENTICATION_REQUIRED'): url = urlresolvers.reverse('satchmo_checkout_auth_required') thisurl = urlresolvers.reverse('satchmo_checkout-step1') return http.HttpResponseRedirect(url + "?next=" + thisurl) init_data = {} shop = Config.objects.get_current() if request.user.is_authenticated(): if request.user.email: init_data['email'] = request.user.email if request.user.first_name: init_data['first_name'] = request.user.first_name if request.user.last_name: init_data['last_name'] = request.user.last_name try: contact = Contact.objects.from_request(request, create=False) except Contact.DoesNotExist: contact = None try: order = Order.objects.from_request(request) if order.discount_code: init_data['discount'] = order.discount_code except Order.DoesNotExist: pass if request.method == "POST": new_data = request.POST.copy() if not tempCart.is_shippable: new_data['copy_address'] = True form = PaymentContactInfoForm(data=new_data, shop=shop, contact=contact, shippable=tempCart.is_shippable, initial=init_data, cart=tempCart) if form.is_valid(): if contact is None and request.user and request.user.is_authenticated( ): contact = Contact(user=request.user) custID = form.save(request, cart=tempCart, contact=contact) request.session[CUSTOMER_ID] = custID modulename = new_data['paymentmethod'] if not modulename.startswith('PAYMENT_'): modulename = 'PAYMENT_' + modulename paymentmodule = config_get_group(modulename) url = lookup_url(paymentmodule, 'satchmo_checkout-step2') return http.HttpResponseRedirect(url) else: log.debug("Form errors: %s", form.errors) else: if contact: #If a person has their contact info, make sure we populate it in the form for item in contact.__dict__.keys(): init_data[item] = getattr(contact, item) if contact.shipping_address: for item in contact.shipping_address.__dict__.keys(): init_data["ship_" + item] = getattr( contact.shipping_address, item) if contact.billing_address: for item in contact.billing_address.__dict__.keys(): init_data[item] = getattr(contact.billing_address, item) if contact.primary_phone: init_data['phone'] = contact.primary_phone.phone else: # Allow them to login from this page. request.session.set_test_cookie() #Request additional init_data form_initialdata.send(sender=PaymentContactInfoForm, initial=init_data, contact=contact, cart=tempCart, shop=shop) form = PaymentContactInfoForm(shop=shop, contact=contact, shippable=tempCart.is_shippable, initial=init_data, cart=tempCart) if shop.in_country_only: only_country = shop.sales_country else: only_country = None context = RequestContext( request, { 'form': form, 'country': only_country, 'paymentmethod_ct': len(form.fields['paymentmethod'].choices) }) return render_to_response('shop/checkout/form.html', context_instance=context)