Ejemplo n.º 1
0
async def task_sign(call: CallbackQuery):
    # await call.answer(cache_time = 60)
    # print("task_sign id = {}".format(call.from_user.id))
    user_id = call.from_user.id
    enquiry = Enquiry(user_id)
    entities = enquiry.get_entities_for_paying("УПД подписан", "Нет")
    bonus = 0
    count_entities = 0
    for entity in entities:
        bonus += int(entity["f81291"])
        count_entities += 1
    # print("entities = {}".format(entities))
    # print("bonus = {}".format(bonus))
    summary_message = "Исполнитель <b>{}</b> запросил выплату в размере <b>{}</b> рублей по следующим заявкам, в количестве <b>{}</b> шт.".format(
        entities[0]["f79831"], bonus, count_entities)

    for manager in MANAGERS:
        await bot.send_message(manager, summary_message)
        for entity in entities:
            # print(format_enquiry_for_paying(entity))
            await bot.send_message(manager, format_enquiry_for_paying(entity))

    await call.answer(
        "Запрос на выплату в размере {} рублей по заявкам, в количестве {} шт. - отправлен"
        .format(bonus, count_entities),
        show_alert=True)  #, cache_time = 120
Ejemplo n.º 2
0
async def statistics(message: Message, last_month = False):
	# print(f"statistics_current_month -> {message.from_user.id}")
	# print(f"statistics_current_month -> last_month = {last_month}")
	# await message.delete()
	enquiry = Enquiry(message.from_user.id)
	# first_date, end_date = create_date(last_month = last_month)
	count_setup_status = len(get_records(enquiry.get_entities_for_statistics(STATUS_SETUP), last_month = last_month))
	# print('Заявок со статусом "Установлено" {} шт.'.format(count_setup_status))
	entities = get_records(enquiry.get_entities_for_statistics(STATUS_UPD_SIGNED), last_month = last_month)
	amount = 0
	count = 0
	for entity in entities:
		amount += int(entity["f81291"])
		count += 1
	# print('Заявок со статусом "УПД подписано" {} шт., на общую сумму {} руб.'.format(count, amount))
	entities = get_records(enquiry.get_entities_for_payed(), last_month = last_month)
	payed_amount = 0
	payed_count = 0
	for entity in entities:
		payed_amount += int(entity["f81291"])
		payed_count += 1
	strings = ['{}  Заявок со статусом "Установлено" - <b>{}</b> шт.'.format(emojize(":one:"), count_setup_status),
	           '{}  Заявок со статусом "УПД подписано" - <b>{}</b> шт., на общую сумму - <b>{}</b> руб.'.format(emojize(":two:"), count, amount),
	           '{}  Оплачено всего <b>{}</b> заявок на сумму <b>{}</b> руб.'.format(emojize(":three:"), payed_count, payed_amount)
	           ]
	# if last_month:
	# 	strings.insert(0, "<b>Предыдущий месяц</b>")
	# else:
	# 	strings.insert(0, "<b>Текущий месяц</b>")
	await message.answer("\n".join(strings), reply_markup = statistics_menu)
Ejemplo n.º 3
0
async def task_done_photo(message: types.Message, state: FSMContext):
    data_state = await state.get_data()
    id_task = data_state.get("id_task")
    date_day = (lambda x: "0" + x
                if len(x) == 1 else x)(str(datetime.date.today().day))
    date_month = (lambda x: "0" + x
                  if len(x) == 1 else x)(str(datetime.date.today().month))
    date_year = str(datetime.date.today().year)

    file_id = None
    content_type = message.content_type

    if content_type == "photo":
        file_id = message.photo[-1].file_id
    if content_type == "document":
        if message.document.mime_type.__contains__('image'):
            file_id = message.document.file_id

    if file_id is None:
        # await message.answer("Загруженный файл не фотография.\nПовторите попытку!")
        await message.answer(
            "Заявка № <b>{}</b>\nФайл с фотографией УПД не загружен и не сохранён."
            .format(id_task))
        file_path = ""
    else:
        await message.answer("Минутку, произвожу запись в БД...")
        dest_file = "photo_upd_{}{}{}_{}.jpg".format(date_year, date_month,
                                                     date_day, id_task)
        source_file = await bot.get_file(file_id)
        # print(f"file_link = {dest_file}")
        file_path, is_saved = CloudStorage.save_file(source_file["file_path"],
                                                     dest_file)
        await message.delete()
        if is_saved:
            await message.answer(
                "Заявка № <b>{}</b>\n{}  Файл успешно сохранён и доступен по ссылке - {}"
                .format(id_task, emojize(":white_check_mark:"), file_path),
                disable_web_page_preview=True)
        else:
            await message.answer(
                "Заявка № <b>{}</b>\n{}  Файл не удалось сохранить.".format(
                    id_task, emojize(":bangbang:")))
    enquiry = Enquiry(message.from_user.id)

    is_done = enquiry.update_table(id=id_task,
                                   f78321="УПД подписан",
                                   f81301=file_path)
    if is_done:
        await message.answer(
            "{}  Запись в БД успешно обновлена! Заявка № <b>{}</b>, установлена в статус - <b>УПД подписан</b>"
            .format(emojize(":white_check_mark:"), str(id_task)),
            reply_markup=choice_request())
    else:
        await message.answer(
            "Заявка № <b>{}</b>{} Запись в БД завершилось ошибкой!".format(
                id_task, emojize(":bangbang:")))

    await state.finish()
