COOPENOMICS  v1
Кооперативная Экономика
expense.hpp
См. документацию.
1#pragma once
2
3#include <eosio/eosio.hpp>
4#include <eosio/asset.hpp>
5#include <eosio/crypto.hpp>
6#include "../lib/index.hpp"
7
8using namespace eosio;
9using std::string;
10
26namespace ExpenseDomain {
27
33 enum class Mechanics : uint8_t {
34 ADVANCE = 0,
35 DIRECT = 1,
36 };
37
44 enum class RecipientType : uint8_t {
45 SELF = 0,
46 MEMBER = 1,
47 ORG = 2,
48 };
49
50 enum class ProposalStatus : uint8_t {
51 CREATED = 0,
52 AUTHORIZED = 1,
53 PARTIALLY_PAID = 2,
55 CLOSED = 4,
56 DECLINED = 5,
57 };
58
59 enum class ItemStatus : uint8_t {
60 APPROVED = 0,
61 PAID = 1,
62 REPORTED = 2,
63 RETURNED = 3,
64 OVERSPENT = 4,
65 };
66
77 eosio::name contract;
78 eosio::name action;
79 std::vector<char> data;
80 EOSLIB_SERIALIZE(callback_handler, (contract)(action)(data))
81 };
82
86 struct item {
87 eosio::checksum256 item_hash;
88 uint8_t mechanics;
90 eosio::name recipient;
91 std::string description;
92 eosio::asset planned_amount;
93 eosio::asset actual_amount;
94 uint8_t status;
95
97 };
98
102 struct [[eosio::table, eosio::contract("expense")]] proposal {
103 uint64_t id;
104 eosio::name coopname;
105 eosio::checksum256 proposal_hash;
106 eosio::name username;
107 eosio::name source_wallet;
108 uint8_t status;
109 std::vector<item> items;
110 eosio::asset total_planned;
111 eosio::asset total_actual;
115 eosio::time_point_sec created_at;
116 eosio::time_point_sec updated_at;
117
118 uint64_t primary_key() const { return id; }
119 eosio::checksum256 by_hash() const { return proposal_hash; }
120 uint64_t by_username() const { return username.value; }
121 uint64_t by_status() const { return static_cast<uint64_t>(status); }
122
123 EOSLIB_SERIALIZE(proposal,
124 (id)(coopname)(proposal_hash)(username)(source_wallet)(status)
125 (items)(total_planned)(total_actual)(callback)(statement_doc)(decision_doc)
126 (created_at)(updated_at))
127 };
128
129 using proposals_index = eosio::multi_index<"proposals"_n, proposal,
130 eosio::indexed_by<"byhash"_n, eosio::const_mem_fun<proposal, eosio::checksum256, &proposal::by_hash>>,
131 eosio::indexed_by<"byusername"_n, eosio::const_mem_fun<proposal, uint64_t, &proposal::by_username>>,
132 eosio::indexed_by<"bystatus"_n, eosio::const_mem_fun<proposal, uint64_t, &proposal::by_status>>
133 >;
134
135} // namespace ExpenseDomain
136
142public:
143 using contract::contract;
144
160 [[eosio::action]]
161 void createexp(name coopname, name username,
162 checksum256 proposal_hash,
163 name source_wallet,
164 std::vector<ExpenseDomain::item> items,
166 document2 statement);
167
173 [[eosio::action]]
174 void authexp(name coopname, checksum256 proposal_hash, document2 decision);
175
183 [[eosio::action]]
184 void declexp(name coopname, checksum256 proposal_hash, std::string reason);
185
194 [[eosio::action]]
195 void payexp(name coopname, checksum256 proposal_hash, checksum256 item_hash,
196 asset actual_amount);
197
204 [[eosio::action]]
205 void reportexp(name coopname, checksum256 proposal_hash, checksum256 item_hash);
206
211 [[eosio::action]]
212 void closeexp(name coopname, checksum256 proposal_hash);
213
220 [[eosio::action]]
221 void returnexp(name coopname, checksum256 proposal_hash, checksum256 item_hash,
222 asset return_amount);
223
230 [[eosio::action]]
231 void overspendexp(name coopname, checksum256 proposal_hash, checksum256 item_hash,
232 asset overspend_amount);
233};
Шасси расходов — 8 actions, MVP только Благорост.
Definition: expense.hpp:141
contract
Definition: eosio.msig_tests.cpp:977
Definition: expense.hpp:26
ItemStatus
Definition: expense.hpp:59
@ RETURNED
Зарезервировано, не используется: returnexp уменьшает actual_amount, статус остаётся PAID до отчёта.
@ REPORTED
Закрыт отчётом (чек приложен). DIRECT-item получает его сразу при payexp.
@ OVERSPENT
Зарезервировано, не используется: overspendexp увеличивает actual_amount, статус остаётся PAID до отч...
Mechanics
Способ оплаты item-а в СЗ. ADVANCE — пайщик-получатель оплачивает, затем приносит чек....
Definition: expense.hpp:33
RecipientType
Получатель платежа в item-е. SELF — сам создатель СЗ. MEMBER — другой пайщик. ORG — внешняя организац...
Definition: expense.hpp:44
ProposalStatus
Definition: expense.hpp:50
@ CLOSED
СЗ-отчёт авторизован — расход закрыт.
@ PARTIALLY_PAID
Часть item-ов оплачена.
@ REPORT_SUBMITTED
Отчёт о расходе подан, ждёт авторизации совета.
eosio::multi_index<"proposals"_n, proposal, eosio::indexed_by<"byhash"_n, eosio::const_mem_fun< proposal, eosio::checksum256, &proposal::by_hash > >, eosio::indexed_by<"byusername"_n, eosio::const_mem_fun< proposal, uint64_t, &proposal::by_username > >, eosio::indexed_by<"bystatus"_n, eosio::const_mem_fun< proposal, uint64_t, &proposal::by_status > > > proposals_index
Definition: expense.hpp:133
Definition: eosio.msig.hpp:34
action(permission_level{ _gateway, "active"_n}, _gateway, "adduser"_n, std::make_tuple(coopname, deposit->username, to_spread, to_circulation, eosio::current_time_point(), true)).send()
Callback на финализацию — устанавливается при createexp как переменная.
Definition: expense.hpp:76
eosio::name contract
Definition: expense.hpp:77
eosio::name action
Definition: expense.hpp:78
std::vector< char > data
Definition: expense.hpp:79
Item — одна строка СЗ-расхода.
Definition: expense.hpp:86
std::string description
Definition: expense.hpp:91
eosio::name recipient
username (для SELF/MEMBER), либо name-идентификатор (для ORG)
Definition: expense.hpp:90
uint8_t mechanics
Mechanics.
Definition: expense.hpp:88
uint8_t status
ItemStatus.
Definition: expense.hpp:94
eosio::asset actual_amount
0 пока не оплачено / не отчиталось
Definition: expense.hpp:93
eosio::checksum256 item_hash
Definition: expense.hpp:87
eosio::asset planned_amount
Definition: expense.hpp:92
uint8_t recipient_type
RecipientType.
Definition: expense.hpp:89
Таблица СЗ-расходов. Scope = coopname.
Definition: expense.hpp:102
eosio::name source_wallet
семантически — из какого ЦПП/фонда (w.cap.blago, w.sov.expns, …)
Definition: expense.hpp:107
eosio::checksum256 proposal_hash
Definition: expense.hpp:105
std::vector< item > items
Definition: expense.hpp:109
eosio::checksum256 by_hash() const
Definition: expense.hpp:119
uint64_t id
Definition: expense.hpp:103
eosio::name username
создатель
Definition: expense.hpp:106
uint64_t by_username() const
Definition: expense.hpp:120
eosio::asset total_planned
Definition: expense.hpp:110
document2 statement_doc
type=2010, signact1 создателя
Definition: expense.hpp:113
callback_handler callback
опционально; contract.value == 0 = нет callback
Definition: expense.hpp:112
document2 decision_doc
type=2011, signact2 совета
Definition: expense.hpp:114
eosio::asset total_actual
Definition: expense.hpp:111
uint8_t status
ProposalStatus.
Definition: expense.hpp:108
eosio::time_point_sec updated_at
Definition: expense.hpp:116
uint64_t by_status() const
Definition: expense.hpp:121
eosio::name coopname
кооператив (= scope таблицы; дублируем полем по канону)
Definition: expense.hpp:104
uint64_t primary_key() const
Definition: expense.hpp:118
eosio::time_point_sec created_at
Definition: expense.hpp:115
Definition: table_soviet_decisions.hpp:20
Definition: document_core.hpp:27