Example #1
0
    def setUp(self):
        self.US = Country.objects.get(iso2_code__iexact = 'US')
        self.site = Site.objects.get_current()
        tax = config_get('TAX','MODULE')
        tax.update('satchmo.tax.modules.no')
        c = Contact(first_name="Jim", last_name="Tester", 
            role="Customer", email="*****@*****.**")
        c.save()
        ad = AddressBook(contact=c, description="home",
            street1 = "test", state="OR", city="Portland",
            country = self.US, is_default_shipping=True,
            is_default_billing=True)
        ad.save()
        o = Order(contact=c, shipping_cost=Decimal('6.00'), site=self.site)
        o.save()
        small = Order(contact=c, shipping_cost=Decimal('6.00'), site=self.site)
        small.save()

        p = Product.objects.get(slug='neat-book-soft')
        price = p.unit_price
        item1 = OrderItem(order=o, product=p, quantity=1,
            unit_price=price, line_item_price=price)
        item1.save()
        
        item1s = OrderItem(order=small, product=p, quantity=1,
            unit_price=price, line_item_price=price)
        item1s.save()
        
        p = Product.objects.get(slug='neat-book-hard')
        price = p.unit_price
        item2 = OrderItem(order=o, product=p, quantity=1,
            unit_price=price, line_item_price=price)
        item2.save()
        self.order = o
        self.small = small
Example #2
0
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
Example #3
0
    def test_base_contact(self):
        """Test creating a contact"""

        contact1 = Contact.objects.create(first_name="Jim",
                                          last_name="Tester",
                                          role="Customer",
                                          email="*****@*****.**")

        self.assertEqual(contact1.full_name, u'Jim Tester')

        # Add a phone number for this person and make sure that it's the default
        phone1 = PhoneNumber.objects.create(contact=contact1,
                                            type='Home',
                                            phone="800-111-9900")
        self.assert_(contact1.primary_phone)
        self.assertEqual(contact1.primary_phone.phone, '800-111-9900')
        self.assertEqual(phone1.type, 'Home')

        # Make sure that new primary phones become the default, and that
        # non-primary phones don't become the default when a default already exists.
        phone2 = PhoneNumber.objects.create(contact=contact1,
                                            type='Work',
                                            phone="800-222-9901",
                                            primary=True)
        PhoneNumber.objects.create(contact=contact1,
                                   type="Mobile",
                                   phone="800-333-9902")
        self.assertEqual(contact1.primary_phone, phone2)

        #Add an address & make sure it is default billing and shipping
        add1 = AddressBook.objects.create(contact=contact1,
                                          description="Home Address",
                                          street1="56 Cool Lane",
                                          city="Niftyville",
                                          state="IA",
                                          postal_code="12344",
                                          country=self.us)
        self.assert_(contact1.billing_address)
        self.assertEqual(contact1.billing_address, add1)
        self.assertEqual(contact1.billing_address.description, "Home Address")
        self.assertEqual(add1.street1, "56 Cool Lane")

        self.assertEqual(contact1.billing_address, contact1.shipping_address)
        self.assertEqual(contact1.billing_address.street1, "56 Cool Lane")

        #Add a new shipping address
        add2 = AddressBook(description="Work Address",
                           street1="56 Industry Way",
                           city="Niftytown",
                           state="IA",
                           postal_code="12366",
                           country=self.us,
                           is_default_shipping=True)
        add2.contact = contact1
        add2.save()
        contact1.save()
        self.assertNotEqual(contact1.billing_address,
                            contact1.shipping_address)
        self.assertEqual(contact1.billing_address.description, "Home Address")
        self.assertEqual(contact1.shipping_address.description, "Work Address")
Example #4
0
def make_test_order(country, state):
    c = Contact(first_name="Gift", last_name="Tester", 
        role="Customer", email="*****@*****.**")
    c.save()
    if not isinstance(country, Country):
        country = Country.objects.get(iso2_code__iexact = country)
    ad = AddressBook(contact=c, description="home",
        street1 = "test", state=state, city="Portland",
        country = country, is_default_shipping=True,
        is_default_billing=True)
    ad.save()
    site = Site.objects.get_current()
    o = Order(contact=c, shipping_cost=Decimal('0.00'), site=site)
    o.save()

    p = Product.objects.get(slug='GIFT10')
    price = p.unit_price
    log.debug("creating with price: %s", price)
    item1 = OrderItem(order=o, product=p, quantity=2,
        unit_price=price, line_item_price=price*2)
    item1.save()

    detail = OrderItemDetail(name = 'email', value='*****@*****.**', sort_order=0, item=item1)
    detail.save()
    detail = OrderItemDetail(name = 'message', value='hello there', sort_order=0, item=item1)
    detail.save()

    return o
Example #5
0
    def setUp(self):
        self.US = Country.objects.get(iso2_code__iexact='US')
        self.site = Site.objects.get_current()
        tax = config_get('TAX', 'MODULE')
        tax.update('satchmo.tax.modules.no')
        c = Contact(first_name="Jim",
                    last_name="Tester",
                    role="Customer",
                    email="*****@*****.**")
        c.save()
        ad = AddressBook(contact=c,
                         description="home",
                         street1="test",
                         state="OR",
                         city="Portland",
                         country=self.US,
                         is_default_shipping=True,
                         is_default_billing=True)
        ad.save()
        o = Order(contact=c, shipping_cost=Decimal('6.00'), site=self.site)
        o.save()
        small = Order(contact=c, shipping_cost=Decimal('6.00'), site=self.site)
        small.save()

        p = Product.objects.get(slug='neat-book-soft')
        price = p.unit_price
        item1 = OrderItem(order=o,
                          product=p,
                          quantity=1,
                          unit_price=price,
                          line_item_price=price)
        item1.save()

        item1s = OrderItem(order=small,
                           product=p,
                           quantity=1,
                           unit_price=price,
                           line_item_price=price)
        item1s.save()

        p = Product.objects.get(slug='neat-book-hard')
        price = p.unit_price
        item2 = OrderItem(order=o,
                          product=p,
                          quantity=1,
                          unit_price=price,
                          line_item_price=price)
        item2.save()
        self.order = o
        self.small = small
