Files
FireGame/AuthApp/api/import_1C_data.py
2023-05-16 17:14:16 +03:00

195 lines
6.7 KiB
Python

# coding=utf-8
from BaseModels.mailSender import techSendMail
from ..models import *
from datetime import date, datetime
from GeneralApp.views import get_timestamp_by_property_item_name, set_timestamp_by_propertiy_item_name
from BaseModels.error_processing import *
from uuid import uuid1
from GeneralApp.temp_data_funcs import add_tmp_data, del_tmp_data_by_obj
def avg(val):
"""uses floating-point division."""
return sum(val) / float(len(val))
from django.http import HttpResponse
import json
def import_1C_pocket_from_file(request):
if not request.user.is_superuser:
return HttpResponse(u'import_1C_pocket_from_file PERMISSION FAIL')
try:
f = open('companies_1s.txt')
data = f.read()
except:
return HttpResponse(u'import_1C_pocket_from_file READ FILE FAIL')
import re
data = re.sub(r'[\r\n\t]', ' ', data)
data = re.sub(r'\s+', ' ', data)
request_data = data
data = json.loads(request_data)
import_1C_pocket(data)
return HttpResponse(u'import_1C_pocket_from_file Accept')
def import_1C_pocket(json_data):
log = ''
log_begin_DT = datetime.now()
msg = 'import_1C_pocket MANAGERS start - {0}<br>---------------<br><br>'.format(str(log_begin_DT))
log = '{0}<br>{1}'.format(log, msg)
try:
data = json_data['data_list']
timestamp = json_data['timestamp']
msg = str(timestamp)
log = '{0}<br>{1}'.format(log, msg)
# dt = datetime.fromtimestamp(timestamp)
saved_timestamp = get_timestamp_by_property_item_name('1S_managers')
if saved_timestamp and saved_timestamp >= timestamp:
# generate_error(f, u'import_1S_companies', u'1S_companies пакет устарел, импорт не был произведен', u'')
msg = '<b style="color : red;">!!!!! --- 1S_managers пакет устарел, импорт не был произведен</b>'
print(msg)
return {u'result': u'1S_managers пакет устарел, импорт не был произведен', 'error': 304}
set_timestamp_by_propertiy_item_name('1S_managers', timestamp)
except:
data = json_data
# сохраняем данные для импорта временно в БД
tmp_data = add_tmp_data(data_type='import_proc', data_target='managers_1s_import', data=data)
for item in data:
# print(str(item))
# break
json_item = json.dumps(item, ensure_ascii=False)
try:
if not u'id' in item:
# generate_error(f, u'import_1S_companies', u'1S_companies ID отсутствует в экзепляре данных', json_item)
msg = '<b style="color : red;">!!!!! --- 1S_managers ID отсутствует в экзепляре данных</b>'
log = '{0}<br>{1}'.format(log, msg)
return {
u'result': msg,
u'error': 400,
}
msg = '{0} - {1}'.format(item[u'id'], item[u'name'])
log = '{0}<br>{1}'.format(log, msg)
user_profiles = UserProfile.objects.filter(id_1s=item[u'id'])
kwargs = {
'name' : item[u'name'].replace(u"'", '"'),
'id_1s' : item[u'id'],
'company_position' : item[u'position'],
'departament': str(item[u'subdiv']),
}
work_start_D = item[u'datein'].replace(u" ", '')
if len(work_start_D) > 9:
work_start_D = datetime.strptime(work_start_D, "%d.%m.%Y")
kwargs.update({'work_start_D' : work_start_D})
work_finish_D = item[u'dateout'].replace(u" ", '')
if len(work_finish_D) > 9:
work_finish_D = datetime.strptime(work_finish_D, "%d.%m.%Y")
kwargs.update({'work_finish_D': work_finish_D})
birthday = item[u'birthday'].replace(u" ", '')
if len(birthday) > 9:
birthday = datetime.strptime(birthday, "%d.%m.%Y")
kwargs.update({'birthdate': birthday})
user = None
u_profile = None
if user_profiles:
user_profiles.update(**kwargs)
u_profile = user_profiles[0]
msg = ' - ОБНОВЛЕНИЕ данных МЕНЕДЖЕРА - {0}'.format(str(u_profile.__dict__))
user = u_profile.user
if not user:
username = str(item[u'id'])
mail = '{0}@truenergy.by'.format(str(item[u'id']))
password = user_id = str(uuid1().hex)[:10]
user = User.objects.create_user(username=username, email=mail, password=password)
user.is_staff = True
user.is_active = True
user.is_superuser = False
user.set_password(password)
user.save()
kwargs.update({'user': user})
user_profiles = UserProfile.objects.filter(user=user)
user_profiles.update(**kwargs)
u_profile = user_profiles[0]
msg = ' - СОЗДАНИЕ МЕНЕДЖЕРА - {0}'.format(str(u_profile.__dict__))
log = '{0}<br>{1}'.format(log, msg)
msg = ''
if 'work_finish_D' in kwargs and user.is_active:
user.is_active = False
msg = ' - отключен доступ<br>'
name_list = item[u'name'].split(' ')
if len(name_list) > 1 and user.first_name != ' '.join(name_list[1:]):
user.first_name = ' '.join(name_list[1:])
msg = ' - изменено имя<br>'
if len(name_list) > 0 and user.last_name != name_list[0]:
user.last_name = name_list[0]
msg = ' - изменена фамилия'
if msg:
user.save()
log = '{0}<br>{1}'.format(log, msg)
except Exception as e:
# generate_error(f, u'import_1S_companies', str(e), json_item)
msg = '<b style="color : red;">!!!!! --- import_1C_pocket MANAGERS error={0}</b>'.format(str(e))
print(msg)
log = '{0}<br>{1}'.format(log, msg)
# close_log_file(f, u'END import_1S_companies')
# удаляем временные данные для импорта из БД
if tmp_data:
del_tmp_data_by_obj(tmp_data)
msg = 'import_1C_package MANAGERS finish - {0} (processing time = {1}<br>---------------<br><br>'.format(
str(datetime.now()),
str(datetime.now() - log_begin_DT)
)
log = '{0}<br>{1}'.format(log, msg)
title = 'import_1C_pocket MANAGERS'
techSendMail(log, title)
return {
u'result': log
}