Coder Social home page Coder Social logo

yanovich / abstract-accounting Goto Github PK

View Code? Open in Web Editor NEW
3.0 3.0 2.0 3.26 MB

Abstract is being developed to be a competitive accounting and planning solution.

Home Page: http://aasii.org

License: GNU Affero General Public License v3.0

Ruby 95.65% JavaScript 4.35%

abstract-accounting's People

Contributors

alexeyshepelev avatar sergeygaychuk avatar yanovich avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

Forkers

sergeygaychuk

abstract-accounting's Issues

plugin management

We need to figure out the best practice for using 3rd party code in the project. I've seen suggestions to use 'script/plugin' command and keep 3rd party code outside version control with '.gitignore'.

Таблица описания

Любой ресурс может иметь описание (ссылка на основной объект полиморфная)

Создание документа

При нажатию на кнопку создания документа, создание документа происходит по двум сценариям:

  1. Если мы находимся на не специализированной папке
    Нажал создать документ
    Таблица пропала
    Появилась чистая страница с кнопками возможных документов
    выбрал конкретный документ
    перешло на страницу создания данного документа
  2. Если мы находимся на специализированной папке
    нажал создать документ
    перешло на страницу создания документа

специализированная папка:
список с системным ярлыком документа
фильтр имеющий ровно один критерий отбора типа документа

Локализация интерфейса

На всех страницах должны присутствовать кнопки выбора языка.
Язык по умолчанию соответстует Accept-Language присланному браузером.
Выбранный язык запоминается для пользователя

Bad amount in closed state

There was no test for this in C++, so Alex hasn't tested this in ruby.

If state is closed (not deleted) by writing to 'paid' attribute, its amount should not change.

Склад

Есть системный ярлык склад
Нажали на системный ярлык склад
Видим таблицу:
Кладовщик
Объект
Название ресурса
Ед. измерения
Актуальное кол-во
Ожидаемое кол-во

Behaviour: Снабжение