Ejemplo n.º 4
0
async def task_to_plan_put_date(current_date, message, state):
    data_state = await state.get_data()
    id_task = data_state.get("id_task")
    date_full = str(current_date).split(".")
    await message.delete()
    if len(date_full) == 3:
        if date_full[0].isdigit() and date_full[1].isdigit(
        ) and date_full[2].isdigit() and len(date_full[0]) == 2 and len(
                date_full[1]) == 2 and len(date_full[2]) == 4:
            # print("date_full[1] = {}".format(len(date_full[1])))
            date_day = date_full[0]
            date_month = date_full[1]
            date_year = date_full[2]
            full_date = "{}-{}-{} 00:00:00".format(date_year, date_month,
                                                   date_day)
            short_date = "{}.{}.{}".format(date_day, date_month, date_year)
            # await state.update_data(date_day = date_day, date_month = date_month, date_year = date_year)

            await state.finish()
            enquiry = Enquiry(message.from_user.id)
            # enquiry = Enquiry('1771817746')
            # full_date = "2021-02-02 00:00:00"
            is_done = enquiry.update_table(id=id_task,
                                           f78311=full_date,
                                           f78321="Запланирован выезд")
            # is_done = True
            if is_done:
                await message.answer(
                    "{} Заявка № <b>{}</b>, успешно запланирована на дату {}".
                    format(emojize(":white_check_mark:"), str(id_task),
                           short_date),
                    reply_markup=inline_type_request_menu())
            else:
                await message.answer(
                    "Заявка № <b>{}</b>\n{} Запись в БД завершилось ошибкой!".
                    format(id_task, emojize(":bangbang:")))
        else:
            await message.answer(
                "Заявка № <b>{}</b>\n{}  Вы ввели неверную дату, дата должна содержать только цифры.\n"
                "Введите плановую дату исполнения в формате дд.мм.гггг:".
                format(id_task, emojize(":exclamation:")))
    else:
        await message.answer(
            "Заявка № <b>{}</b>\n{}  Вы ввели неверную дату, "
            "пожалуйста, введите плановую дату исполнения в формате дд.мм.гггг:"
            .format(id_task, emojize(":exclamation:")))
Ejemplo n.º 5
0
async def callback_paginator_for_paying(call: CallbackQuery,
                                        state: FSMContext):
    # print(f'callback_paginator  for paying -> {str(call.from_user.id)}')
    await state.reset_state(with_data=False)
    call_data = call.data
    state_name = ""
    # print(f"call_data = {call_data}")
    if call_data == 'signed':
        page = 1
        state_name = get_state_name(str(call_data))
        enquiries = Enquiry(call.from_user.id)
        # fetching data from DB
        entities = enquiries.get_entities_for_paying(state_name, "Нет")
        await state.update_data(request_data=entities,
                                state_name=state_name,
                                call_data=call_data)
        data_state = await state.get_data()
        request_data = data_state.get("request_data")
    # print(f"request_data = {request_data}")
    else:
        data_state = await state.get_data()
        request_data = data_state.get("request_data")
        # print(f"request_data = {request_data}")
        page = int(call.data.split('&')[1])
    # print(f'page={str(page)}')
    paginator = InlineKeyboardPaginator(
        0 if request_data is None else len(request_data),
        current_page=int(page),
        data_pattern='page&{page}')

    if len(request_data) if request_data is not None else 0 > 0:
        if data_state.get("call_data") == 'signed':
            paginator.add_after(
                InlineKeyboardButton(
                    text="{}  Запросить выплату для всех выполненных заявок".
                    format(emojize(":bell:")),
                    callback_data="task_sign&{}".format(request_data[
                        page - 1]["id"] if len(request_data) > 0 else [])))

    paginator.add_after(
        InlineKeyboardButton("{}  Назад".format(
            emojize(":leftwards_arrow_with_hook:")),
                             callback_data="choice_buttons"))
    await call.message.edit_text(format_enquiry_for_paying(
        request_data[page - 1] if len(request_data) > 0 else []),
                                 reply_markup=paginator.markup)
