product_comet/tov.py

101 lines
2.5 KiB
Python

from fast_bitrix24 import Bitrix
import re
from difflib import SequenceMatcher
from dotenv import load_dotenv
import os
load_dotenv()
B24 = os.getenv('BITRIX')
# замените на ваш вебхук для доступа к Bitrix24
webhook = B24
b = Bitrix(webhook)
idss = '35578'
deals = b.get_all(
'crm.deal.list',
params={
'select': ['COMMENTS'],
'filter': {'ID': idss}
})
# print(deals)
for d in deals:
com = d['COMMENTS']
# print(com)
pattern = re.compile(r'Product - (.*?)\s*Additional info:', re.DOTALL)
pattern_kg = re.compile(r'\[\*\]кг: (.*?)\[/list\]', re.DOTALL)
# Используем findall для поиска всех совпадений
matches_product = pattern.findall(com)
matches_kg = pattern_kg.findall(com)
# Объединяем совпадения в одну строку
result = [f"{product} кг: {kg}" for product, kg in zip(matches_product, matches_kg)]
# Выводим результат
tovar_name = []
for item in result:
# print(item)
names = item
tovar_name.append(names)
print(tovar_name)
tov = []
tovar = b.get_all('crm.deal.productrows.get', params= {"ID": idss} )
# print(tovar)
for t in tovar:
product_id = t['PRODUCT_ID']
product_name = t['PRODUCT_NAME']
price = t['PRICE']
quan = t['QUANTITY']
data = {'PRODUCT_ID': product_id, 'PRODUCT_NAME': product_name,
'PRICE': price, 'QUANTITY': quan}
tov.append(data)
# print(tov)
def similar(a, b):
return SequenceMatcher(None, a, b).ratio()
threshold = 0.6 # Задайте порог схожести по вашему усмотрению
similar_items = []
for product_info in tov:
found_similar = False
for product_name in tovar_name:
if similar(product_info['PRODUCT_NAME'], product_name) > threshold:
similar_items.append({'PRODUCT_ID': product_info['PRODUCT_ID'],
'PRODUCT_NAME': f"{product_info['PRODUCT_NAME']} {product_name}",
'PRICE': product_info['PRICE'],
'QUANTITY': product_info['QUANTITY']})
# Удалить найденный элемент из product_names
tovar_name.remove(product_name)
found_similar = True
break
if not found_similar:
similar_items.append(product_info)
tovar_up = b.call(
"crm.deal.productrows.set",
{
"ID": idss,
'rows':similar_items
}
)