def get(self, request, **kwargs): self.context['back'] = BreadcrumbsPath(request).before_page(request) all_names = CartridgeType.objects.all().order_by('pk') page_size = self.items_per_page() self.context['page_size'] = page_size self.context['items'] = self.pagination(all_names, page_size) return render(request, 'docs/types_list.html', self.context)
def change_password(request): """Смена пароля пользователя. """ context = {} context['back'] = BreadcrumbsPath(request).before_page(request) uid = request.GET.get('id', '') try: uid = int(uid) except ValueError: uid = 0 try: user_object = AnconUser.objects.get(pk=uid) except AnconUser.DoesNotExist: raise Http404 context['username'] = user_object.username if request.method == 'POST': form = ChangePassword(request.POST) if form.is_valid(): data_in_post = form.cleaned_data passwd = data_in_post.get('password1') if not settings.DEMO: # если выбран режим демонстрации, то менять пароль не разрешаем. user_object.set_password(passwd) user_object.save() return HttpResponseRedirect(reverse('auth:manage_users')) else: context['form'] = form else: context['form'] = ChangePassword() return render(request, 'accounts/change_password.html', context)
def add_firm(request): """ """ back = BreadcrumbsPath(request).before_page(request) if request.method == 'POST': form_obj = FirmTonerRefillF(request.POST) if form_obj.is_valid(): data_in_post = form_obj.cleaned_data m1 = FirmTonerRefill( firm_name=data_in_post['firm_name'], firm_city=data_in_post['firm_city'], firm_contacts=data_in_post['firm_contacts'], firm_address=data_in_post['firm_address'], firm_comments=data_in_post['firm_comments'], ) m1.save() messages.success( request, _('Firm "%(firm_name)s" success added.') % {'firm_name': data_in_post['firm_name']}) else: form_obj = FirmTonerRefillF() return render(request, 'index/add_firm.html', { 'form': form_obj, 'back': back })
def get(self, request, **kwargs): self.context['back'] = BreadcrumbsPath(request).before_page(request) all_c = City.objects.all().order_by('pk') page_size = self.items_per_page() self.context['page_size'] = page_size self.context['items'] = self.pagination(all_c, page_size) return render(request, 'docs/cities.html', self.context)
def edit_cartridge_comment(request): """Добавляем комментарий к картриджу. """ item_id = request.GET.get('id', '') back = BreadcrumbsPath(request).before_page(request) try: item_id = int(item_id) except ValueError: item_id = 0 try: cartridge_object = CartridgeItem.objects.get(pk=item_id) except CartridgeItem.DoesNotExist: raise Http404 if request.method == 'POST': form = EditCommentForm(data=request.POST) if form.is_valid(): cartridge_object.comment = form.cleaned_data.get('comment') cartridge_object.save() return HttpResponseRedirect(back) else: comment = cartridge_object.comment form = EditCommentForm(initial={'comment': comment}) return render(request, 'index/edit_cartridge_comment.html', { 'form': form, 'back': back })
def add_cartridge_name(request): back = BreadcrumbsPath(request).before_page(request) if request.method == 'POST': form_obj = AddCartridgeName(request.POST) if form_obj.is_valid(): data_in_post = form_obj.cleaned_data cart_name = data_in_post.get('cart_itm_name', '') cart_name = cart_name.strip() if CartridgeItemName.objects.filter( cart_itm_name__iexact=cart_name): # если имя расходника уже занято messages.error( request, _('%(cart_name)s already exists') % {'cart_name': cart_name}) else: # добавляем новый тип расходного материала form_obj.save() messages.success( request, _('%(cart_name)s success added') % {'cart_name': cart_name}) return HttpResponseRedirect(request.path) else: form_obj = AddCartridgeName() return render(request, 'index/add_name.html', { 'form': form_obj, 'back': back })
def edit_city(request): """Редактирование названия города. """ context = dict() context['back'] = BreadcrumbsPath(request).before_page(request) select = request.GET.get('select', 0) try: m1 = City.objects.get(pk=select) except City.DoesNotExist: return Http404 if request.method == 'POST': form = CityE(request.POST) if form.is_valid(): data_in_post = form.cleaned_data m1.city_name = data_in_post['city_name'] m1.save() messages.success( request, _('City "%(city)s" success edited.') % {'city': data_in_post['city_name']}) return redirect( reverse('docs:edit_city') + '?select=' + str(select)) else: context['form'] = CityE(request.POST) else: context['form'] = CityE(initial={ 'city_name': m1.city_name, }) return render(request, 'docs/edit_city.html', context)
def edit_firm(request): """ """ back = BreadcrumbsPath(request).before_page(request) firm_id = request.GET.get('select', '') firm_id = firm_id.strip() if firm_id: try: firm_id = int(firm_id) except ValueError: firm_id = 0 else: firm_id = 0 if request.method == 'POST': form_obj = FirmTonerRefillF(request.POST) if form_obj.is_valid(): data_in_post = form_obj.cleaned_data m1 = FirmTonerRefill.objects.get(pk=firm_id) m1.firm_name = data_in_post['firm_name'] m1.firm_city = data_in_post['firm_city'] m1.firm_contacts = data_in_post['firm_contacts'] m1.firm_address = data_in_post['firm_address'] m1.firm_comments = data_in_post['firm_comments'] m1.save(update_fields=[ 'firm_name', 'firm_city', 'firm_contacts', 'firm_address', 'firm_comments' ]) return HttpResponseRedirect(reverse('index:toner_refill')) try: firm = FirmTonerRefill.objects.get(pk=firm_id) except FirmTonerRefill.DoesNotExist: raise Http404 form_obj = FirmTonerRefillF( initial={ 'firm_name': firm.firm_name, 'firm_city': firm.firm_city, 'firm_contacts': firm.firm_contacts, 'firm_address': firm.firm_address, 'firm_comments': firm.firm_comments }) return render(request, 'index/edit_firm.html', { 'firm': firm, 'form': form_obj, 'back': back })
def add_empty_cartridge_from_barcode_scanner(request): """Добавление пустых РМ с сканера штрих кодов. """ if not request.user.departament: return render(request, 'index/ou_not_set.html', dict()) context = dict() context['debug'] = False back = BreadcrumbsPath(request).before_page(request) current_day = str(timezone.now().day) + '/' + str( timezone.now().month) + '/' + str(timezone.now().year) form = AddItemsFromBarCodeScanner() form.fields['set_date'].initial = current_day # отфильтровываем и показываем только договора поставки form.fields['doc'].queryset = SCDoc.objects.filter( departament=request.user.departament).filter(doc_type=1) form.fields['storages'].queryset = Storages.objects.filter( departament=request.user.departament) # выбор склада по умолчанию в выбранной организации default_sklad = Storages.objects.filter( departament=request.user.departament).filter(default=True) try: if default_sklad[0].pk: form.fields['storages'].initial = default_sklad[0].pk except IndexError: # если склад по-умолчанию не выбран, то пропускаем выбор склада pass # считываем данные для сессии if request.session.get('add_cartridges_empty_in_stock', False): # если в сессионной переменной уже что-то есть session_data = request.session.get('add_cartridges_empty_in_stock') else: # если сессионная basket_to_transfer_firm пуста или её нет вообще session_data = list() context['list_items'] = session_data context['form'] = form context['back'] = back context['action_type'] = 'empty' context['session_var'] = 'add_cartridges_empty_in_stock' #return render(request, 'index/add_cartridge_from_barcode_scanner.html', context) return render(request, 'index/add_empty_cartridge_from_barcode_scanner.html', context)
def from_firm_to_stock_with_barcode(request): """Возврат РМ из обслуживающей фирмы обратно на склад. """ context = dict() MYDEBUG = False context['mydebug'] = MYDEBUG back = BreadcrumbsPath(request).before_page(request) form = MoveItemsToStockWithBarCodeScanner() #form.fields['storages'].queryset = Storages.objects.filter(departament=request.user.departament) # выбор склада по умолчанию в выбранной организации #default_sklad = Storages.objects.filter(departament=request.user.departament).filter(default=True) #try: # if default_sklad[0].pk: # form.fields['storages'].initial = default_sklad[0].pk #except IndexError: # если склад по-умолчанию не выбран, то пропускаем выбор склада # pass # заполняем таблицу перемещаемых РМ значениями из сессии # это пригодится на случай случайной перезагрузки страницы пользователем session_data = request.session.get('basket_to_transfer_stock', False) show_list = list() if not session_data: session_data = [] initial_numbers = str() for cart_pk in session_data: initial_numbers += str(cart_pk) + ', ' try: cart_obj = CartridgeItem.objects.get(pk=cart_pk) except CartridgeItem.DoesNotExist: cart_obj = dict() else: cart_obj = { 'pk': cart_obj.pk, 'cart_number': cart_obj.cart_number, 'cart_name': str(cart_obj.cart_itm_name) } show_list.append(cart_obj) form.fields['numbers'].initial = initial_numbers show_list.reverse() context['show_list'] = show_list context['back'] = back context['form'] = form return render(request, 'index/from_firm_to_stock_with_barcode.html', context)
def edit_name(request): """ """ context = dict() name_id = request.GET.get('id', '') context['back'] = BreadcrumbsPath(request).before_page(request) if not name_id: raise Http404 try: name_id = int(name_id) except ValueError: name_id = 0 try: m1 = CartridgeItemName.objects.get(pk=name_id) except CartridgeItemName.DoesNotExist: raise Http404 if request.method == 'POST': form = EditName(request.POST) if form.is_valid(): data_in_post = form.cleaned_data cartName = data_in_post.get('cartName', '') cartType = data_in_post.get('cartType', '') comment = data_in_post.get('comment', '') # сохраняем изменения в БД m1.cart_itm_name = cartName m1.cart_itm_type = cartType m1.comment = comment m1.save() return HttpResponseRedirect(reverse('docs:view_names')) else: # если в веденных данных есть ошибка context['form'] = form else: # если пользователь перишёл через GET запрос form = EditName( initial={ 'cartName': m1.cart_itm_name, 'cartType': m1.cart_itm_type, 'comment': m1.comment }) context['form'] = form return render(request, 'docs/edit_name.html', context)
def toner_refill(request): """Список контрагентов, которым производим передачу РМ на заправку. """ BreadcrumbsPath(request) city_id = request.GET.get('city', '') cities = CityM.objects.all() try: city_id = int(city_id) except ValueError: city_id = 0 city = "" if city_id != 0: try: city = CityM.objects.get(pk=city_id) except CityM.DoesNotExist: raise Http404 if city: firms = FirmTonerRefill.objects.filter(firm_city=city) else: firms = FirmTonerRefill.objects.all() # завершаем работу с пагинацией new_list = [{'id': 0, 'city_name': _('Select all')}] for i in cities: tmp_dict = {'id': i.id, 'city_name': i.city_name} new_list.append(tmp_dict) cities = None if city_id: city_url_parametr = '?city=' + str(city_id) + '&' else: city_url_parametr = '?' return render( request, 'index/toner_refill.html', { 'cities': new_list, 'firms': firms, 'select': city_id, 'city_url': city_url_parametr, })
def add_city(request): """Добавление города в справочник. """ back = BreadcrumbsPath(request).before_page(request) if request.method == 'POST': form_obj = CityF(request.POST) if form_obj.is_valid(): data_in_post = form_obj.cleaned_data m1 = City(city_name=data_in_post['city_name']) m1.save() messages.success( request, _('City "%(city)s" success added.') % {'city': data_in_post['city_name']}) return redirect(reverse('docs:add_city')) else: form_obj = CityF(request.POST) else: form_obj = CityF() return render(request, 'docs/add_city.html', { 'form': form_obj, 'back': back })
def from_firm_to_stock(request): """Возврашаем заправленные расходники обратно на с клад с помошью мыши. """ context = dict() back = BreadcrumbsPath(request).before_page(request) checked_cartr = request.GET.get('select', '') tmp = '' list_cart = [] if checked_cartr: checked_cartr = checked_cartr.split('s') checked_cartr = [int(i) for i in checked_cartr] tmp = checked_cartr for cart_id in tmp: list_cart.append(CartridgeItem.objects.get(pk=cart_id)) list_length = len(list_cart) # преобразуем список в строку, для корректного отображения на html странице checked_cartr = str(checked_cartr) checked_cartr = checked_cartr[1:-1] else: # если кто-то зашел на страницу не выбрав расходники return HttpResponseRedirect(reverse('index:worked_firms')) context['checked_cartr'] = checked_cartr context['list_cart'] = list_cart context['list_length'] = list_length context['back'] = back # конструируем фильтр документов контрагентов tmp_cartridge = list_cart[ 0] # для примера получаем первый элемент в списке, из него извлекаем контрагента firm = tmp_cartridge.filled_firm form = FromFirmToStock() form.fields['doc'].queryset = SCDoc.objects.filter( departament=request.user.departament).filter(doc_type=2).filter( firm=firm) context['form'] = form if request.method == 'POST': form = FromFirmToStock(request.POST) if form.is_valid(): data_in_post = form.cleaned_data doc = data_in_post.get('doc') list_cplx = [] with transaction.atomic(): for inx in tmp: m1 = CartridgeItem.objects.get(pk=inx) # проверяем принадлежность перемещаемого РМ департаменту # пользователя. firm = str(m1.filled_firm) if m1.departament == request.user.departament: filled_firm = firm m1.filled_firm = None m1.cart_status = 1 m1.cart_date_change = timezone.now() m1.vote = False m1.cart_number_refills = int(m1.cart_number_refills) + 1 m1.save() repair_actions = request.POST.getlist('cart_' + str(inx)) list_cplx.append( (m1.id, str(m1.cart_itm_name), filled_firm, repair_actions, m1.cart_number)) if list_cplx: sign_tr_filled_cart_to_stock.send(sender=None, list_cplx=list_cplx, request=request) # очищаем сессионную переменную 'basket_to_transfer_stock' try: request.session.get('basket_to_transfer_stock', False) except: request.session['basket_to_transfer_stock'] = None else: request.session['basket_to_transfer_stock'] = None # генерируем акт возвращения РМ jsoning_list = [] money_sum = 0 for inx in tmp: cart_number = CartridgeItem.objects.get(pk=inx).cart_number cart_name = CartridgeItem.objects.get(pk=inx).cart_itm_name repair_actions = request.POST.getlist('cart_' + str(inx)) money_per_one = request.POST.getlist('cart_money_' + str(inx)) money_sum += str2float(money_per_one[0]) if money_per_one else 0 jsoning_list.append( [cart_number, str(cart_name), repair_actions, money_per_one]) jsoning_list = json.dumps(jsoning_list) money_sum = int(money_sum * 100) # устанавливаем потраченные деньги if doc: last_money = doc.spent last_money = last_money if last_money else 0 last_money += money_sum doc.spent = last_money doc.save() # генерируем номер акта передачи на основе даты и его порядкового номера sender_acts = RefillingCart.objects.filter( departament=request.user.departament).count() # генерируем новый номер if sender_acts: act_number = sender_acts + 1 act_number = str(timezone.now().year) + '_' + str(sender_acts) else: act_number = str(timezone.now().year) + '_1' # сохраняем в БД акт передачи РМ на заправку act_doc = RefillingCart( doc_type=2, # документ возвращения с заправки number=act_number, date_created=timezone.now(), firm=firm, user=str(request.user), json_content=jsoning_list, money=money_sum, departament=request.user.departament, parent_doc=doc) act_doc.save() return HttpResponseRedirect(reverse('index:worked_firms')) return render(request, 'index/from_firm_to_stock.html', context)
def add_type(request): """Добавление нового типа расходника, а также редактирование существующего """ back = BreadcrumbsPath(request).before_page(request) cart_type_id = request.GET.get('id', '') if cart_type_id: try: cart_type_id = int(cart_type_id) except ValueError: cart_type_id = 0 try: m1 = CartridgeType.objects.get(pk=cart_type_id) except CartridgeType.DoesNotExist: raise Http404 else: form_update = True else: form_update = False if request.method == 'POST': if form_update: form_obj = AddCartridgeType(request.POST, update=form_update, initial={ 'cart_type': m1.cart_type, 'comment': m1.comment }) else: form_obj = AddCartridgeType(request.POST, update=form_update) if form_obj.is_valid(): data_in_post = form_obj.cleaned_data cart_type = data_in_post['cart_type'] cart_type_comment = data_in_post['comment'] if cart_type_id: m1.cart_type = cart_type m1.comment = cart_type_comment m1.save() messages.success( request, _('%(cart_type)s success save') % {'cart_type': cart_type}) else: m1 = CartridgeType(cart_type=cart_type, comment=cart_type_comment) m1.save() messages.success( request, _('New type %(cart_type)s success added') % {'cart_type': cart_type}) return HttpResponseRedirect(request.path) else: pass else: if cart_type_id: form_obj = AddCartridgeType(initial={ 'cart_type': m1.cart_type, 'comment': m1.comment }, update=form_update) else: form_obj = AddCartridgeType(update=form_update) return render(request, 'index/add_type.html', { 'form': form_obj, 'cart_type_id': cart_type_id, 'back': back })
def evaluate_service(request): """Оценить качество обслуживания контрагентом. """ context = dict() context['back'] = BreadcrumbsPath(request).before_page(request) cart_id = request.GET.get('id', 0) cart_id = str2int(cart_id) try: node = CartridgeItem.objects.get(pk=cart_id) except CartridgeItem.DoesNotExist: raise Http404 # проверяем принадлежность перемещаемого РМ департаменту # пользователя. try: root_ou = request.user.departament des = root_ou.get_descendants() except: pass if node.vote: context['error'] = True context['msg'] = _('Work has already estimated.') return render(request, 'index/evaluate_service.html', context) if node.departament in des: obj_evs = Events.objects.filter( departament=request.user.departament.pk).filter( cart_number=node.cart_number) obj_evs = obj_evs.filter(event_type='TF').order_by('-pk') if obj_evs: context['error'] = False firm_name = obj_evs[0].event_firm context['cart_id'] = node.pk context['cart_number'] = node.cart_number tmp_list = firm_name.split(':') context['firm'] = tmp_list[0] if len(tmp_list) == 1: # оставлена возможнасть поиска по имени для старых релизов программы try: context['firm_id'] = FirmTonerRefill.objects.get( firm_name=firm_name).pk except: context['firm_id'] = -1 elif len(tmp_list) == 2: firm_id = str2int(tmp_list[1]) try: context['firm_id'] = FirmTonerRefill.objects.get( pk=firm_id).pk except: context['firm_id'] = -1 else: context['firm_id'] = -1 else: context['error'] = True context['msg'] = _( 'An object with number %(cart_num)s is not transmitted to the service.' ) % { 'cart_num': node.cart_number } else: context['error'] = True context['msg'] = _( 'An object with number %(cart_num)s belong to a different organizational unit.' ) % { 'cart_num': node.cart_number } return render(request, 'index/evaluate_service.html', context)
def delivery(request): """Списки договоров на поставку расходников """ context = {} context['back'] = BreadcrumbsPath(request).before_page(request) # выбираем только договора обслуживания и поставки docs = SCDoc.objects.filter(departament=request.user.departament).filter( Q(doc_type=1) | Q(doc_type=2)).order_by('-pk') context['docs'] = docs if request.method == 'POST': form = AddDoc(request.POST) if form.is_valid(): data_in_post = form.cleaned_data if request.GET.get('select', ''): # если пользователь производит редактирование и сохранение документа doc_id = request.GET.get('select', '') try: doc_id = int(doc_id) except ValueError: doc_id = 0 try: doc = SCDoc.objects.get(pk=doc_id) except SCDoc.DoesNotExist: raise Http404 # производим сохранения изменений doc.number = data_in_post.get('number', '') doc.date_of_signing = data_in_post.get('date', '') doc.firm = data_in_post.get('firm', '') doc.title = data_in_post.get('title', '') doc.short_cont = data_in_post.get('short_cont', '') doc_type = data_in_post.get('doc_type', '') doc.money = data_in_post.get('money', '') doc.save() messages.success( request, _('%(doc_num)s success saved.') % {'doc_num': doc.number}) else: # если пользователь просто создаёт новый документ m1 = SCDoc.objects.create( number=data_in_post.get('number', ''), date_of_signing=data_in_post.get('date', 0), date_created=timezone.now(), firm=data_in_post.get('firm', ''), title=data_in_post.get('title', ''), short_cont=data_in_post.get('short_cont', ''), money=data_in_post.get('money', ''), doc_type=data_in_post.get('doc_type', ''), departament=request.user.departament) messages.success( request, _('New %(doc_num)s success created.') % {'doc_num': data_in_post.get('number', '')}) context['form'] = form return HttpResponseRedirect(request.path) else: context['form'] = form elif request.method == 'GET': if request.GET.get('select', ''): context['edit'] = True doc_id = request.GET.get('select', '') try: doc_id = int(doc_id) except ValueError: doc_id = 0 try: doc = SCDoc.objects.get(pk=doc_id) except SCDoc.DoesNotExist: raise Http404 if doc.date_of_signing: date = str(doc.date_of_signing.day) + '/' + str( doc.date_of_signing.month) + '/' + str( doc.date_of_signing.year) else: date = '' money = doc.money if doc.money else 0 money /= 100 form = AddDoc( initial={ 'number': doc.number, 'title': doc.title, 'money': money, 'short_cont': doc.short_cont, 'firm': doc.firm, 'doc_type': doc.doc_type, 'date': date }) context['form'] = form elif request.GET.get('delete', ''): # ветка для удаления документа doc_id = request.GET.get('delete', '') try: doc_id = int(doc_id) except ValueError: doc_id = 0 try: doc = SCDoc.objects.get(pk=doc_id) except SCDoc.DoesNotExist: raise Http404 doc_number = doc.number doc.delete() messages.error( request, _('Document %(doc_number)s deleted!') % {'doc_number': doc_number}) return HttpResponseRedirect(reverse('docs:delivery')) elif request.GET.get('show', ''): # ветка для просотра одного конкретного договора doc_id = request.GET.get('show', '') try: doc_id = int(doc_id) except ValueError: doc_id = 0 try: doc = SCDoc.objects.filter( departament=request.user.departament).filter(pk=doc_id) except SCDoc.DoesNotExist: raise Http404 context['not_show_form'] = True context['docs'] = doc else: form = AddDoc() context['form'] = form else: # метод не поддерживается pass return render(request, 'docs/delivery.html', context)
def dispatch(self, *args, **kwargs): BreadcrumbsPath(args[0]) return super(handbook, self).dispatch(*args, **kwargs)
def view_cartridge_events(request): """Просмотр событий происходящих с данным картриджем. """ context = dict() context['back'] = BreadcrumbsPath(request).before_page(request) return render(request, 'events/view_cartridge_events.html', context)
def add_empty_cartridge(request): """Добавление пустых картриджей. """ if not request.user.departament: return render(request, 'index/ou_not_set.html', dict()) context = {} back = BreadcrumbsPath(request).before_page(request) current_day = str(timezone.now().day) + '/' + str( timezone.now().month) + '/' + str(timezone.now().year) context['back'] = back form_obj = AddItems() form_obj.fields['set_date'].initial = current_day # отфильтровываем и показываем только договора поставки form_obj.fields['doc'].queryset = SCDoc.objects.filter( departament=request.user.departament).filter(doc_type=1) form_obj.fields['storages'].queryset = Storages.objects.filter( departament=request.user.departament) # выбор склада по умолчанию в выбранной организации default_sklad = Storages.objects.filter( departament=request.user.departament).filter(default=True) try: if default_sklad[0].pk: form_obj.fields['storages'].initial = default_sklad[0].pk except IndexError: # если склад по-умолчанию не выбран, то пропускаем выбор склада pass context['form'] = form_obj session_data = request.session.get('empty_cart_list') if not session_data: # если в сессии нужные данные отсутствуют, то сразу рендерим форму return render(request, 'index/add_empty_cartridge.html', context) session_data = json.loads(session_data) simple_cache = dict() list_names = CartridgeItemName.objects.all() for elem in list_names: simple_cache[elem.pk] = elem.cart_itm_name list_items = list() for elem in session_data: try: title = str(SCDoc.objects.get(pk=elem[1])) except SCDoc.DoesNotExist: title = '' # избвавляемся от лишних апострофов при конвертрировании массива чисел # в строку acumulyator = str() for items in elem[2]: acumulyator += str(items) + ', ' list_items.append({ 'name': simple_cache.get(elem[0]), 'numbers': acumulyator, 'title': title }) context['session'] = render_to_string('index/add_over_ajax.html', context={'list_items': list_items}) return render(request, 'index/add_empty_cartridge.html', context)