DC-111: Add subagent account (#56)

This commit is contained in:
Alexey 2019-02-01 12:08:46 +03:00 committed by GitHub
parent 8ef6c2449e
commit 487cfaf843
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 52 additions and 19 deletions

View File

@ -144,7 +144,8 @@ proxy(Ref, Name, Opts) ->
object().
system_account_set(Ref, Name, ?cur(SymCode), C) ->
AccountID = account(SymCode, C),
AccountID1 = account(SymCode, C),
AccountID2 = account(SymCode, C),
{system_account_set, #domain_SystemAccountSetObject{
ref = Ref,
data = #domain_SystemAccountSet{
@ -152,7 +153,8 @@ system_account_set(Ref, Name, ?cur(SymCode), C) ->
description = <<>>,
accounts = #{
?cur(SymCode) => #domain_SystemAccount{
settlement = AccountID
settlement = AccountID1,
subagent = AccountID2
}
}
}

View File

@ -130,7 +130,11 @@ setup_dominant(Options, C) ->
configure_processing_apps(_Options) ->
ok = set_app_env(
[ff_transfer, withdrawal, system, accounts, <<"RUB">>],
[ff_transfer, withdrawal, system, accounts, settlement, <<"RUB">>],
create_company_account()
),
ok = set_app_env(
[ff_transfer, withdrawal, system, accounts, subagent, <<"RUB">>],
create_company_account()
),
ok = set_app_env(
@ -454,6 +458,11 @@ default_termset(Options) ->
{wallet, receiver_destination},
{system, settlement},
?share(10, 100, operation_amount)
),
?cfpost(
{wallet, receiver_destination},
{system, subagent},
?share(10, 100, operation_amount)
)
]}
}

View File

@ -253,10 +253,19 @@ create_p_transfer(Withdrawal) ->
ProviderAccount = maps:get(CurrencyID, ProviderAccounts, undefined),
ProviderFee = ff_withdrawal_provider:fee(Provider, CurrencyID),
SystemAccounts = unwrap(system, get_system_accounts()),
SystemAccount = maps:get(CurrencyID, SystemAccounts, undefined),
SettlementAccountMap = maps:get(settlement, SystemAccounts, #{}),
SettlementAccount = maps:get(CurrencyID, SettlementAccountMap, undefined),
SubagentAccountMap = maps:get(subagent, SystemAccounts, #{}),
SubagentAccount = maps:get(CurrencyID, SubagentAccountMap, undefined),
CashFlowPlan = unwrap(provider_fee, ff_cash_flow:add_fee(WalletCashFlowPlan, ProviderFee)),
FinalCashFlow = unwrap(cash_flow, finalize_cash_flow(
CashFlowPlan, WalletAccount, DestinationAccount, SystemAccount, ProviderAccount, body(Withdrawal)
CashFlowPlan,
WalletAccount,
DestinationAccount,
SettlementAccount,
SubagentAccount,
ProviderAccount,
body(Withdrawal)
)),
PTransferID = construct_p_transfer_id(id(Withdrawal)),
PostingsTransferEvents = unwrap(p_transfer, ff_postings_transfer:create(PTransferID, FinalCashFlow)),
@ -331,16 +340,18 @@ get_system_accounts() ->
SystemAccounts = maps:get(accounts, SystemConfig, undefined),
{ok, SystemAccounts}.
-spec finalize_cash_flow(cash_flow_plan(), account(), account(), account(), account(), body()) ->
-spec finalize_cash_flow(cash_flow_plan(), account(), account(), account(), account(), account(), body()) ->
{ok, final_cash_flow()} | {error, _Error}.
finalize_cash_flow(CashFlowPlan, WalletAccount, DestinationAccount, SystemAccount, ProviderAccount, Body) ->
finalize_cash_flow(CashFlowPlan, WalletAccount, DestinationAccount,
SettlementAccount, SubagentAccount, ProviderAccount, Body) ->
Constants = #{
operation_amount => Body
},
Accounts = genlib_map:compact(#{
{wallet, sender_settlement} => WalletAccount,
{wallet, receiver_destination} => DestinationAccount,
{system, settlement} => SystemAccount,
{system, settlement} => SettlementAccount,
{system, subagent} => SubagentAccount,
{provider, settlement} => ProviderAccount
}),
ff_cash_flow:finalize(CashFlowPlan, Accounts, Constants).

