Текстовый файл: одна работа на строку, название и цена разделены табуляцией.
Снятые клиенты не отображаются в списках и не участвуют в подсчётах.
Открой HTML-файл в Chrome, нажми меню (⋮) → «Добавить на главный экран». Приложение появится как иконка и будет открываться без адресной строки. Интернет для работы не нужен.
⬆ Импорт — загрузить ранее сохранённый JSON-файл резервной копии. Текущие данные будут заменены.
⬇ Экспорт — сохранить все данные в JSON-файл на устройство. Делай периодически: данные хранятся в памяти браузера и пропадут при очистке кэша.
? — эта справка.
Справочник всех видов работ с ценой за единицу. Отсюда выбираются позиции при создании обращения и при заполнении причины вызова.
Строка поиска фильтрует список по названию работы — курсор не сбрасывается при вводе. Кнопка + добавляет новую работу. ✏️ редактирует, 🗑️ удаляет.
Свёрнутая карточка показывает название, множитель ×1.5, телефон первого контакта и адрес. Тап раскрывает карточку.
Кнопки управления в правом нижнем углу:
+ — добавить нового клиента.
⇅ — свернуть или развернуть все карточки разом. Если все раскрыты — сворачивает, иначе разворачивает. Учитывает текущий фильтр и поиск.
Фильтры под строкой поиска:
Все — полный список.
🟡 В работе — только клиенты с незавершёнными обращениями.
🔴 Неопл. — только клиенты с неоплаченными обращениями. У свёрнутых карточек отображается сумма долга и количество обращений. Над нижним меню — общая сумма по всем видимым клиентам. Кнопки ⇅ и + поднимаются над этой полосой.
✅ Сделано — только клиенты с оплаченными обращениями.
При выборе фильтра карточки раскрываются автоматически и показывают только подходящие записи. На кнопках отображается количество таких обращений.
Поиск работает по названию организации, адресу, именам, должностям и телефонам контактных лиц.
Открываются кнопкой ⚙️ в нижнем меню. Настройки хранятся отдельно от базы данных и не затрагиваются при импорте/экспорте.
Показывать множитель — управляет видимостью бейджа ×1.5 в шапке карточки клиента. Удобно отключить, если множитель у всех клиентов одинаковый.
Шапка счёта — текст, который появляется перед счётом при отправке: реквизиты, имя специалиста, телефон и т.п.
Подвал счёта — текст после итоговой суммы: реквизиты для оплаты, подпись, пожелания.
Скрытые клиенты — список всех клиентов с галочками. Снятые клиенты не отображаются в основном списке, их обращения не попадают в счётчики фильтров и не учитываются в общей сумме «Не оплачено». Галочку можно вернуть в любой момент — данные не удаляются.
Кнопка «📄 Счёт» появляется в раскрытой карточке клиента только при активном фильтре 🔴 Неопл. — когда есть что выставлять.
Открывается модальное окно со списком всех неоплаченных обращений. Каждая работа показана с количеством и суммой — галочкой можно исключить любую позицию из счёта. Итог пересчитывается в реальном времени.
Выезды сгруппированы по дате и причине. Шапка и подвал добавляются из настроек. Формат текста:
📤 Поделиться — открывает системный диалог выбора приложения. Текст вставляется в новое сообщение или письмо — ничего не отправляется автоматически.
📋 Скопировать — копирует текст в буфер обмена. Если буфер недоступен (небезопасный контекст) — показывается текстовое поле для ручного копирования.
Шапку и подвал счёта (реквизиты, подпись, реквизиты оплаты) можно настроить в разделе ⚙️ Настройки.
Название — имя или название организации.
Адрес — адрес объекта.
Множитель — коэффициент наценки, применяется ко всем работам этого клиента по умолчанию. Например, 1.5 означает +50% к прайсовой цене.
Контактные лица — можно добавить любое количество. Каждый контакт: имя, должность (директор, бухгалтер, начальник отдела...), телефон. В раскрытой карточке они показываются списком: должность · имя · телефон.
Заметки — произвольный текст о клиенте.
Кнопка «+ Добавить обращение» внутри карточки открывает полноэкранный редактор. Тап на существующее обращение открывает его для редактирования.
Статусы обращения:
В работе — янтарный фон, работа ещё не завершена.
Не оплачено — красный фон, выполнено но не оплачено.
Оплачено — без цвета, закрытая история.
Причина вызова — текстовое поле. Кнопка «📋 Из прайса» открывает список работ: тап вставляет название в поле. Если поле уже заполнено — текст добавляется через запятую. Можно вставить несколько позиций подряд и затем отредактировать вручную.
Каждая строка работы содержит три поля: Кол-во, Множитель, Итого ₽.
Автоматический режим (поле итого синее): итого = цена из прайса × кол-во × множитель. Множитель наследуется от клиента, но для каждой строки его можно изменить отдельно.
Ручной ввод: если вписать сумму прямо в поле Итого, оно становится янтарным. Множитель тоже становится янтарным со значением 0 и подписью «РУЧ. ВВОД» — сигнал, что автоматический расчёт отключён для этой строки.
Общий итог внизу — сумма всех строк, с учётом ручных значений.
В браузере: данные хранятся в localStorage. При очистке кэша браузера данные пропадут. Рекомендуется периодически делать экспорт (кнопка ⬇ в шапке).
В APK-версии: данные автоматически сохраняются во внутреннюю папку приложения (файл ito_data.json) при каждом изменении и при сворачивании. Папка не видна в файловом менеджере, но данные не зависят от очистки кэша браузера и сохраняются между запусками. Дополнительно данные дублируются в localStorage.
Кнопка ⬇ Экспорт создаёт файл резервной копии с датой в имени и открывает диалог «Поделиться» — можно отправить в Telegram, на почту, сохранить в Google Drive или Downloads. Это единственный способ получить файл с данными на руки.
Кнопка ⬆ Импорт — загрузить ранее сохранённый файл. Текущие данные при импорте заменяются полностью. Сразу после импорта появляется уведомление со ссылкой «Отменить» — в течение 8 секунд можно откатить замену и вернуть предыдущее состояние базы.
Открываются кнопкой ⚙️ в нижнем меню. Закрываются стрелкой ‹ или системной кнопкой «Назад».
Показывать множитель — включает или скрывает бейдж ×1.5 в шапке карточки клиента. Удобно отключить, если множитель у всех клиентов одинаковый.
Шапка счёта — текст, который добавляется перед названием клиента при формировании счёта. Подходит для реквизитов: имя ИП, ИНН, телефон.
Подвал счёта — текст, который добавляется после итоговой суммы. Подходит для реквизитов оплаты, подписи, благодарности.
Скрытые клиенты — список всех клиентов с галочками. Снятая галочка убирает клиента из основного списка, его обращения не учитываются в счётчиках фильтров и в полосе общей суммы. Данные клиента и его история сохраняются — можно вернуть галочку в любой момент.
IT Аутсорс — инструмент учёта клиентов, обращений и расчёта стоимости работ для выездного IT-специалиста.
Разработано в CheshirCa Nest.
Автор: Дядька Чешир
Связь:
📧 cheshirca@gmail.com
✈️ @CheshirCa в Telegram
v1.23 — текстовая выгрузка и импорт прайса в настройках; отмена создания и удаление обращений.
v1.22 — полоса «Всего не оплачено» скрывается при переключении на вкладку Прайс.
v1.21 — «выезд» переименован в «обращение»; вкладка «⚙️ Настройки» в нижнем меню: шапка и подвал счёта, переключатель множителя в карточках, скрытие клиентов из списков и подсчётов.
v1.20 — валидация базы при загрузке из хранилища; recovery-кнопка «Сбросить» при ошибке рендера; резервная копия и откат после импорта (8 сек); защита localStorage от QuotaExceededError; ошибки Share переведены на toast.
v1.19 — аудит надёжности: toast-уведомление при сбое записи в файл на Android; углублённая валидация импорта (contacts[], works[], Number.isFinite, формат даты, проверка cid); защита render() от падения данных; fallback для буфера обмена в небезопасном контексте.
v1.18 — кнопка ⇅ слева от «+» сворачивает и разворачивает все карточки клиентов разом; при фильтре «Не оплачено» поднимается над полосой итого вместе с «+».
v1.17 — кнопка «+» поднимается над полосой общей суммы при фильтре «Не оплачено».
v1.16 — при фильтре «Не оплачено»: у свёрнутых карточек — выноска с суммой долга и количеством выездов; над нижним меню — общая сумма по всем видимым клиентам.
v1.15 — счёт по клиенту: кнопка «📄 Счёт» появляется в карточке при фильтре «Не оплачено». Модальное окно с чекбоксами по каждой работе, предпросмотром текста и кнопками «Поделиться» / «Скопировать».
v1.14 — системная кнопка «Назад» на Android закрывает открытые экраны и модальные окна в правильном порядке; если всё закрыто — выходит из приложения.
v1.13 — бейдж множителя перенесён со строки названия на строку метаданных — длинные названия организаций больше не обрезают его.
v1.12 — панель фильтров стала горизонтально скроллируемой — кнопки со счётчиками больше не уезжают за экран.
v1.11 — при активном фильтре карточки сворачиваются и разворачиваются стрелкой как обычно; под выездами организации выводится итоговая сумма (при наличии двух и более записей).
v1.10 — выпадающий список работ в выезде и список «Из прайса» сортируются по алфавиту.
v1.9 — закрыты оставшиеся замечания аудита: сортировка клиентов и прайса защищена через safeStr; validateDb углублена до проверки типов вложенных полей; confirm-ok переведён на async/await.
v1.8 — аудит и исправления: удалён мёртвый элемент статуса в форме выезда; все сохранения переведены на await; ужесточена валидация импорта; рендер защищён от битых данных; унифицированы названия статусов; исправлена иконка пустого фильтра «В работе»; убран лишний вызов requestPermissions; исправлено описание цвета статуса в справке.
v1.7 — исправлена ошибка экспорта и записи базы в APK: Directory и Encoding теперь передаются строками ('DATA', 'CACHE', 'utf8') вместо enum-значений которые недоступны через window.Capacitor.Plugins.
v1.6 — хранилище данных в APK переключено на внутреннюю папку приложения (Directory.Data) — запись работает без разрешений на всех версиях Android.
v1.5 — экспорт в APK переделан: открывает системный диалог «Поделиться» — можно отправить файл в Telegram, на почту, сохранить в облако или в Downloads.
v1.4 — клиенты и прайс сортируются по алфавиту; при активном фильтре клиенты упорядочены по дате последней подходящей записи (свежие сверху).
v1.3 — статус «В работе» перекрашен в жёлтый, чтобы не конфликтовать с зелёным у «Сделано».
v1.2 — фильтр «Сделано» в списке клиентов.
v1.1 — поиск по прайсу.
v1.0 — первый релиз. Прайс, клиенты с множителем и контактными лицами, выезды со статусами и расчётом суммы, фильтры, поиск, ручной ввод итого, тема оформления, встроенная справка, поддержка Capacitor (автосохранение в файл на устройстве).