<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">from patch.include import *
from tqdm import tqdm


@app_context(commit=True)
def custom_fields_fix2():
    """
    Р”Р»СЏ С‚РµСЃС‚РёСЂРѕРІР°РЅРёСЏ РїР°С‚С‡Р°: ( cd /opt/eva-app; python3 -m patch.202309281330_custom_fields_fix2 )
    Р—РґРµСЃСЊ РјРѕР¶РЅРѕ СЂР°Р±РѕС‚Р°С‚СЊ СЃ РјРѕРґРµР»СЏРјРё С‡РµСЂРµР· models.CmfTask Рё С‚.Рґ.
    Р”Р»СЏ РїСЂРѕРіСЂРµСЃСЃР±Р°СЂР° РёСЃРїРѕР»СЊР·СѓР№С‚Рµ:
    for task in tqdm(models.CmfTask.list()):
        ...
    """
    print('Р—Р°РїСѓСЃРє РїР°С‚С‡Р° custom_fields_fix2')
    for ui_form in models.CmfUiForm.list(fields=['ui_form_json', 'cmf_model_name']):
        if not ui_form.ui_form_json or not ui_form.cmf_model_name:
            ui_form.delete()
            continue
        ui_form_json = ui_form.ui_form_json.value
        if not ui_form_json['ui_fields']:
            continue
        for key in ui_form_json['ui_fields']:
            if ui_form_json['ui_fields'][key].get('field_type') == 'CmfCascadeChoice':
                print(f"РР·РјРµРЅРёРј СѓСЃС‚Р°СЂРµРІС€РёР№ С‚РёРї РїРѕР»СЏ {key} ({ui_form_json['ui_fields'][key].get('field_type')}) РЅР° CmfM2M")
                ui_form_json['ui_fields'][key]['field_type'] = 'CmfM2M'
                ui_form_json['ui_fields'][key]['left'] = True
                ui_form_json['ui_fields'][key]['model'] = 'CUSTOM_CHOICE_MODEL'
            elif ui_form_json['ui_fields'][key].get('field_type') == 'CmfM2M':
                if not ui_form_json['ui_fields'][key].get('left') or ui_form_json['ui_fields'][key].get('model') != 'CUSTOM_CHOICE_MODEL':
                    print(f"РќРµРїСЂР°РІРёР»СЊРЅР°СЏ РЅР°СЃС‚СЂРѕР№РєР° РїРѕР»СЏ {key} {ui_form_json['ui_fields'][key]}")
                    ui_form_json['ui_fields'][key]['left'] = True
                    ui_form_json['ui_fields'][key]['model'] = 'CUSTOM_CHOICE_MODEL'
            elif ui_form_json['ui_fields'][key].get('field_type') == 'CmfGenericM2M':
                if not ui_form_json['ui_fields'][key].get('left'):
                    print(f"РќРµРїСЂР°РІРёР»СЊРЅР°СЏ РЅР°СЃС‚СЂРѕР№РєР° РїРѕР»СЏ {key} {ui_form_json['ui_fields'][key]}")
                    ui_form_json['ui_fields'][key]['left'] = True
        ui_form.ui_form_json = ui_form_json
        ui_form.save(only_data=True)
        ui_form.dp.commit()
    models.CmfTask.custom_field_sync(skip_choice_data_sync=True)
    for model_name in vars(models):
        # РєР°СЃС‚РѕРјРЅС‹Рј С‚Р°Р±Р»РёС†Р°Рј РЅР°РґРѕ РїРѕР»СЏ cmf_hidden РґРѕР±Р°РІРёС‚СЊ
        if model_name.startswith('CmfTaskCf') and model_name.endswith('Ch'):
            model = vars(models)[model_name]
            try:
                print(f'РџСЂРѕРІРµСЂСЏРµРј {model_name}')
                try:
                    columns = [c['name'] for c in models.CmfTask.dp.data_driver.inspect_table_columns(model.tablename)]
                except Exception as e:
                    print(f'РћС‚РґРµР»СЊРЅС‹Р№ Р±Р°Рі, С‡С‚Рѕ С‚С‹Р±Р»РёС†С‹ РјРѕР¶РµС‚ РЅРµ Р±С‹С‚СЊ: {e}')
                    continue
                if 'cmf_hidden' not in columns:
                    print(f'Р”РѕР±Р°РІР»СЏРµРј РїРѕР»Рµ РІ {model_name}')
                    model.dp.data_driver.add_custom_column(model.tablename, 'cmf_hidden', fields.CmfBool)
                    commit_all_ds()
            except Exception as e:
                print(e)
                rollback_all_ds()
                raise e


if __name__ == "__main__":
    custom_fields_fix2()
</pre></body></html>