Example #6
0
def make_test_order(country, state, include_non_taxed=False):
    warnings.warn(
        "make_test_order is deprecated - Use TestOrderFactory instead",
        DeprecationWarning,
    )
    c = Contact(first_name="Tax",
                last_name="Tester",
                role="Customer",
                email="*****@*****.**")
    c.save()
    if not isinstance(country, Country):
        country = Country.objects.get(iso2_code__iexact=country)

    ad = AddressBook(
        contact=c,
        description="home",
        street1="test",
        state=state,
        city="Portland",
        country=country,
        is_default_shipping=True,
        is_default_billing=True,
    )
    ad.save()
    o = Order(contact=c, shipping_cost=Decimal("10.00"))
    o.save()

    p = Product.objects.get(slug="dj-rocks-s-b")
    price = p.unit_price
    item1 = OrderItem(order=o,
                      product=p,
                      quantity=5,
                      unit_price=price,
                      line_item_price=price * 5)
    item1.save()

    if include_non_taxed:
        p = Product.objects.get(slug="neat-book-hard")
        price = p.unit_price
        item2 = OrderItem(order=o,
                          product=p,
                          quantity=1,
                          unit_price=price,
                          line_item_price=price)
        item2.save()

    return o
Example #7
0
def make_test_order(country, state):
    c = Contact(first_name="Gift",
                last_name="Tester",
                role="Customer",
                email="*****@*****.**")
    c.save()
    if not isinstance(country, Country):
        country = Country.objects.get(iso2_code__iexact=country)
    ad = AddressBook(
        contact=c,
        description="home",
        street1="test",
        state=state,
        city="Portland",
        country=country,
        is_default_shipping=True,
        is_default_billing=True,
    )
    ad.save()
    o = Order(contact=c, shipping_cost=Decimal("0.00"))
    o.save()

    p = Product.objects.get(slug="GIFT10")
    price = p.unit_price
    log.debug("creating with price: %s", price)
    item1 = OrderItem(order=o,
                      product=p,
                      quantity=2,
                      unit_price=price,
                      line_item_price=price * 2)
    item1.save()

    detail = OrderItemDetail(name="email",
                             value="*****@*****.**",
                             sort_order=0,
                             item=item1)
    detail.save()
    detail = OrderItemDetail(name="message",
                             value="hello there",
                             sort_order=0,
                             item=item1)
    detail.save()

    return o
Example #8
0
    def test_base_contact(self):
        """Test creating a contact"""

        contact1 = Contact.objects.create(first_name="Jim", last_name="Tester",
                                          role="Customer", email="*****@*****.**")

        self.assertEqual(contact1.full_name, u'Jim Tester')

        # Add a phone number for this person and make sure that it's the default
        phone1 = PhoneNumber.objects.create(contact=contact1, type='Home', phone="800-111-9900")
        self.assert_(contact1.primary_phone)
        self.assertEqual(contact1.primary_phone.phone, '800-111-9900')
        self.assertEqual(phone1.type, 'Home')

        # Make sure that new primary phones become the default, and that
        # non-primary phones don't become the default when a default already exists.
        phone2 = PhoneNumber.objects.create(contact=contact1, type='Work', phone="800-222-9901", primary=True)
        PhoneNumber.objects.create(contact=contact1, type="Mobile", phone="800-333-9902")
        self.assertEqual(contact1.primary_phone, phone2)

        #Add an address & make sure it is default billing and shipping
        add1 = AddressBook.objects.create(contact=contact1, description="Home Address",
                                          street1="56 Cool Lane", city="Niftyville",
                                          state="IA", postal_code="12344",
                                          country=self.us)
        self.assert_(contact1.billing_address)
        self.assertEqual(contact1.billing_address, add1)
        self.assertEqual(contact1.billing_address.description, "Home Address")
        self.assertEqual(add1.street1, "56 Cool Lane")

        self.assertEqual(contact1.billing_address, contact1.shipping_address)
        self.assertEqual(contact1.billing_address.street1, "56 Cool Lane")

        #Add a new shipping address
        add2 = AddressBook(description="Work Address", street1="56 Industry Way", city="Niftytown",
                           state="IA", postal_code="12366", country=self.us, is_default_shipping=True)
        add2.contact = contact1
        add2.save()
        contact1.save()
        self.assertNotEqual(contact1.billing_address, contact1.shipping_address)
        self.assertEqual(contact1.billing_address.description, "Home Address")
        self.assertEqual(contact1.shipping_address.description, "Work Address")
