def save_shipping_address(request): json_response = {'success': False} if request.method == 'POST': init_user_login(request) user = request.user data = json.loads(request.POST['data']) if not hasattr(request.user, 'profile'): up = Profile() up.user = request.user up.save() up = request.user.profile for sh in up.shippingaddress_set.filter(primary=True): sh.primary = False sh.save() sh = ShippingAddress() sh.profile = up sh.first_name = data.get('first_name', sh.first_name or "") sh.last_name = data.get('last_name', sh.last_name or "") sh.street1 = data.get('street1', sh.street1) sh.street2 = data.get('street2', sh.street2 or "") sh.city = data.get('city', sh.city) sh.state = data.get('state', sh.state) sh.zipcode = data.get('zip', sh.zipcode) sh.phone_number = data.get('phone', sh.phone_number) sh.phone_number = ''.join( [s for s in list(sh.phone_number) if s.isdigit()]) sh.primary = True sh.save() json_response['success'] = True return HttpResponse(json.dumps(json_response, ensure_ascii=False))
def update_quantity(request): json_response = { 'success': False } if request.method == 'POST': init_user_login(request) user = request.user data = json.loads(request.POST['data']) cart_id = int(data['cart_id']) val = data['operation'] c = Cart.objects.get(pk=cart_id) if c.type == "buy": if val == "up": c.quantity += 1 if val == "down": c.quantity -= 1 c.item.price = c.item.price_single elif c.type == "subscribe": if val == "regular": c.subtype = "regular" c.item.price = c.item.price_regular c.item.save() elif val == "intense": c.subtype = "intense" c.item.price = c.item.price_intense c.item.save() c.save() json_response['success'] = True return HttpResponse(json.dumps(json_response, ensure_ascii=False))
def delete_review_pic(request): json_response = {'success': False} if request.method == 'POST': init_user_login(request) user = request.user data = json.loads(request.POST['data']) ri_id = data.get('ri_id', None) if ri_id and ReviewImage.objects.filter(id=ri_id).count() > 0: ri = ReviewImage.objects.get(pk=ri_id) ri.delete() json_response['success'] = True return HttpResponse(json.dumps(json_response, ensure_ascii=False))
def delete_paymenttype(request): json_response = {'success': False} if request.method == 'POST': init_user_login(request) user = request.user data = json.loads(request.POST['data']) cc_id = data.get('id', None) if user.paymenttype_set.filter(pk=cc_id).count() == 1: cc = user.paymenttype_set.get(pk=cc_id) cc.delete() json_response['success'] = True return HttpResponse(json.dumps(json_response, ensure_ascii=False))
def delete_shipping_address(request): json_response = {'success': False} if request.method == 'POST': init_user_login(request) user = request.user data = json.loads(request.POST['data']) sh_id = data.get('id', None) if sh_id and hasattr(request.user, 'profile'): up = request.user.profile if up.shippingaddress_set.filter(pk=sh_id).count() == 1: sh = up.shippingaddress_set.get(pk=sh_id) sh.delete() json_response['success'] = True return HttpResponse(json.dumps(json_response, ensure_ascii=False))
def delete_review(request): json_response = {'success': False} if request.method == 'POST': init_user_login(request) user = request.user data = json.loads(request.POST['data']) fp_id = data.get('fp_id', None) review_id = data.get('review_id', None) if review_id and len(Review.objects.filter(id=review_id)) > 0: review = Review.objects.get(pk=review_id) if review.ph.user == user: review.delete() json_response['success'] = True return HttpResponse(json.dumps(json_response, ensure_ascii=False))
def get_review(request, review_id): json_response = {'success': False} if request.method == 'GET': init_user_login(request) user = request.user if review_id and len(Review.objects.filter(id=review_id)) > 0: review = Review.objects.get(pk=review_id) if review.ph.user == user: json_response['success'] = True json_response['title'] = review.headline json_response['details'] = review.details json_response['rating'] = review.rating json_response['pics'] = [{'id': i.id, 'url': i.image.url} \ for i in review.reviewimage_set.all() if i] return HttpResponse(json.dumps(json_response, ensure_ascii=False))
def photo_upload(request): json_response = {'success': False} if request.method == 'POST': pic = request.FILES['pic'] if pic and pic.content_type.startswith('image/'): init_user_login(request) user = request.user if not hasattr(user, 'profile'): up = Profile() up.user = user up.save() up = user.profile up.picture = pic up.save() json_response['success'] = True return HttpResponse(json.dumps(json_response, ensure_ascii=False))
def review_photo_upload(request): json_response = {'success': False} if request.method == 'POST': data = request.POST pic = request.FILES['pic'] if pic and pic.content_type.startswith('image/'): init_user_login(request) user = request.user if user: ri = ReviewImage() ri.image = pic ri.user = user ri.save() json_response['pic_url'] = ri.image.url json_response['ri_id'] = ri.id json_response['success'] = True return HttpResponse(json.dumps(json_response, ensure_ascii=False))
def review_uploaded_photo_associate(request): json_response = {'success': False} if request.method == 'POST': data = request.POST pic = request.FILES['pic'] review_id = data.get('review_id', None) if pic and pic.content_type.startswith('image/'): init_user_login(request) user = request.user if Review.objects.filter(pk=review_id).count() > 0: r = Review.objects.get(pk=review_id) ri = ReviewImage() ri.image = pic ri.review = r ri.save() json_response['pic_url'] = ri.image.url json_response['success'] = True return HttpResponse(json.dumps(json_response, ensure_ascii=False))
def post_remove_cart(request): json_response = {'success': False} if request.method == 'POST': init_user_login(request) user = request.user data = json.loads(request.POST['data']) facepack_id = int(data['facepack_id']) facepack = FacePack.objects.get(id=facepack_id) # If Prepack, then no point comparing users instead just remove item from cart. if PrePack.objects.filter(facepack=facepack).count() > 0: user.cart_set.filter(item__id=facepack_id).delete() json_response['success'] = True # Check if indeed cart item remove operation is done by intended user elif facepack.cart_set.all()[0].user == user: facepack.delete() json_response['success'] = True json_response['cart_size'] = user.cart_set.count() return HttpResponse(json.dumps(json_response, ensure_ascii=False))
def update_ph(request): json_response = {'success': False} if request.method == 'POST': init_user_login(request) user = request.user data = json.loads(request.POST['data']) ph_id = data.get('ph_id', None) ph_ship_date = data.get('ph_date', None) if hasattr(user, 'payment_set'): for i, py in enumerate( user.payment_set.all().order_by('createdte')): for j, ph in enumerate(py.purchasehistory_set.all()): if ph.type == "subscribe" and ph.id == int(ph_id): ph.quantity = data.get('ph_qty', None) or ph.quantity ph.ship_date = validate_date( ph_ship_date) or ph.ship_date ph.save() json_response['success'] = True return HttpResponse(json.dumps(json_response, ensure_ascii=False))
def save_review(request): json_response = {'success': False} if request.method == 'POST': init_user_login(request) user = request.user data = json.loads(request.POST['data']) fp_id = data.get('fp_id', None) review_id = data.get('review_id', None) review_pic_ids = data.get('ri_ids', []) review_title = data.get('title', "") review_details = data.get('details', None) review_rating = data.get('rating', None) review = Review() if review_id and len(Review.objects.filter(id=review_id)) > 0: review = Review.objects.get(pk=review_id) fp = None ph = None if fp_id and hasattr(user, 'payment_set'): for i, py in enumerate( user.payment_set.all().order_by('createdte')): for j, ph_ in enumerate(py.purchasehistory_set.all()): if len(FacePack.objects.filter(pk=ph_.item.id)) == 1: fp = FacePack.objects.get(pk=fp_id) ph = ph_ break # If facepack is associated to valid user and purchase history, then save. if fp and ph: review.ph = ph review.fp = fp review.details = review_details review.headline = review_title review.rating = int(review_rating) if review_rating else 0 review.save() for ri_id in review_pic_ids: if ReviewImage.objects.filter(pk=ri_id).count() > 0: ri = ReviewImage.objects.get(pk=ri_id) ri.review = review ri.save() json_response['success'] = True return HttpResponse(json.dumps(json_response, ensure_ascii=False))
def save_myaccount_details(request): json_response = {'success': False} if request.method == 'POST': init_user_login(request) user = request.user data = json.loads(request.POST['data']) if not hasattr(request.user, 'profile'): up = Profile() up.user = request.user up.save() up = request.user.profile if 'name' in data: names = data['name'].split() if len(names) >= 2: first, last = " ".join(names[0:-1]), names[-1] user.first_name = first user.last_name = last elif len(names) == 1: user.first_name = data['name'].strip() user.last_name = "" if 'birthday' in data: birth_date = validate_date(data['birthday']) if birth_date: up.birth_date = birth_date if 'email' in data and re.match("([^@|\s]+@[^@]+\.[^@|\s]+)", data['email']): user.email = data['email'] user.username = data['email'] if 'gender' in data: if data['gender'].lower == "male" or data['gender'].lower == "female" or\ data['gender'].strip().lower == "": up.gender = data['gender'] if 'subscription' in data: if data['subscription'].lower( ) == "yes" or data['subscription'].lower() == "no": up.subscription = data['subscription'] user.save() up.save() json_response['success'] = True return HttpResponse(json.dumps(json_response, ensure_ascii=False))
def update_type(request): json_response = { 'success': False } if request.method == 'POST': init_user_login(request) user = request.user data = json.loads(request.POST['data']) cart_id = int(data['cart_id']) c = Cart.objects.get(pk=cart_id) c.type = data.get('type', c.type) if c.type == 'buy': c.subtype = None c.item.price = c.item.price_single c.item.save() c.quantity=1 if c.type == 'subscribe': #c.quantity=4 c.subtype="regular" c.item.price = c.item.price_regular c.item.save() c.save() json_response['success'] = True return HttpResponse(json.dumps(json_response, ensure_ascii=False))
def save_paymenttype(request): json_response = {'success': False} if request.method == 'POST': init_user_login(request) user = request.user data = json.loads(request.POST['data']) cc_id = data.get('id', None) if data.get('primary', None): for c in user.paymenttype_set.filter(primary=True): c.primary = False c.save() if cc_id: cc = CreditCard() cc.primary = True if int(cc_id) > 0 and user.paymenttype_set.filter( pk=cc_id).count() == 1: pt = user.paymenttype_set.get(pk=cc_id) cc = CreditCard.objects.get(pk=cc_id) cc.user = user cc.street1 = data.get('street1', "") cc.street2 = data.get('street2', "") cc.street = str(cc.street1 + " " + cc.street2).strip() or cc.street cc.city = data.get('city', cc.city) cc.state = data.get('state', cc.state) cc.zipcode = data.get('zip', cc.zipcode) cc.primary = data.get('primary', cc.primary) cc.type = data.get('type', 'visa') cc.first = data.get('first_name', "") cc.last = data.get('last_name', "") cc.owner_name = str(cc.first + " " + cc.last).strip() or cc.owner_name cc.number = data.get('number', cc.number) cc.cvv = data.get('cvv', cc.cvv) cc.expiry = validate_cc_date(data.get('expiry', "")) or cc.expiry cc.primary = data.get('primary', cc.primary) cc.save() json_response['success'] = True return HttpResponse(json.dumps(json_response, ensure_ascii=False))
def post_add_cart(request): json_response = {'success': False} if request.method == 'POST': init_user_login(request) user = request.user data = json.loads(request.POST['data']) fp_id = data.get('fp_id', None) fp_type = data.get('fp_type', None) cart_type = data.get('type', None) qd_id = data.get('qd_id', None) fp = None if fp_id and user.cart_set.filter(item_id=fp_id).count() > 0: # Cart / FP already exists. Just save new cart type state c = user.cart_set.get(item_id=fp_id) c.type = cart_type c.quantity = 1 if c.type == 'subscribe': c.subtype = 'regular' c.save() else: if fp_type == "prepack": # Prepack fp = PrePack.objects.get(facepack_id=fp_id).facepack else: # Custom Facepack fp = FacePack() recipe1_id = int(data['r1_id']) recipe2_id = int(data['r2_id']) recipe3_id = int(data['r3_id']) base_id = int(data['b_id']) mixing_agent_id = int(data['m_id']) o1_id = int(data['o1_id']) if 'o1_id' in data and len( data['o1_id']) > 0 else None o2_id = int(data['o2_id']) if 'o2_id' in data and len( data['o2_id']) > 0 else None o3_id = int(data['o3_id']) if 'o3_id' in data and len( data['o3_id']) > 0 else None # Create FP name fp_name = "CFP_%03d%03d%03d" % (recipe1_id, recipe2_id, recipe3_id) if o1_id and o2_id and o3_id: fp_name += "111" else: fp_name += "000" fp.base = Base.objects.get(pk=base_id) fp.mixing_agent = MixingAgent.objects.get(pk=mixing_agent_id) #fp.price = str(random.randrange(13,30)+0.99) fp_name += "%03d" % fp.base.id fp_name += "%03d" % fp.mixing_agent.id fp.name = fp_name fp.save() qd = QuestionnaireUserData.objects.get(pk=qd_id) cfp1 = CustomFacePack() cfp1.recipe = Recipe.objects.get(pk=recipe1_id) cfp1.optional_ingredient = Ingredient.objects.get( pk=o1_id) if o1_id else None cfp1.facepack = fp cfp1.user = user cfp1.questionnaire = qd cfp1.save() cfp2 = CustomFacePack() cfp2.recipe = Recipe.objects.get(pk=recipe2_id) cfp2.optional_ingredient = Ingredient.objects.get( pk=o2_id) if o2_id else None cfp2.facepack = fp cfp2.user = user cfp2.questionnaire = qd cfp2.save() cfp3 = CustomFacePack() cfp3.recipe = Recipe.objects.get(pk=recipe3_id) cfp3.optional_ingredient = Ingredient.objects.get( pk=o3_id) if o3_id else None cfp3.facepack = fp cfp3.user = user cfp3.questionnaire = qd cfp3.save() c = Cart() c.item = fp c.user = user c.type = cart_type if c.type == 'buy': fp.price = fp.price_single fp.save() elif c.type == 'subscribe': c.subtype = 'regular' fp.price = fp.price_regular fp.save() c.save() json_response['success'] = True return HttpResponse(json.dumps(json_response, ensure_ascii=False))
def wizard_submit(request): json_response = {'success': False} if request.method == 'POST': init_user_login(request) data = json.loads(request.POST['data']) user = request.user skinType = None skinConcerns = None wz = QuestionnaireUserData() wz.user = user wz.save() for d in data: for o in d['options']: qe = QuestionnaireEntry() qe.question = Question.objects.get(pk=d['id']) qe.option = Option.objects.get(pk=o) qe.wizard = wz qe.save() if d['id'] == '7': skinType = SkinType.objects.get(pk=d['options'][0]) if d['id'] == '8': skinConcerns = SkinConcern.objects.filter(id__in=d['options']) recipes = Recipe.objects.filter(skin_type=skinType, skin_concern__in=skinConcerns) recipes_ing = [r.mandatory_ingredient for r in recipes] skin_type_ingredients = Ingredient.objects.filter( id__in=SkinTypeIngredient.objects.filter( skin_type=skinType).values('ingredient')) o_ids = [] for r in recipes: ri = random.choice(SkinTypeConcernIngredient.objects\ .filter(skin_type=r.skin_type, skin_concern=r.skin_concern)\ .filter(~Q(ingredient=r.mandatory_ingredient), ~Q(ingredient_id__in=o_ids))).ingredient o_ids.append(ri) base = random.choice(Base.objects.filter(skin_type=skinType)) """ Base conditions: 1. French green clay cannot be used for people with skin concern "Sensitive and irritated by harsh ingredients" 2. For skin combination oily and skin concern " sensitive and irritated by harsh ingredients" : always use white kaolin clay 3. For skin combination dry and skin concern " sensitive and irritated by harsh ingredients" : always use white goat milk powder """ if SkinConcern.objects.get(name__contains="Sensitive") in skinConcerns: if skinType.name == 'Oily': base = Base.objects.get(name__contains='White Kaolin Clay') elif skinType.name == 'Dry': base = Base.objects.get(name__contains='Goat Milk') else: base = random.choice(Base.objects.filter(skin_type=skinType)\ .filter(~Q(pk=Base.objects.get(name__contains='French').id))) mixing_agent = random.choice( MixingAgent.objects.filter(skin_type=skinType)) json_response = { 'base': str(base.id), 'mixing_agent': str(mixing_agent.id), 'recipes': [str(r.id) for r in recipes], 'optional': [str(o.id) for o in o_ids], 'qd': str(wz.id), } return HttpResponse(json.dumps(json_response, ensure_ascii=False))
def results(request): if request and request.method == 'GET': init_user_login(request) user = request.user recipe_ids = [int(x) for x in request.GET.getlist('recipes[]')] o_ids = [int(x) for x in request.GET.getlist('optional[]')] recipes = Recipe.objects.filter(id__in=recipe_ids) secondary_ings = Ingredient.objects.filter(id__in=o_ids) qd_id = request.GET.get('qd') skin_type = request.GET.get('skin_type', None) base = Base.objects.get(pk=request.GET.get('base')) mixing_agent = MixingAgent.objects.get( pk=request.GET.get('mixing_agent')) #secondary_ings = [random.choice(SkinTypeConcernIngredient.objects\ #.filter(skin_type=r.skin_type, skin_concern=r.skin_concern)\ #.filter(~Q(ingredient=r.mandatory_ingredient))).ingredient\ #for r in recipes] essential_oils = Ingredient.objects.get( name__contains="Essential Oils") r1 = recipes[0] r2 = recipes[1] r3 = recipes[2] o1 = secondary_ings[0] o2 = secondary_ings[1] o3 = secondary_ings[2] o_ids = [i.id for i in secondary_ings] data = { 'first': { 'type': 'primary', 'base': { 'id': base.id, 'name': base.name, 'image': base.image, 'helper': base.helper, 'description': base.description, }, 'mixing_agent': { 'id': mixing_agent.id, 'name': mixing_agent.name, 'image': mixing_agent.image, 'helper': mixing_agent.helper, 'description': mixing_agent.description, }, 'essential_oils': { 'id': essential_oils.id, 'name': essential_oils.name, 'image': essential_oils.image, 'helper': essential_oils.helper, 'description': essential_oils.description, }, 'recipes': [{ 'id': r.id, 'i_id': r.mandatory_ingredient.id, 'i_name': r.mandatory_ingredient.name, 'i_image': r.mandatory_ingredient.image, 'i_helper': r.mandatory_ingredient.helper, 'i_description': r.mandatory_ingredient.description, } for r in recipes], 'b_id': base.id, 'm_id': mixing_agent.id, 'r1_id': r1.id, 'r2_id': r2.id, 'r3_id': r3.id, 'o_ids': [], 'qd_id': qd_id, }, 'second': { 'type': 'secondary', 'base': { 'id': base.id, 'name': base.name, 'image': base.image, 'helper': base.helper, 'description': base.description, }, 'mixing_agent': { 'id': mixing_agent.id, 'name': mixing_agent.name, 'image': mixing_agent.image, 'helper': mixing_agent.helper, 'description': mixing_agent.description, }, 'essential_oils': { 'id': essential_oils.id, 'name': essential_oils.name, 'image': essential_oils.image, 'helper': essential_oils.helper, 'description': essential_oils.description, }, #'recipes': [{ #'id': r.id, #'i_id': r.mandatory_ingredient.id, #'i_name': r.mandatory_ingredient.name, #'i_image': r.mandatory_ingredient.image, #'i_helper': r.mandatory_ingredient.helper, #'i_description': r.mandatory_ingredient.description, #} for r in recipes], 'recipes': [{ 'id': i.id, 'i_id': i.id, 'i_name': i.name, 'i_image': i.image, 'i_helper': i.helper, 'i_description': i.description, } for i in secondary_ings], 'b_id': base.id, 'm_id': mixing_agent.id, 'r1_id': r1.id, 'r2_id': r2.id, 'r3_id': r3.id, 'o1_id': o1.id, 'o2_id': o2.id, 'o3_id': o3.id, 'o_ids': o_ids, 'qd_id': qd_id, }, 'qd_id': qd_id, 'skin_type': skin_type, } data['cart_size'] = cart_size(request) data['valid_user'] = get_valid_user_data(request) return render(request, "results.html", data)
def checkout(request): json_response = { 'success': False } if request.method == 'POST': try: init_user_login(request) user = request.user data = json.loads(request.POST['data']) shipping_id = data['shipping_id'] token_id = data['token_id'] #token_id = "tok_visa" shipping = Shipping.objects.get(pk=shipping_id) # Check for valid payment option if hasattr(user, 'cart_set') and shipping: total = Decimal('0.00'); subtotal = Decimal('0.00'); for c in user.cart_set.all(): subtotal += c.item.price*c.quantity promo_discount = sum([p.discount for p in Promo.objects.filter(active=True)]) total = subtotal + shipping.cost - promo_discount # 1. make payment # Stripe charge code ch = None payment_type = None stripe.api_key = settings.STRIPE_API_KEY if hasattr(user, 'paymenttype_set') and user.paymenttype_set.count() > 0: # Stripe customer already registered. customer_id = user.paymenttype_set.last().stripe.customer_id ch = stripe.Charge.create( amount=int(total*100), currency="usd", description="Charge for "+user.email, receipt_email=user.email, customer=customer_id, ) payment_type = user.paymenttype_set.last().stripe exp_date = datetime.datetime.strptime(str(ch.source.exp_year)+\ "-"+str(ch.source.exp_month), '%Y-%m') if ch.source.last4 != payment_type.number or exp_date != payment_type.expiry or data.get('b_zip', "") != payment_type.zipcode or data.get('b_state', "") != payment_type.state or data.get('b_city', "") != payment_type.city or data.get('b_name', "") != payment_type.owner_name or ch.source.brand != payment_type.type or data.get('b_addr1', "") != payment_type.street: # Add a local stripe payment type object s = Stripe() s.customer_id = customer_id s.user = user s.street = data.get('b_addr1', "") s.city = data.get('b_city', "") s.state = data.get('b_state', "") s.country = data.get('b_country', "") s.zipcode = data.get('b_zip', "") s.primary = True s.type = ch.source.brand s.created = ch.created s.owner_name = data.get('b_name', "") s.number = ch.source.last4 s.expiry = exp_date # wtf?? user.paymenttype_set.all().delete() s.save() payment_type = s else: # Create Stripe customer object cu = stripe.Customer.create( description="Customer "+user.email, email=user.email, source = token_id ) customer_id = cu.id # New Stripe account, create charge ch = stripe.Charge.create( amount=int(total*100), currency="usd", description="Charge for "+user.email, receipt_email=user.email, customer=customer_id ) exp_date = datetime.datetime.strptime(str(ch.source.exp_year)+\ "-"+str(ch.source.exp_month), '%Y-%m') # Add a local stripe payment type object s = Stripe() s.customer_id = cu.id s.user = user s.street = data.get('b_addr1', "") s.city = data.get('b_city', "") s.state = data.get('b_state', "") s.country = data.get('b_country', "") s.zipcode = data.get('b_zip', "") s.primary = True s.type = ch.source.brand s.created = ch.created s.owner_name = data.get('b_name', "") s.number = ch.source.last4 s.expiry = exp_date # wtf?? user.paymenttype_set.all().delete() s.save() payment_type = s # Don't forget, good idea to instantiate user first/last name from stripe # form for cases where user created a new login and forgot to add details # This is a better approach than creating a default generic user profile # during user signup (aka 'New User' if you know what I mean) names = data.get('b_name', "").split() first, last = " ".join(names[0:-1]), names[-1] if not hasattr(user, 'profile'): up = Profile() up.user = user up.save() user.first_name = user.first_name or first user.last_name = user.last_name or last user.save() # make a local ShippingAddress object sh = ShippingAddress() sh.profile = user.profile sh.first_name = first sh.last_name = last sh.street1 = data.get('s_addr1', "") sh.city = data.get('s_city', "") sh.state = data.get('s_state', "") sh.country = data.get('s_country', "") sh.zipcode = data.get('s_zip', "") ShippingAddress.objects.filter(profile=user.profile).delete() sh.primary = True sh.save() # Make local payment object based on above charge payment = Payment() payment.user = user payment.type = payment_type payment.total = total payment.save() # 2. record purchase history, while (re)moving entry from cart for c in user.cart_set.all(): ph = PurchaseHistory() ph.user = user ph.payment = payment ph.item = c.item ph.shipping = shipping ph.type = c.type ph.subtype = c.subtype ph.quantity = c.quantity ph.save() c.delete() to_email = ph.user.email from_email = '*****@*****.**' text_content = "Order Received" html_content = "<h2>Order Summary:</h2>" ind = 1 url = request.get_raw_uri().replace(request.get_full_path(),'') url = "https://www.farms2face.com" for ph in payment.purchasehistory_set.all(): html_content += "<hr>"+render_to_string('facepack_mail.html', facepack_display_abs(url, ph.item.id)) html_content += "<p>Type: <b>%s</b></p>" % "A-LA-CARTE" if ph.type == "buy" else "NEVER RUN OUT" html_content += "<p>Qty: <b>%d</b></p>" % ph.quantity html_content += "<p>Price: <b>$%0.2f</b></p>" % ph.item.price html_content += "<a href='%s/admin/payments/purchasehistory/%d'>Admin link</a>" % (url, ph.id) ind += 1 html_content += "<hr><p>Order Total: <b>$%0.2f</b></p>" % payment.total sh = None if ShippingAddress.objects.filter(profile=ph.user.profile, primary=True).count() == 1: sh = ShippingAddress.objects.get(profile=ph.user.profile, primary=True) html_content += "<hr><h3>Shipping:</h3>" html_content += "<p>%s %s<br>" % (sh.first_name, sh.last_name) html_content += "%s<br>" % sh.street1 html_content += "%s<br>" % sh.city html_content += "%s<br>" % sh.state html_content += "%s<br></p>" % sh.zipcode html_content += "<hr><h3>Ordered by: %s</h3>" % user.email html_content += "<hr><h3>You will receive an update with tracking info in the next few days</h3>" html_content_admin = html_content html_content = re.sub('<a.*a>','', html_content) msg = EmailMultiAlternatives('Order Confirmation #%d - Farms2Face' % ph.id, text_content, from_email, [to_email]) msg.attach_alternative(html_content, "text/html") msg.send() # Send email to admin with links msg = EmailMultiAlternatives('Admin - Order Confirmation #%d - Farms2Face' % ph.id, text_content, from_email, [i['email'] for i in User.objects.filter(is_superuser=True).values('email')]) msg.attach_alternative(html_content_admin, "text/html") msg.send() json_response['success'] = True except Exception as e: json_response['error'] = str(e) print(str(e)) print(json.loads(request.POST['data'])) return HttpResponse(json.dumps(json_response, ensure_ascii=False))