1321 lines
45 KiB
Python
1321 lines
45 KiB
Python
import requests
|
||
import traceback
|
||
import random
|
||
import imghdr
|
||
from django.templatetags.static import static
|
||
|
||
from mailer import send_mail
|
||
|
||
from django.conf import settings
|
||
from django.http import HttpResponse
|
||
from django.template import loader
|
||
|
||
from core.models import (MainLot, KoreaLot, MachineryLot, TransportBrand, TransportModel,
|
||
MachineryBrand, MachineryModel, MachineryGroup,
|
||
TransportExperience, MachineryExperience, MachineryFilter, Contact,
|
||
Lead, BitrixEmployee)
|
||
|
||
|
||
def is_image(url):
|
||
image_format = None
|
||
response = requests.get(url)
|
||
if response.status_code == 200:
|
||
image_format = imghdr.what(None, response.content)
|
||
|
||
if image_format and image_format != 'gif':
|
||
return True
|
||
return False
|
||
|
||
|
||
def sql_request_for_api(sql_request):
|
||
return sql_request.replace(' ', '%20')
|
||
|
||
|
||
def send_message_on_telegram(message):
|
||
"""Отправка сообщения в телеграм."""
|
||
endpoint = f'https://api.telegram.org/bot{settings.TELEGRAM_ACCESS_TOKEN}/sendMessage'
|
||
params = {
|
||
'chat_id': settings.TELEGRAM_CHAT_ID_FEEDBACK,
|
||
'text': message,
|
||
'parse_mode': 'HTML'
|
||
}
|
||
response = requests.post(endpoint, params=params)
|
||
if not response.ok:
|
||
raise Exception(
|
||
'[TelegramPublisher] Response is not ok\n'
|
||
'-----------\n'
|
||
f'Params: {params})\n'
|
||
f'Response: {response}'
|
||
)
|
||
return HttpResponse()
|
||
|
||
|
||
def send_message_to_mail_and_telegram(template, data):
|
||
"""Отправка сообщения на почту и в телеграм."""
|
||
try:
|
||
message_template = loader.get_template(f'messages/{template}')
|
||
message = message_template.render({'data': data})
|
||
if settings.EMAIL_NOTIFICATIONS_ENABLED:
|
||
send_mail(settings.SUBJECT, message, settings.EMAIL_HOST_USER, settings.EMAIL_RECIPIENT, fail_silently=False)
|
||
else:
|
||
print('\n>>> Уведомления на EMAIL отключены:\n\n', message, '\n')
|
||
if settings.TELEGRAM_NOTIFICATIONS_ENABLED:
|
||
send_message_on_telegram(message)
|
||
else:
|
||
print('\n>>> Уведомления в TELEGRAM отключены:\n\n', message, '\n')
|
||
except Exception as err:
|
||
traceback.print_exc()
|
||
|
||
|
||
def similar_japan(lot: MainLot, ip_address, truck_flag=False):
|
||
AUCTION_ENDPOINT = settings.AUCTION_ENDPOINT
|
||
if ip_address:
|
||
AUCTION_ENDPOINT = AUCTION_ENDPOINT.replace('?json', f'?json&ip={ip_address}')
|
||
|
||
sql_request = f"select * from main where (status LIKE '%25not sold%25' or status='') and (auction not like '%25uss%25') and lot!={lot.lot}"
|
||
if not truck_flag:
|
||
sql_request += f' and YEAR>={settings.MIN_YEAR}'
|
||
|
||
if lot.year:
|
||
sql_request += f' and YEAR>={lot.year-2} and YEAR<={lot.year+2}'
|
||
if lot.avg_price:
|
||
sql_request += f' and AVG_PRICE>={lot.avg_price * settings.MIN_PRICE_COEFF} and AVG_PRICE<={lot.avg_price * settings.MAX_PRICE_COEFF}'
|
||
|
||
sql_request += f' and MARKA_ID={lot.car_model.brand.db_id} and MODEL_ID={lot.car_model.db_id} limit 10'
|
||
sql_request = sql_request_for_api(sql_request)
|
||
|
||
try:
|
||
response = requests.get(AUCTION_ENDPOINT + sql_request)
|
||
lots = response.json()
|
||
except:
|
||
lots= None
|
||
|
||
cars = []
|
||
if lots:
|
||
for lot_info in lots:
|
||
lot_id = lot_info.get('ID')
|
||
main_lot, created = MainLot.objects.get_or_create(db_id=lot_id)
|
||
if created:
|
||
brand_id = int(lot_info.get('MARKA_ID'))
|
||
brand_title = lot_info.get('MARKA_NAME').upper()
|
||
model_id = int(lot_info.get('MODEL_ID'))
|
||
model_title = lot_info.get('MODEL_NAME').upper()
|
||
|
||
brand, _ = TransportBrand.objects.get_or_create(db_id=brand_id, title=brand_title)
|
||
model, _ = TransportModel.objects.get_or_create(brand=brand, db_id=model_id, title=model_title, category="1")
|
||
|
||
try:
|
||
year = int(lot_info.get('YEAR'))
|
||
except:
|
||
year = None
|
||
|
||
try:
|
||
eng_v = int(lot_info.get('ENG_V'))
|
||
except:
|
||
eng_v = None
|
||
|
||
try:
|
||
pw = int(lot_info.get('PW'))
|
||
except:
|
||
try:
|
||
pw = int(lot_info.get('PW').split(',')[0])
|
||
except:
|
||
pw = None
|
||
|
||
try:
|
||
mileage = int(lot_info.get('MILEAGE'))
|
||
except:
|
||
mileage = None
|
||
|
||
try:
|
||
start = int(lot_info.get('START'))
|
||
except:
|
||
start = None
|
||
|
||
try:
|
||
finish = int(lot_info.get('FINISH'))
|
||
except:
|
||
finish = None
|
||
|
||
try:
|
||
avg_price = int(lot_info.get('AVG_PRICE'))
|
||
except:
|
||
avg_price = None
|
||
|
||
images = lot_info.get('IMAGES').split('#')
|
||
if len(images) > 0:
|
||
cover = images[0]
|
||
else:
|
||
cover = None
|
||
|
||
if len(images) > 1:
|
||
images = '#'.join(images[1::])
|
||
else:
|
||
images = None
|
||
|
||
main_lot.lot = lot_info.get('LOT')
|
||
main_lot.auction_date = lot_info.get('AUCTION_DATE')
|
||
main_lot.auction = lot_info.get('AUCTION')
|
||
main_lot.car_model = model
|
||
main_lot.year = year
|
||
main_lot.eng_v = eng_v
|
||
main_lot.pw = pw
|
||
main_lot.town = lot_info.get('TOWN')
|
||
main_lot.kuzov = lot_info.get('KUZOV')
|
||
main_lot.grade = lot_info.get('GRADE')
|
||
main_lot.color = lot_info.get('COLOR')
|
||
main_lot.kpp = lot_info.get('KPP')
|
||
main_lot.kpp_type = lot_info.get('KPP_TYPE')
|
||
main_lot.priv = lot_info.get('PRIV')
|
||
main_lot.mileage = mileage
|
||
main_lot.equip = lot_info.get('EQUIP')
|
||
main_lot.rate = lot_info.get('RATE')
|
||
main_lot.start = start
|
||
main_lot.finish = finish
|
||
main_lot.status = lot_info.get('STATUS')
|
||
main_lot.time = lot_info.get('TIME')
|
||
main_lot.avg_price = avg_price
|
||
main_lot.avg_string = lot_info.get('AVG_STRING')
|
||
main_lot.cover = cover
|
||
main_lot.images = images
|
||
main_lot.save()
|
||
|
||
cars.append(main_lot)
|
||
|
||
return cars
|
||
|
||
|
||
def similar_korea(lot: KoreaLot, ip_address):
|
||
sql_request = f"select * from korea where (status LIKE '%25not sold%25' or status='') and YEAR>={settings.MIN_YEAR}"
|
||
|
||
AUCTION_ENDPOINT = settings.AUCTION_ENDPOINT
|
||
if ip_address:
|
||
AUCTION_ENDPOINT = AUCTION_ENDPOINT.replace('?json', f'?json&ip={ip_address}')
|
||
|
||
if lot.year:
|
||
sql_request += f' and YEAR>={lot.year-2} and YEAR<={lot.year+2}'
|
||
if lot.avg_price:
|
||
sql_request += f' and AVG_PRICE>={lot.avg_price * settings.MIN_PRICE_COEFF} and AVG_PRICE<={lot.avg_price * settings.MAX_PRICE_COEFF}'
|
||
|
||
sql_request += f' and MARKA_ID={lot.car_model.brand.db_id} and MODEL_ID={lot.car_model.db_id} limit 10'
|
||
sql_request = sql_request_for_api(sql_request)
|
||
|
||
try:
|
||
response = requests.get(AUCTION_ENDPOINT + sql_request)
|
||
lots = response.json()
|
||
except:
|
||
lots= None
|
||
|
||
cars = []
|
||
if lots:
|
||
for lot_info in lots:
|
||
lot_id = lot_info.get('ID')
|
||
main_lot, created = KoreaLot.objects.get_or_create(db_id=lot_id)
|
||
if created:
|
||
brand_id = int(lot_info.get('MARKA_ID'))
|
||
brand_title = lot_info.get('MARKA_NAME').upper()
|
||
model_id = int(lot_info.get('MODEL_ID'))
|
||
model_title = lot_info.get('MODEL_NAME').upper()
|
||
|
||
brand, _ = TransportBrand.objects.get_or_create(db_id=brand_id, title=brand_title)
|
||
model, _ = TransportModel.objects.get_or_create(brand=brand, db_id=model_id, title=model_title, category="2")
|
||
|
||
try:
|
||
year = int(lot_info.get('YEAR'))
|
||
except:
|
||
year = None
|
||
|
||
try:
|
||
eng_v = int(lot_info.get('ENG_V'))
|
||
except:
|
||
eng_v = None
|
||
|
||
try:
|
||
pw = int(lot_info.get('PW'))
|
||
except:
|
||
try:
|
||
pw = int(lot_info.get('PW').split(',')[0])
|
||
except:
|
||
pw = None
|
||
|
||
try:
|
||
mileage = int(lot_info.get('MILEAGE'))
|
||
except:
|
||
mileage = None
|
||
|
||
try:
|
||
start = int(lot_info.get('START'))
|
||
except:
|
||
start = None
|
||
|
||
try:
|
||
finish = int(lot_info.get('FINISH'))
|
||
except:
|
||
finish = None
|
||
|
||
try:
|
||
avg_price = int(lot_info.get('AVG_PRICE'))
|
||
except:
|
||
avg_price = None
|
||
|
||
images = lot_info.get('IMAGES').split('#')
|
||
if len(images) > 0:
|
||
cover = images[0]
|
||
else:
|
||
cover = None
|
||
|
||
if len(images) > 1:
|
||
images = '#'.join(images[1::])
|
||
else:
|
||
images = None
|
||
|
||
main_lot.lot = lot_info.get('LOT')
|
||
main_lot.auction_date = lot_info.get('AUCTION_DATE')
|
||
main_lot.auction = lot_info.get('AUCTION')
|
||
main_lot.car_model = model
|
||
main_lot.year = year
|
||
main_lot.eng_v = eng_v
|
||
main_lot.pw = pw
|
||
main_lot.kuzov = lot_info.get('KUZOV')
|
||
main_lot.grade = lot_info.get('GRADE')
|
||
main_lot.color = lot_info.get('COLOR')
|
||
main_lot.kpp = lot_info.get('KPP')
|
||
main_lot.kpp_type = lot_info.get('KPP_TYPE')
|
||
main_lot.priv = lot_info.get('PRIV')
|
||
main_lot.mileage = mileage
|
||
main_lot.equip = lot_info.get('EQUIP')
|
||
main_lot.rate = lot_info.get('RATE')
|
||
main_lot.start = start
|
||
main_lot.finish = finish
|
||
main_lot.status = lot_info.get('STATUS')
|
||
main_lot.time = lot_info.get('TIME')
|
||
main_lot.avg_price = avg_price
|
||
main_lot.avg_string = lot_info.get('AVG_STRING')
|
||
main_lot.cover = cover
|
||
main_lot.images = images
|
||
main_lot.save()
|
||
|
||
cars.append(main_lot)
|
||
|
||
return cars
|
||
|
||
|
||
def similar_machinery(lot: MachineryLot, ip_address):
|
||
sql_request = f"select * from hdm where (status LIKE '%25not sold%25' or status='')"
|
||
|
||
MACHINERY_ENDPOINT = settings.MACHINERY_ENDPOINT
|
||
if ip_address:
|
||
MACHINERY_ENDPOINT = MACHINERY_ENDPOINT.replace('?json', f'?json&ip={ip_address}')
|
||
|
||
if lot.price:
|
||
sql_request += f' and PRICE >={lot.price * settings.MIN_PRICE_COEFF} and PRICE <={lot.price * settings.MAX_PRICE_COEFF}'
|
||
|
||
if lot.group:
|
||
sql_request += f' and GROUP LIKE "%25{lot.group}%25"'
|
||
|
||
if lot.category:
|
||
sql_request += f' and CATEGORY LIKE "%25{lot.category}%25"'
|
||
|
||
sql_request += ' limit 10'
|
||
sql_request = sql_request_for_api(sql_request)
|
||
|
||
try:
|
||
response = requests.get(MACHINERY_ENDPOINT + sql_request)
|
||
lots = response.json()
|
||
except:
|
||
lots= None
|
||
|
||
cars = []
|
||
if lots:
|
||
for lot_info in lots:
|
||
lot_id = lot_info.get('ID')
|
||
main_lot, created = MachineryLot.objects.get_or_create(db_id=lot_id)
|
||
if created:
|
||
brand_id = int(lot_info.get('MARKA_ID'))
|
||
brand_title = lot_info.get('MARKA_NAME').upper()
|
||
model_title = lot_info.get('MODEL_NAME').upper()
|
||
|
||
brand, _ = MachineryBrand.objects.get_or_create(db_id=brand_id, title=brand_title)
|
||
model, _ = MachineryModel.objects.get_or_create(brand=brand, title=model_title)
|
||
|
||
try:
|
||
year = int(lot_info.get('YEAR'))
|
||
except:
|
||
year = None
|
||
|
||
try:
|
||
mileage = int(lot_info.get('MILEAGE'))
|
||
except:
|
||
mileage = None
|
||
|
||
try:
|
||
price = int(lot_info.get('PRICE'))
|
||
except:
|
||
price = None
|
||
|
||
try:
|
||
finish = int(lot_info.get('FINISH'))
|
||
except:
|
||
finish = None
|
||
|
||
images = lot_info.get('IMAGES').split('#')
|
||
if len(images) > 0:
|
||
cover = images[0]
|
||
else:
|
||
cover = None
|
||
|
||
if len(images) > 1:
|
||
images = '#'.join(images[1::])
|
||
else:
|
||
images = None
|
||
|
||
machinery_group = lot_info.get('CATEGORY')
|
||
machinery_type = None
|
||
if machinery_group:
|
||
curr_group = MachineryGroup.objects.filter(title=machinery_group.upper()).first()
|
||
if curr_group:
|
||
machinery_type = curr_group.filters.first()
|
||
|
||
main_lot.lot = lot_info.get('LOT')
|
||
main_lot.auction_date = lot_info.get('AUCTION_DATE')
|
||
main_lot.auction = lot_info.get('AUCTION')
|
||
main_lot.group = lot_info.get('GROUP')
|
||
main_lot.category = machinery_group
|
||
main_lot.gg = lot_info.get('GG')
|
||
main_lot.cc = lot_info.get('CC')
|
||
main_lot.machinery_model = model
|
||
main_lot.year = year
|
||
main_lot.grade = lot_info.get('GRADE')
|
||
main_lot.kpp = lot_info.get('KPP')
|
||
main_lot.priv = lot_info.get('PRIV')
|
||
main_lot.mileage = mileage
|
||
main_lot.rate = lot_info.get('RATE')
|
||
main_lot.price = price
|
||
main_lot.finish = finish
|
||
main_lot.status = lot_info.get('STATUS')
|
||
main_lot.cover = cover
|
||
main_lot.images = images
|
||
main_lot.machinery_filter = machinery_type
|
||
main_lot.save()
|
||
|
||
cars.append(main_lot)
|
||
|
||
return cars
|
||
|
||
|
||
def similar_japan_experience(lot: TransportExperience, ip_address):
|
||
sql_request = f"select * from main where (status LIKE '%25not sold%25' or status='') and (auction not like '%25uss%25') and YEAR>={settings.MIN_YEAR}"
|
||
|
||
AUCTION_ENDPOINT = settings.AUCTION_ENDPOINT
|
||
if ip_address:
|
||
AUCTION_ENDPOINT = AUCTION_ENDPOINT.replace('?json', f'?json&ip={ip_address}')
|
||
|
||
if lot.year:
|
||
sql_request += f' and YEAR>={lot.year-2} and YEAR<={lot.year+2}'
|
||
if lot.auction_price:
|
||
sql_request += f' and AVG_PRICE>={lot.auction_price * settings.MIN_PRICE_COEFF} and AVG_PRICE<={lot.auction_price * settings.MAX_PRICE_COEFF}'
|
||
|
||
sql_request += f' and MARKA_ID={lot.brand.db_id} and MODEL_ID={lot.transport_model.db_id} limit 10'
|
||
sql_request = sql_request_for_api(sql_request)
|
||
|
||
try:
|
||
response = requests.get(AUCTION_ENDPOINT + sql_request)
|
||
lots = response.json()
|
||
except:
|
||
lots= None
|
||
|
||
cars = []
|
||
if lots:
|
||
for lot_info in lots:
|
||
lot_id = lot_info.get('ID')
|
||
main_lot, created = MainLot.objects.get_or_create(db_id=lot_id)
|
||
if created:
|
||
brand_id = int(lot_info.get('MARKA_ID'))
|
||
brand_title = lot_info.get('MARKA_NAME').upper()
|
||
model_id = int(lot_info.get('MODEL_ID'))
|
||
model_title = lot_info.get('MODEL_NAME').upper()
|
||
|
||
brand, _ = TransportBrand.objects.get_or_create(db_id=brand_id, title=brand_title)
|
||
model, _ = TransportModel.objects.get_or_create(brand=brand, db_id=model_id, title=model_title, category="1")
|
||
|
||
try:
|
||
year = int(lot_info.get('YEAR'))
|
||
except:
|
||
year = None
|
||
|
||
try:
|
||
eng_v = int(lot_info.get('ENG_V'))
|
||
except:
|
||
eng_v = None
|
||
|
||
try:
|
||
pw = int(lot_info.get('PW'))
|
||
except:
|
||
try:
|
||
pw = int(lot_info.get('PW').split(',')[0])
|
||
except:
|
||
pw = None
|
||
|
||
try:
|
||
mileage = int(lot_info.get('MILEAGE'))
|
||
except:
|
||
mileage = None
|
||
|
||
try:
|
||
start = int(lot_info.get('START'))
|
||
except:
|
||
start = None
|
||
|
||
try:
|
||
finish = int(lot_info.get('FINISH'))
|
||
except:
|
||
finish = None
|
||
|
||
try:
|
||
avg_price = int(lot_info.get('AVG_PRICE'))
|
||
except:
|
||
avg_price = None
|
||
|
||
images = lot_info.get('IMAGES').split('#')
|
||
if len(images) > 0:
|
||
cover = images[0]
|
||
else:
|
||
cover = None
|
||
|
||
if len(images) > 1:
|
||
images = '#'.join(images[1::])
|
||
else:
|
||
images = None
|
||
|
||
main_lot.lot = lot_info.get('LOT')
|
||
main_lot.auction_date = lot_info.get('AUCTION_DATE')
|
||
main_lot.auction = lot_info.get('AUCTION')
|
||
main_lot.car_model = model
|
||
main_lot.year = year
|
||
main_lot.eng_v = eng_v
|
||
main_lot.pw = pw
|
||
main_lot.town = lot_info.get('TOWN')
|
||
main_lot.kuzov = lot_info.get('KUZOV')
|
||
main_lot.grade = lot_info.get('GRADE')
|
||
main_lot.color = lot_info.get('COLOR')
|
||
main_lot.kpp = lot_info.get('KPP')
|
||
main_lot.kpp_type = lot_info.get('KPP_TYPE')
|
||
main_lot.priv = lot_info.get('PRIV')
|
||
main_lot.mileage = mileage
|
||
main_lot.equip = lot_info.get('EQUIP')
|
||
main_lot.rate = lot_info.get('RATE')
|
||
main_lot.start = start
|
||
main_lot.finish = finish
|
||
main_lot.status = lot_info.get('STATUS')
|
||
main_lot.time = lot_info.get('TIME')
|
||
main_lot.avg_price = avg_price
|
||
main_lot.avg_string = lot_info.get('AVG_STRING')
|
||
main_lot.cover = cover
|
||
main_lot.images = images
|
||
main_lot.save()
|
||
|
||
cars.append(main_lot)
|
||
|
||
return cars
|
||
|
||
|
||
def similar_korea_experience(lot: TransportExperience, ip_address):
|
||
sql_request = f"select * from korea where (status LIKE '%25not sold%25' or status='') and YEAR>={settings.MIN_YEAR}"
|
||
|
||
AUCTION_ENDPOINT = settings.AUCTION_ENDPOINT
|
||
if ip_address:
|
||
AUCTION_ENDPOINT = AUCTION_ENDPOINT.replace('?json', f'?json&ip={ip_address}')
|
||
|
||
if lot.year:
|
||
sql_request += f' and YEAR>={lot.year-2} and YEAR<={lot.year+2}'
|
||
if lot.auction_price:
|
||
sql_request += f' and AVG_PRICE>={lot.auction_price * settings.MIN_PRICE_COEFF} and AVG_PRICE<={lot.auction_price * settings.MAX_PRICE_COEFF}'
|
||
|
||
sql_request += f' and MARKA_ID={lot.brand.db_id} and MODEL_ID={lot.transport_model.db_id} limit 10'
|
||
sql_request = sql_request_for_api(sql_request)
|
||
|
||
try:
|
||
response = requests.get(AUCTION_ENDPOINT + sql_request)
|
||
lots = response.json()
|
||
except:
|
||
lots= None
|
||
|
||
cars = []
|
||
if lots:
|
||
for lot_info in lots:
|
||
lot_id = lot_info.get('ID')
|
||
main_lot, created = KoreaLot.objects.get_or_create(db_id=lot_id)
|
||
if created:
|
||
brand_id = int(lot_info.get('MARKA_ID'))
|
||
brand_title = lot_info.get('MARKA_NAME').upper()
|
||
model_id = int(lot_info.get('MODEL_ID'))
|
||
model_title = lot_info.get('MODEL_NAME').upper()
|
||
|
||
brand, _ = TransportBrand.objects.get_or_create(db_id=brand_id, title=brand_title)
|
||
model, _ = TransportModel.objects.get_or_create(brand=brand, db_id=model_id, title=model_title, category="2")
|
||
|
||
try:
|
||
year = int(lot_info.get('YEAR'))
|
||
except:
|
||
year = None
|
||
|
||
try:
|
||
eng_v = int(lot_info.get('ENG_V'))
|
||
except:
|
||
eng_v = None
|
||
|
||
try:
|
||
pw = int(lot_info.get('PW'))
|
||
except:
|
||
try:
|
||
pw = int(lot_info.get('PW').split(',')[0])
|
||
except:
|
||
pw = None
|
||
|
||
try:
|
||
mileage = int(lot_info.get('MILEAGE'))
|
||
except:
|
||
mileage = None
|
||
|
||
try:
|
||
start = int(lot_info.get('START'))
|
||
except:
|
||
start = None
|
||
|
||
try:
|
||
finish = int(lot_info.get('FINISH'))
|
||
except:
|
||
finish = None
|
||
|
||
try:
|
||
avg_price = int(lot_info.get('AVG_PRICE'))
|
||
except:
|
||
avg_price = None
|
||
|
||
images = lot_info.get('IMAGES').split('#')
|
||
if len(images) > 0:
|
||
cover = images[0]
|
||
else:
|
||
cover = None
|
||
|
||
if len(images) > 1:
|
||
images = '#'.join(images[1::])
|
||
else:
|
||
images = None
|
||
|
||
main_lot.lot = lot_info.get('LOT')
|
||
main_lot.auction_date = lot_info.get('AUCTION_DATE')
|
||
main_lot.auction = lot_info.get('AUCTION')
|
||
main_lot.car_model = model
|
||
main_lot.year = year
|
||
main_lot.eng_v = eng_v
|
||
main_lot.pw = pw
|
||
main_lot.kuzov = lot_info.get('KUZOV')
|
||
main_lot.grade = lot_info.get('GRADE')
|
||
main_lot.color = lot_info.get('COLOR')
|
||
main_lot.kpp = lot_info.get('KPP')
|
||
main_lot.kpp_type = lot_info.get('KPP_TYPE')
|
||
main_lot.priv = lot_info.get('PRIV')
|
||
main_lot.mileage = mileage
|
||
main_lot.equip = lot_info.get('EQUIP')
|
||
main_lot.rate = lot_info.get('RATE')
|
||
main_lot.start = start
|
||
main_lot.finish = finish
|
||
main_lot.status = lot_info.get('STATUS')
|
||
main_lot.time = lot_info.get('TIME')
|
||
main_lot.avg_price = avg_price
|
||
main_lot.avg_string = lot_info.get('AVG_STRING')
|
||
main_lot.cover = cover
|
||
main_lot.images = images
|
||
main_lot.save()
|
||
|
||
cars.append(main_lot)
|
||
|
||
return cars
|
||
|
||
|
||
def similar_machinery_experience(lot: MachineryExperience, ip_address):
|
||
sql_request = f"select * from hdm where (status LIKE '%25not sold%25' or status='')"
|
||
|
||
MACHINERY_ENDPOINT = settings.MACHINERY_ENDPOINT
|
||
if ip_address:
|
||
MACHINERY_ENDPOINT = MACHINERY_ENDPOINT.replace('?json', f'?json&ip={ip_address}')
|
||
|
||
if lot.auction_price:
|
||
sql_request += f' and PRICE >={lot.auction_price * settings.MIN_PRICE_COEFF} and PRICE <={lot.auction_price * settings.MAX_PRICE_COEFF}'
|
||
|
||
sql_request += f' and MARKA_ID={lot.brand.db_id} limit 10'
|
||
sql_request = sql_request_for_api(sql_request)
|
||
|
||
try:
|
||
response = requests.get(MACHINERY_ENDPOINT + sql_request)
|
||
lots = response.json()
|
||
except:
|
||
lots= None
|
||
|
||
cars = []
|
||
if lots:
|
||
for lot_info in lots:
|
||
lot_id = lot_info.get('ID')
|
||
main_lot, created = MachineryLot.objects.get_or_create(db_id=lot_id)
|
||
if created:
|
||
brand_id = int(lot_info.get('MARKA_ID'))
|
||
brand_title = lot_info.get('MARKA_NAME').upper()
|
||
model_title = lot_info.get('MODEL_NAME').upper()
|
||
|
||
brand, _ = MachineryBrand.objects.get_or_create(db_id=brand_id, title=brand_title)
|
||
model, _ = MachineryModel.objects.get_or_create(brand=brand, title=model_title)
|
||
|
||
try:
|
||
year = int(lot_info.get('YEAR'))
|
||
except:
|
||
year = None
|
||
|
||
try:
|
||
mileage = int(lot_info.get('MILEAGE'))
|
||
except:
|
||
mileage = None
|
||
|
||
try:
|
||
price = int(lot_info.get('PRICE'))
|
||
except:
|
||
price = None
|
||
|
||
try:
|
||
finish = int(lot_info.get('FINISH'))
|
||
except:
|
||
finish = None
|
||
|
||
images = lot_info.get('IMAGES').split('#')
|
||
if len(images) > 0:
|
||
cover = images[0]
|
||
else:
|
||
cover = None
|
||
|
||
if len(images) > 1:
|
||
images = '#'.join(images[1::])
|
||
else:
|
||
images = None
|
||
|
||
machinery_group = lot_info.get('CATEGORY')
|
||
machinery_type = None
|
||
if machinery_group:
|
||
curr_group = MachineryGroup.objects.filter(title=machinery_group.upper()).first()
|
||
if curr_group:
|
||
machinery_type = curr_group.filters.first()
|
||
|
||
main_lot.lot = lot_info.get('LOT')
|
||
main_lot.auction_date = lot_info.get('AUCTION_DATE')
|
||
main_lot.auction = lot_info.get('AUCTION')
|
||
main_lot.group = lot_info.get('GROUP')
|
||
main_lot.category = machinery_group
|
||
main_lot.gg = lot_info.get('GG')
|
||
main_lot.cc = lot_info.get('CC')
|
||
main_lot.machinery_model = model
|
||
main_lot.year = year
|
||
main_lot.grade = lot_info.get('GRADE')
|
||
main_lot.kpp = lot_info.get('KPP')
|
||
main_lot.priv = lot_info.get('PRIV')
|
||
main_lot.mileage = mileage
|
||
main_lot.rate = lot_info.get('RATE')
|
||
main_lot.price = price
|
||
main_lot.finish = finish
|
||
main_lot.status = lot_info.get('STATUS')
|
||
main_lot.cover = cover
|
||
main_lot.images = images
|
||
main_lot.machinery_filter = machinery_type
|
||
main_lot.save()
|
||
|
||
cars.append(main_lot)
|
||
|
||
return cars
|
||
|
||
|
||
def quality_japan(lot_id, ip_address):
|
||
sql_request = f'select * from main where id="{lot_id}"&ajax'
|
||
sql_request = sql_request_for_api(sql_request)
|
||
|
||
AUCTION_ENDPOINT = settings.AUCTION_ENDPOINT
|
||
if ip_address:
|
||
AUCTION_ENDPOINT = AUCTION_ENDPOINT.replace('?json', f'?json&ip={ip_address}')
|
||
|
||
response = requests.get(AUCTION_ENDPOINT + sql_request)
|
||
lot_info = response.json()[0]
|
||
|
||
main_lot, _ = MainLot.objects.get_or_create(db_id=lot_id)
|
||
|
||
brand_id = int(lot_info.get('MARKA_ID'))
|
||
brand_title = lot_info.get('MARKA_NAME').upper()
|
||
model_id = int(lot_info.get('MODEL_ID'))
|
||
model_title = lot_info.get('MODEL_NAME').upper()
|
||
|
||
brand, _ = TransportBrand.objects.get_or_create(db_id=brand_id, title=brand_title)
|
||
model, _ = TransportModel.objects.get_or_create(brand=brand, db_id=model_id, title=model_title, category="1")
|
||
|
||
try:
|
||
year = int(lot_info.get('YEAR'))
|
||
except:
|
||
year = None
|
||
|
||
try:
|
||
eng_v = int(lot_info.get('ENG_V'))
|
||
except:
|
||
eng_v = None
|
||
|
||
try:
|
||
pw = int(lot_info.get('PW'))
|
||
except:
|
||
try:
|
||
pw = int(lot_info.get('PW').split(',')[0])
|
||
except:
|
||
pw = None
|
||
|
||
try:
|
||
mileage = int(lot_info.get('MILEAGE'))
|
||
except:
|
||
mileage = None
|
||
|
||
try:
|
||
start = int(lot_info.get('START'))
|
||
except:
|
||
start = None
|
||
|
||
try:
|
||
finish = int(lot_info.get('FINISH'))
|
||
except:
|
||
finish = None
|
||
|
||
try:
|
||
avg_price = int(lot_info.get('AVG_PRICE'))
|
||
except:
|
||
avg_price = None
|
||
|
||
images = lot_info.get('IMAGES').split('#')
|
||
if len(images) > 0:
|
||
auction_list = images[0]
|
||
else:
|
||
auction_list = None
|
||
|
||
if len(images) > 1:
|
||
cover = images[1]
|
||
else:
|
||
cover = None
|
||
|
||
if len(images) > 2:
|
||
images = '#'.join(images[2::])
|
||
else:
|
||
images = None
|
||
|
||
main_lot.lot = lot_info.get('LOT')
|
||
main_lot.auction_date = lot_info.get('AUCTION_DATE')
|
||
main_lot.auction = lot_info.get('AUCTION')
|
||
main_lot.car_model = model
|
||
main_lot.year = year
|
||
main_lot.eng_v = eng_v
|
||
main_lot.pw = pw
|
||
main_lot.town = lot_info.get('TOWN')
|
||
main_lot.kuzov = lot_info.get('KUZOV')
|
||
main_lot.grade = lot_info.get('GRADE')
|
||
main_lot.color = lot_info.get('COLOR')
|
||
main_lot.kpp = lot_info.get('KPP')
|
||
main_lot.kpp_type = lot_info.get('KPP_TYPE')
|
||
main_lot.priv = lot_info.get('PRIV')
|
||
main_lot.mileage = mileage
|
||
main_lot.equip = lot_info.get('EQUIP')
|
||
main_lot.rate = lot_info.get('RATE')
|
||
main_lot.start = start
|
||
main_lot.finish = finish
|
||
main_lot.status = lot_info.get('STATUS')
|
||
main_lot.time = lot_info.get('TIME')
|
||
main_lot.avg_price = avg_price
|
||
main_lot.avg_string = lot_info.get('AVG_STRING')
|
||
main_lot.cover = cover
|
||
main_lot.auction_list = auction_list
|
||
main_lot.images = images
|
||
main_lot.serial = lot_info.get('SERIAL')
|
||
main_lot.info = lot_info.get('INFO')
|
||
main_lot.full_info = True
|
||
main_lot.save()
|
||
|
||
return main_lot
|
||
|
||
|
||
def quality_korea(lot_id, ip_address):
|
||
sql_request = f'select * from korea where id="{lot_id}"&ajax'
|
||
sql_request = sql_request_for_api(sql_request)
|
||
|
||
AUCTION_ENDPOINT = settings.AUCTION_ENDPOINT
|
||
if ip_address:
|
||
AUCTION_ENDPOINT = AUCTION_ENDPOINT.replace('?json', f'?json&ip={ip_address}')
|
||
|
||
response = requests.get(AUCTION_ENDPOINT + sql_request)
|
||
lot_info = response.json()[0]
|
||
|
||
main_lot, _ = KoreaLot.objects.get_or_create(db_id=lot_id)
|
||
|
||
brand_id = int(lot_info.get('MARKA_ID'))
|
||
brand_title = lot_info.get('MARKA_NAME').upper()
|
||
model_id = int(lot_info.get('MODEL_ID'))
|
||
model_title = lot_info.get('MODEL_NAME').upper()
|
||
|
||
brand, _ = TransportBrand.objects.get_or_create(db_id=brand_id, title=brand_title)
|
||
model, _ = TransportModel.objects.get_or_create(brand=brand, db_id=model_id, title=model_title, category="2")
|
||
|
||
try:
|
||
year = int(lot_info.get('YEAR'))
|
||
except:
|
||
year = None
|
||
|
||
try:
|
||
eng_v = int(lot_info.get('ENG_V'))
|
||
except:
|
||
eng_v = None
|
||
|
||
try:
|
||
pw = int(lot_info.get('PW'))
|
||
except:
|
||
try:
|
||
pw = int(lot_info.get('PW').split(',')[0])
|
||
except:
|
||
pw = None
|
||
|
||
try:
|
||
mileage = int(lot_info.get('MILEAGE'))
|
||
except:
|
||
mileage = None
|
||
|
||
try:
|
||
start = int(lot_info.get('START'))
|
||
except:
|
||
start = None
|
||
|
||
try:
|
||
finish = int(lot_info.get('FINISH'))
|
||
except:
|
||
finish = None
|
||
|
||
try:
|
||
avg_price = int(lot_info.get('AVG_PRICE'))
|
||
except:
|
||
avg_price = None
|
||
|
||
images = lot_info.get('IMAGES').split('#')
|
||
if len(images) > 0:
|
||
cover = images[0]
|
||
else:
|
||
cover = None
|
||
|
||
if len(images) > 1:
|
||
images = '#'.join(images[1::])
|
||
else:
|
||
images = None
|
||
|
||
main_lot.lot = lot_info.get('LOT')
|
||
main_lot.auction_date = lot_info.get('AUCTION_DATE')
|
||
main_lot.auction = lot_info.get('AUCTION')
|
||
main_lot.car_model = model
|
||
main_lot.year = year
|
||
main_lot.eng_v = eng_v
|
||
main_lot.pw = pw
|
||
main_lot.kuzov = lot_info.get('KUZOV')
|
||
main_lot.grade = lot_info.get('GRADE')
|
||
main_lot.color = lot_info.get('COLOR')
|
||
main_lot.kpp = lot_info.get('KPP')
|
||
main_lot.kpp_type = lot_info.get('KPP_TYPE')
|
||
main_lot.priv = lot_info.get('PRIV')
|
||
main_lot.mileage = mileage
|
||
main_lot.equip = lot_info.get('EQUIP')
|
||
main_lot.rate = lot_info.get('RATE')
|
||
main_lot.start = start
|
||
main_lot.finish = finish
|
||
main_lot.status = lot_info.get('STATUS')
|
||
main_lot.time = lot_info.get('TIME')
|
||
main_lot.avg_price = avg_price
|
||
main_lot.avg_string = lot_info.get('AVG_STRING')
|
||
main_lot.cover = cover
|
||
main_lot.images = images
|
||
main_lot.serial = lot_info.get('SERIAL')
|
||
main_lot.info = lot_info.get('INFO')
|
||
main_lot.full_info = True
|
||
main_lot.save()
|
||
|
||
return main_lot
|
||
|
||
|
||
def quality_machinery(lot_id, ip_address):
|
||
sql_request = f'select * from hdm where id="{lot_id}"&ajax'
|
||
sql_request = sql_request_for_api(sql_request)
|
||
|
||
MACHINERY_ENDPOINT = settings.MACHINERY_ENDPOINT
|
||
if ip_address:
|
||
MACHINERY_ENDPOINT = MACHINERY_ENDPOINT.replace('?json', f'?json&ip={ip_address}')
|
||
|
||
response = requests.get(MACHINERY_ENDPOINT + sql_request)
|
||
if response.json():
|
||
lot_info = response.json()[0]
|
||
|
||
main_lot, _ = MachineryLot.objects.get_or_create(db_id=lot_id)
|
||
|
||
brand_id = int(lot_info.get('MARKA_ID'))
|
||
brand_title = lot_info.get('MARKA_NAME').upper()
|
||
model_title = lot_info.get('MODEL_NAME').upper()
|
||
|
||
brand, _ = MachineryBrand.objects.get_or_create(db_id=brand_id, title=brand_title)
|
||
model, _ = MachineryModel.objects.get_or_create(brand=brand, title=model_title)
|
||
|
||
try:
|
||
year = int(lot_info.get('YEAR'))
|
||
except:
|
||
year = None
|
||
|
||
try:
|
||
mileage = int(lot_info.get('MILEAGE'))
|
||
except:
|
||
mileage = None
|
||
|
||
try:
|
||
price = int(lot_info.get('PRICE'))
|
||
except:
|
||
price = None
|
||
|
||
try:
|
||
finish = int(lot_info.get('FINISH'))
|
||
except:
|
||
finish = None
|
||
|
||
images = lot_info.get('IMAGES').split('#')
|
||
if len(images) > 0:
|
||
auction_list = images[0]
|
||
else:
|
||
auction_list = None
|
||
|
||
cover = static('img/admin/shop/machinery-default.jpg') + '?v=1'
|
||
if len(images) > 1:
|
||
if is_image(images[1]):
|
||
cover = images[1]
|
||
|
||
if len(images) > 2:
|
||
images = '#'.join(images[2::])
|
||
else:
|
||
images = None
|
||
|
||
main_lot.lot = lot_info.get('LOT')
|
||
main_lot.auction_date = lot_info.get('AUCTION_DATE')
|
||
main_lot.auction = lot_info.get('AUCTION')
|
||
main_lot.group = lot_info.get('GROUP')
|
||
main_lot.category = lot_info.get('CATEGORY')
|
||
main_lot.gg = lot_info.get('GG')
|
||
main_lot.cc = lot_info.get('CC')
|
||
main_lot.machinery_model = model
|
||
main_lot.year = year
|
||
main_lot.grade = lot_info.get('GRADE')
|
||
main_lot.kpp = lot_info.get('KPP')
|
||
main_lot.priv = lot_info.get('PRIV')
|
||
main_lot.mileage = mileage
|
||
main_lot.rate = lot_info.get('RATE')
|
||
main_lot.price = price
|
||
main_lot.finish = finish
|
||
main_lot.status = lot_info.get('STATUS')
|
||
main_lot.auction_list = auction_list
|
||
main_lot.cover = cover
|
||
main_lot.images = images
|
||
main_lot.serial = lot_info.get('SERIAL')
|
||
main_lot.info = lot_info.get('INFO')
|
||
main_lot.full_info = True
|
||
|
||
machinery_type = None
|
||
if main_lot.group:
|
||
machinery_type = MachineryFilter.objects.filter(groups__title=main_lot.group.upper()).first()
|
||
|
||
main_lot.machinery_filter = machinery_type
|
||
main_lot.save()
|
||
|
||
return main_lot
|
||
|
||
|
||
def create_contact(name, phone, employee_id):
|
||
url = settings.BITRIX.replace('crm.lead.add.json', 'crm.contact.add.json')
|
||
params = {
|
||
'fields[ASSIGNED_BY_ID]': employee_id,
|
||
'fields[NAME]': name,
|
||
'fields[PHONE][0][VALUE]': phone,
|
||
'params[DATE_CREATE]': "Y",
|
||
}
|
||
try:
|
||
response = requests.get(url, params=params)
|
||
contact_id = int(response.json().get('result'))
|
||
except:
|
||
contact_id = None
|
||
|
||
return contact_id
|
||
|
||
|
||
def check_lead(lead_id):
|
||
prev_source_description = ''
|
||
prev_comment = ''
|
||
url = settings.BITRIX.replace('crm.lead.add.json', 'crm.lead.get.json')
|
||
params = {
|
||
'id': lead_id,
|
||
}
|
||
try:
|
||
response = requests.get(url, params=params)
|
||
lead_finish_date = response.json().get('result').get('DATE_CLOSED')
|
||
prev_source_description = response.json().get('result').get('SOURCE_DESCRIPTION')
|
||
prev_comment = response.json().get('result').get('COMMENTS')
|
||
except:
|
||
lead_finish_date = True
|
||
|
||
return lead_finish_date, prev_source_description, prev_comment
|
||
|
||
|
||
def update_lead(lead_id, source, comment):
|
||
url = settings.BITRIX.replace('crm.lead.add.json', 'crm.lead.update.json')
|
||
params = {
|
||
'id': lead_id,
|
||
'fields[SOURCE_DESCRIPTION]': source,
|
||
'fields[COMMENTS]': comment,
|
||
}
|
||
try:
|
||
response = requests.get(url, params=params)
|
||
except:
|
||
response = None
|
||
|
||
return response
|
||
|
||
|
||
def create_lead(name, phone, link, budget, time, users_comment, file):
|
||
bitrix_employee = BitrixEmployee.objects.filter(active=True).first()
|
||
if bitrix_employee:
|
||
employee_id = bitrix_employee.bitrix_id
|
||
bitrix_employee.save(update_fields=['updated_at'])
|
||
else:
|
||
employee_id = random.choice(settings.EMPLOYEES)
|
||
|
||
contact = Contact.objects.filter(phone=phone).first()
|
||
prev_source_description = ''
|
||
prev_comment = ''
|
||
if contact:
|
||
contact_id = contact.bitrix_id
|
||
lead = Lead.objects.filter(contact=contact).last()
|
||
lead_finish_date = True
|
||
if lead:
|
||
lead_finish_date, prev_source_description, prev_comment = check_lead(lead.bitrix_id)
|
||
else:
|
||
lead_finish_date = True
|
||
contact_id = create_contact(name, phone, employee_id)
|
||
if contact_id:
|
||
contact = Contact.objects.create(
|
||
phone=phone,
|
||
bitrix_id=contact_id,
|
||
)
|
||
|
||
comment = []
|
||
if budget:
|
||
comment.append(f'бюджет: {budget}')
|
||
if comment:
|
||
comment.append(f'комментарий: {users_comment}')
|
||
if file:
|
||
comment.append(f'прикрепленный файл: {file}')
|
||
if time:
|
||
comment.append(f'часовой пояс: {time}')
|
||
|
||
params = {
|
||
'fields[TITLE]': 'Заявка с сайта',
|
||
'fields[SOURCE_DESCRIPTION]': link,
|
||
'fields[ASSIGNED_BY_ID]': employee_id,
|
||
}
|
||
|
||
if contact_id:
|
||
params['fields[CONTACT_ID]'] = contact_id,
|
||
else:
|
||
comment.insert(0, f'имя: {name}')
|
||
params['fields[PHONE][0][VALUE]'] = phone
|
||
|
||
text_comment = ', '.join(comment)
|
||
params['fields[COMMENTS]'] = text_comment
|
||
|
||
if lead_finish_date:
|
||
try:
|
||
response = requests.get(settings.BITRIX, params=params)
|
||
lead_id = response.json().get('result')
|
||
if lead_id and contact:
|
||
Lead.objects.create(
|
||
contact=contact,
|
||
bitrix_id=lead_id,
|
||
)
|
||
except:
|
||
return 500
|
||
|
||
else:
|
||
if prev_source_description:
|
||
source_description = prev_source_description + f', {link}'
|
||
else:
|
||
source_description = link
|
||
|
||
if prev_comment:
|
||
curr_comment = prev_comment + f'\n{text_comment}'
|
||
else:
|
||
curr_comment = text_comment
|
||
|
||
response = update_lead(lead.bitrix_id, source_description, curr_comment)
|
||
if not response:
|
||
return 500
|
||
|
||
return response.status_code
|
||
|
||
|
||
def japan_brands_available(ip_address, truck_flag=False):
|
||
sql_request = f"select distinct(MARKA_ID) from main where (status LIKE '%25not%20sold%25' or status='') and (auction not like '%25uss%25')"
|
||
if not truck_flag:
|
||
sql_request += f' and YEAR>={settings.MIN_YEAR}'
|
||
sql_request = sql_request_for_api(sql_request)
|
||
|
||
AUCTION_ENDPOINT = settings.AUCTION_ENDPOINT
|
||
if ip_address:
|
||
AUCTION_ENDPOINT = AUCTION_ENDPOINT.replace('?json', f'?json&ip={ip_address}')
|
||
|
||
brands = []
|
||
try:
|
||
start = 0
|
||
final_sql_request = sql_request + f'%20limit%20{start},{start+250}'
|
||
response = requests.get(AUCTION_ENDPOINT + final_sql_request)
|
||
while len(response.json()) > 0:
|
||
for brand_id in response.json():
|
||
brands.append(brand_id['TAG0'])
|
||
start += 250
|
||
final_sql_request = sql_request + f'%20limit%20{start},{start+250}'
|
||
response = requests.get(AUCTION_ENDPOINT + final_sql_request)
|
||
except:
|
||
pass
|
||
|
||
return brands
|
||
|
||
|
||
def japan_models_available(brand_id, ip_address, truck_flag=False):
|
||
sql_request = f"select distinct(MODEL_ID) from main where (status LIKE '%25not%20sold%25' or status='') and (auction not like '%25uss%25') and MARKA_ID={brand_id}"
|
||
if not truck_flag:
|
||
sql_request += f' and YEAR>={settings.MIN_YEAR}'
|
||
sql_request = sql_request_for_api(sql_request)
|
||
|
||
AUCTION_ENDPOINT = settings.AUCTION_ENDPOINT
|
||
if ip_address:
|
||
AUCTION_ENDPOINT = AUCTION_ENDPOINT.replace('?json', f'?json&ip={ip_address}')
|
||
|
||
models = []
|
||
try:
|
||
start = 0
|
||
final_sql_request = sql_request + f'%20limit%20{start},{start+250}'
|
||
response = requests.get(AUCTION_ENDPOINT + final_sql_request)
|
||
while len(response.json()) > 0:
|
||
for model_id in response.json():
|
||
models.append(model_id['TAG0'])
|
||
start += 250
|
||
final_sql_request = sql_request + f'%20limit%20{start},{start+250}'
|
||
response = requests.get(AUCTION_ENDPOINT + final_sql_request)
|
||
except:
|
||
pass
|
||
|
||
return models
|
||
|
||
|
||
def korea_brands_available(ip_address):
|
||
sql_request = f"select distinct(MARKA_ID) from korea where (status LIKE '%25not sold%25' or status='') and YEAR>={settings.MIN_YEAR}"
|
||
sql_request = sql_request_for_api(sql_request)
|
||
|
||
AUCTION_ENDPOINT = settings.AUCTION_ENDPOINT
|
||
if ip_address:
|
||
AUCTION_ENDPOINT = AUCTION_ENDPOINT.replace('?json', f'?json&ip={ip_address}')
|
||
|
||
brands = []
|
||
try:
|
||
start = 0
|
||
final_sql_request = sql_request + f'%20limit%20{start},{start+250}'
|
||
response = requests.get(AUCTION_ENDPOINT + final_sql_request)
|
||
while len(response.json()) > 0:
|
||
for brand_id in response.json():
|
||
brands.append(brand_id['TAG0'])
|
||
start += 250
|
||
final_sql_request = sql_request + f'%20limit%20{start},{start+250}'
|
||
response = requests.get(AUCTION_ENDPOINT + final_sql_request)
|
||
except:
|
||
pass
|
||
|
||
return brands
|
||
|
||
|
||
def korea_models_available(brand_id, ip_address):
|
||
sql_request = f"select distinct(MODEL_ID) from korea where (status LIKE '%25not sold%25' or status='') and MARKA_ID={brand_id} and YEAR>={settings.MIN_YEAR}"
|
||
sql_request = sql_request_for_api(sql_request)
|
||
|
||
AUCTION_ENDPOINT = settings.AUCTION_ENDPOINT
|
||
if ip_address:
|
||
AUCTION_ENDPOINT = AUCTION_ENDPOINT.replace('?json', f'?json&ip={ip_address}')
|
||
|
||
models = []
|
||
try:
|
||
start = 0
|
||
final_sql_request = sql_request + f'%20limit%20{start},{start+250}'
|
||
response = requests.get(AUCTION_ENDPOINT + final_sql_request)
|
||
while len(response.json()) > 0:
|
||
for model_id in response.json():
|
||
models.append(model_id['TAG0'])
|
||
start += 250
|
||
final_sql_request = sql_request + f'%20limit%20{start},{start+250}'
|
||
response = requests.get(AUCTION_ENDPOINT + final_sql_request)
|
||
except:
|
||
pass
|
||
|
||
return models
|
||
|
||
|
||
def machinery_brands_available(ip_address):
|
||
sql_request = f"select distinct(MARKA_ID) from hdm where (status LIKE '%25not sold%25' or status='')"
|
||
sql_request = sql_request_for_api(sql_request)
|
||
|
||
brands = []
|
||
|
||
MACHINERY_ENDPOINT = settings.MACHINERY_ENDPOINT
|
||
if ip_address:
|
||
MACHINERY_ENDPOINT = MACHINERY_ENDPOINT.replace('?json', f'?json&ip={ip_address}')
|
||
|
||
try:
|
||
start = 0
|
||
final_sql_request = sql_request + f'%20limit%20{start},{start+250}'
|
||
response = requests.get(MACHINERY_ENDPOINT + final_sql_request)
|
||
|
||
while len(response.json()) > 0:
|
||
for brand_id in response.json():
|
||
brands.append(brand_id['TAG0'])
|
||
start += 250
|
||
final_sql_request = sql_request + f'%20limit%20{start},{start+250}'
|
||
response = requests.get(MACHINERY_ENDPOINT + final_sql_request)
|
||
except:
|
||
pass
|
||
|
||
return brands
|
||
|
||
|
||
def machinery_models_available(brand_id, ip_address):
|
||
sql_request = f"select distinct(MODEL_NAME) from hdm where (status LIKE '%25not sold%25' or status='') and MARKA_ID={brand_id}"
|
||
sql_request = sql_request_for_api(sql_request)
|
||
|
||
MACHINERY_ENDPOINT = settings.MACHINERY_ENDPOINT
|
||
if ip_address:
|
||
MACHINERY_ENDPOINT = MACHINERY_ENDPOINT.replace('?json', f'?json&ip={ip_address}')
|
||
|
||
models = []
|
||
try:
|
||
start = 0
|
||
final_sql_request = sql_request + f'%20limit%20{start},{start+250}'
|
||
response = requests.get(MACHINERY_ENDPOINT + final_sql_request)
|
||
while len(response.json()) > 0:
|
||
for model_id in response.json():
|
||
models.append(model_id['TAG0'].upper())
|
||
start += 250
|
||
final_sql_request = sql_request + f'%20limit%20{start},{start+250}'
|
||
response = requests.get(MACHINERY_ENDPOINT + final_sql_request)
|
||
except:
|
||
pass
|
||
|
||
return models
|