Ejemplo n.º 6
0
async def task_edit_distance_done(message: Message, state: FSMContext):
	distance_done = message.text
	if distance_done.isdigit():
		# await state.update_data(distance = distance_done)
		data_state = await state.get_data()
		id_task = data_state.get("id_task")
		enquiry = Enquiry()
		
		is_done = enquiry.update_table(id = id_task, f78361 = int(distance_done))
		if is_done:
			await message.answer("Заявка № <b>{}</b>\n{} Пробег по заявке № <b>{}</b> успешно отредактирован".format(id_task, emojize(":white_check_mark:"), str(id_task)),
			                     reply_markup = inline_back_to_setup())
		else:
			await message.answer("Заявка № <b>{}</b>\n{} Запись в БД завершилось ошибкой!".format(id_task, emojize(":hangbang:")))
		
		await state.finish()
	else:
		await message.answer("{}  Растояние пробега должно быть числом.\nВведите растояние пробега в км (ноль, если заявка в черте города):".format(emojize(":exclamation:")),
		                     reply_markup = inline_back_to_setup())
Ejemplo n.º 7
0
async def task_act_photo(message: Message, state: FSMContext):
	data_state = await state.get_data()
	id_task = data_state.get("id_task")
	content_type = message.content_type
	file_id = None
	await message.delete()
	
	if content_type == "photo":
		file_id = message.photo[-1].file_id
	if content_type == "document":
		if message.document.mime_type.__contains__('image'):
			file_id = message.document.file_id
	
	if file_id is None:
		await message.answer("Заявка № <b>{}</b>\n{}  Загруженный файл не фотография.\nПовторите попытку!".format(id_task, emojize(":exclamation:")), reply_markup =
		inline_back_to_setup())
		# await message.answer("Файл с фотографией акта не загружен и не сохранён.")
		file_path = ""
	else:
		# await message.answer("Минутку, произвожу запись в БД...")
		source_file = await bot.get_file(file_id)
		# print(f"file_link = {file_link}")
		file_path, is_saved = CloudStorage.save_file(source_file["file_path"], create_filename("photo_act", id_task))
		if is_saved:
			# await message.answer("{}  Файл успешно сохранён и доступен по ссылке - {}".format(emojize(":white_check_mark:"), file_path), disable_web_page_preview = True)
			enquiry = Enquiry()
			is_done = enquiry.update_table(id = id_task, f81381 = file_path)
			if is_done:
				await message.answer("{} Акт выполненных работ по заявке № <b>{}</b>, успешно загружен.".
				                     format(emojize(":white_check_mark:"), str(id_task)), reply_markup = inline_back_to_setup())
			
			else:
				await message.answer("Заявка № <b>{}</b>\n{} Запись в БД завершилось ошибкой!".format(id_task, emojize(":bangbang:")), reply_markup = inline_back_to_setup())
		
		else:
			await message.answer("Заявка № <b>{}</b>\n{}  Файл не удалось сохранить.".format(id_task, emojize(":bangbang:")), reply_markup = inline_back_to_setup())
		await state.finish()
		await message.delete()