Example #9
0
def load_data():
    from satchmo.contact.models import Contact, AddressBook, PhoneNumber
    from satchmo.product.models import Product, Price, ConfigurableProduct, ProductVariation, Category, OptionGroup, Option, ProductImage  #, DownloadableProduct
    from satchmo.supplier.models import Organization
    from satchmo.shop.models import Config
    from django.conf import settings
    from satchmo.l10n.models import Country
    #Load basic configuration information
    print "Creating site..."
    site = Site.objects.get(id=settings.SITE_ID)
    site.domain = settings.SITE_DOMAIN
    site.name = settings.SITE_NAME
    site.save()
    store_country = Country.objects.get(iso3_code='USA')
    config = Config(site=site,
                    store_name=settings.SITE_NAME,
                    no_stock_checkout=False,
                    country=store_country,
                    sales_country=store_country)
    config.save()
    print "Creating Customers..."
    # Import some customers
    c1 = Contact(first_name="Chris",
                 last_name="Smith",
                 email="*****@*****.**",
                 role="Customer",
                 notes="Really cool stuff")
    c1.save()
    p1 = PhoneNumber(contact=c1,
                     phone="601-555-5511",
                     type="Home",
                     primary=True)
    p1.save()
    c2 = Contact(first_name="John",
                 last_name="Smith",
                 email="*****@*****.**",
                 role="Customer",
                 notes="Second user")
    c2.save()
    p2 = PhoneNumber(contact=c2,
                     phone="999-555-5111",
                     type="Work",
                     primary=True)
    p2.save()
    # Import some addresses for these customers
    a1 = AddressBook(description="Home",
                     street1="8235 Pike Street",
                     city="Anywhere Town",
                     state="TN",
                     postal_code="38138",
                     country="US",
                     is_default_shipping=True,
                     contact=c1)
    a1.save()
    a2 = AddressBook(description="Work",
                     street1="1245 Main Street",
                     city="Stillwater",
                     state="MN",
                     postal_code="55082",
                     country="US",
                     is_default_shipping=True,
                     contact=c2)
    a2.save()
    print "Creating Suppliers..."
    #Import some suppliers
    org1 = Organization(name="Rhinestone Ronny",
                        type="Company",
                        role="Supplier")
    org1.save()
    c4 = Contact(first_name="Fred",
                 last_name="Jones",
                 email="*****@*****.**",
                 role="Supplier",
                 organization=org1)
    c4.save()
    p4 = PhoneNumber(contact=c4,
                     phone="800-188-7611",
                     type="Work",
                     primary=True)
    p4.save()
    p5 = PhoneNumber(contact=c4, phone="755-555-1111", type="Fax")
    p5.save()
    a3 = AddressBook(contact=c4,
                     description="Mailing address",
                     street1="Receiving Dept",
                     street2="918 Funky Town St",
                     city="Fishkill",
                     state="NJ",
                     postal_code="19010")
    a3.save()
    #s1 = Supplier(name="Rhinestone Ronny", address1="918 Funky Town St", address2="Suite 200",
    #              city="Fishkill", state="NJ", zip="19010", phone1="800-188-7611", fax="900-110-1909", email="*****@*****.**",
    #              notes="My main supplier")
    #s1.save()

    #s2 = Supplier(name="Shirt Sally", address1="9 ABC Lane",
    #    city="Happyville", state="MD", zip="190111", phone1="888-888-1111", fax="999-110-1909", email="*****@*****.**",
    #              notes="Shirt Supplier")
    #s2.save()

    print "Creating Categories..."
    #Create some categories
    cat1 = Category(name="Shirts", slug="shirts", description="Women's Shirts")
    cat1.save()
    cat2 = Category(name="Short Sleeve",
                    slug="shortsleeve",
                    description="Short sleeve shirts",
                    parent=cat1)
    cat2.save()
    cat3 = Category(name="Books", slug="book", description="Books")
    cat3.save()
    cat4 = Category(name="Fiction",
                    slug="fiction",
                    description="Fiction Books",
                    parent=cat3)
    cat4.save()
    cat5 = Category(name="Science Fiction",
                    slug="scifi",
                    description="Science Fiction",
                    parent=cat4)
    cat5.save()
    cat6 = Category(name="Non Fiction",
                    slug="nonfiction",
                    description="Non Fiction",
                    parent=cat3)
    cat6.save()
    cat7 = Category(name="Software", slug="software")
    cat7.save()

    print "Creating products..."
    #Create some items
    i1 = Product(name="Django Rocks shirt",
                 slug="DJ-Rocks",
                 description="Really cool shirt",
                 active=True,
                 featured=True)
    i1.save()
    p1 = Price(price="20.00", product=i1)
    p1.save()
    i1.category.add(cat1)
    i1.save()
    i2 = Product(name="Python Rocks shirt",
                 slug="PY-Rocks",
                 description="Really cool python shirt - One Size Fits All",
                 active=True,
                 featured=True)
    i2.save()
    p2 = Price(price="19.50", product=i2)
    p2.save()
    i2.category.add(cat2)
    i2.save()
    i3 = Product(name="A really neat book",
                 slug="neat-book",
                 description="A neat book.  You should buy it.",
                 active=True,
                 featured=True)
    i3.save()
    p3 = Price(price="5.00", product=i3)
    p3.save()
    i3.category.add(cat4)
    i3.save()
    i4 = Product(name="Robots Attack!",
                 slug="robot-attack",
                 description="Robots try to take over the world.",
                 active=True,
                 featured=True)
    i4.save()
    p4 = Price(price="7.99", product=i4)
    p4.save()
    i4.category.add(cat5)
    i4.save()

    #    i5 = Product(name="Really Neat Software", slug="neat-software", description="Example Configurable/Downloadable product", active=True, featured=True)
    #    i5.save()
    #    i5.category.add(cat7)
    #    i5.save()

    #Create an attribute set
    optSet1 = OptionGroup(name="sizes", sort_order=1)
    optSet2 = OptionGroup(name="colors", sort_order=2)
    optSet1.save()
    optSet2.save()

    optSet3 = OptionGroup(name="Book type", sort_order=1)
    optSet3.save()

    optSet4 = OptionGroup(name="Full/Upgrade", sort_order=5)
    optSet4.save()

    optItem1a = Option(name="Small",
                       value="S",
                       displayOrder=1,
                       optionGroup=optSet1)
    optItem1a.save()
    optItem1b = Option(name="Medium",
                       value="M",
                       displayOrder=2,
                       optionGroup=optSet1)
    optItem1b.save()
    optItem1c = Option(name="Large",
                       value="L",
                       displayOrder=3,
                       price_change=1.00,
                       optionGroup=optSet1)
    optItem1c.save()

    optItem2a = Option(name="Black",
                       value="B",
                       displayOrder=1,
                       optionGroup=optSet2)
    optItem2a.save()
    optItem2b = Option(name="White",
                       value="W",
                       displayOrder=2,
                       optionGroup=optSet2)
    optItem2b.save()
    optItem2c = Option(name="Blue",
                       value="BL",
                       displayOrder=3,
                       price_change=2.00,
                       optionGroup=optSet2)
    optItem2c.save()

    optItem3a = Option(name="Hard cover",
                       value="hard",
                       displayOrder=1,
                       optionGroup=optSet3)
    optItem3a.save()
    optItem3b = Option(name="Soft cover",
                       value="soft",
                       displayOrder=2,
                       price_change=1.00,
                       optionGroup=optSet3)
    optItem3b.save()
    optItem3c = Option(name="On tape",
                       value="tape",
                       displayOrder=3,
                       optionGroup=optSet3)
    optItem3c.save()

    optItem4a = Option(name="Full Version",
                       value="full",
                       optionGroup=optSet4,
                       displayOrder=1)
    optItem4a.save()
    optItem4b = Option(name="Upgrade Version",
                       value="upgrade",
                       optionGroup=optSet4,
                       displayOrder=2)
    optItem4b.save()

    #Add the option group to our items
    pg1 = ConfigurableProduct(product=i1)
    pg1.save()
    pg1.option_group.add(optSet1)
    pg1.save()
    pg1.option_group.add(optSet2)
    pg1.save()

    pg3 = ConfigurableProduct(product=i3)
    pg3.save()
    pg3.option_group.add(optSet3)
    pg3.save()

    pg4 = ConfigurableProduct(product=i4)
    pg4.save()
    pg4.option_group.add(optSet3)
    pg4.save()

    #    pg5 = ConfigurableProduct(product=i5)
    #    pg5.option_group.add(optSet4)
    #    pg5.save()

    print "Creating product variations..."
    #Create the required sub_items
    pg1.create_products()
    pg3.create_products()
    pg4.create_products()
    #pg5.create_products()

    #set prices for full and upgrade versions of neat-software, this is an alternative to using the price_change in options, it allows for more flexability when required.
    #    pv1 = pg5.get_product_from_options([optItem4a])
    #    Price(product=pv1, price='5.00').save()
    #    Price(product=pv1, price='2.00', quantity=50).save()
    #    DownloadableProduct(product=pv1).save()

    #    pv2 = pg5.get_product_from_options([optItem4b])
    #    Price(product=pv2, price='1.00').save()
    #    DownloadableProduct(product=pv2).save()

    print "Create a test user..."
    #First see if our test user is still there, then use or create that user
    try:
        test_user = User.objects.get(username="******")
    except:
        test_user = User.objects.create_user('csmith', '*****@*****.**',
                                             'test')
        test_user.save()
    c1.user = test_user
    c1.save()
