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
示例#2
0
文件: tests.py 项目: hnejadi/xerobis
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
示例#3
0
文件: tests.py 项目: 34/T
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
示例#4
0
文件: forms.py 项目: hnejadi/xerobis
    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
示例#5
0
    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
示例#6
0
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
示例#7
0
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
示例#8
0
文件: forms.py 项目: 34/T
    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
示例#9
0
文件: forms.py 项目: 34/T
    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
示例#11
0
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
示例#12
0
    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
示例#13
0
文件: __init__.py 项目: banabana/fsb
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)
示例#14
0
文件: tests.py 项目: hnejadi/xerobis
    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
示例#15
0
文件: __init__.py 项目: banabana/fsb
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)
示例#16
0
    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)
示例#17
0
    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,])
示例#18
0
文件: forms.py 项目: ringemup/satchmo
    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
示例#19
0
    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
示例#20
0
    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()
示例#21
0
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)
示例#22
0
    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
示例#23
0
	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))

示例#24
0
文件: forms.py 项目: tcv1/satchmo
    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
示例#25
0
    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
示例#26
0
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)
示例#27
0
    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()
示例#29
0
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)