Guest User

Untitled

a guest
Oct 17th, 2017
203
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 31.29 KB | None | 0 0
  1. from django.utils import simplejson
  2. from django.shortcuts import render_to_response, redirect, HttpResponseRedirect
  3. from django.shortcuts import render_to_response, get_object_or_404
  4. from django.template import RequestContext
  5. from django.http import HttpResponse
  6. from django.conf import settings
  7. from django.contrib import messages
  8. from django.db.models import Q
  9. from django.contrib.auth import logout
  10. from django.core.mail import send_mail
  11. from models import *
  12. from worker_fns import user_login
  13.  
  14. from cloudnine.shop.models import *
  15. from cloudnine.shop.forms import *
  16. from cloudnine.shop.basket import *
  17. from shop.shipping import Shipping
  18.  
  19. from forms import *
  20.  
  21. import logging
  22.  
  23.  
  24. def trade_home(request):
  25.  
  26. data = {'pageclass':'home'}
  27.  
  28. return render_to_response('trade/index.html', data, RequestContext(request))
  29.  
  30. def irons(request):
  31.  
  32. logging.debug('iron method called')
  33.  
  34. data = {'pageclass':'irons'}
  35.  
  36. #Add to basket
  37. basket = Basket(request)
  38.  
  39. #Add all selected products to basket
  40. if request.method == "POST":
  41. if int(request.POST['cloud-nine-iron']) > 0:
  42. product = get_object_or_404(Product, slug="cloud-nine-iron")
  43. basket.add_item(product, request.POST['cloud-nine-iron'])
  44.  
  45. if int(request.POST['trade-cloud-nine-iron']) > 0:
  46. product = get_object_or_404(Product, slug="trade-cloud-nine-iron")
  47. basket.add_item(product, request.POST['trade-cloud-nine-iron'])
  48.  
  49. if int(request.POST['cloud-nine-wide-iron']) > 0:
  50. product = get_object_or_404(Product, slug="cloud-nine-wide-iron")
  51. basket.add_item(product, request.POST['cloud-nine-wide-iron'])
  52.  
  53. if int(request.POST['trade-cloud-nine-wide-iron']) > 0:
  54. product = get_object_or_404(Product, slug="trade-cloud-nine-wide-iron")
  55. basket.add_item(product, request.POST['trade-cloud-nine-wide-iron'])
  56.  
  57. if int(request.POST['cloud-nine-micro-iron']) > 0:
  58. product = get_object_or_404(Product, slug="cloud-nine-micro-iron")
  59. basket.add_item(product, request.POST['cloud-nine-micro-iron'])
  60.  
  61. if int(request.POST['trade-cloud-nine-micro-iron']) > 0:
  62. product = get_object_or_404(Product, slug="trade-cloud-nine-micro-iron")
  63. basket.add_item(product, request.POST['trade-cloud-nine-micro-iron'])
  64.  
  65. return HttpResponseRedirect('/basket/')
  66.  
  67. cloud_nine_iron = get_object_or_404(Product, slug="cloud-nine-iron")
  68. cloud_nine_wide_iron = get_object_or_404(Product, slug="cloud-nine-wide-iron")
  69. cloud_nine_micro_iron = get_object_or_404(Product, slug="cloud-nine-micro-iron")
  70.  
  71. trade_cloud_nine_iron = get_object_or_404(Product, slug="trade-cloud-nine-iron")
  72. trade_cloud_nine_wide_iron = get_object_or_404(Product, slug="trade-cloud-nine-wide-iron")
  73. trade_cloud_nine_micro_iron = get_object_or_404(Product, slug="trade-cloud-nine-micro-iron")
  74.  
  75. data['cloud_nine_iron'] = cloud_nine_iron
  76. data['cloud_nine_wide_iron'] = cloud_nine_wide_iron
  77. data['cloud_nine_micro_iron'] = cloud_nine_micro_iron
  78.  
  79. data['trade_cloud_nine_iron'] = trade_cloud_nine_iron
  80. data['trade_cloud_nine_wide_iron'] = trade_cloud_nine_wide_iron
  81. data['trade_cloud_nine_micro_iron'] = trade_cloud_nine_micro_iron
  82.  
  83. return render_to_response('trade/irons.html', data, RequestContext(request))
  84.  
  85.  
  86. def wand(request):
  87.  
  88. data = {'pageclass':'wand'}
  89.  
  90. basket = Basket(request)
  91.  
  92. #Add all selected products to basket
  93. if request.method == "POST":
  94. if int(request.POST['cloud-nine-wand']) > 0:
  95. product = get_object_or_404(Product, slug="cloud-nine-wand")
  96. basket.add_item(product, request.POST['cloud-nine-wand'])
  97. if int(request.POST['trade-cloud-nine-wand']) > 0:
  98. product = get_object_or_404(Product, slug="trade-cloud-nine-wand")
  99. basket.add_item(product, request.POST['trade-cloud-nine-wand'])
  100.  
  101. return HttpResponseRedirect('/basket/')
  102.  
  103. wand = get_object_or_404(Product, slug="cloud-nine-wand")
  104. trade_wand = get_object_or_404(Product, slug="trade-cloud-nine-wand")
  105.  
  106. data['wand'] = wand
  107. data['trade_wand'] = trade_wand
  108.  
  109. return render_to_response('trade/wand.html', data, RequestContext(request))
  110.  
  111. def bundles(request):
  112.  
  113. data = {'pageclass':'bundles'}
  114.  
  115. basket = Basket(request)
  116.  
  117. #Add all selected products to basket
  118. if request.method == "POST":
  119. if int(request.POST['straightening-tool-kit']) > 0:
  120. product = get_object_or_404(Product, slug="straightening-tool-kit")
  121. basket.add_item(product, request.POST['straightening-tool-kit'])
  122.  
  123. if int(request.POST['volume-tool-kit']) > 0:
  124. product = get_object_or_404(Product, slug="volume-tool-kit")
  125. basket.add_item(product, request.POST['volume-tool-kit'])
  126.  
  127. if int(request.POST['styling-tool-kit']) > 0:
  128. product = get_object_or_404(Product, slug="styling-tool-kit")
  129. basket.add_item(product, request.POST['styling-tool-kit'])
  130.  
  131. return HttpResponseRedirect('/basket/')
  132.  
  133. straightening_tool_kit = get_object_or_404(Product, slug="straightening-tool-kit")
  134. volume_tool_kit = get_object_or_404(Product, slug="volume-tool-kit")
  135. styling_tool_kit = get_object_or_404(Product, slug="styling-tool-kit")
  136.  
  137. data['straightening_tool_kit'] = straightening_tool_kit
  138. data['volume_tool_kit'] = volume_tool_kit
  139. data['styling_tool_kit'] = styling_tool_kit
  140.  
  141. return render_to_response('trade/bundles.html', data, RequestContext(request))
  142.  
  143. def theo(request):
  144.  
  145. data = {'pageclass':'theo'}
  146.  
  147. basket = Basket(request)
  148.  
  149. #Add all selected products to basket
  150. if request.method == "POST":
  151. if int(request.POST['gift-of-volume']) > 0:
  152. product = get_object_or_404(Product, slug="gift-of-volume")
  153. basket.add_item(product, request.POST['gift-of-volume'])
  154. if int(request.POST['roller20']) > 0:
  155. product = get_object_or_404(Product, slug="roller20")
  156. basket.add_item(product, request.POST['roller20'])
  157. if int(request.POST['roller30']) > 0:
  158. product = get_object_or_404(Product, slug="roller30")
  159. basket.add_item(product, request.POST['roller30'])
  160. if int(request.POST['roller40']) > 0:
  161. product = get_object_or_404(Product, slug="roller40")
  162. basket.add_item(product, request.POST['roller40'])
  163. if int(request.POST['roller50']) > 0:
  164. product = get_object_or_404(Product, slug="roller50")
  165. basket.add_item(product, request.POST['roller50'])
  166. if int(request.POST['roller60']) > 0:
  167. product = get_object_or_404(Product, slug="roller60")
  168. basket.add_item(product, request.POST['roller60'])
  169. if int(request.POST['theo-clip-size1']) > 0:
  170. product = get_object_or_404(Product, slug="theo-clip-size1")
  171. basket.add_item(product, request.POST['theo-clip-size1'])
  172. if int(request.POST['theo-clip-size2']) > 0:
  173. product = get_object_or_404(Product, slug="theo-clip-size2")
  174. basket.add_item(product, request.POST['theo-clip-size2'])
  175. if int(request.POST['theo']) > 0:
  176. product = get_object_or_404(Product, slug="theo")
  177. basket.add_item(product, request.POST['theo'])
  178. if int(request.POST['amplify']) > 0:
  179. product = get_object_or_404(Product, slug="amplify")
  180. basket.add_item(product, request.POST['amplify'])
  181.  
  182. return HttpResponseRedirect('/basket/')
  183.  
  184. theo = get_object_or_404(Product, slug="theo")
  185. roller20 = get_object_or_404(Product, slug="roller20")
  186. roller30 = get_object_or_404(Product, slug="roller30")
  187. roller40 = get_object_or_404(Product, slug="roller30")
  188. roller50 = get_object_or_404(Product, slug="roller50")
  189. roller60 = get_object_or_404(Product, slug="roller60")
  190. theo_clip_size1 = get_object_or_404(Product, slug="theo-clip-size1")
  191. theo_clip_size2 = get_object_or_404(Product, slug="theo-clip-size2")
  192. gift_of_volume = get_object_or_404(Product, slug="gift-of-volume")
  193. amplify = get_object_or_404(Product, slug="amplify")
  194.  
  195. data['theo'] = theo
  196. data['roller20'] = roller20
  197. data['roller30'] = roller30
  198. data['roller40'] = roller40
  199. data['roller50'] = roller50
  200. data['roller60'] = roller60
  201. data['theo_clip_size1'] = theo_clip_size1
  202. data['theo_clip_size2'] = theo_clip_size2
  203. data['gift_of_volume'] = gift_of_volume
  204. data['amplify'] = amplify
  205.  
  206. return render_to_response('trade/theo.html', data, RequestContext(request))
  207.  
  208. def get_the_look_beach_waves(request):
  209.  
  210. data = {'pageclass':'get-the-look-popup'}
  211.  
  212. return render_to_response('trade/gtl-beach-waves.html', data, RequestContext(request))
  213.  
  214. def get_the_look_the_crimp(request):
  215.  
  216. data = {'pageclass':'get-the-look-popup'}
  217.  
  218. return render_to_response('trade/gtl-the-crimp.html', data, RequestContext(request))
  219.  
  220. def get_the_look_kinky_straight(request):
  221.  
  222. data = {'pageclass':'get-the-look-popup'}
  223.  
  224. return render_to_response('trade/gtl-kinky-straight.html', data, RequestContext(request))
  225.  
  226. def get_the_look_super_sleek(request):
  227.  
  228. data = {'pageclass':'get-the-look-popup'}
  229.  
  230. return render_to_response('trade/gtl-super-sleek.html', data, RequestContext(request))
  231.  
  232. def get_the_look_hollywood_glam(request):
  233.  
  234. data = {'pageclass':'get-the-look-popup'}
  235.  
  236. return render_to_response('trade/gtl-hollywood-glam.html', data, RequestContext(request))
  237.  
  238. def get_the_look_the_shag(request):
  239.  
  240. data = {'pageclass':'get-the-look-popup'}
  241.  
  242. return render_to_response('trade/gtl-the-shag.html', data, RequestContext(request))
  243.  
  244. def video_beach_waves(request):
  245.  
  246. data = {'pageclass':'video-popup'}
  247.  
  248. return render_to_response('trade/video-beach-waves.html', data, RequestContext(request))
  249.  
  250. def video_the_crimp(request):
  251.  
  252. data = {'pageclass':'video-popup'}
  253.  
  254. return render_to_response('trade/video-beach-waves.html', data, RequestContext(request))
  255.  
  256. def video_kinky_straight(request):
  257.  
  258. data = {'pageclass':'video-popup'}
  259.  
  260. return render_to_response('trade/video-beach-waves.html', data, RequestContext(request))
  261.  
  262. def terms(request):
  263.  
  264. data = {'pageclass':'terms'}
  265.  
  266. return render_to_response('trade/terms.html', data, RequestContext(request))
  267.  
  268. def privacy(request):
  269.  
  270. data = {'pageclass':'privacy'}
  271.  
  272. return render_to_response('trade/privacy.html', data, RequestContext(request))
  273.  
  274. def user_logout(request):
  275. if request.user.is_authenticated():
  276. logout(request)
  277.  
  278. return redirect(settings.LOGIN_URL)
  279.  
  280. def register(request, state="login"):
  281. from reg_forms import AddressForm
  282.  
  283. data = {}
  284.  
  285. data = {'pageclass':'login'}
  286.  
  287. data['state'] = state
  288.  
  289. # base reg form
  290. reg_form = None
  291. terms_form = None
  292. salon_form = None
  293. salon_form2 = None
  294. student_form = None
  295. freelance_form = None
  296. salon_owner_form = None
  297. login_form = None
  298.  
  299. if request.method == "POST":
  300.  
  301. if 'login_form' in request.POST:
  302. form = LoginForm(request.POST)
  303.  
  304. if form.is_valid():
  305. logged_in, message = user_login(form.cleaned_data['username'], form.cleaned_data['password'], request)
  306.  
  307. if not logged_in:
  308. data['login_message'] = message
  309. else:
  310. return redirect("/")
  311. else:
  312. data['login_message'] = "Invalid username and/or password"
  313. else:
  314. import pdb
  315. #pdb.set_trace()
  316. reg_form = RegistrationForm(request.POST)
  317. terms_form = TermsForm(request.POST)
  318.  
  319. form_ok = reg_form.is_valid() and terms_form.is_valid()
  320.  
  321. try:
  322. reg_type = int(request.POST['reg_type'])
  323. except (ValueError, KeyError,):
  324. reg_type = None
  325.  
  326. if reg_type:
  327. if reg_type == 1:
  328. # salon stylist
  329. salon_form = SalonSalonForm(request.POST)
  330. salon_form2 = AddressForm(request.POST)
  331.  
  332. form_ok = form_ok and salon_form.is_valid() and salon_form2.is_valid()
  333.  
  334. elif reg_type == 2:
  335. # salon owner
  336. salon_owner_form = SalonOwnerForm(request.POST)
  337.  
  338. form_ok = form_ok and salon_owner_form.is_valid()
  339.  
  340. elif reg_type == 3:
  341. # freelance
  342. freelance_form = FreelanceRegForm(request.POST)
  343.  
  344. form_ok = form_ok and freelance_form.is_valid()
  345.  
  346. elif reg_type == 4:
  347. # student
  348. student_form = StudentRegForm(request.POST)
  349.  
  350. form_ok = form_ok and student_form.is_valid()
  351.  
  352. else:
  353. raise Exception("invalid reg type %d" % reg_type)
  354.  
  355.  
  356. if form_ok:
  357. user = User()
  358. user.username = reg_form.cleaned_data['username']
  359. user.set_password( reg_form.cleaned_data['password'] )
  360. user.first_name = reg_form.cleaned_data['first_name']
  361. user.last_name = reg_form.cleaned_data['last_name']
  362. user.email = reg_form.cleaned_data['email']
  363. user.is_active = False
  364. user.save()
  365.  
  366. account = Account_trade()
  367. account.user = user
  368.  
  369. # these fields need to be given default values:
  370. account.telephone = ''
  371. account.how_heard = ''
  372. account.feedback = ''
  373. account.security_answer = ''
  374.  
  375. account.profession = reg_type
  376. account.opt_in = False
  377. account.dob = reg_form.cleaned_data['birthdate']
  378. account.temporary=False
  379.  
  380. account.save()
  381.  
  382. if reg_type == 1:
  383. # salon stylist
  384. add1 = create_address( salonform.cleaned_data, account )
  385. add1.name = salonform.cleaned_data['name']
  386. add1.type = 1
  387. add1.save()
  388.  
  389. add2 = create_address( salonform2.cleaned_data, account )
  390. add2.type = 2
  391. add2.save()
  392. elif reg_type == 2:
  393. # salon owner
  394. add1 = create_address( salon_owner_form.cleaned_data, account )
  395. add1.type = 1
  396. add1.save()
  397. elif reg_type == 3:
  398. # freelance stylist
  399. add1 = create_address( freelance_form.cleaned_data, account )
  400. add1.type = 1
  401.  
  402. add1.save()
  403. elif reg_type == 4:
  404. # student stylist
  405. add1 = create_address( student_form.cleaned_data, account )
  406. add1.type = 2
  407. add1.save()
  408.  
  409. # add in student stylist fields
  410. account.college = student_form.cleaned_data['college']
  411. account.course_name = student_form.cleaned_data['course_name']
  412. account.qualification = student_form.cleaned_data['qualification']
  413.  
  414. #account.default_address = add1
  415. account.save()
  416.  
  417. # dispatch emails
  418. email_body = "A new registration has been placed on trade.cloudninehair.com for user %s.\n\nPlease review." % user.get_full_name()
  419. send_mail('New User Registration - Please Review', email_body, 'admin@cloudninehair.com', \
  420. ['lyndon@antlyn.com'], fail_silently=False)
  421.  
  422. # redirect to /registration/success/
  423. return redirect('register_success')
  424.  
  425. data['reg_form'] = reg_form or RegistrationForm()
  426. data['student_form'] = student_form or StudentRegForm()
  427. data['freelance_form'] = freelance_form or FreelanceRegForm()
  428. data['salon_form'] = salon_form or SalonSalonForm()
  429. data['salon_personal_form'] = salon_form2 or AddressForm()
  430. data['salon_owner_form'] = salon_owner_form or SalonOwnerForm()
  431. data['terms_form'] = terms_form or TermsForm()
  432. data['login_form'] = login_form or LoginForm()
  433.  
  434. return render_to_response('registration.html',data, RequestContext(request))
  435.  
  436. def create_address( fields, account ):
  437. """ small helper function to populate the address model """
  438. address = Address_trade()
  439. address.line1 = fields['address_1']
  440. address.line2 = fields['address_2']
  441. address.line3 = fields['address_3']
  442. address.city = fields['city']
  443. address.country = Country.objects.get(pk=fields['country'])
  444. address.postcode = fields['postcode']
  445. address.telephone = fields['telephone']
  446. address.account = account
  447.  
  448. return address
  449.  
  450. def myaccount(request):
  451. data = {}
  452. return render_to_response('myaccount.html', data, RequestContext(request))
  453.  
  454. def myaddresses(request):
  455. data = {}
  456. data['addresses'] = Address_trade.objects.filter(account__user=request.user)
  457. new_address_form = None
  458. edit_address_form = None
  459.  
  460. edit_id = request.GET.get('edit', None)
  461.  
  462. if edit_id:
  463. # load edit form with data for this record
  464. try:
  465. edit_id = int(edit_id)
  466. edit_obj = Address_trade.objects.get(account__user=request.user, pk=edit_id)
  467. except (ValueError, Address_trade.DoesNotExist):
  468. edit_id = None
  469. else:
  470. initial = {}
  471. edit_address_form = AddressForm2(initial=initial)
  472.  
  473.  
  474. if request.method == "POST":
  475. if 'add_new' in request.POST:
  476. new_address_form = AddressForm2(request.POST)
  477.  
  478. if new_address_form.is_valid():
  479. messages.add_message(request, messages.INFO, 'New Address Saved')
  480. add = Address_trade()
  481.  
  482. else:
  483. pass
  484.  
  485. elif 'edit' in request.POST:
  486. messages.add_message(request, messages.INFO, 'Address details updated')
  487. elif 'delete' in request.POST:
  488. messages.add_message(request, messages.INFO, 'Address details deleted')
  489.  
  490. data['edit_id'] = edit_id
  491. data['edit_address_form'] = edit_address_form or AddressForm2()
  492. data['new_address_form'] = new_address_form or AddressForm2()
  493. return render_to_response('myaddresses.html', data, RequestContext(request))
  494.  
  495.  
  496. def myorders(request):
  497. data = {}
  498. return render_to_response('myorders.html', data, RequestContext(request))
  499.  
  500. def basket_trade(request):
  501. """
  502. Display the current state of the basket and allow the customer to modify
  503. the discount and quantities of each row of the basket
  504. """
  505. data = {}
  506.  
  507. basket = Basket(request)
  508. discount_form = DiscountCodeForm()
  509.  
  510. if request.method == "POST":
  511. if 'update' in request.POST:
  512.  
  513. try:
  514. basket.post_update(request)
  515. except:
  516. pass
  517.  
  518. discount_form = DiscountCodeForm(request.POST)
  519. if discount_form.is_valid():
  520.  
  521. cleaned_data = discount_form.cleaned_data
  522. if cleaned_data['discount_code']:
  523. try:
  524. o = Offer.objects.get(code=cleaned_data['discount_code'])
  525. except:
  526. data['discount_message'] = "You entered an invalid discount code."
  527. else:
  528.  
  529. if o.uses == 0 or Order.objects.filter(offer=o).count() < o.uses:
  530. basket.set_discount(o)
  531. else:
  532. data['discount_message'] = "Coupon has been used too many times or has expired."
  533. basket.remove_discount() #just in case
  534.  
  535. if 'delete' in request.POST:
  536.  
  537. basket.post_delete(request)
  538.  
  539. if 'remove_discount' in request.POST:
  540.  
  541. basket.remove_discount()
  542. else:
  543. basket = Basket(request)
  544.  
  545. data['discount_form'] = discount_form
  546. #data['logged_in'] = persistent_account(request)
  547. data['pageclass'] = 'basket'
  548. data['category'] = Category.objects.root_category()
  549. category = get_object_or_404(Category, slug='products')
  550. products = category.products.all().order_by('-weight')
  551. data['products'] = products.filter(type="standard")
  552. data['regions'] = Zone.objects.all()
  553. data['currency'] = Currency.get_default_currency()
  554.  
  555. return render_to_response('trade/basket.html', data, RequestContext(request))
  556.  
  557. def xhr_basket_review(request):
  558. """ View retrieves the checkout page right side panel basket in json format """
  559.  
  560. data = {}
  561.  
  562. if request.is_ajax():
  563. try:
  564. shipping_country = int( request.GET.get('country_id', None) or request.session.get('country_id', 1) )
  565. except ValueError:
  566. shipping_country = 1
  567.  
  568. try:
  569. country = Country.objects.get(pk=shipping_country)
  570. except Country.DoesNotExist:
  571. return HttpResponse("We have an invalid country code")
  572. else:
  573. request.session['country_id'] = shipping_country
  574.  
  575. basket = Basket(request, delivery_country=country.iso_code.lower())
  576.  
  577. data['postage'] = str(basket.get_postage_cost())
  578. data['vat'] = ''
  579. data['subtotal'] = str(basket.subtotal)
  580. data['total'] = str(basket.total)
  581.  
  582. return HttpResponse(simplejson.dumps(data), 'application/javascript')
  583. else:
  584. return HttpResponse(status=400)
  585.  
  586. def checkout_trade(request):
  587.  
  588. payment_options = ('sagepay','eft',)
  589.  
  590. import uuid, datetime
  591. basket = Basket(request)
  592. data = {}
  593. data = {'pageclass':'checkout'}
  594. showdelivery = "False"
  595. submitted = False
  596. del_address = False
  597. mailing = ""
  598. gender = False
  599.  
  600. billing_details_form = None
  601. billing_form = None
  602. contact_details_form = None
  603. delivery_form = None
  604. terms_form = None
  605. payment_form = None
  606. billing_address_form = get_address_form(request)(request.POST or None)
  607. shipping_address_form = get_address_form(request, 'shipping')(request.POST or None)
  608. dispatch_customer_form = None
  609.  
  610. max_addresses = getattr(settings,'MAX_SAVED_ADDRESSES', None)
  611. if max_addresses and Address_trade.objects.filter(account=request.user.get_profile()).count() >= max_addresses:
  612. address_save = False
  613. else:
  614. address_save = True
  615.  
  616. request.session['payment'] = "sagepay"
  617.  
  618. if request.method == 'POST':
  619. import pdb
  620. #pdb.set_trace()
  621.  
  622. billing_address_form.is_valid()
  623. shipping_address_form.is_valid()
  624.  
  625. billing_address_id = billing_address_form.cleaned_data['address']
  626. shipping_address_id = shipping_address_form.cleaned_data['address']
  627. billing_form = None
  628. delivery_form = None
  629.  
  630. forms_valid = True
  631.  
  632. if billing_address_id == "enter":
  633. # is the address form valid?
  634. billing_form = BillingAddressForm(request.POST, add_save_field=address_save)
  635.  
  636. forms_valid = forms_valid and billing_form.is_valid()
  637. else:
  638. # sanity check - is the address record owned by this user? If not, and as it's an unlikely scenario and probably evidence of tempering,
  639. # allow the DoesNotExist or ValueError exception to propogate and break the page
  640. billing_address_id = int(billing_address_id)
  641. Address_trade.objects.get(account=request.user.get_profile(), pk=billing_adress_id)
  642.  
  643. if shipping_address_id == "same":
  644. # same as the billing address
  645. pass
  646. elif shipping_address_id == "enter":
  647. delivery_form = ShippingAddressForm(request.POST, add_save_field=address_save)
  648. forms_valid = forms_valid and shipping_form.is_valid()
  649. else:
  650. # another sanity check - make sure the record exists and is owned by the user, otherwise let it break the page
  651. shipping_address_id = int(shipping_address_id)
  652. Address_trade.objects.get(account=request.uesr.get_profile(), pk=shipping_address_id)
  653.  
  654. payment_form = PaymentForm(request.POST)
  655. dispatch_customer_form = DispatchToCustomerForm(request.POST)
  656. terms_form = TermsForm(request.POST)
  657. billing_details_form = BillingDetailsForm(request.POST)
  658. contact_details_form = ContactDetailsForm(request.POST)
  659.  
  660. forms_valid = forms_valid and payment_form.is_valid() and dispatch_customer_form.is_valid() and terms_form.is_valid() and billing_details_form.is_valid() and contact_details_form.is_valid()
  661.  
  662. if forms_valid:
  663.  
  664. if 'order_id' in request.session:
  665. try:
  666. order_id = int(request.session['order_id'])
  667. order = Order.objects.get(pk=order_id)
  668. for item in OrderItem.objects.filter(order=order):
  669. item.delete()
  670.  
  671. except (Order.DoesNotExist, ValueError):
  672. del request.session['order_id']
  673. order_id = None
  674. else:
  675. order = Order()
  676.  
  677. # make the order
  678. order.billing_dob =
  679. order.billing_gender =
  680. order.billing_phone =
  681. order.email =
  682. order.billing_first_name =
  683. order.billing_last_name =
  684. order.billing_line_1 =
  685. order.billing_line_2 =
  686. order.billing_line_3 =
  687. order.billing_city =
  688. order.billing_state =
  689. order.billing_county =
  690. order.billing_postcode =
  691. order.billing_country =
  692.  
  693. order.delivery_first_name =
  694. order.delivery_last_name =
  695. order.delivery_line_1 =
  696. order.delivery_line_2 =
  697. order.delivery_line_3
  698. order.delivery_city =
  699. order.delivery_state =
  700. order.delivery_county =
  701. order.delivery_postcode =
  702. order.delivery_country =
  703.  
  704. order.account = request.user.get_profile()
  705. order.status = 100 # 100 = not authorised
  706.  
  707. order.delivery_address = self.delivery_address
  708. order.delivery_instructions = self.delivery_instructions
  709. order.payment = payment
  710. order.offer = self.discount
  711.  
  712. currency = Currency.objects.all()[0]
  713.  
  714. order.payment_currency = currency #self.account.gateway_currency
  715. order.selected_currency = currency #self.account.currency
  716.  
  717. order.payment_exchange_rate = 1 #currency #self.account.gateway_currency.exchange_rate
  718. order.selected_exchange_rate = 1 #currency #self.account.currency.exchange_rate
  719.  
  720. order.payment_method = method
  721.  
  722. order.raw_total = basket.get_raw_total(False)
  723. order.subtotal = basket.get_subtotal(False)
  724. order.postage_cost = basket.get_postage_cost(False)
  725. order.postage_description = basket.get_postage_description()
  726. order.total = basket.get_total(False)
  727.  
  728. from decimal import Decimal
  729.  
  730. tax_mult = 1.0 + (countrysettings.tax_rate / 100)
  731.  
  732. subtotal = self.get_subtotal(False)
  733.  
  734. order.tax = str(round(order.subtotal - (order.subtotal/(1+(Decimal(repr(countrysettings.tax_rate)) / 100))),2))
  735. order.tax_rate = repr(countrysettings.tax_rate)
  736.  
  737. order.save()
  738.  
  739. request.session['order_id'] = order.id
  740.  
  741. for item in basket.items:
  742. order_item = OrderItem()
  743. order_item.order = order
  744. order_item.product = item.item
  745. order_item.quantity = item.quantity
  746. order_item.product_name = item.item.name
  747. order_item.price = item.item.price
  748. #calculate tax on the item level
  749.  
  750. order_item.save()
  751.  
  752. # add the free gift promotional items separately
  753.  
  754. for promo in basket§.promos:
  755. order_item = OrderItem()
  756. order_item.order = order
  757. order_item.product_id = None
  758. order_item.product_name = promo['free_gift_title']
  759. order_item.quantity = promo['quantity']
  760. order_item.price = 0
  761. order_item.save()
  762.  
  763. # take payment
  764.  
  765. # get the shipping and billing addresses and pass these in to protx
  766.  
  767. # if payment is OK
  768.  
  769. payment_processor = PaymentProcessor()
  770.  
  771. payment_processor.do_request(payment_form, basket, request)
  772. if not payment_processor.valid_result:
  773. messages.add_message(request, messages.ERROR, payment_processor.statusdetail)
  774. else:
  775. payment = payment_processor.get_payment_object()
  776. payment.save()
  777.  
  778. order = basket.create_order(payment)
  779.  
  780. oc = OrderConfirmation(order)
  781. oc.send_admin_html()
  782. oc.send_customer_html()
  783.  
  784.  
  785.  
  786. return render_to_response('trade/checkout.html', data, RequestContext(request))
  787.  
  788. data['showdelivery'] = showdelivery
  789.  
  790. data['billing_details_form'] = billing_details_form or BillingDetailsForm()
  791. data['address_form'] = billing_form or BillingAddressForm(add_save_field=address_save)
  792. data['delivery_form'] = delivery_form or ShippingAddressForm(add_save_field=address_save)
  793. data['terms_form'] = terms_form or TermsForm()
  794. data['payment_form'] = payment_form or PaymentForm()
  795. data['contact_details_form'] = contact_details_form or ContactDetailsForm()
  796. data['billing_address_form'] = billing_address_form
  797. data['shipping_address_form'] = shipping_address_form
  798. data['dispatch_customer'] = dispatch_customer_form or DispatchToCustomerForm()
  799.  
  800. return render_to_response('trade/checkout.html', data, RequestContext(request))
Add Comment
Please, Sign In to add comment