Example #10
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
Example #11
0
def load_data():
    from satchmo.contact.models import Contact, AddressBook, PhoneNumber
    from satchmo.product.models import Product, Price, ConfigurableProduct, ProductVariation, Category, OptionGroup, Option, ProductImage#, DownloadableProduct
    from satchmo.supplier.models import Organization
    from satchmo.shop.models import Config
    from django.conf import settings
    from satchmo.l10n.models import Country
    #Load basic configuration information
    print "Creating site..."
    site = Site.objects.get(id=settings.SITE_ID)
    site.domain = settings.SITE_DOMAIN  
    site.name = settings.SITE_NAME
    site.save()
    store_country = Country.objects.get(iso3_code='USA')
    config = Config(site=site, store_name = settings.SITE_NAME, no_stock_checkout=False, country=store_country, sales_country=store_country)
    config.save()
    config.shipping_countries.add(store_country)
    config.save()
    print "Creating Customers..."
    # Import some customers
    c1 = Contact(first_name="Chris", last_name="Smith", email="*****@*****.**", role="Customer", notes="Really cool stuff")
    c1.save()
    p1 = PhoneNumber(contact=c1, phone="601-555-5511", type="Home",primary=True)
    p1.save()
    c2 = Contact(first_name="John", last_name="Smith", email="*****@*****.**", role="Customer", notes="Second user")
    c2.save()
    p2 = PhoneNumber(contact=c2, phone="999-555-5111", type="Work",primary=True)
    p2.save()
    # Import some addresses for these customers
    a1 = AddressBook(description="Home", street1="8235 Pike Street", city="Anywhere Town", state="TN",
                 postal_code="38138", country="US", is_default_shipping=True, contact=c1)
    a1.save()
    a2 = AddressBook(description="Work", street1="1245 Main Street", city="Stillwater", state="MN",
                 postal_code="55082", country="US", is_default_shipping=True, contact=c2)
    a2.save()
    print "Creating Suppliers..."
    #Import some suppliers
    org1 = Organization(name="Rhinestone Ronny", type="Company",role="Supplier")
    org1.save()
    c4 = Contact(first_name="Fred", last_name="Jones", email="*****@*****.**", role="Supplier", organization=org1)
    c4.save()
    p4 = PhoneNumber(contact=c4,phone="800-188-7611", type="Work", primary=True)
    p4.save()
    p5 = PhoneNumber(contact=c4,phone="755-555-1111",type="Fax")
    p5.save()
    a3 = AddressBook(contact=c4, description="Mailing address", street1="Receiving Dept", street2="918 Funky Town St", city="Fishkill",
                     state="NJ", postal_code="19010")
    a3.save()
    #s1 = Supplier(name="Rhinestone Ronny", address1="918 Funky Town St", address2="Suite 200",
    #              city="Fishkill", state="NJ", zip="19010", phone1="800-188-7611", fax="900-110-1909", email="*****@*****.**",
    #              notes="My main supplier")
    #s1.save()

    #s2 = Supplier(name="Shirt Sally", address1="9 ABC Lane", 
    #    city="Happyville", state="MD", zip="190111", phone1="888-888-1111", fax="999-110-1909", email="*****@*****.**",
    #              notes="Shirt Supplier")
    #s2.save()
    
    
    print "Creating Categories..."
    #Create some categories
    cat1 = Category(name="Shirts",slug="shirts",description="Women's Shirts", site=site)
    cat1.save()
    cat2 = Category(name="Short Sleeve",slug="shortsleeve",description="Short sleeve shirts", parent=cat1, site=site)
    cat2.save()
    cat3 = Category(name="Books",slug="book",description="Books", site=site)
    cat3.save()
    cat4 = Category(name="Fiction",slug="fiction",description="Fiction Books", parent=cat3, site=site)
    cat4.save()
    cat5 = Category(name="Science Fiction",slug="scifi",description="Science Fiction",parent=cat4, site=site)
    cat5.save()
    cat6 = Category(name="Non Fiction",slug="nonfiction",description="Non Fiction",parent=cat3, site=site)
    cat6.save()
    cat7 = Category(name="Software", slug="software", site=site)
    cat7.save()
    
    
    print "Creating products..."   
    #Create some items
    i1 = Product(name="Django Rocks shirt", slug="dj-rocks", description="Really cool shirt",
             active=True, featured=True, site=site)
    i1.save()
    p1 = Price(price="20.00", product=i1)
    p1.save()
    i1.category.add(cat1)
    i1.save()
    i2 = Product(name="Python Rocks shirt", slug="PY-Rocks", description="Really cool python shirt - One Size Fits All", 
             active=True, featured=True, site=site)
    i2.save()
    p2 = Price(price="19.50", product=i2)
    p2.save()
    i2.category.add(cat2)
    i2.save()
    i3 = Product(name="A really neat book", slug="neat-book", description="A neat book.  You should buy it.", 
             active=True, featured=True, site=site)
    i3.save()
    p3 = Price(price="5.00", product=i3)
    p3.save()
    i3.category.add(cat4)
    i3.save()
    i4 = Product(name="Robots Attack!", slug="robot-attack", description="Robots try to take over the world.", 
             active=True, featured=True, site=site)
    i4.save()
    p4 = Price(price="7.99", product=i4)
    p4.save()
    i4.category.add(cat5)
    i4.save()