Ejemplo n.º 8
0
async def task_done_photo(message: types.Message, state: FSMContext):
    data_state = await state.get_data()
    id_task = data_state.get("id_task")
    distance = data_state.get("distance")
    date_day = data_state.get("date_day")
    date_month = data_state.get("date_month")
    date_year = data_state.get("date_year")
    full_date = "{}-{}-{} 00:00:00".format(date_year, date_month, date_day)

    file_id = None
    content_type = message.content_type

    if content_type == "photo":
        file_id = message.photo[-1].file_id
    if content_type == "document":
        if message.document.mime_type.__contains__('image'):
            file_id = message.document.file_id

    if file_id is None:
        # await message.answer("Загруженный файл не фотография.\nПовторите попытку!")
        await message.answer(
            "Заявка № <b>{}</b>\nФайл с фотографией акта не загружен и не сохранён."
            .format(id_task))
        file_path = ""
    else:
        await message.answer("Минутку, произвожу запись в БД...")
        dest_file = "photo_act_{}{}{}_{}.jpg".format(date_year, date_month,
                                                     date_day, id_task)
        source_file = await bot.get_file(file_id)
        # print(f"file_link = {file_link}")
        file_path, is_saved = CloudStorage.save_file(source_file["file_path"],
                                                     dest_file)
        await message.delete()
        if is_saved:
            await message.answer(
                "Заявка № <b>{}</b>\n{}  Файл успешно сохранён и доступен по ссылке - {}"
                .format(id_task, emojize(":white_check_mark:"), file_path),
                disable_web_page_preview=True)
        else:
            await message.answer(
                "Заявка № <b>{}</b>\n{}  Файл не удалось сохранить.".format(
                    id_task, emojize(":hangbang:")))
    enquiry = Enquiry(message.from_user.id)
    # full_date = "2021-02-02 00:00:00"
    # distance = 1
    is_done = enquiry.update_act(id=id_task,
                                 f78361=int(distance),
                                 f78311=full_date,
                                 f78321="Установлено",
                                 f81381=file_path)
    if is_done:
        await message.answer(
            "{} Запись в БД успешно обновлена! Заявка № <b>{}</b>, установлена в статус - <b>Установлено</b>"
            .format(emojize(":white_check_mark:"), str(id_task)),
            reply_markup=choice_request())
    else:
        await message.answer(
            "Заявка № <b>{}</b>\n{} Запись в БД завершилось ошибкой!".format(
                id_task, emojize(":hangbang:")))

    await state.finish()
Ejemplo n.º 9
0
async def callback_paginator(call: CallbackQuery, state: FSMContext):
    # print(f'callback_paginator -> {str(call.from_user.id)}')
    await state.reset_state(with_data=False)
    call_data = call.data
    state_name = ""
    # print(f"call_data = {call_data}")

    if call_data == 'assigned_to' or call_data == 'setup':
        page = 1
        state_name = get_state_name(str(call_data))
        enquiries = Enquiry(call.from_user.id)
        # enquiries = Enquiry('1771817746')
        # fetching data from DB
        entities = enquiries.get_entities(state_name)
        if call_data == "assigned_to":
            second_entities = enquiries.get_entities(
                get_state_name("trip_planned"))
            entities += second_entities
        await state.update_data(request_data=entities,
                                state_name=state_name,
                                call_data=call_data)
        data_state = await state.get_data()
        request_data = data_state.get("request_data")
    # print(f"request_data = {request_data}")
    else:
        data_state = await state.get_data()
        request_data = data_state.get("request_data")
        # print(f"request_data = {request_data}")
        page = int(call.data.split('#')[1])
    # print(f'page={str(page)}')
    paginator = InlineKeyboardPaginator(
        0 if request_data is None else len(request_data),
        current_page=int(page),
        data_pattern='page#{page}')

    if len(request_data) if request_data is not None else 0 > 0:
        if data_state.get("call_data") == 'assigned_to':
            # print("task_assign_to#{}".format(request_data[0]["id"]))
            paginator.add_after(
                InlineKeyboardButton(
                    text="{}  Запланировать".format(emojize(":clipboard:")),
                    callback_data="task_to_plan#{}".format(request_data[
                        page - 1]["id"] if len(request_data) > 0 else [])))
            paginator.add_after(
                InlineKeyboardButton(
                    text="{}  Закрыть заявку".format(emojize(":closed_book:")),
                    callback_data="task_close_inquire#{}".format(request_data[
                        page - 1]["id"] if len(request_data) > 0 else [])))
        if data_state.get("call_data") == 'setup':
            # print("task_setup#{}".format(request_data[0]["id"]))
            paginator.add_after(
                InlineKeyboardButton(
                    text="{}  Редактировать пробег".format(emojize(":car:")),
                    callback_data="task_edit_distance#{}".format(request_data[
                        page - 1]["id"] if len(request_data) > 0 else [])))
            paginator.add_after(
                InlineKeyboardButton(
                    text="{}  Загрузить акт".format(
                        emojize(":page_facing_up:")),
                    callback_data="task_edit_act#{}".format(request_data[
                        page - 1]["id"] if len(request_data) > 0 else [])))
            paginator.add_after(
                InlineKeyboardButton(
                    text="{}  Загрузить УПД".format(emojize(":inbox_tray:")),
                    callback_data="task_edit_upd#{}".format(request_data[
                        page - 1]["id"] if len(request_data) > 0 else [])))

    paginator.add_after(
        InlineKeyboardButton(text="{}  Назад".format(
            emojize(":leftwards_arrow_with_hook:")),
                             callback_data="choice_buttons"))
    await call.message.edit_text(
        format_enquiry(request_data[page -
                                    1] if len(request_data) > 0 else []),
        reply_markup=paginator.markup)