101 lines
2.5 KiB
Python
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
|
|
|
|
}
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|