#    i5 = Product(name="Really Neat Software", slug="neat-software", description="Example Configurable/Downloadable product", active=True, featured=True)
#    i5.save()
#    i5.category.add(cat7)
#    i5.save()

    #Create an attribute set 
    optSet1 = OptionGroup(name="sizes", sort_order=1, site=site)
    optSet2 = OptionGroup(name="colors", sort_order=2, site=site)
    optSet1.save()
    optSet2.save()
    
    optSet3 = OptionGroup(name="Book type", sort_order=1, site=site)
    optSet3.save()

    optSet4 = OptionGroup(name="Full/Upgrade", sort_order=5, site=site)
    optSet4.save()
    
    optItem1a = Option(name="Small", value="S", sort_order=1, option_group=optSet1)
    optItem1a.save()
    optItem1b = Option(name="Medium", value="M", sort_order=2, option_group=optSet1)
    optItem1b.save()
    optItem1c = Option(name="Large", value="L", sort_order=3, price_change = Decimal("1.00"), option_group=optSet1)
    optItem1c.save()

    optItem2a = Option(name="Black", value="B", sort_order=1, option_group=optSet2)
    optItem2a.save()
    optItem2b = Option(name="White", value="W", sort_order=2, option_group=optSet2)
    optItem2b.save()
    optItem2c = Option(name="Blue", value="BL", sort_order=3, price_change=Decimal("2.00"), option_group=optSet2)
    optItem2c.save()

    optItem3a = Option(name="Hard cover", value="hard", sort_order=1, option_group=optSet3)
    optItem3a.save()
    optItem3b = Option(name="Soft cover", value="soft", sort_order=2, price_change=Decimal("1.00"), option_group=optSet3)
    optItem3b.save()
    optItem3c = Option(name="On tape", value="tape", sort_order=3, option_group=optSet3)
    optItem3c.save()

    optItem4a = Option(name="Full Version", value="full", option_group=optSet4, sort_order=1)
    optItem4a.save()
    optItem4b = Option(name="Upgrade Version", value="upgrade", option_group=optSet4, sort_order=2)
    optItem4b.save()


    #Add the option group to our items
    pg1 = ConfigurableProduct(product=i1)
    pg1.save()
    pg1.option_group.add(optSet1)
    pg1.save()
    pg1.option_group.add(optSet2)
    pg1.save()

    pg3 = ConfigurableProduct(product=i3)
    pg3.save()
    pg3.option_group.add(optSet3)
    pg3.save()
    
    pg4 = ConfigurableProduct(product=i4)
    pg4.save()
    pg4.option_group.add(optSet3)
    pg4.save()

#    pg5 = ConfigurableProduct(product=i5)
#    pg5.option_group.add(optSet4)
#    pg5.save()

    print "Creating product variations..."
    #Create the required sub_items
    pg1.create_all_variations()
    pg3.create_all_variations()
    pg4.create_all_variations()
    #pg5.create_all_variations()

    #set prices for full and upgrade versions of neat-software, this is an alternative to using the price_change in options, it allows for more flexability when required.
#    pv1 = pg5.get_product_from_options([optItem4a])
#    Price(product=pv1, price='5.00').save()
#    Price(product=pv1, price='2.00', quantity=50).save()
#    DownloadableProduct(product=pv1).save()

#    pv2 = pg5.get_product_from_options([optItem4b])
#    Price(product=pv2, price='1.00').save()
#    DownloadableProduct(product=pv2).save()
    
    print "Create a test user..."
    #First see if our test user is still there, then use or create that user
    try:
        test_user = User.objects.get(username="******")
    except:
        test_user = User.objects.create_user('csmith', '*****@*****.**', 'test')
        test_user.save()
    c1.user = test_user
    c1.save()
