diff --git a/app/controllers/homies_controller.rb b/app/controllers/homies_controller.rb index 4bdd945..86ecc92 100644 --- a/app/controllers/homies_controller.rb +++ b/app/controllers/homies_controller.rb @@ -28,10 +28,11 @@ class HomiesController < ApplicationController def settle homie_id = params[:homie_id].to_i + amount = params[:amount].present? ? params[:amount].to_d : nil homie = Homie.find(homie_id) - if homie.settle - json_response [] + if homie.settle(amount) + cash else error_response :bad_request end diff --git a/app/models/homie.rb b/app/models/homie.rb index 9d5d5f6..1c1efa4 100644 --- a/app/models/homie.rb +++ b/app/models/homie.rb @@ -12,8 +12,8 @@ class Homie < ApplicationRecord end end - def settle - total = MoneyMove.where(homie_id: id).all.sum(:amount) + def settle(amount) + total = amount.nil? ? MoneyMove.where(homie_id: id).all.sum(:amount) : amount all_money_moves = MoneyMove.where(homie_id: id).all transaction do @@ -22,7 +22,7 @@ class Homie < ApplicationRecord MoneyMove.create_settle_record(id, total) end true - rescue StandardError => e + rescue StandardError false end end diff --git a/client/src/cash/Cash.js b/client/src/cash/Cash.js index 6f22627..c3e2aac 100644 --- a/client/src/cash/Cash.js +++ b/client/src/cash/Cash.js @@ -5,13 +5,12 @@ import axios from 'axios'; import { MAKE_MONEY_MOVE } from '../RouteNames'; import { withRouter } from 'react-router-dom'; import { formatMoney } from '../common/formatting'; -import YesNoModal from "../common/YesNoModal"; +import InputModal from "../common/InputModal"; import { errorToast } from "../common/errorHelpers"; import M from 'materialize-css'; const Cash = (props) => { const [homiesCash, setHomiesCash] = useState([]); - const [, forceUpdate] = useReducer(x => x + 1, 0); //const [importance, setImportance] = useState(10); useEffect( () => { @@ -26,18 +25,18 @@ const Cash = (props) => { getCashForHomies(); }, []); - const settleFlowForHomie = async (id) => { + const settleFlowForHomie = async (id, amountToSettle) => { try { - const response = await axios.delete(`/api/homies/${id}/settle`); + const response = await axios.post(`/api/homies/${id}/settle`, { amount: amountToSettle }); if (response.status === 200 && response.data) { M.toast({ html: 'Settled' }); + setHomiesCash(response.data); }else{ errorToast(); } } catch(e) { errorToast(); } - forceUpdate(); } const cashTableBody = homiesCash.map( (homieLine) => { @@ -51,9 +50,11 @@ const Cash = (props) => {
{body}
+