Skip to content

Commit 5dc9745

Browse files
committed
misc contract calc
1 parent 65b492d commit 5dc9745

File tree

7 files changed

+32
-31
lines changed

7 files changed

+32
-31
lines changed

lib/algora/bounties/bounties.ex

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -860,7 +860,7 @@ defmodule Algora.Bounties do
860860
%{contract_type: :marketplace} ->
861861
[
862862
%LineItem{
863-
amount: Money.mult!(amount, Decimal.add(1, Decimal.add(platform_fee_pct, transaction_fee_pct))),
863+
amount: amount,
864864
title: "Contract payment - @#{recipient.provider_login}",
865865
description: "(includes all platform and payment processing fees)",
866866
image: recipient.avatar_url,
@@ -906,6 +906,12 @@ defmodule Algora.Bounties do
906906
end
907907
end
908908

909+
def calculate_contract_amount(amount), do: Money.mult!(amount, Decimal.new("1.13"))
910+
911+
def final_contract_amount(:marketplace, amount), do: amount
912+
913+
def final_contract_amount(:bring_your_own, amount), do: calculate_contract_amount(amount)
914+
909915
@spec create_payment_session(
910916
%{owner: User.t(), amount: Money.t(), description: String.t()},
911917
opts :: [
@@ -1088,7 +1094,6 @@ defmodule Algora.Bounties do
10881094
})
10891095
|> Algora.Validations.validate_positive(:gross_amount)
10901096
|> Algora.Validations.validate_positive(:net_amount)
1091-
|> Algora.Validations.validate_positive(:total_fee)
10921097
|> foreign_key_constraint(:user_id)
10931098
|> unique_constraint([:idempotency_key])
10941099
|> Repo.insert()

lib/algora/contracts/contracts.ex

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,6 @@ defmodule Algora.Contracts do
188188
})
189189
|> Algora.Validations.validate_positive(:gross_amount)
190190
|> Algora.Validations.validate_positive(:net_amount)
191-
|> Algora.Validations.validate_positive(:total_fee)
192191
|> foreign_key_constraint(:original_contract_id)
193192
|> foreign_key_constraint(:contract_id)
194193
|> foreign_key_constraint(:timesheet_id)

lib/algora/payments/payments.ex

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -637,16 +637,16 @@ defmodule Algora.Payments do
637637
|> Repo.all()
638638
|> Map.new(&{&1.id, &1})
639639

640-
{issue_bounty_ids, contract_bounty_ids} =
640+
{auto_bounty_ids, manual_bounty_ids} =
641641
Enum.split_with(bounty_ids, fn id ->
642642
bounty = bounties[id]
643-
bounty && bounty.ticket.repository_id
643+
bounty && bounty.contract_type != :marketplace
644644
end)
645645

646646
tip_ids = txs |> Enum.map(& &1.tip_id) |> Enum.reject(&is_nil/1) |> Enum.uniq()
647647
claim_ids = txs |> Enum.map(& &1.claim_id) |> Enum.reject(&is_nil/1) |> Enum.uniq()
648648

649-
Repo.update_all(from(b in Bounty, where: b.id in ^issue_bounty_ids), set: [status: :paid])
649+
Repo.update_all(from(b in Bounty, where: b.id in ^auto_bounty_ids), set: [status: :paid])
650650
Repo.update_all(from(t in Tip, where: t.id in ^tip_ids), set: [status: :paid])
651651
# TODO: add and use a new "paid" status for claims
652652
Repo.update_all(from(c in Claim, where: c.id in ^claim_ids), set: [status: :approved])
@@ -655,16 +655,16 @@ defmodule Algora.Payments do
655655
Enum.filter(txs, fn tx ->
656656
bounty = bounties[tx.bounty_id]
657657

658-
contract? = tx.bounty_id in contract_bounty_ids
658+
manual? = tx.bounty_id in manual_bounty_ids
659659

660-
if contract? do
660+
if tx.type == :credit and manual? do
661661
Admin.alert(
662662
"Contract payment received. URL: #{AlgoraWeb.Endpoint.url()}/#{bounty.owner.handle}/contracts/#{bounty.id}",
663663
:info
664664
)
665665
end
666666

667-
tx.type != :credit or not contract?
667+
tx.type != :credit or not manual?
668668
end)
669669