Example #12
0
    def handle_noargs(self, **options):
        from satchmo.contact.models import Contact, AddressBook, PhoneNumber
        from satchmo.product.models import (
            Product,
            Price,
            ConfigurableProduct,
            ProductVariation,
            Category,
            OptionGroup,
            Option,
            ProductImage,
        )  # , DownloadableProduct
        from satchmo.shop.models import Config
        from django.conf import settings
        from satchmo.l10n.models import Country
        from django.contrib.sites.models import Site
        from django.contrib.auth.models import User

        # idempotency test

        print("Checking for existing sample data.")
        try:
            p = Product.objects.get(slug="dj-rocks")
            print(
                "It looks like you already have loaded the sample store data, quitting."
            )
            import sys

            sys.exit(1)
        except Product.DoesNotExist:
            pass

        print("Loading sample store data.")

        # Load basic configuration information

        print("Creating site...")
        try:
            site = Site.objects.get(id=settings.SITE_ID)
            print(("Using existing site #%i" % settings.SITE_ID))
        except Site.DoesNotExist:
            print("Creating Example Store Site")
            site = Site(domain="localhost", name="Sample Store")
        site.domain = settings.SITE_DOMAIN
        site.name = settings.SITE_NAME
        site.save()
        store_country = Country.objects.get(iso3_code="USA")
        config = Config(
            site=site,
            store_name=settings.SITE_NAME,
            no_stock_checkout=True,
            country=store_country,
            sales_country=store_country,
        )
        config.save()
        config.shipping_countries.add(store_country)
        config.save()
        print("Creating Customers...")
        # Import some customers
        c1 = Contact(
            first_name="Chris",
            last_name="Smith",
            email="*****@*****.**",
            role="Customer",
            notes="Really cool stuff",
        )
        c1.save()
        p1 = PhoneNumber(contact=c1, phone="601-555-5511", type="Home", primary=True)
        p1.save()
        c2 = Contact(
            first_name="John",
            last_name="Smith",
            email="*****@*****.**",
            role="Customer",
            notes="Second user",
        )
        c2.save()
        p2 = PhoneNumber(contact=c2, phone="999-555-5111", type="Work", primary=True)
        p2.save()
        # Import some addresses for these customers
        us = Country.objects.get(iso2_code="US")
        a1 = AddressBook(
            description="Home",
            street1="8235 Pike Street",
            city="Anywhere Town",
            state="TN",
            postal_code="38138",
            country=us,
            is_default_shipping=True,
            contact=c1,
        )
        a1.save()
        a2 = AddressBook(
            description="Work",
            street1="1245 Main Street",
            city="Stillwater",
            state="MN",
            postal_code="55082",
            country=us,
            is_default_shipping=True,
            contact=c2,
        )
        a2.save()

        print("Creating Categories...")
        # Create some categories
        cat1 = Category(name="Shirts", slug="shirts", description="Women's Shirts")
        cat1.save()
        cat2 = Category(
            name="Short Sleeve",
            slug="shortsleeve",
            description="Short sleeve shirts",
            parent=cat1,
        )
        cat2.save()
        cat3 = Category(name="Books", slug="book", description="Books")
        cat3.save()
        cat4 = Category(
            name="Fiction", slug="fiction", description="Fiction Books", parent=cat3
        )
        cat4.save()
        cat5 = Category(
            name="Science Fiction",
            slug="scifi",
            description="Science Fiction",
            parent=cat4,
        )
        cat5.save()
        cat6 = Category(
            name="Non Fiction",
            slug="nonfiction",
            description="Non Fiction",
            parent=cat3,
        )
        cat6.save()
        cat7 = Category(name="Software", slug="software")
        cat7.save()

        print("Creating products...")
        # Create some items
        i1 = Product(
            name="Django Rocks shirt",
            slug="dj-rocks",
            description="Really cool shirt",
            active=True,
            featured=True,
        )
        i1.save()
        p1 = Price(price="20.00", product=i1)
        p1.save()
        i1.category.add(cat1)
        i1.save()
        i2 = Product(
            name="Python Rocks shirt",
            slug="PY-Rocks",
            description="Really cool python shirt - One Size Fits All",
            active=True,
            featured=True,
        )
        i2.save()
        p2 = Price(price="19.50", product=i2)
        p2.save()
        i2.category.add(cat2)
        i2.save()
        i3 = Product(
            name="A really neat book",
            slug="neat-book",
            description="A neat book.  You should buy it.",
            active=True,
            featured=True,
        )
        i3.save()
        p3 = Price(price="5.00", product=i3)
        p3.save()
        i3.category.add(cat4)
        i3.save()
        i4 = Product(
            name="Robots Attack!",
            slug="robot-attack",
            description="Robots try to take over the world.",
            active=True,
            featured=True,
        )
        i4.save()
        p4 = Price(price="7.99", product=i4)
        p4.save()
        i4.category.add(cat5)
        i4.save()

        #    i5 = Product(name="Really Neat Software", slug="neat-software", description="Example Configurable/Downloadable product", active=True, featured=True)
        #    i5.save()
        #    i5.category.add(cat7)
        #    i5.save()

        # Create an attribute set
        optSet1 = OptionGroup(name="sizes", sort_order=1)
        optSet2 = OptionGroup(name="colors", sort_order=2)
        optSet1.save()
        optSet2.save()

        optSet3 = OptionGroup(name="Book type", sort_order=1)
        optSet3.save()

        optSet4 = OptionGroup(name="Full/Upgrade", sort_order=5)
        optSet4.save()

        optItem1a = Option(name="Small", value="S", sort_order=1, option_group=optSet1)
        optItem1a.save()
        optItem1b = Option(name="Medium", value="M", sort_order=2, option_group=optSet1)
        optItem1b.save()
        optItem1c = Option(
            name="Large",
            value="L",
            sort_order=3,
            price_change="1.00",
            option_group=optSet1,
        )
        optItem1c.save()

        optItem2a = Option(name="Black", value="B", sort_order=1, option_group=optSet2)
        optItem2a.save()
        optItem2b = Option(name="White", value="W", sort_order=2, option_group=optSet2)
        optItem2b.save()
        optItem2c = Option(
            name="Blue",
            value="BL",
            sort_order=3,
            price_change="2.00",
            option_group=optSet2,
        )
        optItem2c.save()

        optItem3a = Option(
            name="Hard cover", value="hard", sort_order=1, option_group=optSet3
        )
        optItem3a.save()
        optItem3b = Option(
            name="Soft cover",
            value="soft",
            sort_order=2,
            price_change="1.00",
            option_group=optSet3,
        )
        optItem3b.save()
        optItem3c = Option(
            name="On tape", value="tape", sort_order=3, option_group=optSet3
        )
        optItem3c.save()

        optItem4a = Option(
            name="Full Version", value="full", option_group=optSet4, sort_order=1
        )
        optItem4a.save()
        optItem4b = Option(
            name="Upgrade Version", value="upgrade", option_group=optSet4, sort_order=2
        )
        optItem4b.save()

        # Add the option group to our items
        pg1 = ConfigurableProduct(product=i1)
        pg1.save()
        pg1.option_group.add(optSet1)
        pg1.save()
        pg1.option_group.add(optSet2)
        pg1.save()

        pg3 = ConfigurableProduct(product=i3)
        pg3.save()
        pg3.option_group.add(optSet3)
        pg3.save()

        pg4 = ConfigurableProduct(product=i4)
        pg4.save()
        pg4.option_group.add(optSet3)
        pg4.save()

        #    pg5 = ConfigurableProduct(product=i5)
        #    pg5.option_group.add(optSet4)
        #    pg5.save()

        print("Creating product variations...")
        # Create the required sub_items
        pg1.create_all_variations()
        pg3.create_all_variations()
        pg4.create_all_variations()
        # pg5.create_all_variations()

        # set prices for full and upgrade versions of neat-software, this is an alternative to using the price_change in options, it allows for more flexability when required.
        #    pv1 = pg5.get_product_from_options([optItem4a])
        #    Price(product=pv1, price='5.00').save()
        #    Price(product=pv1, price='2.00', quantity=50).save()
        #    DownloadableProduct(product=pv1).save()

        #    pv2 = pg5.get_product_from_options([optItem4b])
        #    Price(product=pv2, price='1.00').save()
        #    DownloadableProduct(product=pv2).save()

        print("Create a test user...")
        # First see if our test user is still there, then use or create that user
        try:
            test_user = User.objects.get(username="******")
        except:
            test_user = User.objects.create_user(
                "csmith", "*****@*****.**", "test"
            )
            test_user.save()
        c1.user = test_user
        c1.save()