Логин по стандартной процедуре (Issue #11)
Открылись новые

Выбрал системный ярлык снабжение.
Пользователь видит счета созданные им либо его подчиненными.

Новые счета должны отображаться жирным
Таблица закупок содержит стандартный набор полей. (Issue #9)

Кнопки операций: (Issue #8: operation buttons)
Согласовать (массовое)
Отменить (массовое)

Нажал на счет
Видит страницу отображения счета. (Issue #17)
Если есть дата проводки, кнопки отправить и отменить заблокированны

Любая операция со счетом
Счет считается просмотренным

Счет находится в новых
Пока не отменен или не отправлен

Фильтр

Фильтр состоит:
Строка ввода текста с автодополнением
Кнопки обработки фильтра

Для автодополнения:
Определяет место доставки
Определяет ответственного сотрудника
Определяет раздел
Кроме того в результате поиска выдает вхождения слов из запроса в:
Наименование ресурса
Комментарий
наименование поставщика

Таблица полномочий

Таблица полномочий:
Лицо
Объект (место)
Вид работ
Тип документа (Накладная, Счет, Выдача и т. д.)

Версии объектов

Необходимо добавить версии объектов в модель
Gem: paper_trail или схожие.

Комментарии

Страница создания документа:

Если есть список ресурсов:
Навел на комментарий ресурса
Появился плюсик
Нажал плюсик
Появился список комментариев
Появилось поле для ввода комментария
Появилась кнопка добавить
Написал комментарий
Нажал кнопку добавить
Поле комментария обновилось (таблица ресурсов)
Список закрылся

Комментарии на документ:
Список комментариев документа
Поле для ввода коментария на документ

Вход в систему

Открыл сайт
Ввел адрес почты и пароль.
Переходит на основную страницу где рабочая поле заполнено таблицей отфильтрованной по новым (Issue #8)

На форме находится Remember Me, для запоминания сессии.
На форме есть ссылка на форму восстановления пароля.

При переходе на форму восстановления пароля, пользователь вводит email и нажимает кнопку Отправить.
Ему на почту приходит сообщение для создания нового пороля.
Переходя по ссылке из email он попадает на страницу где вводит новый пароль.

Авторизация

Аутентификация содержит:
Таблица ролей(CanCan), таблицу групп, таблицу полномочий, таблица прямого доступа.

После проверки CanCan
index
Создатель видит свои объекты
Начальник группы видит объекты всех подчинненых (по иерархии)
Если прошел проверку полномочий:
Объект и вид работ и документ совпадают или пустой каждый
Если выдан прямой допуск

Страница создания роли:
Добавить разрешение на forward(возможность раздачи прямого доступа к объекту)
По умолчанию все галочки должны стоять.

Список лиц таблицы рабочего поля

Если кол-во людей, которые меняли документ, позволяет их вписать в колонку, то пишутся через запятую,
Если не позволяют - то пишутся трое:

  1. Создатель
  2. Если есть то сам пользователь
  3. Последний менявший документ
    Если 1 сам текущий пользователь, то пишутся двое
    И между ними .. без запятой если не рядом, иначе просто запятая

В таблице отправленные список лиц не применяется

Таблица рабочего поля

Таблица документов содержит:
Галочка для массовых операций
Звездочка для пометок
Лица - список (Issue #10)
Дата документа.
Сумма(денежная)
Заголовок: Тип + "-" + Наименование Документа. Наименование определяется для каждого документа отдельно.
Последний комментарий: Обрезается до границы колонки.
Дата изменения.
Таблица сортируется по дате изменения. убывание
Строки должны быть выделены (болд), если последнее действие не было просмотрено текущим пользователем.

Behaviour: Выдачи

Логин по стандартной процедуре.(Issue #11)
Открылись новые

Создалась страница документа по стандартной процедуре
На странице документа:
Ввод даты
Ввод получателя (Наименование)
Ввод объекта
Ввод кладовщика
Кнопка прикрепления файла.
Таблица ресурсов:
Отображение номера элемента
Галочка
Название ресурса
Ед. измерения
Кол-во на складе
Ввод кол-ва к выдаче
Кнопки массовых операций:
Удалить
Таблица ресурсов в наличии:
Отображение номера элемента
Галочка
Название ресурса
Ед. измерения
Кол-во на складе
Кнопки массовых операций:
Принять
Фильтр для нижне таблицы

Комментарии по стандартной процедуре.(Issue #18)
Комментарии не доступны в режиме черновика.

В режиме просмотра нижняя таблица отсутствует.

Если имеется роль пользователя кладовщик, то:
Поле объекта заполняется
Поле кладовщика заполняется

Выбрал ресурсы в таблице наличия
Нажал кнопку принять
Таблица ресурсов к выдаче пополнилась выбранными ресурсами
Кол-во к выдаче заполнилось количеством на складе.
Нажал кнопку сохранить черновик или отправить.

Нажал отправить
Удалилась таблица ресурсов в наличии
Появился поле просмотра создателя документа

Нажал на кнопку отправить:
Появилась кнопка печати документа
Появилась кнопка подтверждения документа
Появилась кнопка отмены
Появился ярлык выдача
Появился ярлык склад

Отмененные выдачи видны в списке Удаленные

Расширение товара (asset)

Товар может иметь производителя (Entity), описание(текстовое поле)
Товар должен иметь марку(текстовое поле), единицу измерения(ссылка на таблицу MU).

choose issue language

We need to choose either English or Russian. The code and commit messages are in English, so I would choose it.

Отображение,создание,редактирование счета

Ввод/отображение места заказа
Ввод/отображение Поставщика (ИНН и Название)
Ввод/отображение типа работы

Отображение:
Сумма всего
Сумма подтвержденная
Ответственный сотрудник(создатель)
Готов к оплате/подтвержден начальником снабжения/согласован директором
Дата согласования директором
Дата проведения оплаты

Добавление ресурса:
Галочка
Ввод/отображение наименование
Ввод/отображение ед. измерения
Ввод/отображение кол-ва
Ввод/отображение цены
Сумма
Ввод/отображение срока поставки
Гипер ссылки на номера задач либо Поле для ввода номеров багов
Время последнего изменения
Комментарий (20 первых символов последнего комментария)
Кнопки массовых действий с ресурсами
Добавить ресурс
Удалить реурс/ресурсы если галочки отмечены

Комментарии отображаются по стандартной схеме. (Issue #18)
Комментировать можно при частичной оплате счета.

При вводе или изменении цены, если есть кол-во, автоматически высчитывается сумма
При вводе либо изменении кол-ва, если есть цена, автоматически высчитывается сумма
Ввод номеров багов производится через запятую, по сохранении автоматически генерируется ссылка на баг.
Должна быть возможность добавления и удаления ресурса.

Если в режиме редактирования/создания:
Должна быть кнопка Сохранить черновик
Кнопка отправить
Если просматривает человек с правами выше чем у пользователя создавшего документ:
Кнопка отменить
Должна быть кнопка Возврат

Описание UI

Приложение должно быть: single-page application.
Приложение обменивается с сервером данными через ajax.
Страница делится на три части: Header, Left sidebar & Main area.

Header: расположен сверху, на ширину всей страницы.
Делится на три полосы:

  1. Содержит слева: имя вошедшего в систему пользователя, справа: кнопку выхода из сеанса.
  2. Содержит фильтрующие элементы (Issue #12)
  3. Содержит кнопки по основным операциям с документами (в дальнейшем operation buttons)

Left sidebar: находится под Header слева
Кнопка создания документа (Issue #13)
Содержит список основных ярлыков
Новые
Помеченные
Черновики
Отправленные
Удаленные
Архив
Ниже распологаются системные ярлыки ограниченные по ролям
Тип документа
Есть пользовательские ярлыки

Main area: находится под Header справа
Текущее рабочее поле: таблица(Issue #9) или форма

Operation buttons:
Кнопки операций по текущему документу
Кнопки перехода на предыдущую либо следующую страницу(если таблица) или форму(если просмотр документа)
Если предыдущей либо следующей страницы нет, то кнопки в состоянии disable.
Если находимся на создании документа, кнопки находятся в состоянии disable.

Behaviour: Накладные

Логин по стандартной процедуре. (Issue #11)
Открылись новые

Создалась страница документа по стандартной процедуре
На странице документа:
Ввод даты
Ввод номера документа
Ввод поставщика (ИНН и Название)
Ввод объекта
Ввод кладовщика
Кнопка прикрепления файла.
Таблица ресурсов:
Отображение номера элемента
Галочка
Ввод названия ресурса
Ввод ед. измерения
Ввод Кол-во
Ввод Цена
Сумма (автоматически - смотри счет)
Кнопки массовых операций:
Удалить ресурсы

Комментарии по стандартной процедуре.(Issue #18)

Если имеется счета от этого поставщика на этот объект, то:
Надо отображать кнопку наличия счетов
При нажатии на кнопку
Появляется:
таблица выбора ресурсов по этим счетам:
Таблица соответствует таблице счета.
Кнопка принятия

Пока документ в режиме черновика
Имеется одна пустая строка ресурса

Если имеется роль пользователя кладовщик, то:
Поле объекта заполняется
Поле кладовщика заполняется

Выбрал оплаченные ресурсы в таблице
Нажал кнопку принять
Таблица ресурсов накладной пополнилась выбранными ресурсами
Нажал кнопку сохранить черновик или отправить.

Нажал отправить
Пустая строка ресурса удалилась
Появился поле просмотра создателя документа

Если создатель и кладовщик не совпадают, то:
Кладовщик видит кнопку подтвердить

Если есть разрешение на отмену
Появляется кнопка отмены накладной
Появился ярлык накладная
Появился ярлык склад

Отмененные накладные видны в списке Удаленные

Суррогаты для ресурсов (asset) и лиц

Во всех операциях проходит суррогат.
Таблицы лиц(Issue #40) и asset используются для хранения суррогатов.
В них добавляется колонка хранящая ссылку на детальный объект (entity_detail or asset_detail).
Для отображения используются данные из таблиц *_detail.

Суррогат для частного лица:
*полное имя

Суррогат для юр лица и частного предпринимателя
*наименование
*страна
*название идентификатор
*значение идентификатора (текстовое)

Суррогат для ресурса:
*наименование
*ед. измерения (текстовое)

Тестирование модели

В качестве тестовой системы использовать: rspec + factory_girl
Для ускорение использовать spork & guard
Перевести тестирование модели с TestUnit на Rspec

Основные задачи v. 1.0

?Переписать в модели остатки(states, balances). Нужно создавать объект после каждой операции....

Добавить в накладную состояния как в выдаче.

Выдача и накладные это расширение диал. Поля по типу storekeeper и т.д. брать из deal.
Вынести логику в отдельный модуль.

Добавить поле в term: классификатор(смотри балансы "type - ссылка на таблицу").
Если сделка кладовщика: тип "Материалы"
Если сделка кладовщика: тип "НЗП"

Добавить таблицу классификаторов.

Добавить fact_group - список фактов. по вложенности. Всегда создается когда создается факт.

Изменить сгенерированное название сделки по накладной (Накладная #{document_id} строка #{item_index}), для выдачи (НЗП #{deal_id}).

Добавить две группы ярлыков: списки(waybill, resource .. и т.д.) и состояния(отчеты)

Списки: ресурсы, лица, места, сделки, правила. Сделки - группа содержащая в себе накладные и выдачи. При нажатии на сделки появляется список сделок и две подгруппы.

Отчеты:
Журнал(Главная книга)
Добавить фильтр по датам.

Балансы: Добавить колонку место. Фильтры по русурсу, месту, лицу.
Выдаваемые счета должны быть упорядочены: кредитовые - пассив, дебетовые - актив
1. Материалы - сделки хранения дебеторка
2. Авансы выданные - сделки конвертации из денег в материалы по которым имеется остаток дебетовый
3. Дебеторская задолженность - сделки конвертации материалов в деньги по которым имеется дебетовый остаток
4. Незавершенное производство(НЗП) - сделки хранения материалов и работ у бригадиров, прорабов и начальников участков.
5. Выданные займы - сделки хранения денег не с банками - дебетовый
6. Деньги - сделки хранения денег с банками или сотрудниками - дебетовый
7. Уставной капитал - сделки продажи долей.
8. Финансовый результат - прибыль (Income)
9. Задолженность по кредитам - сделки хранения денег - кредитовый
10. Кредиторская задолженность по зп - сделки конвертации денег в труд
11. Кредиторская задолженность по налогам - сделки по хранению денег с государством
12. Кредиторская задолженность по материалам - сделки конвертации денег в материалы с кредитовым остатком.
13. Авансы полученные - сделки конвертации материалы в деньги с кредитовым остатком
Склад - частный случай балансов (только материалы)
Группировка по ресурсу, месту и лицу.

Выписки:
Выбор сделки переходом на страницу сделок и выбор сделки там.

Переходы:
Выписки:
При нажатии на строку, переходишь на выписку в этим счетом, за тот же период.

Балансы:
добавить возможность сделать выборку по выбранным в балансах счетам за период. выбор сделок производится по галочке, либо на сделке либо на группу. период - за дату на отчете балансов.
Если выбока идет более чем по одному счету, отчет давать ввиде главной книги.

Главная книга:
Переход на выписку, за дату операции.

Ресурсы:
Переход на отчет балансы с фильтром по этому ресурсу.

Лица:
Переход на отчет балансы с фильтром по этому лицу.

Места:
Переход на отчет балансы с фильтром по этому месту.

Сделки:
Переход на отчет выписки с периодом за текущую дату.
Если есть правила, то на главную книгу с фильтром на факты связанные с этой сделкой, через fact_group

!!!!!
Invoices & Estimates

Be DRY in waybill and allocation

Создать модуль который будет содержать общую логику (Allocation и Waybill). И для Allocation, и для Waybill информацию о кладовщике (entity, place) нужно цеплять через deal.

Разделим на два этапа:

  1. Убрать entity_id, place_id из накладной и выдачи. (Скорректировать логику в Warehouse, Waybill.in_warehouse и VersionEx.filter)
  2. Вынести в отдельный модуль логику.

Время выполнения 8 часов

Базовая аутентификация и авторизация

В системе есть 3 пользователя:

  1. root - грузится из файла конфигурации, может делать все с объектами
  2. some user - все остальные пользователи, могут только читать
  3. guest - ничего не видит

Расширение лиц (entity)

Ссылка на лица во всех таблицах остается
Таблица entity ссылается на реальный объект посредством полиморфной ассоциации.

Лица могут быть 3х видов: юр. лицо(organization) и частное лицо(person), частное лицо занимающееся предпринимательской деятельностью (business_person)

Юр лицо:
*полное наименование
*сокращенное наименование
*страна (ссылка на таблицу)
*юр адрес
*идентификатор (ссылка на таблицу идентфикаторов по стране)

Частное лицо:
*фамилия
*имя
*дата рождения
*место рождения
В таблице сделок ссылка не на лицо а на документ удостоверяющий личность.
Документ удостоверяющий личность:
*страна
*номер
*дата выдачи
*кем выдано
*ссылка на лицо кому выдано

Частное лицо заним. предприн. деятельностью:
*страна
*идентификатор (ссылка на таблицу идентфикаторов по стране)
*ссылка на лицо

Локализация почты

Язык письма должен соответствовать языку пользователя которому отсылается.

Добавить страницы списков

Списки: ресурсы, лица, места, сделки.
При нажатии на линку "Сделки" должна отобразится таблица сделок + вывалится раскрывающееся меню ("Выдачи" и "Накладные", дальше именуемые подгруппами). При нажатии на подгруппу, толжна отобразится таблица в соответствии с классом подгруппы (нп, для "Выдачи" все выдачи).

В таблице ресурсов (Asset):
Название, ед. изм.
В таблице лиц:
Название
В таблице места:
Название
В таблице сделки:
Название, Лицо, Взятый ресурс(give), Отданый Ресурс(take), Курс(rate)
В таблице Накладные
Дата, Документ ID, Поставщик, Кладовщик, Место кладовщика, Состояние
В таблице Выдачи
Дата, Кладовщик, Место кладовщика, Прораб, Состояние

Время на работу: 30 часов.

Список правил продумаем отдельно. Сделай все сверху. как дойдешь до правил будем обсуждать.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.