# import json # # import project_sets # from BaseModels.functions import add_domain # # # def get_ld_shipping_data_for_product(shipping_terms): # shipping_terms_list = [] # for item in shipping_terms: # data = { # "@type": "OfferShippingDetails", # "shippingRate": { # "@type": "MonetaryAmount", # "value": item.price, # "currency": project_sets.base_currency # }, # "shippingDestination": { # "@type": "DefinedRegion", # "addressCountry": project_sets.shipping_region, # обязательно # # "postalCodeRange": { # # "postalCodeBegin": "98100", # # "postalCodeEnd": "98199" # # } # }, # "deliveryTime": { # "@type": "ShippingDeliveryTime", # "cutOffTime": project_sets.cutOffTime, # "19:30-08:00", # # # Стандартное время от получения оплаты до отправки товаров со склада (или подготовки к самовывозу, если используется такой вариант) # "handlingTime": { # "@type": "QuantitativeValue", # "minValue": "0", # дней # "maxValue": "1" # дней # }, # # Стандартное время от отправки заказа до его прибытия к конечному покупателю. # "transitTime": { # "@type": "QuantitativeValue", # "minValue": "1", # дней # "maxValue": "5" # дней # }, # # Время, после которого новые заказы не обрабатываются в тот же день # # # Дни недели, по которым вы обрабатываете заказы # "businessDays": { # "@type": "OpeningHoursSpecification", # "dayOfWeek": ["https://schema.org/Monday", "https://schema.org/Tuesday", # "https://schema.org/Wednesday", "https://schema.org/Thursday"] # } # } # } # # shipping_terms_list.append(data) # # data = { # "shippingDetails": shipping_terms_list # } # # return data # # # def get_ld_offers_for_product(product, domain, shipping_terms): # data = { # "offers": { # "@type": "Offer", # "url": '{0}{1}'.format(domain, product.get_site_url()), # "itemCondition": "https://schema.org/NewCondition", # # "https://schema.org/NewCondition" # # "https://schema.org/UsedCondition" # "availability": "https://schema.org/InStock", # # https://schema.org/BackOrder # # https://schema.org/Discontinued # # https://schema.org/InStock # # https://schema.org/InStoreOnly # # https://schema.org/LimitedAvailability # # https://schema.org/OnlineOnly # # https://schema.org/OutOfStock # # https://schema.org/PreOrder # # https://schema.org/PreSale # # https://schema.org/SoldOut # "price": str(product.price), # "priceCurrency": project_sets.base_currency, # # "priceValidUntil": "2020-11-20", #дата окончания действия цены # # "shippingSettingsLink": '{0}{1}'.format(project_sets.domain, 'delivery/'), # # }, # } # # if shipping_terms: # data["offers"].update(get_ld_shipping_data_for_product(shipping_terms)) # # return data # # # def get_aggregate_rating(product): # data = { # # "review": { # # "@type": "Review", # # "reviewRating": { # # "@type": "Rating", # # "ratingValue": "4", # # "bestRating": "5" # # }, # # "author": { # # "@type": "Person", # # "name": "Fred Benson" # # } # # }, # "aggregateRating": { # "@type": "AggregateRating", # "ratingValue": product.ratingValue, # "reviewCount": product.reviewCount # } # } # # return data # # # def get_ld_product(product, domain, shipping_terms): # from GeneralApp.views import get_cur_domain # serv_domain, local_domain = get_cur_domain() # # data = { # "@context": "https://schema.org/", # "@type": "Product", # "name": product.name, # "sku": '{0}-{1}'.format(str(product.brand), str(product.article)), # "url": '{0}{1}'.format(domain, product.get_site_url()), # } # # if product.description: # data.update({ # "description": product.description, # }) # # barcode = getattr(product, 'barcode', None) # if barcode: # data.update({ # "gtin14": barcode, # }) # # gallery = getattr(product, 'gallery', None) # if gallery: # try: # photos = gallery.get_photos() # photos = list(map(lambda ph: '{0}{1}'.format(serv_domain, ph), photos)) # except Exception as e: # photos = None # # if photos: # data.update({ # "image": photos, # }) # # brand = getattr(product, 'brand', None) # if brand: # if type(brand) not in [str]: # brand = brand.name # # data.update({ # "brand": { # "@type": "Brand", # "name": brand # }, # }) # # FAQ = {} # # from ... # # aggregate_rating = getattr(product, 'ratingValue', None) # if aggregate_rating != None: # data.update(get_aggregate_rating(product)) # # price = getattr(product, 'price', None) # if price: # data.update(get_ld_offers_for_product(product, domain, shipping_terms)) # # return json.dumps(data)