View File

@ -456,5 +456,5 @@ process_withdrawal(WalID, DestID) ->
genlib_retry:linear(15, 1000)
),
ok = await_wallet_balance({10000 - 4240, <<"RUB">>}, WalID),
ok = await_destination_balance({4240 - 424, <<"RUB">>}, DestID),
ok = await_destination_balance({4240 - 848, <<"RUB">>}, DestID),
WdrID.

View File

@ -59,6 +59,7 @@
{wallet, receiver_settlement} |
{wallet, receiver_destination} |
{system, settlement} |
{system, subagent} |
{provider, settlement}.
-type final_account() :: #{
account := account(),

View File

@ -91,11 +91,21 @@
},
system => #{
accounts => #{
<<"RUB">> => #{
id => <<"system_some_id">>,
identity => <<"system_some_other_id">>,
currency => <<"RUB">>,
accounter_account_id => <<"system_some_third_id">>
settlement => #{
<<"RUB">> => #{
id => <<"system_some_id">>,
identity => <<"system_some_other_id">>,
currency => <<"RUB">>,
accounter_account_id => <<"system_some_third_id">>
}
},
subagent => #{
<<"RUB">> => #{
id => <<"system_some_id">>,
identity => <<"system_some_other_id">>,
currency => <<"RUB">>,
accounter_account_id => <<"system_some_third_id">>
}
}
}
}

View File

@ -46,7 +46,7 @@ services:
retries: 10
hellgate:
image: dr.rbkmoney.com/rbkmoney/hellgate:998985ade2bb8d8b7882e8d09a036414e91e25b4
image: dr.rbkmoney.com/rbkmoney/hellgate:8d7f618f6f2e1d8410384797b8f9a76150580f46
command: /opt/hellgate/bin/hellgate foreground
depends_on:
machinegun:
@ -86,7 +86,7 @@ services:
retries: 20
dominant:
image: dr.rbkmoney.com/rbkmoney/dominant:7eda4ecade678a7a2dd25795c214ab8be93e8cd4
image: dr.rbkmoney.com/rbkmoney/dominant:3cf6c46d482f0057d117209170c831f5a238d95a
command: /opt/dominant/bin/dominant foreground
depends_on:
machinegun:
@ -117,7 +117,7 @@ services:
test: "curl http://localhost:8022/"
interval: 5s
timeout: 1s
retries: 10
retries: 30
identification:
image: dr.rbkmoney.com/rbkmoney/identification:ff4ef447327d81882c0ee618b622e5e04e771881

View File

@ -18,7 +18,7 @@
{<<"cowlib">>,{pkg,<<"cowlib">>,<<"1.0.2">>},1},
{<<"dmsl">>,
{git,"git@github.com:rbkmoney/damsel.git",
{ref,"8cfdc074bf39ae966c286796d25f94c1e95d5b47"}},
{ref,"37f417a48c19675478058733fa753dbe70babf58"}},
0},
{<<"dmt_client">>,
{git,"git@github.com:rbkmoney/dmt_client.git",
@ -42,7 +42,7 @@
0},
{<<"fistful_proto">>,
{git,"git@github.com:rbkmoney/fistful-proto.git",
{ref,"56a39762845bf8eb299ae0ba4d0bf21ae0fa4620"}},
{ref,"6977cd82d85282277a2d371edca647ce9cdfcf70"}},
0},
{<<"fistful_reporter_proto">>,
{git,"git@github.com:rbkmoney/fistful-reporter-proto.git",