def test_4(self): """ импорт из https://proverkacheka.com/check&p=2 получить все чеки получить последний чек загруденный Робо1 загружать последоватетно страницы из https://proverkacheka.com/check&p=2 до тех пор пока не найдем на странице последний чек загрузить страницу вытащить из нее чеки преобразовав чеки в формат для сравнения как текст из QR кода параметров всего 5 попыиаиься найти нужный чек если не нашли загрузить следубщую, ограничимся 100 страницами, но первый раз гораничение в 7000 сохранить их в репозиторий от имени Робо1 получить список QR кодов скормить его стандартном мехаизму сохранения чеков у пользователей потом возможно использовать их для показа похожих товаров в других магазинах и рекомедации цены """ robo1_employee = Employee(title='robo1', key='robo1_123zxc') robo1_employee.save() company_family = Company(title='family') company_family.save() company_family.employees.add(robo1_employee) last_fns_cheques = FNSCheque.objects.filter( company=company_family).order_by('-id') has_last_fns_cheques = False if last_fns_cheques: has_last_fns_cheques = True last_fns_cheque = last_fns_cheques[0]
def mutate_and_get_payload(root, info, **input): employee = Employee(employee_name=input.get('employee_name'), employee_city=City.objects.get( city_name=input.get('employee_city')), employee_title=Title.objects.get( title_name=input.get('employee_title'))) employee.save() return CreateEmployee(employee=employee)
def dispatch(self, request, *args, **kwargs): from company.models import Employee # if not request.user.has_perms(self.required_permissions): employee = Employee.inRequest(request) if not employee.role.mask in self.required_roles: from django.conf import settings return redirect(settings.LOGIN_URL) return super(AccessAuthorizationMixin, self).dispatch(request, *args, **kwargs)
def test_1(self): """ Польователь первый раз пользуется сейрвисом Создать пользователя по клиентским данным Создать пользовтаелю сомпанию """ pety_employee = Employee(title='Pety', key='123zxc') pety_employee.save() company_family = Company(title='family') company_family.save() company_family.employees.add(pety_employee) company_family.title = 'test' self.assertEqual('test', company_family.title) company_family = Company.objects.get(employees__in=[pety_employee]) self.assertEqual('family', company_family.title)
def add_employee(request): if request.method == 'GET': last_employee_info = Employee.objects.last() company_list = Company.objects.all() department_list = Department.objects.all() return render(request, 'company/add_employee.html', locals()) else: employee_index = request.POST.get('employee_index') employee_name = request.POST.get('employee_name') employee_gender = request.POST.get('employee_gender') employee_telephone = request.POST.get('employee_telephone') belong_department = request.POST.get('belong_department') department_info = Department.objects.get(id=belong_department) new_employee = Employee(employee_index=int(employee_index), employee_name=employee_name, employee_gender=employee_gender, employee_telephone=employee_telephone, belong_department=department_info) new_employee.save() return redirect('/company/employee/')
def test_1(self): """ Получений чека от контрагента по тексу из QR кода проверка того что сохранили в базу """ #qr_text = 't=20201205T2206&s=293.90&fn=9288000100159749&i=14492&fp=2104555358&n=1' qr_text = 't=20201121T204000&s=390.96&fn=9285000100186911&i=123274&fp=1022052943&n=1' qr_text = 't=20201020T151800&s=96.00&fn=9287440300038062&i=44302&fp=1049436108&n=1' qr_text = 't=20201107T2058&s=63.00&fn=9288000100192401&i=439&fp=2880362760&n=1' robo1_employee = Employee(title='robo1', key='robo1_123zxc') robo1_employee.save() company_family = Company(title='family') company_family.save() company_family.employees.add(robo1_employee) #TODO временно отключу чтобы не дергать сервис и чтобы не забанили. FNSCheque.import_from_proverkacheka_com_format_like_fns(qr_text, company_family) for i in FNSCheque.objects.all(): print i for i in FNSChequeElement.objects.all(): print i c = FNSCheque.objects.get(id=1) self.assertEqual(c.fns_userInn, '7729532221') self.assertEqual(c.fns_fiscalDocumentNumber, '439') self.assertEqual(c.fns_fiscalDriveNumber, '9288000100192401') self.assertEqual(c.fns_fiscalSign, '2880362760') self.assertEqual(c.fns_dateTime, '2020-11-07T20:58:00') self.assertEqual(c.fns_totalSum, '6300') e = FNSChequeElement.objects.get(id=1) self.assertEqual(e.name, u'\u0427\u0438\u0437\u0431\u0443\u0440\u0433\u0435\u0440 \u0441 \u043b\u0443\u043a\u043e\u043c \u0421\u0411' ) self.assertEqual(e.price, 6300) self.assertEqual(e.quantity, 1.000) self.assertEqual(e.sum, 6300)
def test_8(self): #TODO не указал что при подученни и функций можем брать только функции в компании котрую мы просчитываем # слежует релатзовать интерфейс у класа репоитория функций когда: # 1. всегда укзаывается компания для коророй подучается функция # 2. или фуннкции можно получать только через когмпанию где компания является агрегатом функции чеков # агрегат предпочтительнее так как явно видно его границы, # а при работе с репозиторием не понятно почему нельзя создать метеод получения функции без компании. # и это надо коментариями указывать в описании репозитория #для быстроты МВП делаем так """ Сгенерить функции на основе имеющихся чеков в указанной компании. не все клиенты пьют молоко а знаит функция молока им не нужна. создадим ее только когда пользователь попросит """ print 'test 8' #Берем все чеки на основе которых хотим понять что за функции нам нужны. pety_employee = Employee(title='Pety', key='123zxc') pety_employee.save() company_family = Company(title='family') company_family.save() company_family.employees.add(pety_employee) #добавляем чеки в компанию for i in Base.list_buy_milk(): fns_cheque = FNSCheque(is_manual=False, company=company_family, fns_dateTime=i['dateTime']) fns_cheque.save() for j in i['items']: print j['name'].encode('utf8') e = FNSChequeElement(fns_cheque=fns_cheque, name=j['name'], quantity=j['quantity'], volume=j['volume'], sum=j['sum']) e.save() for i in Base.list_buy_cheese(): fns_cheque = FNSCheque(is_manual=False, company=company_family, fns_dateTime=i['dateTime']) fns_cheque.save() for j in i['items']: print j['name'].encode('utf8') e = FNSChequeElement(fns_cheque=fns_cheque, name=j['name'], quantity=j['quantity'], volume=j['volume'], sum=j['sum']) e.save() print 'Base:' print FNSCheque.objects.all().count() print FNSChequeElement.objects.all().count() print '---' #function = PredictionLinearFunction.objects.get(base_type=u'МОЛОКО') #print function #для каждого элемента чек пробуем определить под какие из заложенных функций он подходит. #по содерибмому элемента - в назавние есть надпись МОЛОКО 3.2% #по привязке карточки продуката - в назавании карточки продукат есть надпись МОЛОКО 3.2% #по если в чеке есть не определнный товар Х и еще есть СМЕТАНА и ТВОРОГ, # а также есть много чеков также с теремя товарами СМЕТАНА ТВОРОГО "МОЛОКО" - принимаем рещенеи что это МОЛОКО и добавляем его в функцию fns_cheques = FNSCheque.objects.filter(company=company_family) ##получем все типы базвых функий которые возможны #base_function_types = set() #for fns_cheque in fns_cheques: # #for fns_cheque_element in fns_cheque.elements(): # for fns_cheque_element in FNSChequeElement.objects.filter(fns_cheque=fns_cheque): # for base_function_type in PredictionLinear.base_function_types(fns_cheque_element): # base_function_types.add(base_function_type) #for base_function_type in base_function_types: # print base_function_type.encode('utf8') #print base_function_types = PredictionLinear.auto_find_available_base_function_type( fns_cheques) ##создаем недостающие базовые функции #for base_function_type in base_function_types: # if not PredictionLinearFunction.objects.filter(base_type=base_function_type).count(): # f = PredictionLinearFunction(base_type=base_function_type) # f.save() PredictionLinear.save_functions_with_base_function_types( base_function_types) ##получаем базовые функции #functions = PredictionLinearFunction.objects.filter(base_type__in=base_function_types) #for f in functions: # print f ##наполняем функции чеками которые им подходят #print len(fns_cheques) #for fns_cheque in fns_cheques: # #for fns_cheque_element in fns_cheque.elements(): # for fns_cheque_element in FNSChequeElement.objects.filter(fns_cheque=fns_cheque): # print '--->' # print fns_cheque_element.get_title().encode('utf8') # for base_function_type in PredictionLinear.base_function_types(fns_cheque_element): # function = PredictionLinearFunction.objects.get(base_type=base_function_type) # function.cheque_elements.add(fns_cheque_element) PredictionLinear.auto_add_cheque_elements_to_functions(fns_cheques) function = PredictionLinearFunction.objects.get(base_type=u'МОЛОКО') print function print '----' for f in PredictionLinearFunction.objects.all(): print f elements = set() ##найдем чеки с 100% совпадением названия и связанных чеков, и на основе них рассчитам предложение за килограм #elements = set() #for e in function.cheque_elements.all(): # for en in FNSChequeElement.objects.filter(name=e.name): # elements.add(en) elements.update( function.cheque_have_name_like_name_from_contains_cheques()) ##взять ключевые слова у функции которые могут содержаться в чеках #for word in function.allow_key_words(): # qs = FNSChequeElement.objects.filter(name__icontains=word) # for e_word in function.disallow_key_words(): # qs = qs.exclude(name__icontains=e_word) # for e in qs: # elements.add(e) elements.update(function.cheque_contains_key_words()) for e in elements: print e.offer_element_params() #offers = [] #for e in elements: # offers.append(e.offer_element_params()) #for o in offers: # print o print 'end'
def test_7(self): """ создадим работника Создать или выбрать компанию из имеющихся. создать может рботник Добавить часть чеко в хранилище досьать их из хранилища создать фунуцию предсказания укзать у нужных позиций в чеках созданную функцию спрогнозировать на 4 дня """ pety_employee = Employee(title='Pety', key='123zxc') pety_employee.save() #company_family = Company(owner=pety_employee, title='family') company_family = Company(title='family') company_family.save() company_family.employees.add(pety_employee) company_family = None company_family = Company.objects.filter( employees__in=[pety_employee])[0] function_title = 'Мilk' plf_milk = PredictionLinearFunction(title=function_title) plf_milk.save() for i in Base.list_buy_milk()[:5]: #for i in Base.list_buy_milk(): fns_cheque = FNSCheque(is_manual=False, company=company_family, fns_dateTime=i['dateTime']) fns_cheque.save() for j in i['items']: e = FNSChequeElement(fns_cheque=fns_cheque, name=j['name'], quantity=j['quantity'], volume=j['volume'], sum=j['sum']) e.save() plf_milk.cheque_elements.add(e) plf_cheese = PredictionLinearFunction(title='Cheese') plf_cheese.save() for i in Base.list_buy_cheese(): fns_cheque = FNSCheque(is_manual=False, company=company_family, fns_dateTime=i['dateTime']) fns_cheque.save() for j in i['items']: e = FNSChequeElement(fns_cheque=fns_cheque, name=j['name'], quantity=j['quantity'], volume=j['volume'], sum=j['sum']) e.save() plf_cheese.cheque_elements.add(e) #проверить авто определение веса good_count = 0 for e in FNSChequeElement.objects.all(): if e.has_weight_from_title() and float( e.get_weight_from_title()) == float(e.volume): #if float(e.get_weight()) == float(e.volume * e.quantity): good_count += 1 if not e.get_title() in [ u'СЫР МАСКАР.80% 250ГР', u'СЫР ПЛ С ЛУКОМ 90Г', u'СЫР ПЛ ВОЛНА 45% 90Г', u'СЫР ПЛ ФЕТАКСА 400Г', u'СЫР ПЛ ВОЛНА 45% 90Г', u'СЫР ПЛ ВОЛНА 45% 90Г' ]: print e.get_title().encode('utf8') assert False self.assertEqual(6, good_count) #fetch milk_function = PredictionLinear([]) for element in PredictionLinearFunction.objects.filter( title=function_title): for i in element.elements(): milk_function.append(i) cheese_function = PredictionLinear([]) for element in PredictionLinearFunction.objects.filter(title='Cheese'): for i in element.elements(): cheese_function.append(i) self.assertEqual( 0.396, milk_function.average_weight_per_day_in_during_period()) delta_days_future = milk_function.days_future() self.assertEqual(10.135, delta_days_future) self.assertEqual( 0.097, cheese_function.average_weight_per_day_in_during_period()) self.assertEqual( 0.088, cheese_function.average_weight_per_day_from_first_buy_to_this_date( datetime.strptime("2020-06-02T10:00:00", '%Y-%m-%dT%H:%M:%S'))) self.assertEqual( 0.104, cheese_function.average_weight_per_day_from_first_buy_to_this_date( datetime.strptime("2020-06-03T10:00:00", '%Y-%m-%dT%H:%M:%S'))) self.assertEqual( 0.102, cheese_function.average_weight_per_day_from_first_buy_to_this_date( datetime.strptime("2020-06-04T10:00:00", '%Y-%m-%dT%H:%M:%S'))) delta_days_future = cheese_function.days_future() self.assertEqual(9.0, delta_days_future) ## for i in Base.list_buy_milk()[5:]: fns_cheque = FNSCheque(is_manual=False, company=company_family, fns_dateTime=i['dateTime']) fns_cheque.save() for j in i['items']: e = FNSChequeElement(fns_cheque=fns_cheque, name=j['name'], quantity=j['quantity'], volume=j['volume'], sum=j['sum']) e.save() plf_milk.cheque_elements.add(e) #fetch milk_function = PredictionLinear([]) for element in PredictionLinearFunction.objects.filter( title=function_title): for i in element.elements(): milk_function.append(i) self.assertEqual( 0.424, milk_function.average_weight_per_day_in_during_period()) delta_days_future = milk_function.days_future() self.assertEqual(8.333, delta_days_future)