Example #13
0
    def handle_noargs(self, **options):
        from satchmo.contact.models import Contact, AddressBook, PhoneNumber
        from satchmo.product.models import (
            Product,
            Price,
            ConfigurableProduct,
            ProductVariation,
            Category,
            OptionGroup,
            Option,
            ProductImage,
        )  # , DownloadableProduct
        from satchmo.shop.models import Config
        from django.conf import settings
        from satchmo.l10n.models import Country
        from django.contrib.sites.models import Site
        from django.contrib.auth.models import User

        # idempotency test

        print("Checking for existing sample data.")
        try:
            p = Product.objects.get(slug="dj-rocks")
            print(
                "It looks like you already have loaded the sample store data, quitting."
            )
            import sys

            sys.exit(1)
        except Product.DoesNotExist:
            pass

        print("Loading sample store data.")

        # Load basic configuration information

        print("Creating site...")
        try:
            site = Site.objects.get(id=settings.SITE_ID)
            print(("Using existing site #%i" % settings.SITE_ID))
        except Site.DoesNotExist:
            print("Creating Example Store Site")
            site = Site(domain="localhost", name="Sample Store")
        site.domain = settings.SITE_DOMAIN
        site.name = settings.SITE_NAME
        site.save()
        store_country = Country.objects.get(iso3_code="USA")
        config = Config(
            site=site,
            store_name=settings.SITE_NAME,
            no_stock_checkout=True,
            country=store_country,
            sales_country=store_country,
        )
        config.save()
        config.shipping_countries.add(store_country)
        config.save()
        print("Creating Customers...")
        # Import some customers
        c1 = Contact(
            first_name="Chris",
            last_name="Smith",
            email="*****@*****.**",
            role="Customer",
            notes="Really cool stuff",
        )
        c1.save()
        p1 = PhoneNumber(contact=c1, phone="601-555-5511", type="Home", primary=True)
        p1.save()
        c2 = Contact(
            first_name="John",
            last_name="Smith",
            email="*****@*****.**",
            role="Customer",
            notes="Second user",
        )
        c2.save()
        p2 = PhoneNumber(contact=c2, phone="999-555-5111", type="Work", primary=True)
        p2.save()
        # Import some addresses for these customers
        us = Country.objects.get(iso2_code="US")
        a1 = AddressBook(
            description="Home",
            street1="8235 Pike Street",
            city="Anywhere Town",
            state="TN",
            postal_code="38138",
            country=us,
            is_default_shipping=True,
            contact=c1,
        )
        a1.save()
        a2 = AddressBook(
            description="Work",
            street1="1245 Main Street",
            city="Stillwater",
            state="MN",
            postal_code="55082",
            country=us,
            is_default_shipping=True,
            contact=c2,
        )
        a2.save()

        print("Creating Categories...")
        # Create some categories
        cat1 = Category(
            site=site, name="Shirts", slug="shirts", description="Women's Shirts"
        )
        cat1.save()
        cat2 = Category(
            site=site,
            name="Short Sleeve",
            slug="shortsleeve",
            description="Short sleeve shirts",
            parent=cat1,
        )
        cat2.save()
        cat3 = Category(site=site, name="Books", slug="book", description="Books")
        cat3.save()
        cat4 = Category(
            site=site,
            name="Fiction",
            slug="fiction",
            description="Fiction Books",
            parent=cat3,
        )
        cat4.save()
        cat5 = Category(
            site=site,
            name="Science Fiction",
            slug="scifi",
            description="Science Fiction",
            parent=cat4,
        )
        cat5.save()
        cat6 = Category(
            site=site,
            name="Non Fiction",
            slug="nonfiction",
            description="Non Fiction",
            parent=cat3,
        )
        cat6.save()
        cat7 = Category(site=site, name="Software", slug="software")
        cat7.save()

        print("Creating products...")
        # Create some items
        i1 = Product(
            site=site,
            name="Django Rocks shirt",
            slug="dj-rocks",
            description="Really cool shirt",
            active=True,
            featured=True,
        )
        i1.save()
        p1 = Price(price="20.00", product=i1)
        p1.save()
        i1.category.add(cat1)
        i1.save()
        i2 = Product(
            site=site,
            name="Python Rocks shirt",
            slug="PY-Rocks",
            description="Really cool python shirt - One Size Fits All",
            active=True,
            featured=True,
        )
        i2.save()
        p2 = Price(price="19.50", product=i2)
        p2.save()
        i2.category.add(cat2)
        i2.save()
        i3 = Product(
            site=site,
            name="A really neat book",
            slug="neat-book",
            description="A neat book.  You should buy it.",
            active=True,
            featured=True,
        )
        i3.save()
        p3 = Price(price="5.00", product=i3)
        p3.save()
        i3.category.add(cat4)
        i3.save()
        i4 = Product(
            site=site,
            name="Robots Attack!",
            slug="robot-attack",
            description="Robots try to take over the world.",
            active=True,
            featured=True,
        )
        i4.save()
        p4 = Price(price="7.99", product=i4)
        p4.save()
        i4.category.add(cat5)
        i4.save()

        #    i5 = Product(site=site, name="Really Neat Software", slug="neat-software", description="Example Configurable/Downloadable product", active=True, featured=True)
        #    i5.save()
        #    i5.category.add(cat7)
        #    i5.save()

        # Create an attribute set
        optSet1 = OptionGroup(site=site, name="sizes", sort_order=1)
        optSet2 = OptionGroup(site=site, name="colors", sort_order=2)
        optSet1.save()
        optSet2.save()

        optSet3 = OptionGroup(site=site, name="Book type", sort_order=1)
        optSet3.save()

        optSet4 = OptionGroup(site=site, name="Full/Upgrade", sort_order=5)
        optSet4.save()

        optItem1a = Option(name="Small", value="S", sort_order=1, option_group=optSet1)
        optItem1a.save()
        optItem1b = Option(name="Medium", value="M", sort_order=2, option_group=optSet1)
        optItem1b.save()
        optItem1c = Option(
            name="Large",
            value="L",
            sort_order=3,
            price_change="1.00",
            option_group=optSet1,
        )
        optItem1c.save()

        optItem2a = Option(name="Black", value="B", sort_order=1, option_group=optSet2)
        optItem2a.save()
        optItem2b = Option(name="White", value="W", sort_order=2, option_group=optSet2)
        optItem2b.save()
        optItem2c = Option(
            name="Blue",
            value="BL",
            sort_order=3,
            price_change="2.00",
            option_group=optSet2,
        )
        optItem2c.save()

        optItem3a = Option(
            name="Hard cover", value="hard", sort_order=1, option_group=optSet3
        )
        optItem3a.save()
        optItem3b = Option(
            name="Soft cover",
            value="soft",
            sort_order=2,
            price_change="1.00",
            option_group=optSet3,
        )
        optItem3b.save()
        optItem3c = Option(
            name="On tape", value="tape", sort_order=3, option_group=optSet3
        )
        optItem3c.save()

        optItem4a = Option(
            name="Full Version", value="full", option_group=optSet4, sort_order=1
        )
        optItem4a.save()
        optItem4b = Option(
            name="Upgrade Version", value="upgrade", option_group=optSet4, sort_order=2
        )
        optItem4b.save()

        # Add the option group to our items
        pg1 = ConfigurableProduct(product=i1)
        pg1.save()
        pg1.option_group.add(optSet1)
        pg1.save()
        pg1.option_group.add(optSet2)
        pg1.save()

        pg3 = ConfigurableProduct(product=i3)
        pg3.save()
        pg3.option_group.add(optSet3)
        pg3.save()

        pg4 = ConfigurableProduct(product=i4)
        pg4.save()
        pg4.option_group.add(optSet3)
        pg4.save()

        #    pg5 = ConfigurableProduct(product=i5)
        #    pg5.option_group.add(optSet4)
        #    pg5.save()

        print("Creating product variations...")
        # Create the required sub_items
        pg1.create_all_variations()
        pg3.create_all_variations()
        pg4.create_all_variations()
        # pg5.create_all_variations()

        # set prices for full and upgrade versions of neat-software, this is an alternative to using the price_change in options, it allows for more flexability when required.
        #    pv1 = pg5.get_product_from_options([optItem4a])
        #    Price(product=pv1, price='5.00').save()
        #    Price(product=pv1, price='2.00', quantity=50).save()
        #    DownloadableProduct(product=pv1).save()

        #    pv2 = pg5.get_product_from_options([optItem4b])
        #    Price(product=pv2, price='1.00').save()
        #    DownloadableProduct(product=pv2).save()

        print("Create a test user...")
        # First see if our test user is still there, then use or create that user
        try:
            test_user = User.objects.get(username="******")
        except:
            test_user = User.objects.create_user(
                "csmith", "*****@*****.**", "test"
            )
            test_user.save()
        c1.user = test_user
        c1.save()
