К основному контенту

IBM Notes. Личный баланс

Хочу поделиться приложением, которое я делал и делаю по-сути для себя. Одна из первых идей для личного удобства, которую я начал делать, когда еще только познакомился с IBM Lotus Notes/Domino. Это приложение пережило несколько итераций и было одно из первых, на которых я опробовал попытки создания движков для приложений. Это приложение не самое сложное, которое я когда-либо делал. Это приложение не обладает невообразимыми функциональными возможностями. Но. Это приложение, которым я горжусь.
Это приложение, позволяющее вести личный баланс...


По порядку о всех возможностях.
Основной вид, открывающийся по-умолчанию - это счета. Изначально, он естественно пуст.
Основное представление со счетами

Начинать работу в первый раз нужно с заполнения личных справочников, а именно: типов счетов и статей платежей. Имеются так же общие справочники: валюты и курсы. Основная валюта системы в данный момент зафиксирована для всех пользователей - это рубль. Относительно него загружаются курсы (с сайта ЦБ на дату загрузки) и строится текущий баланс. Курсы загружаются в автоматическом режиме.
Отображение справочника валют

Отображение справочника курсов валют

Итак, заполнение индивидуальных справочников:
1. Типы счетов
Служат для удобства, разбивают счета. Мне удобно разбивать по типу хранения, например: наличные, банковские счета, и пр. Можно указать иконку для отображения. Иконки берутся из стандартных лотусовых по номеру (тут для широких масс, конечно потребуется некоторая контекстная справка)
Вид и заполнение справочника типов счетов

2. Статьи платежей
Делятся на доход/расход. Поддерживаются подкатегории.
Форма заполнения статьи платежа
Отображение справочника статей платежей
После заведения справочников можно приступать ко внесению счетов. Поле "Учитывать при расчете баланса" позволяет заводить счета, которые, что очевидно из названия поля, не будут учитываться при расчете общего баланса. После появления операций по счету, он будут отображаться в правой части карточки счета.
Форма счета

Отображение счетов

Формы для внесения доходов и расходов идентичны по своему наполнению, поэтому покажу пример только для одного типа платежа. Платеж можно создать либо из основного представления счетов, либо из представлений, отображающих только доходы, расходы или переводы.
Форма для внесения платежа (дохода)

Отображение состояния счетов после внесения платежа и баланса
Переводы подразумевают переводы между своими счетами. Они могут быть с комиссиями или без. Комиссия может рассчитываться как % от переводимой суммы или как фиксированное значение. Комиссия отнимается от счета, с которого происходит перевод. Перевод может быть осуществлен между счетами с разными валютами, тогда появляются дополнительные поля, отображающие курс перевода и получающуюся сумму. Курс вычисляется как кросс-курс между валютами счетов на основе справочника курсов на дату осуществления перевода. Если на дату перевода курса нет - берется наиболее близкий ранний курс. Основное удобство, на мой взгляд, что при межвалютном переводе можно ввести итоговую сумму (чтобы не высчитывать курс) и тогда курс пересчитается автоматически. Можно изменить курс, тогда пересчитается итоговая сумма и т.д.
Внесение перевода между счетами с одной валютой и комиссией
Перевод между счетами с разной валютой. Расчет суммы на целевом счете исходя из справочного курса
 
Перевод между счетами с разной валютой. Изменение суммы на целевом счете и соответствующий пересчет курса

Отображение операций по счету

Отображение счетов и баланса после внесения операций

При изменении параметров или удалении платежа/перевода все значения пересчитываются.

Текущий баланс пересчитывается при открытии базы или по нажатию кнопки "Обновить". Можно сохранить данные текущего баланса.

Отдельно можно построить отчет по операциям за период и сохранить его при необходимости:
Диалог установки параметров для построения отчета
Данная база существует в одном месте. Ее можно перетаскивать репликациями, но это не удобно. Заносить потом кипы чеков или вспоминать какие-то расходы потом весьма трудно, поэтому было бы удобно иметь доступ к ведению баланса откуда угодно. Web-доступ. Понятное дело, что основное устройство для этого - мобильный, значит приложение должно решать как минимум основные задачи (внесение расходов, доходов, переводов, получение минимальной информации по счетам) и быть удобным для работы через мобильное устройство.
И вот...совсем недавно это стало реальностью. И это удобно.
Основное меню:
 

Занесение расхода:

Перевод:

Просмотр данных по счетам:

Конечно, это не нативное приложение, но свои функции выполняет. Потихоньку готовлю и полнофункциональную Web-версию.

Комментарии

Популярные сообщения из этого блога

Занимательные алгоритмы. Поиск цикла в односвязном списке

И снова про тараканов, которые иногда возникают в голове. Как-то раз, засыпая, я задумался на курьезными задачками из своей сферы деятельности (Lotus Notes), которые можно было бы задать на собеседовании, плавно перешел к воспоминаниям о своих первых собеседования, когда опыта работы еще не было. Опыт самих собеседований у меня не велик а места, где задавались действительно интересные задачи (а не задачки типа: написать сортировку массива любым известным способом) вообще равны одному - это ABBYY. Как минимум одна задачка в списке на знание и понимание классических алгоритмов, описанных в книге Дональда Кнута -  Искусство программирования .

Unit-testing object validation when validator has DI

Summary Unit test object validation when validator(s) has a dependency. For instance, we have some custom field and cross-field validators. Want to test their combination. Additionally some of validators have dependencies, injected through constructor or setters. You're not using property injection, right? Shortcut If you are just searching for an answer, here's the fast way: Declare CustomConstraintValidatorFactory that implements javax.validation.ConstraintValidatorFactory Override getInstance method and on facing your constraint validator class instantiate it Otherwise delegate validator construction to org.hibernate.validator.internal.engine.constraintvalidation.ConstraintValidatorFactoryImpl Build validator factory and provide it your CustomConstraintValidatorFactory Build validator, using that factory... Go to demo project on GitHub for details:  https://github.com/MrArtemAA/blog-demos/blob/master/test-validator-with-injection/src/test/java/ru/artemaa/d

Lotus Notes FAQ. 8/9 Eclipse. Как настроить уведомления о Sametime сообщениях

Н а написание данной "инструкцию" натолкнул мой коллега. Помню, первый раз сам долго искал, как отключить постоянно выпрыгивающие уведомления о новых сообщениях в Sametime. И так, речь идет о клиентах IBM Notes 8+ версии Standart (Eclipse based). Как настроить уведомления о Sametime сообщениях?