670670
Repo.update_all(

lib/algora_web/forms/contract_form.ex

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ defmodule AlgoraWeb.Forms.ContractForm do
66
import Ecto.Changeset
77

88
alias Algora.Accounts.User
9+
alias Algora.Bounties
910
alias Algora.Types.USD
1011
alias Algora.Validations
1112

@@ -224,7 +225,9 @@ defmodule AlgoraWeb.Forms.ContractForm do
224225
</div>
225226
</dt>
226227
<dd class="font-display font-semibold tabular-nums text-lg">
227-
{Money.to_string!(Money.mult!(get_change(@form.source, :amount), Decimal.new("1.13")))}
228+
{Money.to_string!(
229+
Bounties.calculate_contract_amount(get_change(@form.source, :amount))
230+
)}
228231
</dd>
229232
</div>
230233
</dl>

lib/algora_web/live/contract_live.ex

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -392,7 +392,9 @@ defmodule AlgoraWeb.ContractLive do
392392
<.icon name="tabler-circle-number-2 mr-2" class="size-8 text-success-400" />
393393
When {@contractor.name} accepts, you will be charged
394394
<span class="font-semibold font-display px-1">
395-
{Money.to_string!(Money.mult!(@bounty.amount, Decimal.new("1.13")))}
395+
{Money.to_string!(
396+
Bounties.final_contract_amount(@bounty.contract_type, @bounty.amount)
397+
)}
396398
</span>
397399
into escrow
398400
</li>
@@ -404,7 +406,9 @@ defmodule AlgoraWeb.ContractLive do
404406
405407
<dl class="-mt-12 space-y-4">
406408
<dd class="font-display tabular-nums text-5xl text-success-400 font-bold">
407-
{Money.to_string!(Money.mult!(@bounty.amount, Decimal.new("1.13")))}
409+
{Money.to_string!(
410+
Bounties.final_contract_amount(@bounty.contract_type, @bounty.amount)
411+
)}
408412
</dd>
409413
<div class="flex justify-between">
410414
<dt class="text-foreground">

lib/algora_web/live/org/dashboard_live.ex

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1385,17 +1385,6 @@ defmodule AlgoraWeb.Org.DashboardLive do
13851385
<span class="line-clamp-1">{@match.user.provider_meta["twitter_handle"]}</span>
13861386
</.link>
13871387
</div>
1388-
<%!-- <div
1389-
:if={@match[:hourly_rate]}
1390-
class="flex flex-wrap items-center gap-x-3 gap-y-1 text-sm text-muted-foreground sm:text-sm"
1391-
>
1392-
<span class="font-semibold font-display text-base sm:text-lg text-emerald-400">
1393-
{@match[:hourly_rate]
1394-
|> Money.mult!(@match.user.hours_per_week || 30)
1395-
|> Money.mult!(Decimal.new("1.13"))
1396-
|> Money.to_string!()}/wk
1397-
</span>
1398-
</div> --%>
13991388
</div>
14001389
</div>
14011390
</div>
@@ -1477,13 +1466,10 @@ defmodule AlgoraWeb.Org.DashboardLive do
14771466
<div class="flex flex-col items-center gap-1 font-semibold">
14781467
<span>Offer contract</span>
14791468
<dd class="font-display font-semibold tabular-nums text-lg text-emerald-400">
1480-
{Money.to_string!(
1481-
Money.mult!(
1482-
@match[:hourly_rate] |> Money.mult!(@match.user.hours_per_week || 30),
1483-
Decimal.new("1.13")
1484-
),
1485-
no_fraction_if_integer: false
1486-
)} / week
1469+
{@match[:hourly_rate]
1470+
|> Money.mult!(@match.user.hours_per_week || 30)
1471+
|> Bounties.calculate_contract_amount()
1472+
|> Money.to_string!(no_fraction_if_integer: false)} / week
14871473
</dd>
14881474
</div>
14891475
</.button>

lib/algora_web/live/org/nav.ex

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,11 @@ defmodule AlgoraWeb.Org.Nav do
132132
bounty_res =
133133
Bounties.create_bounty(
134134
%{
135-
amount: amount,
135+
amount:
136+
case data.contract_type do
137+
:marketplace -> Bounties.calculate_contract_amount(amount)
138+
:bring_your_own -> amount
139+
end,
136140
creator: socket.assigns.current_user,
137141
owner: socket.assigns.current_org,
138142
title: data.title,

0 commit comments

Comments
 (0)