def pp_express_pay_ship_info_verify(request, payment_module):
    """Verify customer and cart.
    Returns:
    True, contact, cart on success
    False, destination of failure
    """
    # Get Customer Info from Paypal Express Checkout
    
    paypal = PayPal(payment_module)

    if 'paypal_express_token' in request.session:
        paypal_express_token = request.session['paypal_express_token']
    else:
        # If the user didn't get the authorization I redirect to the request authorization page
        return False
        
    
    response_dict = paypal.GetExpressCheckoutDetails(paypal_express_token, return_all=True)
    
    if 'SHIPTOSTREET' not in response_dict:
        # If the user didn't get the authorization I redirect to the request authorization page
        return False
        
    email = response_dict["EMAIL"][0]
    first_name = response_dict["FIRSTNAME"][0]
    last_name = response_dict["LASTNAME"][0]
    addressee = response_dict["SHIPTONAME"][0]
    street1 = response_dict["SHIPTOSTREET"][0]
    
    try:
        street2 = response_dict["SHIPTOSTREET2"][0]
    except:
        street2 = ""
        
    city = response_dict["SHIPTOCITY"][0]
    
    try:
        state = response_dict["SHIPTOSTATE"][0]
    except:
        state = " "
    postal_code = response_dict["SHIPTOZIP"][0]
    country_code = response_dict["SHIPTOCOUNTRY"][0]

    country = Country.objects.get(iso2_code__iexact=country_code)
    # I get users notes

    if request.user.is_authenticated():
        try:
            contact = Contact.objects.get(user=request.user) # If the user is authenticated I don't neet to create a new contact
            contact.email = email
            contact.first_name = first_name
            contact.last_name = last_name
            
            # I delete the user shipping address to overwrite with paypal express data
            try:
                contact.shipping_address.delete()
            except:
                pass
        
            # I delete the user phone number to overwrite with paypal express data
            try:
                contact.primary_phone.delete()
            except:
                pass

        except:
            pass
        
    elif request.session.get(CUSTOMER_ID):
            try:
                contact = Contact.objects.get(id=request.session[CUSTOMER_ID])
                contact.email = email
                contact.first_name = first_name
                contact.last_name = last_name
                
                # I delete the user shipping address to overwrite with paypal express data
                try:
                    contact.shipping_address.delete()
                except:
                    pass
        
                # I delete the user phone number to overwrite with paypal express data
                try:
                    contact.primary_phone.delete()
                except:
                    pass
                
            except Contact.DoesNotExist:
                del request.session[CUSTOMER_ID]
        
            
            
    try:
        contact    
    except NameError:
        try: # If a user with the same name, email and last name exists, I get that instead of a new contact creation
            contact = Contact.objects.filter(email__iexact=email).filter(first_name__iexact=first_name).filter(last_name__iexact=last_name)[0]
        
        except:    
            # if it doesn't exists, I create it
            contact = Contact(email=email, first_name = first_name, last_name=last_name)

    # If the user wrote a note, I save it
    try:
        #if the user exists, I overwrite his contact data
        contact.notes = contact.notes + '\n' + response_dict["NOTE"][0]
             
    except:
            pass
    
        


    # I save my contact
    contact.save()
    #request.session['CUSTOMER_ID'] = contact.id
    request.session[CUSTOMER_ID] = contact.id
    
 
    shipping_address = AddressBook(addressee=addressee, contact=contact, street1=street1, street2=street2,city = city, state=state, postal_code=postal_code,\
                                   country=country, is_default_shipping=True)
    shipping_address.save()
    
    #billing_address = AddressBook(addressee=addressee, contact=contact, street1=street1, street2=street2,city = city, state=state, postal_code=postal_code,\
    #                               country=country, is_default_shipping=True)
    #billing_address.save()
    
    try:
        phone = PhoneNumber(contact=contact, phone=response_dict["PHONENUM"][0], primary=True, type="Home")
        phone.save()
    except:
        log.debug("PayPal Error importing phone number: " + repr(response_dict))

    # Verify that we still have items in the cart.
    tempCart = Cart.objects.from_request(request)
    tempCart.customer = contact
    tempCart.save()
    
    if tempCart.numItems == 0:
        template = lookup_template(payment_module, 'checkout/empty_cart.html')
        return (False, render_to_response(template, RequestContext(request)))


    return (True, contact, tempCart)
Example #15
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
Example #16
0
    def save(self, contact=None, update_newsletter=True):
        """Save the contact info into the database.
        Checks to see if contact exists. If not, creates a contact
        and copies in the address and phone number."""

        if not contact:
            customer = Contact()
        else:
            customer = contact

        data = self.cleaned_data

        for field in customer.__dict__.keys():
            try:
                setattr(customer, field, data[field])
            except KeyError:
                pass

        if update_newsletter and config_get_group('NEWSLETTER'):
            from satchmo.newsletter import update_subscription
            if 'newsletter' not in data:
                subscribed = False
            else:
                subscribed = data['newsletter']
            
            update_subscription(contact, subscribed)

        if not customer.role:
            customer.role = "Customer"

        customer.save()
        
        # we need to make sure we don't blindly add new addresses
        # this isn't ideal, but until we have a way to manage addresses
        # this will force just the two addresses, shipping and billing
        # TODO: add address management like Amazon.
        
        bill_address = customer.billing_address
        if not bill_address:
            bill_address = AddressBook(contact=customer)
                
        address_keys = bill_address.__dict__.keys()
        for field in address_keys:
            try:
                setattr(bill_address, field, data[field])
            except KeyError:
                pass

        bill_address.is_default_billing = True
        
        copy_address = data['copy_address']

        ship_address = customer.shipping_address
        
        if copy_address:
            # make sure we don't have any other default shipping address
            if ship_address and ship_address.id != bill_address.id:
                ship_address.delete()
            bill_address.is_default_shipping = True

        bill_address.save()
        
        if not copy_address:
            if not ship_address or ship_address.id == bill_address.id:
                ship_address = AddressBook()
            
            for field in address_keys:
                try:
                    setattr(ship_address, field, data['ship_' + field])
                except KeyError:
                    pass
            ship_address.is_default_shipping = True
            ship_address.is_default_billing = False
            ship_address.contact = customer
            ship_address.country = bill_address.country
            ship_address.save()
            
        if not customer.primary_phone:
            phone = PhoneNumber()
            phone.primary = True
        else:
            phone = customer.primary_phone
        phone.phone = data['phone']
        phone.contact = customer
        phone.save()
        
        return customer.id
Example #17
0
 class DummyContact:
     if country:
         shipping_address = AddressBook(country_id=country.id)