COOPENOMICS  v1
Кооперативная Экономика
expense.hpp
См. документацию.
1#pragma once
2
3
4#include "../lib/core/ram_payer.hpp"
5#include <eosio/eosio.hpp>
6#include <eosio/asset.hpp>
7#include <eosio/crypto.hpp>
8#include "../lib/index.hpp"
9
10using namespace eosio;
11using std::string;
12
28namespace ExpenseDomain {
29
35 enum class Mechanics : uint8_t {
36 ADVANCE = 0,
37 DIRECT = 1,
38 };
39
46 enum class RecipientType : uint8_t {
47 SELF = 0,
48 MEMBER = 1,
49 ORG = 2,
50 };
51
52 enum class ProposalStatus : uint8_t {
53 CREATED = 0,
54 AUTHORIZED = 1,
55 PARTIALLY_PAID = 2,
57 CLOSED = 4,
58 DECLINED = 5,
59 };
60
61 enum class ItemStatus : uint8_t {
62 APPROVED = 0,
63 PAID = 1,
64 REPORTED = 2,
65 RETURNED = 3,
66 OVERSPENT = 4,
67 };
68
79 eosio::name contract;
80 eosio::name action;
81 std::vector<char> data;
82 EOSLIB_SERIALIZE(callback_handler, (contract)(action)(data))
83 };
84
88 struct item {
89 eosio::checksum256 item_hash;
90 uint8_t mechanics;
92 eosio::name recipient;
93 std::string description;
94 eosio::asset planned_amount;
95 eosio::asset actual_amount;
96 uint8_t status;
97
99 };
100
104 struct [[eosio::table, eosio::contract("expense")]] proposal {
105 uint64_t id;
106 eosio::name coopname;
107 eosio::checksum256 proposal_hash;
108 eosio::name username;
109 eosio::name source_wallet;
110 uint8_t status;
111 std::vector<item> items;
112 eosio::asset total_planned;
113 eosio::asset total_actual;
117 eosio::time_point_sec created_at;
118 eosio::time_point_sec updated_at;
119
120 uint64_t primary_key() const { return id; }
121 eosio::checksum256 by_hash() const { return proposal_hash; }
122 uint64_t by_username() const { return username.value; }
123 uint64_t by_status() const { return static_cast<uint64_t>(status); }
124
125 EOSLIB_SERIALIZE(proposal,
126 (id)(coopname)(proposal_hash)(username)(source_wallet)(status)
127 (items)(total_planned)(total_actual)(callback)(statement_doc)(decision_doc)
128 (created_at)(updated_at))
129 };
130
131 using proposals_index = eosio::multi_index<"proposals"_n, proposal,
132 eosio::indexed_by<"byhash"_n, eosio::const_mem_fun<proposal, eosio::checksum256, &proposal::by_hash>>,
133 eosio::indexed_by<"byusername"_n, eosio::const_mem_fun<proposal, uint64_t, &proposal::by_username>>,
134 eosio::indexed_by<"bystatus"_n, eosio::const_mem_fun<proposal, uint64_t, &proposal::by_status>>
135 >;
136
137} // namespace ExpenseDomain
138
143class [[eosio::contract("expense")]] expense : public coop_contract {
144public:
146
148 [[eosio::action]] void cleanup();
149
165 [[eosio::action]]
166 void createexp(name coopname, name username,
167 checksum256 proposal_hash,
168 name source_wallet,
169 std::vector<ExpenseDomain::item> items,
171 document2 statement);
172
178 [[eosio::action]]
179 void authexp(name coopname, checksum256 proposal_hash, document2 decision);
180
188 [[eosio::action]]
189 void declexp(name coopname, checksum256 proposal_hash, std::string reason);
190
199 [[eosio::action]]
200 void payexp(name coopname, checksum256 proposal_hash, checksum256 item_hash,
201 asset actual_amount);
202
209 [[eosio::action]]
210 void reportexp(name coopname, checksum256 proposal_hash, checksum256 item_hash);
211
216 [[eosio::action]]
217 void closeexp(name coopname, checksum256 proposal_hash);
218
225 [[eosio::action]]
226 void returnexp(name coopname, checksum256 proposal_hash, checksum256 item_hash,
227 asset return_amount);
228
235 [[eosio::action]]
236 void overspendexp(name coopname, checksum256 proposal_hash, checksum256 item_hash,
237 asset overspend_amount);
238};
239
240// Плательщик за оперативную память строк таблицы — правило в lib/core/ram_payer.hpp.
Базовый класс контрактов платформы.
Definition: coop_contract.hpp:33
coop_contract(eosio::name receiver, eosio::name code, eosio::datastream< const char * > ds)
Definition: coop_contract.hpp:35
Шасси расходов — 8 actions, MVP только Благорост.
Definition: expense.hpp:143
contract
Definition: eosio.msig_tests.cpp:977
RAM_PAYER_CLASS(ExpenseDomain::proposal, cooperative)
Definition: expense.hpp:28
ItemStatus
Definition: expense.hpp:61
@ RETURNED
Зарезервировано, не используется: returnexp уменьшает actual_amount, статус остаётся PAID до отчёта.
@ REPORTED
Закрыт отчётом (чек приложен). DIRECT-item получает его сразу при payexp.
@ OVERSPENT
Зарезервировано, не используется: overspendexp увеличивает actual_amount, статус остаётся PAID до отч...
Mechanics
Способ оплаты item-а в СЗ. ADVANCE — пайщик-получатель оплачивает, затем приносит чек....
Definition: expense.hpp:35
RecipientType
Получатель платежа в item-е. SELF — сам создатель СЗ. MEMBER — другой пайщик. ORG — внешняя организац...
Definition: expense.hpp:46
ProposalStatus
Definition: expense.hpp:52
@ 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:135
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:78
eosio::name contract
Definition: expense.hpp:79
eosio::name action
Definition: expense.hpp:80
std::vector< char > data
Definition: expense.hpp:81
Item — одна строка СЗ-расхода.
Definition: expense.hpp:88
std::string description
Definition: expense.hpp:93
eosio::name recipient
username (для SELF/MEMBER), либо name-идентификатор (для ORG)
Definition: expense.hpp:92
uint8_t mechanics
Mechanics.
Definition: expense.hpp:90
uint8_t status
ItemStatus.
Definition: expense.hpp:96
eosio::asset actual_amount
0 пока не оплачено / не отчиталось
Definition: expense.hpp:95
eosio::checksum256 item_hash
Definition: expense.hpp:89
eosio::asset planned_amount
Definition: expense.hpp:94
uint8_t recipient_type
RecipientType.
Definition: expense.hpp:91
Таблица СЗ-расходов. Scope = coopname.
Definition: expense.hpp:104
eosio::name source_wallet
семантически — из какого ЦПП/фонда (w.cap.blago, w.sov.expns, …)
Definition: expense.hpp:109
eosio::checksum256 proposal_hash
Definition: expense.hpp:107
std::vector< item > items
Definition: expense.hpp:111
eosio::checksum256 by_hash() const
Definition: expense.hpp:121
uint64_t id
Definition: expense.hpp:105
eosio::name username
создатель
Definition: expense.hpp:108
uint64_t by_username() const
Definition: expense.hpp:122
eosio::asset total_planned
Definition: expense.hpp:112
document2 statement_doc
type=2010, signact1 создателя
Definition: expense.hpp:115
callback_handler callback
опционально; contract.value == 0 = нет callback
Definition: expense.hpp:114
document2 decision_doc
type=2011, signact2 совета
Definition: expense.hpp:116
eosio::asset total_actual
Definition: expense.hpp:113
uint8_t status
ProposalStatus.
Definition: expense.hpp:110
eosio::time_point_sec updated_at
Definition: expense.hpp:118
uint64_t by_status() const
Definition: expense.hpp:123
eosio::name coopname
кооператив (= scope таблицы; дублируем полем по канону)
Definition: expense.hpp:106
uint64_t primary_key() const
Definition: expense.hpp:120
eosio::time_point_sec created_at
Definition: expense.hpp:117
Definition: table_registrator_orgs.hpp:17
Definition: table_soviet_decisions.hpp:22
Definition: document_core.hpp:27