Advertisement
Guest User

Untitled

a guest
Oct 24th, 2018
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 48.56 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. import xml.etree.ElementTree as ET
  3. import csv
  4. import datetime
  5. import requests
  6. import urllib3
  7. urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
  8. from django.shortcuts import render
  9. from ftplib import FTP
  10. from bs4 import BeautifulSoup
  11. from .models import *
  12. from decimal import Decimal, ROUND_HALF_UP
  13. from prestashop_api import PrestashopApi
  14.  
  15. api = PrestashopApi('http://sklep.wojnaopon.pl/api', 'F5FU6EVYCENBY74NXS31Z24SSJN8QW3P')
  16.  
  17. USERNAME = 'F5FU6EVYCENBY74NXS31Z24SSJN8QW3P'
  18. PASSWORD = ''
  19.  
  20. # ELIT #
  21. serverE = "178.217.140.125"
  22. directoryE = "/"
  23. filenameE = "elit-2018.csv"
  24. filenameEC = "cennik_Dakol_opony_csv.csv"
  25.  
  26. # GLOBETYRE #
  27. serverG = "178.217.140.125"
  28. directoryG = "/"
  29. filenameG = "WojnaOpon.csv"
  30. filenameP = "PlatformaOpon.csv"
  31.  
  32. # informacje dodatkowe
  33. id_tax_rules_group = 7
  34. state = 1
  35. redirect_type = 404
  36. show_price = 1
  37. id_shop = 1
  38. id_product_attribute = 0
  39. depends_on_stock = 0
  40. out_of_stock = 2
  41. active = 1
  42. weight = 1
  43. in_price_compare = 1
  44. ceneo_basket = 2
  45. available_for_order = 1
  46. minimal_quantity = 1
  47.  
  48. def get_platformaopon(request):
  49.     # pobieranie stanów PO
  50.     PlatformaOpon.objects.update(available=False)
  51.     PlatformaOpon.objects.update(stock='0')
  52.  
  53.     ftpG = FTP(serverG)  # Set server address
  54.     ftpG.login("stany_mag", "GlobeTyre$#")  # Connect to server
  55.     ftpG.cwd(directoryG)  # Move to the desired folder in server
  56.     ftpG.retrbinary('RETR ' + filenameP, open(filenameP, 'wb').write)  # Download file from server
  57.     ftpG.close()  # Close connection
  58.  
  59.     # Load the CSV file into CSV reader
  60.     csvfile = open('PlatformaOpon.csv', 'rt', encoding="utf8")
  61.     creader = csv.reader(csvfile, delimiter=';', quotechar='|')
  62.  
  63.     # Iterate through the CSV reader, inserting values into the database
  64.     next(creader)
  65.     for row in creader:
  66.         sap = row[3]
  67.         producer = row[1].upper()
  68.         model = row[2].upper()
  69.         size = row[5].upper()
  70.         speed_index = row[6].upper()
  71.         load_index = row[7]
  72.         rolling_resistance = row[8].upper()
  73.         adhesion = row[9].upper()
  74.         noise = row[10]
  75.         stock = row[11]
  76.         price = row[12].replace(",", ".")
  77.         dot = row[15]
  78.         season = row[22].upper()
  79.         type = row[21].upper().replace("OSOB", "OSOBOWE").replace("BUS", "DOSTAWCZE")
  80.         noise_symbole = row[20]
  81.         available = True
  82.  
  83.  
  84.         defaults = {'producer': producer, 'model': model, 'sap': sap, 'size': size, 'speed_index': speed_index, 'load_index': load_index, 'rolling_resistance': rolling_resistance, 'adhesion': adhesion, 'noise': noise, 'dot': dot, 'stock': stock, 'price': price, 'available': available, 'season': season, 'type': type, 'noise_symbol': noise_symbole}
  85.         try:
  86.             obj = PlatformaOpon.objects.get(sap=sap)
  87.             for key, value in defaults.items():
  88.                 setattr(obj, key, value)
  89.             obj.save()
  90.         except PlatformaOpon.DoesNotExist:
  91.             new_values = {'producer': producer, 'model': model, 'sap': sap, 'size': size, 'speed_index': speed_index, 'load_index': load_index, 'rolling_resistance': rolling_resistance, 'adhesion': adhesion, 'noise': noise, 'dot': dot, 'stock': stock, 'price': price, 'available': available, 'season': season, 'type': type, 'noise_symbol': noise_symbole}
  92.             new_values.update(defaults)
  93.             obj = PlatformaOpon(**new_values)
  94.             obj.save()
  95.  
  96.  
  97.     return render(request, 'get.html')
  98.  
  99. def export_platformaopon(request):
  100.  
  101.     with open('oferta_hurtopon_wo.csv', "w", newline='') as csv_file:
  102.         writer = csv.writer(csv_file, delimiter=';')
  103.         writer.writerow(['kod', 'nazwa', 'ilosc', 'cena', 'uwagi', 'dot', 'bieznikowana'])
  104.         tyres = PlatformaOpon.objects.all().values_list('sap', 'producer', 'model', 'size', 'speed_index', 'load_index', 'rolling_resistance', 'adhesion', 'noise', 'stock', 'price', 'dot', 'available')
  105.  
  106.         bieznikowana = 'nie'
  107.         uwagi = 'JEZELI DOSTEPNOSC PONIZEJ 8 SZTUK, PROSIMY O TELEFON W CELU POTWIERDZENIA DOSTEPNOSCI'
  108.         opis = ''
  109.  
  110.         for tyre in tyres:
  111.             if tyre[12] is True:
  112.                 opis = tyre[1] + ' ' + tyre[3] + ' ' + tyre[2] + ' ' + tyre[5] + '' + tyre[4] + ' ' + tyre[6] + ' ' + tyre[7] + ' ' + tyre[8] + 'dB'
  113.                 writer.writerow([tyre[0], opis, tyre[9], tyre[10], uwagi.encode('utf-8'), tyre[11], bieznikowana])
  114.  
  115.     with open('PlatformaOpon_import.csv', "w", newline='') as csv_file:
  116.         writer = csv.writer(csv_file, delimiter=';')
  117.         writer.writerow(['kod', 'liczba', 'cena', 'opis', 'nazwa', 'rozmiar', 'nosnosc', 'predkosc', 'typ', 'producent', 'sezon', 'dostawa', 'ee', 'hnm', 'wg', 'pg', 'data_produkcji'])
  118.         tyres = PlatformaOpon.objects.all().values_list('sap', 'producer', 'model', 'size', 'speed_index', 'load_index', 'rolling_resistance', 'adhesion', 'noise', 'stock', 'price', 'dot', 'available', 'season', 'type', 'noise_symbol')
  119.  
  120.         dostawa = '1'
  121.         empty = ''
  122.         opis = ''
  123.        
  124.         for tyre in tyres:
  125.             if tyre[12] is True:
  126.                 opis = tyre[1] + ' ' + tyre[3] + ' ' + tyre[2] + ' ' + tyre[5] + '' + tyre[4] + ' ' + tyre[6] + ' ' + tyre[7] + ' ' + tyre[8]
  127.                 size = tyre[3].replace('C', '').replace('Z', '').replace('V','')
  128.                 if len(size) < 7:
  129.                     size = size.replace('R', '/80R')
  130.                 type = tyre[14]
  131.                 if type == '4X4':
  132.                     type = '4X4/SUV'
  133.                 if type == 'SUV':
  134.                     type = '4X4/SUV'
  135.                 season = tyre[13]
  136.                 noise_symbol = tyre[15]
  137.                 if noise_symbol == ')))':
  138.                     noise_symbol = '3'
  139.                 if noise_symbol == '))':
  140.                     noise_symbol = '2'
  141.                 if noise_symbol == ')':
  142.                     noise_symbol = '1'
  143.                 writer.writerow([tyre[0], tyre[9], tyre[10], opis, tyre[2], size, tyre[5], tyre[4], type, tyre[1], season, dostawa, tyre[6], tyre[7], tyre[8], noise_symbol, tyre[11]])
  144.  
  145.     # Upload plików
  146.     serverG = "78.46.90.170"
  147.     serverH = "91.206.7.227"
  148.  
  149.     directoryG = "/gtcenter/media/exports/wojnaopon/"
  150.     directoryH = "/"
  151.  
  152.     filenameP = "PlatformaOpon_import.csv"
  153.     filenameH = "oferta_hurtopon_wo.csv"
  154.  
  155.     ftpG = FTP(serverG)  # Set server address
  156.     ftpG.login("gtyr2016", "lvvld8663")  # Connect to server
  157.     ftpG.cwd(directoryG)  # Move to the desired folder in server
  158.     ftpG.storbinary('STOR ' + filenameP, open(filenameP, 'rb'))  # Download file from server
  159.     ftpG.close()  # Close connection
  160.  
  161.     ftpG = FTP(serverG)  # Set server address
  162.     ftpG.login("gtyr2016", "lvvld8663")  # Connect to server
  163.     ftpG.cwd(directoryG)  # Move to the desired folder in server
  164.     ftpG.storbinary('STOR ' + filenameH, open(filenameH, 'rb'))  # Download file from server
  165.     ftpG.close()  # Close connection
  166.    
  167.     ftpH = FTP(serverH)  # Set server address
  168.     ftpH.login("globetyre", "45GtY81.P1")  # Connect to server
  169.     ftpH.cwd(directoryH)  # Move to the desired folder in server
  170.     ftpH.storbinary('STOR ' + filenameH, open(filenameH, 'rb'))  # Download file from server
  171.     ftpH.close()  # Close connection
  172.  
  173.     return render(request, 'get.html')
  174.  
  175. ## pobieranie producentów i modeli
  176. # pobieranie producentów i modeli ELIT
  177. def get_models_elit(request):
  178.  
  179.     # pobieranie produktów ELIT
  180.     ftpE = FTP(serverE)  # Set server address
  181.     ftpE.login("stany_mag", "GlobeTyre$#")  # Connect to server
  182.     ftpE.cwd(directoryE)  # Move to the desired folder in server
  183.     ftpE.retrbinary('RETR ' + filenameE, open(filenameE, 'wb').write)  # Download file from server
  184.     ftpE.close()  # Close connection
  185.  
  186.     # Load the CSV file into CSV reader
  187.     csvfile = open('elit-2018.csv', 'rt', encoding="utf8")
  188.     creader = csv.reader(csvfile, delimiter=';', quotechar='|')
  189.     # Iterate through the CSV reader, inserting values into the database
  190.     next(creader)
  191.     for row in creader:
  192.         producer = row[7].upper()
  193.         model = row[8].upper()
  194.         season = row[17].upper()
  195.         typ = row[2].upper()
  196.         available = True
  197.  
  198.         if season == 'LATO':
  199.             season = 'Letnie'
  200.  
  201.         if season == 'ZIMA':
  202.             season = 'Zimowe'
  203.  
  204.         if season == 'M+S':
  205.             season = 'Całoroczne'
  206.  
  207.         if typ == 'VAN':
  208.             typ = 'Dostawcze'
  209.         else:
  210.             typ = 'Osobowe'
  211.  
  212.         if model == 'FRIGO 2 ':
  213.             model = 'FRIGO 2'
  214.  
  215.         defaults = {'name': producer}
  216.         try:
  217.             obj = Producer.objects.get(name=producer)
  218.             for key, value in defaults.items():
  219.                 setattr(obj, key, value)
  220.             obj.save()
  221.         except Producer.DoesNotExist:
  222.             new_values = {'name': producer}
  223.             obj = Producer(**new_values)
  224.             obj.save()
  225.  
  226.         defaults = {'producer': Producer.objects.get(name=producer), 'name': model, 'season': season, 'type': typ, 'active': available}
  227.         try:
  228.             obj = Model.objects.get(name=model)
  229.             for key, value in defaults.items():
  230.                 setattr(obj, key, value)
  231.             obj.save()
  232.         except Model.DoesNotExist:
  233.             new_values = {'producer': Producer.objects.get(name=producer), 'name': model, 'season': season, 'type': typ, 'active': available}
  234.             obj = Model(**new_values)
  235.             obj.save()
  236.  
  237.     return render(request, 'get.html')
  238. # pobieranie producentów i modeli WOJNAOPON
  239. def get_models(request):
  240.     # pobieranie stanów WO
  241.     ftpG = FTP(serverG)  # Set server address
  242.     ftpG.login("stany_mag", "GlobeTyre$#")  # Connect to server
  243.     ftpG.cwd(directoryG)  # Move to the desired folder in server
  244.     ftpG.retrbinary('RETR ' + filenameG, open(filenameG, 'wb').write)  # Download file from server
  245.     ftpG.close()  # Close connection
  246.  
  247.     # Load the CSV file into CSV reader
  248.     csvfile = open('WojnaOpon.csv', 'rt', encoding="utf8")
  249.     creader = csv.reader(csvfile, delimiter=';', quotechar='|')
  250.  
  251.     # Iterate through the CSV reader, inserting values into the database
  252.     next(creader)
  253.     for row in creader:
  254.         producer = row[1].upper()
  255.         model = row[2].upper()
  256.         season = row[22].upper()
  257.         typ = row[21].upper()
  258.         available = True
  259.  
  260.         if season == 'LATO':
  261.             season = 'Letnie'
  262.  
  263.         if season == 'ZIMA':
  264.             season = 'Zimowe'
  265.  
  266.         if season == 'Całoroczne':
  267.             season = 'Całoroczne'
  268.  
  269.         if typ == 'OSOB':
  270.             typ = 'Osobowe'
  271.  
  272.         if typ == 'BUS':
  273.             typ = 'Dostawcze'
  274.  
  275.         defaults = {'name': producer}
  276.         try:
  277.             obj = Producer.objects.get(name=producer)
  278.             for key, value in defaults.items():
  279.                 setattr(obj, key, value)
  280.             obj.save()
  281.         except Producer.DoesNotExist:
  282.             new_values = {'name': producer}
  283.             obj = Producer(**new_values)
  284.             obj.save()
  285.  
  286.         defaults = {'producer': Producer.objects.get(name=producer), 'name': model, 'season': season, 'type': typ, 'active': available}
  287.         try:
  288.             obj = Model.objects.get(name=model)
  289.             for key, value in defaults.items():
  290.                 setattr(obj, key, value)
  291.             obj.save()
  292.         except Model.DoesNotExist:
  293.             new_values = {'producer': Producer.objects.get(name=producer), 'name': model, 'season': season, 'type': typ, 'active': available}
  294.             obj = Model(**new_values)
  295.             obj.save()
  296.             print(model)
  297.  
  298.  
  299.     return render(request, 'get.html')
  300. ## pobieranie stanów magazynowych
  301. # pobieranie stanów magazynowych WOJNAOPON
  302. def get_wojnaopon(request):
  303.  
  304.     WojnaOpon.objects.filter(provider=1).update(available=False)
  305.     WojnaOpon.objects.filter(provider=1).update(stock='0')
  306.  
  307.     # DODOAWANIE PRODUKTÓW WOJNAOPON
  308.     ftpG = FTP(serverG)  # Set server address
  309.     ftpG.login("stany_mag", "GlobeTyre$#")  # Connect to server
  310.     ftpG.cwd(directoryG)  # Move to the desired folder in server
  311.     ftpG.retrbinary('RETR ' + filenameG, open(filenameG, 'wb').write)  # Download file from server
  312.     ftpG.close()  # Close connection
  313.  
  314.     # Load the CSV file into CSV reader
  315.     csvfile = open('WojnaOpon.csv', 'rt', encoding="utf8")
  316.     creader = csv.reader(csvfile, delimiter=';', quotechar='|')
  317.  
  318.     # Iterate through the CSV reader, inserting values into the database
  319.     next(creader)
  320.     for row in creader:
  321.         producer = row[1].upper()
  322.         model = row[2].upper()
  323.         sap = row[3]
  324.         ean = row[4]
  325.         width = row[5].split("/")[0]
  326.         profile = row[5].split("/")[1].split("R")[0]
  327.         rim = row[5].split("R")[1]
  328.         speed_index = row[6].upper()
  329.         load_index = row[7]
  330.         rolling_resistance = row[8].upper()
  331.         adhesion = row[9].upper()
  332.         additional_marking = row[23].upper()
  333.         noise = row[10]
  334.         noise_symbole = row[20].upper()
  335.         dot = row[15]
  336.         stock = row[11]
  337.         price = row[12].replace(",", ".")
  338.         price_wo = row[18].replace(",", ".")
  339.         available = True
  340.         provider = 1
  341.  
  342.         if len(price_wo) > 1:
  343.             price = price_wo
  344.  
  345.         if int(stock) > Provider.objects.get(id=provider).limit:
  346.             defaults = {'producer': Producer.objects.get(name=producer), 'model': Model.objects.get(name=model), 'sap': sap, 'width': width, 'profile': profile, 'rim': rim, 'speed_index': speed_index, 'load_index': load_index, 'rolling_resistance': rolling_resistance, 'adhesion': adhesion, 'additional_marking': additional_marking, 'noise': noise, 'noise_symbole': noise_symbole, 'dot': dot, 'stock': stock, 'price': price, 'provider': Provider.objects.get(id=provider), 'available': available}
  347.  
  348.             print(sap)
  349.             try:
  350.                 obj = WojnaOpon.objects.get(sap=sap)
  351.                 for key, value in defaults.items():
  352.                     setattr(obj, key, value)
  353.                 obj.save()
  354.             except WojnaOpon.DoesNotExist:
  355.                 new_values = {'producer': Producer.objects.get(name=producer), 'model': Model.objects.get(name=model), 'sap': sap, 'width': width, 'profile': profile, 'rim': rim, 'speed_index': speed_index, 'load_index': load_index, 'rolling_resistance': rolling_resistance, 'adhesion': adhesion, 'additional_marking': additional_marking, 'noise': noise, 'noise_symbole': noise_symbole, 'dot': dot, 'stock': stock, 'price': price, 'provider': Provider.objects.get(id=provider), 'available': available}
  356.                 new_values.update(defaults)
  357.                 obj = WojnaOpon(**new_values)
  358.                 obj.save()
  359.  
  360.  
  361.     return render(request, 'get.html')
  362. # pobieranie stanów magazynowych ELIT
  363. def get_elit(request):
  364.  
  365.     WojnaOpon.objects.filter(provider=2).update(available=False)
  366.     WojnaOpon.objects.filter(provider=2).update(stock='0')
  367.  
  368.     # DODOAWANIE PRODUKTÓW ELIT
  369.     ftpE = FTP(serverE)  # Set server address
  370.     ftpE.login("stany_mag", "GlobeTyre$#")  # Connect to server
  371.     ftpE.cwd(directoryE)  # Move to the desired folder in server
  372.     ftpE.retrbinary('RETR ' + filenameE, open(filenameE, 'wb').write)  # Download file from server
  373.     ftpE.close()  # Close connection
  374.  
  375.     # Load the CSV file into CSV reader
  376.     csvfile = open(filenameE, 'rt', encoding="latin-1")
  377.     creader = csv.reader(csvfile, delimiter=';', quotechar='|')
  378.  
  379.     # Iterate through the CSV reader, inserting values into the database
  380.     next(creader)
  381.     for row in creader:
  382.         producer = row[7].upper()
  383.         model = row[8].upper()
  384.         sap = row[1]
  385.         width = row[3]
  386.         profile = row[4]
  387.         rim = row[5]
  388.         speed_index = row[10].upper()
  389.         load_index = row[9]
  390.         rolling_resistance = row[21].upper()
  391.         adhesion = row[22].upper()
  392.         additional_marking = ''
  393.         noise = row[23]
  394.         noise_symbole = row[24].upper()
  395.         xl_row = row[11].upper()
  396.         rof_row = row[13].upper()
  397.         fr_row = row[14].upper()
  398.         hom_row = row[15]
  399.         dot = 'Opony nie starsze niż 2 lata'
  400.         stock = '0'
  401.         price = '0'
  402.         provider = 2
  403.         product_available = False
  404.  
  405.         if len(xl_row) > 1:
  406.             xl = 'XL '
  407.             additional_marking += xl
  408.  
  409.         if len(rof_row) > 1:
  410.             rof = 'ROF '
  411.             additional_marking += rof
  412.  
  413.         if len(fr_row) > 1:
  414.             fr = 'FR '
  415.             additional_marking += fr
  416.  
  417.         if len(hom_row) > 1:
  418.             hom = hom_row + ' '
  419.             additional_marking += hom
  420.  
  421.         if model[-1:] == ' ':
  422.             model = model[:-1]
  423.  
  424.  
  425.         defaults = {'producer': Producer.objects.get(name=producer), 'model': Model.objects.get(name=model), 'sap': sap, 'width': width, 'profile': profile, 'rim': rim, 'speed_index': speed_index, 'load_index': load_index, 'rolling_resistance': rolling_resistance, 'adhesion': adhesion, 'additional_marking': additional_marking, 'noise': noise, 'noise_symbole': noise_symbole, 'dot': dot, 'stock': stock, 'price': price, 'provider': Provider.objects.get(id=provider), 'available': product_available}
  426.  
  427.         try:
  428.             obj = WojnaOpon.objects.get(sap=sap)
  429.             for key, value in defaults.items():
  430.                 setattr(obj, key, value)
  431.             obj.save()
  432.         except WojnaOpon.DoesNotExist:
  433.             new_values = {'producer': Producer.objects.get(name=producer), 'model': Model.objects.get(name=model), 'sap': sap, 'width': width, 'profile': profile, 'rim': rim, 'speed_index': speed_index, 'load_index': load_index, 'rolling_resistance': rolling_resistance, 'adhesion': adhesion, 'additional_marking': additional_marking, 'noise': noise, 'noise_symbole': noise_symbole, 'dot': dot, 'stock': stock, 'price': price, 'provider': Provider.objects.get(id=provider), 'available': product_available}
  434.             new_values.update(defaults)
  435.             obj = WojnaOpon(**new_values)
  436.             obj.save()
  437.  
  438.     # DODOAWANIE CENY ELIT
  439.     ftpE = FTP(serverE)  # Set server address
  440.     ftpE.login("ad", "!ADdakol$#")  # Connect to server
  441.     ftpE.cwd(directoryE)  # Move to the desired folder in server
  442.     ftpE.retrbinary('RETR ' + filenameEC, open(filenameEC, 'wb').write)  # Download file from server
  443.     ftpE.close()  # Close connection
  444.  
  445.     # Load the CSV file into CSV reader
  446.     csvfile = open('cennik_Dakol_opony_csv.csv', 'rt', encoding="latin-1")
  447.     creader = csv.reader(csvfile, delimiter=';', quotechar='|')
  448.  
  449.     # Iterate through the CSV reader, inserting values into the database
  450.     next(creader)
  451.     for row in creader:
  452.         sap = row[9].split('/')[0]
  453.         # status = row[8]
  454.         stock = row[5]
  455.         price = round(float(row[3].replace(",", ".")), 1)
  456.         available = True
  457.         provider = 2
  458.         price = price + Provider.objects.get(id=provider).margin + Provider.objects.get(id=provider).delivery_costs
  459.  
  460.         if int(stock) > Provider.objects.get(id=provider).limit:
  461.             defaults = {'stock': stock, 'price': price, 'provider': Provider.objects.get(id=provider), 'available': available}
  462.  
  463.             try:
  464.                 obj = WojnaOpon.objects.get(sap=sap)
  465.                 for key, value in defaults.items():
  466.                     setattr(obj, key, value)
  467.                 obj.save()
  468.             except WojnaOpon.DoesNotExist:
  469.                 pass
  470.  
  471.     return render(request, 'get.html')
  472. ## PRESTASHOP
  473. def get_type_of_features(request):
  474.  
  475.     url = 'http://sklep.wojnaopon.pl/api/product_features'
  476.  
  477.     type_of_feature_response = requests.get(url, auth=(USERNAME, PASSWORD))
  478.     tree = ET.fromstring(type_of_feature_response.content)
  479.  
  480.     # type_of_feature ID #
  481.     type_of_feature = []
  482.     for node in tree.iter('product_feature'):
  483.         type_of_feature_id = node.get('id')
  484.         type_of_feature.append(type_of_feature_id)
  485.  
  486.     # type_of_feature details #
  487.     for feature_id in type_of_feature:
  488.         features_url = url + '/' + feature_id
  489.         type_of_feature_response = requests.get(features_url, auth=(USERNAME, PASSWORD))
  490.         tree = ET.fromstring(type_of_feature_response.content)
  491.  
  492.         for child in tree:
  493.             wo_feature_id = child.find('id').text
  494.             wo_feature_name = child.find('name')
  495.             for node in wo_feature_name:
  496.                 wo_feature_name = node.text
  497.  
  498.             defaults = {'name': wo_feature_name}
  499.             try:
  500.                 obj = Type_of_feature.objects.get(name=wo_feature_name)
  501.                 for key, value in defaults.items():
  502.                     setattr(obj, key, value)
  503.                 obj.save()
  504.             except Type_of_feature.DoesNotExist:
  505.                 new_values = {'name': wo_feature_name, 'type_of_feature_wo_id': wo_feature_id}
  506.                 obj = Type_of_feature(**new_values)
  507.                 obj.save()
  508.  
  509.     return render(request, 'get.html')
  510.  
  511. def get_feature_details(request):
  512.  
  513.     presta = WojnaOpon.objects.all().values_list('speed_index', 'load_index', 'rolling_resistance', 'adhesion', 'noise', 'noise_symbole', 'additional_marking', 'width', 'profile', 'rim', 'dot')
  514.     for row in presta:
  515.         speed_index = row[0]
  516.         load_index = row[1]
  517.         rolling_resistance = row[2]
  518.         adhesion = row[3]
  519.         noise = row[4]
  520.         noise_symbole = row[5]
  521.         additional_marking = row[6]
  522.         width = row[7]
  523.         profile = row[8]
  524.         rim = row[9]
  525.         dot = row[10]
  526.  
  527.         if len(dot) < 5:
  528.             if len(dot) == 4:
  529.                 dot = dot[2:]
  530.                 dot = '20' + dot
  531.             else:
  532.                 dot = '20' + dot
  533.  
  534.         type_of_feature_id = 11
  535.         defaults = {'value': noise}
  536.         try:
  537.             obj = Feature.objects.get(value=noise, type_of_feature_wo_id=Type_of_feature.objects.get(type_of_feature_wo_id=type_of_feature_id))
  538.             for key, value in defaults.items():
  539.                 setattr(obj, key, value)
  540.             obj.save()
  541.         except Feature.DoesNotExist:
  542.             new_values = {'value': noise, 'type_of_feature_wo_id': Type_of_feature.objects.get(type_of_feature_wo_id=type_of_feature_id)}
  543.             obj = Feature(**new_values)
  544.             obj.save()
  545.  
  546.         # type_of_feature_id = 19
  547.         # defaults = {'value': additional_marking}
  548.         # try:
  549.         #     obj = Feature.objects.get(value=additional_marking, type_of_feature_wo_id=Type_of_feature.objects.get(type_of_feature_wo_id=type_of_feature_id))
  550.         #     for key, value in defaults.items():
  551.         #         setattr(obj, key, value)
  552.         #     obj.save()
  553.         # except Feature.DoesNotExist:
  554.         #     new_values = {'value': additional_marking, 'type_of_feature_wo_id': Type_of_feature.objects.get(type_of_feature_wo_id=type_of_feature_id)}
  555.         #     obj = Feature(**new_values)
  556.         #     obj.save()
  557.  
  558.         # type_of_feature_id = 13
  559.         # defaults = {'value': dot}
  560.         # try:
  561.         #     obj = Feature.objects.get(value=dot, type_of_feature_wo_id=Type_of_feature.objects.get(type_of_feature_wo_id=type_of_feature_id))
  562.         #     for key, value in defaults.items():
  563.         #         setattr(obj, key, value)
  564.         #     obj.save()
  565.         # except Feature.DoesNotExist:
  566.         #     new_values = {'value': dot, 'type_of_feature_wo_id': Type_of_feature.objects.get(type_of_feature_wo_id=type_of_feature_id)}
  567.         #     obj = Feature(**new_values)
  568.         #     obj.save()
  569.  
  570.         # type_of_feature_id = 7
  571.         # defaults = {'value': speed_index}
  572.         # try:
  573.         #     obj = Feature.objects.get(value=speed_index, type_of_feature_wo_id=Type_of_feature.objects.get(type_of_feature_wo_id=type_of_feature_id))
  574.         #     for key, value in defaults.items():
  575.         #         setattr(obj, key, value)
  576.         #     obj.save()
  577.         # except Feature.DoesNotExist:
  578.         #     new_values = {'value': speed_index, 'type_of_feature_wo_id': Type_of_feature.objects.get(type_of_feature_wo_id=type_of_feature_id)}
  579.         #     obj = Feature(**new_values)
  580.         #     obj.save()
  581.  
  582.  
  583.         # type_of_feature_id = 8
  584.         # defaults = {'value': load_index}
  585.         # try:
  586.         #     obj = Feature.objects.get(value=load_index, type_of_feature_wo_id=Type_of_feature.objects.get(type_of_feature_wo_id=type_of_feature_id))
  587.         #     for key, value in defaults.items():
  588.         #         setattr(obj, key, value)
  589.         #     obj.save()
  590.         # except Feature.DoesNotExist:
  591.         #     new_values = {'value': load_index, 'type_of_feature_wo_id': Type_of_feature.objects.get(type_of_feature_wo_id=type_of_feature_id)}
  592.         #     obj = Feature(**new_values)
  593.         #     obj.save()
  594.  
  595.  
  596.         # type_of_feature_id = 9
  597.         # defaults = {'value': rolling_resistance}
  598.         # try:
  599.         #     obj = Feature.objects.get(value=rolling_resistance, type_of_feature_wo_id=Type_of_feature.objects.get(type_of_feature_wo_id=type_of_feature_id))
  600.         #     for key, value in defaults.items():
  601.         #         setattr(obj, key, value)
  602.         #     obj.save()
  603.         # except Feature.DoesNotExist:
  604.         #     new_values = {'value': rolling_resistance, 'type_of_feature_wo_id': Type_of_feature.objects.get(type_of_feature_wo_id=type_of_feature_id)}
  605.         #     obj = Feature(**new_values)
  606.         #     obj.save()
  607.  
  608.  
  609.         # type_of_feature_id = 10
  610.         # defaults = {'value': adhesion}
  611.         # try:
  612.         #     obj = Feature.objects.get(value=adhesion, type_of_feature_wo_id=Type_of_feature.objects.get(type_of_feature_wo_id=type_of_feature_id))
  613.         #     for key, value in defaults.items():
  614.         #         setattr(obj, key, value)
  615.         #     obj.save()
  616.         # except Feature.DoesNotExist:
  617.         #     new_values = {'value': adhesion, 'type_of_feature_wo_id': Type_of_feature.objects.get(type_of_feature_wo_id=type_of_feature_id)}
  618.         #     obj = Feature(**new_values)
  619.         #     obj.save()
  620.  
  621.        
  622.         # type_of_feature_id = 11
  623.         # defaults = {'value': noise}
  624.         # try:
  625.         #     obj = Feature.objects.get(value=noise, type_of_feature_wo_id=Type_of_feature.objects.get(type_of_feature_wo_id=type_of_feature_id))
  626.         #     for key, value in defaults.items():
  627.         #         setattr(obj, key, value)
  628.         #     obj.save()
  629.         # except Feature.DoesNotExist:
  630.         #     new_values = {'value': noise, 'type_of_feature_wo_id': Type_of_feature.objects.get(type_of_feature_wo_id=type_of_feature_id)}
  631.         #     obj = Feature(**new_values)
  632.         #     obj.save()
  633.  
  634.  
  635.         # type_of_feature_id = 12
  636.         # defaults = {'value': noise_symbole}
  637.         # try:
  638.         #     obj = Feature.objects.get(value=noise_symbole, type_of_feature_wo_id=Type_of_feature.objects.get(type_of_feature_wo_id=type_of_feature_id))
  639.         #     for key, value in defaults.items():
  640.         #         setattr(obj, key, value)
  641.         #     obj.save()
  642.         # except Feature.DoesNotExist:
  643.         #     new_values = {'value': noise_symbole, 'type_of_feature_wo_id': Type_of_feature.objects.get(type_of_feature_wo_id=type_of_feature_id)}
  644.         #     obj = Feature(**new_values)
  645.         #     obj.save()
  646.  
  647.         # type_of_feature_id = 1
  648.         # defaults = {'value': width}
  649.         # try:
  650.         #     obj = Feature.objects.get(value=width, type_of_feature_wo_id=Type_of_feature.objects.get(type_of_feature_wo_id=type_of_feature_id))
  651.         #     for key, value in defaults.items():
  652.         #         setattr(obj, key, value)
  653.         #     obj.save()
  654.         # except Feature.DoesNotExist:
  655.         #     new_values = {'value': width, 'type_of_feature_wo_id': Type_of_feature.objects.get(type_of_feature_wo_id=type_of_feature_id)}
  656.         #     obj = Feature(**new_values)
  657.         #     obj.save()
  658.  
  659.  
  660.         # type_of_feature_id = 2
  661.         # defaults = {'value': profile}
  662.         # try:
  663.         #     obj = Feature.objects.get(value=profile, type_of_feature_wo_id=Type_of_feature.objects.get(type_of_feature_wo_id=type_of_feature_id))
  664.         #     for key, value in defaults.items():
  665.         #         setattr(obj, key, value)
  666.         #     obj.save()
  667.         # except Feature.DoesNotExist:
  668.         #     new_values = {'value': profile, 'type_of_feature_wo_id': Type_of_feature.objects.get(type_of_feature_wo_id=type_of_feature_id)}
  669.         #     obj = Feature(**new_values)
  670.         #     obj.save()
  671.  
  672.  
  673.         # type_of_feature_id = 3
  674.         # defaults = {'value': rim}
  675.         # try:
  676.         #     obj = Feature.objects.get(value=rim, type_of_feature_wo_id=Type_of_feature.objects.get(type_of_feature_wo_id=type_of_feature_id))
  677.         #     for key, value in defaults.items():
  678.         #         setattr(obj, key, value)
  679.         #     obj.save()
  680.         # except Feature.DoesNotExist:
  681.         #     new_values = {'value': rim, 'type_of_feature_wo_id': Type_of_feature.objects.get(type_of_feature_wo_id=type_of_feature_id)}
  682.         #     obj = Feature(**new_values)
  683.         #     obj.save()
  684.  
  685.  
  686.     return render(request, 'get.html')
  687.  
  688. def get_features_id(request):
  689.  
  690.     url = 'http://sklep.wojnaopon.pl/api/product_feature_values'
  691.  
  692.     type_of_feature_response = requests.get(url, auth=(USERNAME, PASSWORD))
  693.     tree = ET.fromstring(type_of_feature_response.content)
  694.  
  695.     id_of_feature = []
  696.     for node in tree.iter('product_feature_value'):
  697.         feature_id = node.get('id')
  698.         id_of_feature.append(feature_id)
  699.  
  700.     # type_of_feature details #
  701.     for feature_id in id_of_feature:
  702.         features_url = url + '/' + feature_id
  703.         type_of_feature_response = requests.get(features_url, auth=(USERNAME, PASSWORD))
  704.         tree = ET.fromstring(type_of_feature_response.content)
  705.  
  706.         for child in tree:
  707.             wo_feature_id = child.find('id').text
  708.             id_feature = child.find('id_feature').text
  709.             wo_feature_name = child.find('value')
  710.             for node in wo_feature_name:
  711.                 wo_feature_name = node.text
  712.  
  713.             if wo_feature_name is not None:
  714.                 defaults = {'feature_wo_id': wo_feature_id}
  715.                 try:
  716.                     obj = Feature.objects.get(value=wo_feature_name, type_of_feature_wo_id=Type_of_feature.objects.get(type_of_feature_wo_id=id_feature))
  717.                     for key, value in defaults.items():
  718.                         setattr(obj, key, value)
  719.                     obj.save()
  720.                 except Feature.DoesNotExist:
  721.                     pass
  722.  
  723.     return render(request, 'get.html')
  724.  
  725. def create_feature(request):
  726.  
  727.     # type_of_features = Type_of_feature.objects.all().values_list('type_of_feature_wo_id')
  728.     # for item in type_of_features:
  729.     #     presta_type_feature = item[0]
  730.     presta_type_feature = '1'
  731.     features = Feature.objects.filter(type_of_feature_wo_id__type_of_feature_wo_id=presta_type_feature).values_list('value', 'type_of_feature_wo_id__type_of_feature_wo_id')
  732.     # id_feature = '11'
  733.     for item in features:
  734.         value = item[0]
  735.         type_of_feature_wo_id = item[1]
  736.  
  737.         data_1 = u"""<?xml version="1.0" encoding="UTF-8"?><prestashop xmlns:xlink="http://www.w3.org/1999/xlink"><product_feature_value><id></id><id_feature>"""
  738.         data_2 = type_of_feature_wo_id
  739.         data_3 = u"""</id_feature><custom></custom><value><language id="1">"""
  740.         data_4 = value
  741.         data_5 = u"""</language></value></product_feature_value></prestashop>"""
  742.         data = data_1 + data_2 + data_3 + data_4 + data_5
  743.         r = requests.post('http://sklep.wojnaopon.pl/api/product_feature_values?schema=blank', auth=(USERNAME, PASSWORD), data = data.encode('utf-8'))
  744.  
  745.     return render(request, 'get.html')
  746.  
  747. def get_product_id(request):
  748.  
  749.     WojnaOpon.objects.update(wo_product_id='')
  750.     WojnaOpon.objects.update(stock_availables_id='')
  751.  
  752.     url = 'http://sklep.wojnaopon.pl/api/products'
  753.     # url_stocks = 'http://sklep.wojnaopon.pl/api/stock_availables'
  754.  
  755.     ordersID_response = requests.get(url, auth=(USERNAME, PASSWORD))
  756.     tree = ET.fromstring(ordersID_response.content)
  757.  
  758.     # PRODUCTS ID #
  759.     products_ids = []
  760.     for node in tree.iter():
  761.         productID = node.get('id')
  762.         if productID is not None:
  763.             products_ids.append(productID)
  764.  
  765.     for node in products_ids:
  766.         order_url = url + '/' + node
  767.         order_response = requests.get(order_url, auth=(USERNAME, PASSWORD))
  768.         root = ET.fromstring(order_response.content)
  769.         for child in root:
  770.             wo_product_id = child.find('id').text
  771.             sap = child.find('reference').text
  772.  
  773.             # PRODUKT #
  774.             defaults = {'wo_product_id': wo_product_id}
  775.             try:
  776.                 obj = WojnaOpon.objects.get(sap=sap)
  777.                 for key, value in defaults.items():
  778.                     setattr(obj, key, value)
  779.                 obj.save()
  780.             except WojnaOpon.DoesNotExist:
  781.                 pass
  782.             # PRODUKT #
  783.  
  784.             associations = child.find('associations')
  785.             stock_availables = associations.find('stock_availables')
  786.             stock_available = stock_availables.find('stock_available')
  787.             stock_available_id = stock_available.find('id').text
  788.  
  789.             defaults = {'stock_availables_id': stock_available_id}
  790.             try:
  791.                 obj = WojnaOpon.objects.get(sap=sap)
  792.                 for key, value in defaults.items():
  793.                     setattr(obj, key, value)
  794.                 obj.save()
  795.             except WojnaOpon.DoesNotExist:
  796.                 pass
  797.             # PRODUKT #
  798.  
  799.     return render(request, 'get.html')
  800. # aktualizacja produktów prestashop
  801. def update_product(request):
  802.  
  803.     product = WojnaOpon.objects.all().values_list('producer__wo_id', 'model__name', 'provider__name', 'sap', 'wo_product_id', 'stock_availables_id', 'width', 'profile', 'rim', 'speed_index', 'load_index', 'rolling_resistance', 'adhesion', 'noise', 'noise_symbole', 'additional_marking', 'dot', 'price', 'stock', 'available', 'model__season', 'model__type', 'model__description', 'producer__name', 'model__image', 'producer__warranty')
  804.     for row in product:
  805.         producer_wo_id = row[0]
  806.         model = row[1]
  807.         provider = row[2]
  808.         sap = row[3]
  809.         # ean = row[4]
  810.         wo_product_id = row[4]
  811.         stock_availables_id = row[5]
  812.         width = row[6]
  813.         profile = row[7]
  814.         rim = row[8]
  815.         speed_index = row[9]
  816.         load_index = row[10]
  817.         rolling_resistance = row[11]
  818.         adhesion = row[12]
  819.         noise = row[13]
  820.         noise_symbole = row[14]
  821.         additional_marking = row[15]
  822.         dot = row[16]
  823.         price = row[17]
  824.         stock = row[18]
  825.         available = row[19]
  826.         season = row[20]
  827.         type = row[21]
  828.         description = row[22]
  829.         producer_name = row[23]
  830.         model_image = row[24]
  831.         warranty = row[25]
  832.  
  833.         if warranty is '':
  834.             warranty = '6113'
  835.            
  836.         # NAME
  837.         if len(additional_marking) > 0:
  838.             name = producer_name + ' ' + width + '/' + profile + 'R' + rim + ' ' + model + ' ' + load_index + '' + speed_index + ' ' + additional_marking + ' ' + rolling_resistance + ' ' + adhesion + ' ' + noise + ' ' + noise_symbole
  839.         else:
  840.             name = producer_name + ' ' + width + '/' + profile + 'R' + rim + ' ' + model + ' ' + load_index + '' + speed_index + ' ' + rolling_resistance + ' ' + adhesion + ' ' + noise + ' ' + noise_symbole
  841.  
  842.         # width
  843.         width_id = ''
  844.         features = Feature.objects.filter(value__exact=width, type_of_feature_wo_id__type_of_feature_wo_id=1).values_list('feature_wo_id')
  845.         for item in features:
  846.             width_id += item[0]
  847.  
  848.         # profile
  849.         profile_id = ''
  850.         features = Feature.objects.filter(value__exact=profile, type_of_feature_wo_id__type_of_feature_wo_id=2).values_list('feature_wo_id')
  851.         for item in features:
  852.             profile_id += item[0]
  853.  
  854.         # rim
  855.         rim_id = ''
  856.         features = Feature.objects.filter(value__exact=rim, type_of_feature_wo_id__type_of_feature_wo_id=3).values_list('feature_wo_id')
  857.         for item in features:
  858.             rim_id += item[0]
  859.  
  860.         # speed_index
  861.         speed_index_id = ''
  862.         features = Feature.objects.filter(value__exact=speed_index, type_of_feature_wo_id__type_of_feature_wo_id=7).values_list('feature_wo_id')
  863.         for item in features:
  864.             speed_index_id += item[0]
  865.  
  866.         # load_index
  867.         load_index_id = ''
  868.         features = Feature.objects.filter(value__exact=load_index, type_of_feature_wo_id__type_of_feature_wo_id=8).values_list('feature_wo_id')
  869.         for item in features:
  870.             load_index_id += item[0]
  871.  
  872.         # rolling_resistance
  873.         rolling_resistance_id = ''
  874.         features = Feature.objects.filter(value__exact=rolling_resistance, type_of_feature_wo_id__type_of_feature_wo_id=9).values_list('feature_wo_id')
  875.         for item in features:
  876.             rolling_resistance_id += item[0]
  877.  
  878.         # adhesion
  879.         adhesion_id = ''
  880.         features = Feature.objects.filter(value__exact=adhesion, type_of_feature_wo_id__type_of_feature_wo_id=10).values_list('feature_wo_id')
  881.         for item in features:
  882.             adhesion_id += item[0]
  883.  
  884.         # noise
  885.         noise_id = ''
  886.         features = Feature.objects.filter(value__exact=noise, type_of_feature_wo_id__type_of_feature_wo_id=11).values_list('feature_wo_id')
  887.         for item in features:
  888.             noise_id += item[0]
  889.  
  890.         # noise_symbole
  891.         noise_symbole_id = ''
  892.         features = Feature.objects.filter(value__exact=noise_symbole, type_of_feature_wo_id__type_of_feature_wo_id=12).values_list('feature_wo_id')
  893.         for item in features:
  894.             noise_symbole_id += item[0]
  895.  
  896.         # additional_marking
  897.         additional_marking_id = ''
  898.         features = Feature.objects.filter(value__exact=additional_marking, type_of_feature_wo_id__type_of_feature_wo_id=19).values_list('feature_wo_id')
  899.         for item in features:
  900.             additional_marking_id += item[0]
  901.  
  902.         # type
  903.         type_id = ''
  904.         features = Feature.objects.filter(value__exact=type, type_of_feature_wo_id__type_of_feature_wo_id=21).values_list('feature_wo_id')
  905.         for item in features:
  906.             type_id += item[0]
  907.  
  908.         # dot
  909.         if len(dot) < 5:
  910.             if len(dot) == 4:
  911.                 dot = dot[2:]
  912.                 dot = '20' + dot
  913.             else:
  914.                 dot = '20' + dot  
  915.  
  916.         dot_id = ''
  917.         features = Feature.objects.filter(value__exact=dot, type_of_feature_wo_id__type_of_feature_wo_id=13).values_list('feature_wo_id')
  918.         for item in features:
  919.             dot_id += item[0]
  920.  
  921.         # season
  922.         if season == 'Letnie':
  923.             season_id = '723'
  924.         if season == 'Zimowe':
  925.             season_id = '724'
  926.         if season == 'Całoroczne':
  927.             season_id = '1257'
  928.  
  929.         # provider
  930.         if provider == 'Elit':
  931.             provider_id = '1935'
  932.             realization_id = '116'
  933.         else:
  934.             provider_id = '1934'
  935.             realization_id = '6112'
  936.  
  937.         # category
  938.         category_id_1 = 2
  939.         if season == 'Letnie' and type == 'Osobowe':
  940.             category_id_2 = 15
  941.             category_id_3 = 18
  942.        
  943.         if season == 'Letnie' and type == 'Dostawcze':
  944.             category_id_2 = 15
  945.             category_id_3 = 19
  946.  
  947.         if season == 'Zimowe' and type == 'Osobowe':
  948.             category_id_2 = 16
  949.             category_id_3 = 20
  950.  
  951.         if season == 'Zimowe' and type == 'Dostawcze':
  952.             category_id_2 = 16
  953.             category_id_3 = 21
  954.  
  955.         if season == 'Całoroczne' and type == 'Osobowe':
  956.             category_id_2 = 17
  957.             category_id_3 = 22
  958.  
  959.         if season == 'Całoroczne' and type == 'Dostawcze':
  960.             category_id_2 = 17
  961.             category_id_3 = 23
  962.            
  963.  
  964.         # informacje dodatkowe
  965.         extra_text_product = ' - Ekspresowa dostawa! ROK PRODUKCJI: ' + str(dot)
  966.         name_slug = name.lower().replace(' ', '-').replace(')','').replace('/','').replace('+','').replace('.','-')
  967.         link_rewrite = name_slug
  968.  
  969.         if  wo_product_id is not '':
  970.             categories = {'category1': {'id': category_id_1}, 'category2': {'id': category_id_2}, 'category3': {'id': category_id_3}}
  971.             if additional_marking_id is not '':
  972.                 product_features = {'product_feature1': {'id': '1', 'id_feature_value': width_id}, 'product_feature2': {'id': '2', 'id_feature_value': profile_id}, 'product_feature3': {'id': '3', 'id_feature_value': rim_id}, 'product_feature4': {'id': '7', 'id_feature_value': speed_index_id}, 'product_feature5': {'id': '8', 'id_feature_value': load_index_id}, 'product_feature6': {'id': '9', 'id_feature_value': rolling_resistance_id}, 'product_feature7': {'id': '10', 'id_feature_value': adhesion_id}, 'product_feature8': {'id': '11', 'id_feature_value': noise_id}, 'product_feature9': {'id': '12', 'id_feature_value': noise_symbole_id}, 'product_feature10': {'id': '6', 'id_feature_value': season_id}, 'product_feature11': {'id': '21', 'id_feature_value': type_id}, 'product_feature12': {'id': '20', 'id_feature_value': provider_id}, 'product_feature13': {'id': '13', 'id_feature_value': dot_id}, 'product_feature14': {'id': '19', 'id_feature_value': additional_marking_id}, 'product_feature15': {'id': '18', 'id_feature_value': realization_id}, 'product_feature16': {'id': '22', 'id_feature_value': warranty}}
  973.             else:
  974.                 product_features = {'product_feature1': {'id': '1', 'id_feature_value': width_id}, 'product_feature2': {'id': '2', 'id_feature_value': profile_id}, 'product_feature3': {'id': '3', 'id_feature_value': rim_id}, 'product_feature4': {'id': '7', 'id_feature_value': speed_index_id}, 'product_feature5': {'id': '8', 'id_feature_value': load_index_id}, 'product_feature6': {'id': '9', 'id_feature_value': rolling_resistance_id}, 'product_feature7': {'id': '10', 'id_feature_value': adhesion_id}, 'product_feature8': {'id': '11', 'id_feature_value': noise_id}, 'product_feature9': {'id': '12', 'id_feature_value': noise_symbole_id}, 'product_feature10': {'id': '6', 'id_feature_value': season_id}, 'product_feature11': {'id': '21', 'id_feature_value': type_id}, 'product_feature12': {'id': '20', 'id_feature_value': provider_id}, 'product_feature13': {'id': '13', 'id_feature_value': dot_id}, 'product_feature14': {'id': '18', 'id_feature_value': realization_id}, 'product_feature15': {'id': '22', 'id_feature_value': warranty}}
  975.             associations = {'categories': categories, 'product_features': product_features}
  976.  
  977.             # print('Update Product:', sap)
  978.             # edit stocks
  979.             data = {'stock_availables': {'id': stock_availables_id, 'id_product': wo_product_id, 'id_shop ': id_shop, 'id_product_attribute': id_product_attribute, 'depends_on_stock': depends_on_stock, 'out_of_stock': out_of_stock, 'quantity': stock}}
  980.             res = api.edit('stock_availables', data)['stock_available']
  981.             # edit product
  982.             data = {'products': {'id': wo_product_id, 'name': name, 'price': str(price), 'extra_text_product': extra_text_product, 'active': active, 'weight': weight, 'reference': sap, 'ean13': ean, 'id_manufacturer': producer_wo_id, 'description': description, 'id_category_default': category_id_3, 'in_price_compare': in_price_compare, 'ceneo_basket': ceneo_basket, 'available_for_order': available_for_order, 'link_rewrite': link_rewrite, 'minimal_quantity': minimal_quantity, 'associations': associations, 'id_tax_rules_group': id_tax_rules_group, 'state': state, 'redirect_type': redirect_type, 'show_price': show_price}}
  983.             res = api.edit('products', data)['product']
  984.     # print('Zadanie wykonane')
  985.     return render(request, 'get.html')
  986. # dodawanie produktów na prestashop
  987. def add_product(request):
  988.  
  989.     product = WojnaOpon.objects.all().values_list('producer__wo_id', 'model__name', 'provider__name', 'sap', 'wo_product_id', 'stock_availables_id', 'width', 'profile', 'rim', 'speed_index', 'load_index', 'rolling_resistance', 'adhesion', 'noise', 'noise_symbole', 'additional_marking', 'dot', 'price', 'stock', 'available', 'model__season', 'model__type', 'model__description', 'producer__name', 'model__image')
  990.     for row in product:
  991.         producer_name = row[23]
  992.         width = row[6]
  993.         profile = row[7]
  994.         rim = row[8]
  995.         model = row[1]
  996.         load_index = row[10]
  997.         speed_index = row[9]
  998.         additional_marking = row[15]
  999.         rolling_resistance = row[11]
  1000.         adhesion = row[12]
  1001.         noise = row[13]
  1002.         noise_symbole = row[14]
  1003.         sap = row[3]
  1004.         price = row[17]
  1005.         model_image = row[24]
  1006.         wo_product_id = row[4]
  1007.         available = row[19]
  1008.  
  1009.         category_id_1 = 2
  1010.         # NAME
  1011.         if len(additional_marking) > 0:
  1012.             name = producer_name + ' ' + width + '/' + profile + 'R' + rim + ' ' + model + ' ' + load_index + '' + speed_index + ' ' + additional_marking + ' ' + rolling_resistance + ' ' + adhesion + ' ' + noise + ' ' + noise_symbole
  1013.         else:
  1014.             name = producer_name + ' ' + width + '/' + profile + 'R' + rim + ' ' + model + ' ' + load_index + '' + speed_index + ' ' + rolling_resistance + ' ' + adhesion + ' ' + noise + ' ' + noise_symbole
  1015.  
  1016.         if wo_product_id is '' and available is True:
  1017.             data_1 = """<?xml version="1.0" encoding="UTF-8"?><prestashop xmlns:xlink="http://www.w3.org/1999/xlink"><product><id_category_default>"""
  1018.             data_2 = str(category_id_1)
  1019.             data_3 = """</id_category_default><new></new><id_tax_rules_group>7</id_tax_rules_group><id_shop_default>1</id_shop_default><reference>"""
  1020.             data_4 = str(sap)
  1021.             data_5 = """</reference><state>1</state><minimal_quantity>1</minimal_quantity><price>"""
  1022.             data_6 = str(price)
  1023.             data_7 = """</price><active>1</active><redirect_type>404</redirect_type><available_for_order>1</available_for_order><show_price>1</show_price><indexed>1</indexed><visibility>both</visibility><name><language id="1">"""
  1024.             data_8 = str(name)
  1025.             data_9 = """</language></name><associations><categories><category><id>"""
  1026.             data_10 = str(category_id_1)
  1027.             data_11 = """</id></category></categories></associations></product></prestashop>"""
  1028.  
  1029.             data = data_1 + data_2 + data_3 + data_4 + data_5 + data_6 + data_7 + data_8 + data_9 + data_10 + data_11
  1030.             r = requests.post('http://sklep.wojnaopon.pl/api/products', auth=(USERNAME, PASSWORD), data = data)
  1031.  
  1032.             # print(sap)
  1033.             res = api.get('search', {'query': sap, 'language': 1})
  1034.             pres_id = res['products']['product']['@id']
  1035.  
  1036.             # add image
  1037.             with open('temp.jpg', 'wb') as handler:
  1038.                 handler.write(requests.get(model_image).content)
  1039.             res = api.add_image('products/' + str(pres_id), 'temp.jpg')
  1040.  
  1041.             # add presta_id
  1042.             defaults = {'wo_product_id': pres_id}
  1043.             try:
  1044.                 obj = WojnaOpon.objects.get(sap=sap)
  1045.                 for key, value in defaults.items():
  1046.                     setattr(obj, key, value)
  1047.                 obj.save()
  1048.             except WojnaOpon.DoesNotExist:
  1049.                 pass
  1050.  
  1051.             # add stock_id
  1052.             res = api.get('products/' + str(pres_id))
  1053.             presta_stock_id = res['product']['associations']['stock_availables']['stock_available']['id']
  1054.             defaults = {'stock_availables_id': presta_stock_id}
  1055.             try:
  1056.                 obj = WojnaOpon.objects.get(sap=sap)
  1057.                 for key, value in defaults.items():
  1058.                     setattr(obj, key, value)
  1059.                 obj.save()
  1060.             except WojnaOpon.DoesNotExist:
  1061.                 pass
  1062.  
  1063.     print('Zadanie wykonane')
  1064.     return render(request, 'get.html')
  1065.  
  1066. # def get_producers(request):
  1067. #     # pobieranie stanów WO
  1068. #     ftpG = FTP(serverG)  # Set server address
  1069. #     ftpG.login("stany_mag", "GlobeTyre$#")  # Connect to server
  1070. #     ftpG.cwd(directoryG)  # Move to the desired folder in server
  1071. #     ftpG.retrbinary('RETR ' + filenameG, open(filenameG, 'wb').write)  # Download file from server
  1072. #     ftpG.close()  # Close connection
  1073.  
  1074. #     # Load the CSV file into CSV reader
  1075. #     csvfile = open('WojnaOpon.csv', 'rt', encoding="utf8")
  1076. #     creader = csv.reader(csvfile, delimiter=';', quotechar='|')
  1077.  
  1078. #     # Iterate through the CSV reader, inserting values into the database
  1079. #     next(creader)
  1080. #     for row in creader:
  1081. #         producer = row[1].upper()
  1082.  
  1083.  
  1084. #         defaults = {'name': producer}
  1085. #         try:
  1086. #             obj = Producer.objects.get(name=producer)
  1087. #             for key, value in defaults.items():
  1088. #                 setattr(obj, key, value)
  1089. #             obj.save()
  1090. #         except Producer.DoesNotExist:
  1091. #             new_values = {'name': producer}
  1092. #             obj = Producer(**new_values)
  1093. #             obj.save()
  1094. #     return render(request, 'get.html')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement