48 lines
2.2 KiB
Python
48 lines
2.2 KiB
Python
# -*- coding: utf-8 -*-
|
||
"""
|
||
Переносит стаж врачей в practice_start_year.
|
||
|
||
При первом переносе текст «Стаж работы по специальности» (свойство 328) попал
|
||
в поле quote — цитату для карточки, а practice_start_year остался пустым у всех.
|
||
В итоге стаж, который макет показывает на каждой карточке, не отдавался.
|
||
|
||
Год начала практики = год последней правки карточки на старом сайте − стаж.
|
||
Считать от сегодняшнего дня нельзя: «10 лет» было верно на момент правки.
|
||
Голое число («13») считается годами — поле называлось «Стаж работы».
|
||
Из quote стираем только сам текст стажа, настоящие цитаты не трогаем.
|
||
"""
|
||
import sqlread, io, re
|
||
|
||
P = 'D:/medkor-local/tmp/dana/db.sql'
|
||
OUT = io.open('seed_doctor_experience.sql', 'w', encoding='utf-8')
|
||
|
||
work = {}
|
||
for r in sqlread.rows(P, 'b_iblock_element_property'):
|
||
if r.get('IBLOCK_PROPERTY_ID') == '328' and r.get('VALUE') not in (None, '', 'NULL'):
|
||
work[r['IBLOCK_ELEMENT_ID']] = r['VALUE']
|
||
|
||
OUT.write('BEGIN;\n')
|
||
done = skipped = 0
|
||
for r in sqlread.rows(P, 'b_iblock_element'):
|
||
if r['IBLOCK_ID'] != '29' or r.get('ACTIVE') != 'Y':
|
||
continue
|
||
text = work.get(r['ID'], '')
|
||
m = re.search(r'(\d+)', text)
|
||
ts = r.get('TIMESTAMP_X') or ''
|
||
if not m or not re.match(r'\d{4}', ts):
|
||
skipped += 1
|
||
continue
|
||
years = int(m.group(1))
|
||
if not 0 < years < 70:
|
||
skipped += 1
|
||
continue
|
||
start = int(ts[:4]) - years
|
||
OUT.write(
|
||
"UPDATE doctors SET practice_start_year=%d, "
|
||
"quote = CASE WHEN quote ~ '^\\s*(более\\s+)?\\d+\\s*(год|года|лет)?\\s*$' THEN '' ELSE quote END, "
|
||
"updated_at=now() WHERE legacy_id=%s;\n" % (start, r['ID']))
|
||
done += 1
|
||
OUT.write('COMMIT;\n')
|
||
OUT.close()
|
||
print('стаж проставлен:', done, '| пропущено (нет стажа или не разобран):', skipped)
|