Merge branch 'transform-currency-support-v2' into 'master'
Transform currency support v2 See merge request saburly/gangsta/roraccounting!23
This commit was merged in pull request #23.
This commit is contained in:
@@ -1,6 +1,32 @@
|
|||||||
class ChipsController < ApplicationController
|
class ChipsController < ApplicationController
|
||||||
def index
|
def index
|
||||||
json_response Chip.where(enabled: true).order(:name).to_json(include: :base_chip_values)
|
all_chips = [
|
||||||
|
{
|
||||||
|
id: 1,
|
||||||
|
name: 'US Dollar',
|
||||||
|
symbol: '$',
|
||||||
|
code: 'USD',
|
||||||
|
scale: 2,
|
||||||
|
prefixed: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 2,
|
||||||
|
name: 'Bosnian Convertible Mark',
|
||||||
|
symbol: 'KM',
|
||||||
|
code: 'BAM',
|
||||||
|
scale: 2,
|
||||||
|
prefixed: false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 3,
|
||||||
|
name: 'Euro',
|
||||||
|
symbol: '€',
|
||||||
|
code: 'EUR',
|
||||||
|
scale: 3,
|
||||||
|
prefixed: false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
json_response all_chips
|
||||||
end
|
end
|
||||||
|
|
||||||
def create
|
def create
|
||||||
|
|||||||
@@ -46,8 +46,7 @@ class HomiesController < ApplicationController
|
|||||||
params.require(:homie).permit(
|
params.require(:homie).permit(
|
||||||
:name,
|
:name,
|
||||||
:importance,
|
:importance,
|
||||||
:about,
|
:about
|
||||||
:chip_id
|
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
28
app/controllers/original_gangstas_controller.rb
Normal file
28
app/controllers/original_gangstas_controller.rb
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
class OriginalGangstasController < ApplicationController
|
||||||
|
def show
|
||||||
|
if OriginalGangsta.count.zero?
|
||||||
|
OriginalGangsta.create.save
|
||||||
|
end
|
||||||
|
|
||||||
|
json_response OriginalGangsta.first
|
||||||
|
end
|
||||||
|
|
||||||
|
def update
|
||||||
|
if original_gangsta_params[:chip_scale].to_i.positive?
|
||||||
|
OriginalGangsta.update(original_gangsta_params)
|
||||||
|
json_response onboarded: true
|
||||||
|
else
|
||||||
|
error_response :bad_request
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def original_gangsta_params
|
||||||
|
params.require(:original_gangsta).permit :chip_name,
|
||||||
|
:chip_code,
|
||||||
|
:chip_symbol,
|
||||||
|
:chip_scale,
|
||||||
|
:chip_prefixed
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -1,7 +1,6 @@
|
|||||||
class Homie < ApplicationRecord
|
class Homie < ApplicationRecord
|
||||||
has_many :money_moves
|
has_many :money_moves
|
||||||
has_many :work
|
has_many :work
|
||||||
belongs_to :chip
|
|
||||||
|
|
||||||
def self.info(importance)
|
def self.info(importance)
|
||||||
cash_totals = Homie.all.joins(:money_moves).group(:id).order(:id).sum(:amount)
|
cash_totals = Homie.all.joins(:money_moves).group(:id).order(:id).sum(:amount)
|
||||||
|
|||||||
3
app/models/original_gangsta.rb
Normal file
3
app/models/original_gangsta.rb
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
class OriginalGangsta < ApplicationRecord
|
||||||
|
|
||||||
|
end
|
||||||
@@ -48,4 +48,10 @@
|
|||||||
.required:before {
|
.required:before {
|
||||||
color: red;
|
color: red;
|
||||||
content: "* ";
|
content: "* ";
|
||||||
|
}
|
||||||
|
|
||||||
|
.preloader-circle {
|
||||||
|
position: absolute;
|
||||||
|
height: 90%;
|
||||||
|
margin-left: 40%;
|
||||||
}
|
}
|
||||||
@@ -1,24 +1,78 @@
|
|||||||
import React from 'react';
|
import React, { useEffect, useState } from 'react';
|
||||||
import './App.css';
|
import './App.css';
|
||||||
import { Navbar } from 'react-materialize';
|
import { Navbar } from 'react-materialize';
|
||||||
import MakeMoneyMove from './cash/MakeMoneyMove';
|
import MakeMoneyMove from './cash/MakeMoneyMove';
|
||||||
import Flow from "./homies/Flow";
|
import Flow from "./homies/Flow";
|
||||||
import Cash from './cash/Cash';
|
import Cash from './cash/Cash';
|
||||||
import Chips from './chips/Chips';
|
|
||||||
import Homies from './homies/Homies';
|
import Homies from './homies/Homies';
|
||||||
import { BrowserRouter as Router, Route } from "react-router-dom";
|
import { BrowserRouter as Router, Route } from "react-router-dom";
|
||||||
import RoutableNavItem from './common/RoutableNavItem';
|
import RoutableNavItem from './common/RoutableNavItem';
|
||||||
|
import axios from 'axios';
|
||||||
import {
|
import {
|
||||||
CRIB,
|
CRIB,
|
||||||
CHIPS,
|
|
||||||
MAKE_MONEY_MOVE,
|
MAKE_MONEY_MOVE,
|
||||||
HOMIE_FLOW,
|
HOMIE_FLOW,
|
||||||
HOMIES, PUT_IN_WORK
|
HOMIES,
|
||||||
|
PUT_IN_WORK
|
||||||
} from './RouteNames';
|
} from './RouteNames';
|
||||||
import PutInWork from "./cash/PutInWork";
|
import PutInWork from "./cash/PutInWork";
|
||||||
|
import ChipSelection from "./originalGangstaOnboarding/ChipSelection";
|
||||||
|
import {errorToast} from "./common/errorHelpers";
|
||||||
|
|
||||||
|
|
||||||
|
const App = (props) => {
|
||||||
|
const [loading, setLoading] = useState(true);
|
||||||
|
const [originalGangsta, setOriginalGangsta] = useState({});
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
(async() => {
|
||||||
|
try {
|
||||||
|
setLoading(true);
|
||||||
|
const response = await axios.get(`/api/original_gangstas/0`);
|
||||||
|
if (response.status === 200 && response.data){
|
||||||
|
setOriginalGangsta(response.data);
|
||||||
|
}else{
|
||||||
|
errorToast();
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
errorToast();
|
||||||
|
}
|
||||||
|
setLoading(false);
|
||||||
|
})();
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
const routes = ([
|
||||||
|
<Route key='1' exact path={CRIB} component={() => <Cash originalGangsta={originalGangsta} />} />,
|
||||||
|
<Route key='2' exact path={HOMIES} component={() => <Homies originalGangsta={originalGangsta} />} />,
|
||||||
|
<Route key='3' path={HOMIE_FLOW} component={() => <Flow originalGangsta={originalGangsta} />} />,
|
||||||
|
<Route key='4' path={MAKE_MONEY_MOVE} component={() => <MakeMoneyMove originalGangsta={originalGangsta} />} />,
|
||||||
|
<Route key='5' path={PUT_IN_WORK} component={() => <PutInWork originalGangsta={originalGangsta} />} />
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
const onboarded = () => originalGangsta.chip_name && originalGangsta.chip_name.length > 0;
|
||||||
|
|
||||||
|
const preloaderCircle = (
|
||||||
|
<div className="container">
|
||||||
|
<div className="valign-wrapper center-align preloader-circle">
|
||||||
|
<div className="preloader-wrapper big active">
|
||||||
|
<div className="spinner-layer spinner-blue-only">
|
||||||
|
<div className="circle-clipper left">
|
||||||
|
<div className="circle" />
|
||||||
|
</div>
|
||||||
|
<div className="gap-patch">
|
||||||
|
<div className="circle" />
|
||||||
|
</div>
|
||||||
|
<div className="circle-clipper right">
|
||||||
|
<div className="circle" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
function App() {
|
|
||||||
return (
|
return (
|
||||||
<Router>
|
<Router>
|
||||||
<div className="navbar-fixed">
|
<div className="navbar-fixed">
|
||||||
@@ -31,10 +85,6 @@ function App() {
|
|||||||
Homies
|
Homies
|
||||||
</RoutableNavItem>
|
</RoutableNavItem>
|
||||||
|
|
||||||
<RoutableNavItem href={CHIPS}>
|
|
||||||
Chips
|
|
||||||
</RoutableNavItem>
|
|
||||||
|
|
||||||
<RoutableNavItem href={MAKE_MONEY_MOVE}>
|
<RoutableNavItem href={MAKE_MONEY_MOVE}>
|
||||||
Make Money Move
|
Make Money Move
|
||||||
</RoutableNavItem>
|
</RoutableNavItem>
|
||||||
@@ -46,12 +96,9 @@ function App() {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="autoscrolling">
|
<div className="autoscrolling">
|
||||||
<Route exact path={CRIB} component={Cash} />
|
{ loading && preloaderCircle }
|
||||||
<Route exact path={HOMIES} component={Homies} />
|
{ !loading && !onboarded() && <ChipSelection /> }
|
||||||
<Route path={HOMIE_FLOW} component={Flow} />
|
{ !loading && onboarded() && routes }
|
||||||
<Route path={CHIPS} component={Chips} />
|
|
||||||
<Route path={MAKE_MONEY_MOVE} component={MakeMoneyMove} />
|
|
||||||
<Route path={PUT_IN_WORK} component={PutInWork} />
|
|
||||||
</div>
|
</div>
|
||||||
</Router>
|
</Router>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
export const CRIB = '/';
|
export const CRIB = '/';
|
||||||
export const HOMIES = '/homies';
|
export const HOMIES = '/homies';
|
||||||
export const CHIPS = '/chips';
|
|
||||||
export const MAKE_MONEY_MOVE = '/make-money-move';
|
export const MAKE_MONEY_MOVE = '/make-money-move';
|
||||||
export const PUT_IN_WORK = '/put-in-work';
|
export const PUT_IN_WORK = '/put-in-work';
|
||||||
export const HOMIE_FLOW = '/homie/:homie_id/flow';
|
export const HOMIE_FLOW = '/homie/:homie_id/flow';
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import M from 'materialize-css';
|
|||||||
|
|
||||||
const Cash = (props) => {
|
const Cash = (props) => {
|
||||||
const [homiesCash, setHomiesCash] = useState([]);
|
const [homiesCash, setHomiesCash] = useState([]);
|
||||||
//const [importance, setImportance] = useState(10);
|
const originalGangsta = props.originalGangsta;
|
||||||
|
|
||||||
useEffect( () => {
|
useEffect( () => {
|
||||||
const getCashForHomies = async () => {
|
const getCashForHomies = async () => {
|
||||||
@@ -49,7 +49,7 @@ const Cash = (props) => {
|
|||||||
{ formatTime(homieLine.work) }
|
{ formatTime(homieLine.work) }
|
||||||
</td>
|
</td>
|
||||||
<td className="cash-cell-right">
|
<td className="cash-cell-right">
|
||||||
{ formatMoney(homieLine.amount) }
|
{ formatMoney(homieLine.amount, originalGangsta) }
|
||||||
</td>
|
</td>
|
||||||
<td className="cash-cell-left">
|
<td className="cash-cell-left">
|
||||||
[
|
[
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
const formatMoney = (amount) => {
|
const formatMoney = (amount, originalGangsta) => {
|
||||||
const formatted = Number.parseFloat(amount).toFixed(2);
|
const decimalPlaces = parseInt(originalGangsta['chip_scale']);
|
||||||
return `${formatted} KM`;
|
const symbol = originalGangsta['chip_symbol'];
|
||||||
|
const prefixed = originalGangsta['chip_prefixed'];
|
||||||
|
|
||||||
|
const formatted = Number.parseFloat(amount).toFixed(decimalPlaces);
|
||||||
|
return prefixed ? `${symbol} ${formatted}` : `${formatted} ${symbol}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
const formatTime = (amount) => {
|
const formatTime = (amount) => {
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import {errorToast} from "../common/errorHelpers";
|
|||||||
|
|
||||||
const CashFlow = (props) => {
|
const CashFlow = (props) => {
|
||||||
const { homie_id } = useParams();
|
const { homie_id } = useParams();
|
||||||
|
const originalGangsta = props.originalGangsta;
|
||||||
|
|
||||||
const [cashFlow, setCashFlow] = useState([]);
|
const [cashFlow, setCashFlow] = useState([]);
|
||||||
|
|
||||||
@@ -34,7 +35,7 @@ const CashFlow = (props) => {
|
|||||||
<div>{ dateBlock(singleFlowData['created_at']) }</div>
|
<div>{ dateBlock(singleFlowData['created_at']) }</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className={`flex-center ${singleFlowData.amount > 0 ? 'amount-green' : ''}`}>{ formatMoney(singleFlowData.amount) }</div>
|
<div className={`flex-center ${singleFlowData.amount > 0 ? 'amount-green' : ''}`}>{ formatMoney(singleFlowData.amount, originalGangsta) }</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
@@ -57,7 +58,7 @@ const CashFlow = (props) => {
|
|||||||
<strong>{`${totalCount} Records`}</strong><span className="grey-text">{` • ${fromDate} - ${toDate}`}</span>
|
<strong>{`${totalCount} Records`}</strong><span className="grey-text">{` • ${fromDate} - ${toDate}`}</span>
|
||||||
</div>
|
</div>
|
||||||
<div className="col s6 right-align">
|
<div className="col s6 right-align">
|
||||||
<span className="grey-text">Total cash flow:</span> <strong>{formatMoney(totalFlow)}</strong>
|
<span className="grey-text">Total cash flow:</span> <strong>{formatMoney(totalFlow, originalGangsta)}</strong>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import WorkFlow from "./WorkFlow";
|
|||||||
|
|
||||||
const Flow = (props) => {
|
const Flow = (props) => {
|
||||||
const [flowType, setFlowType] = useState('cash');
|
const [flowType, setFlowType] = useState('cash');
|
||||||
|
const originalGangsta = props.originalGangsta;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="container">
|
<div className="container">
|
||||||
@@ -18,7 +19,7 @@ const Flow = (props) => {
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{ flowType === 'cash' && <CashFlow /> }
|
{ flowType === 'cash' && <CashFlow originalGangsta={originalGangsta} /> }
|
||||||
{ flowType === 'work' && <WorkFlow /> }
|
{ flowType === 'work' && <WorkFlow /> }
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import React, { useState, useEffect } from 'react';
|
import React, { useState } from 'react';
|
||||||
import { Button, Collapsible, CollapsibleItem, Select, TextInput } from 'react-materialize';
|
import { Button, Collapsible, CollapsibleItem, Select, TextInput } from 'react-materialize';
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import { errorToast } from "../common/errorHelpers";
|
import { errorToast } from "../common/errorHelpers";
|
||||||
@@ -8,31 +8,11 @@ const NewHomieForm = (props) => {
|
|||||||
const [homieName, setHomieName] = useState("");
|
const [homieName, setHomieName] = useState("");
|
||||||
const [aboutHomie, setAboutHomie] = useState("");
|
const [aboutHomie, setAboutHomie] = useState("");
|
||||||
const [homieImportance, setHomieImportance] = useState("");
|
const [homieImportance, setHomieImportance] = useState("");
|
||||||
const [homieDefaultChip, setHomieDefaultChip] = useState("");
|
|
||||||
const [chips, setChips] = useState([]);
|
|
||||||
const [busy, setBusy] = useState(false);
|
const [busy, setBusy] = useState(false);
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
(async () => {
|
|
||||||
try {
|
|
||||||
const response = await axios.get('/api/chips');
|
|
||||||
if (response.status === 200 && response.data) {
|
|
||||||
setChips(response.data);
|
|
||||||
}else {
|
|
||||||
errorToast();
|
|
||||||
}
|
|
||||||
}catch (e) {
|
|
||||||
errorToast();
|
|
||||||
}
|
|
||||||
})();
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
const chipOptions = chips.map((chip, index) => <option key={index} value={chip.id}>{ chip.name }</option>);
|
|
||||||
|
|
||||||
const disableAddButton = () => {
|
const disableAddButton = () => {
|
||||||
return homieName.length === 0 ||
|
return homieName.length === 0 ||
|
||||||
homieImportance === "" ||
|
homieImportance === "" ||
|
||||||
homieDefaultChip === "" ||
|
|
||||||
busy;
|
busy;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -40,7 +20,6 @@ const NewHomieForm = (props) => {
|
|||||||
setHomieName("");
|
setHomieName("");
|
||||||
setAboutHomie("");
|
setAboutHomie("");
|
||||||
setHomieImportance("");
|
setHomieImportance("");
|
||||||
setHomieDefaultChip("");
|
|
||||||
|
|
||||||
const collapsible = document.getElementById('new-homie-form-container');
|
const collapsible = document.getElementById('new-homie-form-container');
|
||||||
const collapsibleInstance = M.Collapsible.getInstance(collapsible);
|
const collapsibleInstance = M.Collapsible.getInstance(collapsible);
|
||||||
@@ -54,8 +33,7 @@ const NewHomieForm = (props) => {
|
|||||||
homie: {
|
homie: {
|
||||||
name: homieName,
|
name: homieName,
|
||||||
about: aboutHomie,
|
about: aboutHomie,
|
||||||
importance: parseInt(homieImportance),
|
importance: parseInt(homieImportance)
|
||||||
chip_id: parseInt(homieDefaultChip)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -103,12 +81,6 @@ const NewHomieForm = (props) => {
|
|||||||
<option value={0}>Guy from the hood</option>
|
<option value={0}>Guy from the hood</option>
|
||||||
</Select>
|
</Select>
|
||||||
|
|
||||||
<label className="required">Homie default chip: </label>
|
|
||||||
<Select value={homieDefaultChip} onChange={(e) => setHomieDefaultChip(e.target.value)} name="defaultChip">
|
|
||||||
<option disabled value="">Set default chip</option>
|
|
||||||
{ chipOptions }
|
|
||||||
</Select>
|
|
||||||
|
|
||||||
<br/>
|
<br/>
|
||||||
|
|
||||||
<Button disabled={disableAddButton()} onClick={addNewHomie}>Add to the hood</Button>
|
<Button disabled={disableAddButton()} onClick={addNewHomie}>Add to the hood</Button>
|
||||||
|
|||||||
70
client/src/originalGangstaOnboarding/ChipSelection.js
Normal file
70
client/src/originalGangstaOnboarding/ChipSelection.js
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
import React, { useState, useEffect } from 'react';
|
||||||
|
import axios from "axios";
|
||||||
|
import { errorToast } from "../common/errorHelpers";
|
||||||
|
import {Button, Select, TextInput} from "react-materialize";
|
||||||
|
|
||||||
|
const ChipSelection = (props) => {
|
||||||
|
const [chips, setChips] = useState([]);
|
||||||
|
const [selectedChip, setSelectedChip] = useState('1');
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
(async() => {
|
||||||
|
try {
|
||||||
|
const response = await axios.get(`/api/chips`);
|
||||||
|
if (response.status === 200 && response.data){
|
||||||
|
setChips(response.data);
|
||||||
|
}else{
|
||||||
|
errorToast();
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
errorToast();
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
const chipsToOptions = chips.map( (chip, index) => <option key={index} value={chip.id}>{`${chip.code} • ${chip.name}`}</option>);
|
||||||
|
|
||||||
|
const disableSubmit = () => {
|
||||||
|
return !(parseInt(selectedChip) > 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleSubmit = async () => {
|
||||||
|
const chipData = chips.find(chip => chip.id === parseInt(selectedChip));
|
||||||
|
if (chipData){
|
||||||
|
const originalGangsta = {
|
||||||
|
chip_name: chipData.name,
|
||||||
|
chip_code: chipData.code,
|
||||||
|
chip_symbol: chipData.symbol,
|
||||||
|
chip_prefixed: chipData.prefixed,
|
||||||
|
chip_scale: chipData.scale
|
||||||
|
}
|
||||||
|
|
||||||
|
try{
|
||||||
|
const response = await axios.put('/api/original_gangstas/0', { 'original_gangsta': originalGangsta });
|
||||||
|
if (response.status === 200 && response.data && response.data.onboarded) {
|
||||||
|
window.location.reload();
|
||||||
|
}else{
|
||||||
|
errorToast();
|
||||||
|
}
|
||||||
|
}catch (e) {
|
||||||
|
errorToast();
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
errorToast();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className='container'>
|
||||||
|
<Select value={selectedChip} onChange={(e) => setSelectedChip(e.target.value)} name="selected-chip">
|
||||||
|
{ chipsToOptions }
|
||||||
|
</Select>
|
||||||
|
|
||||||
|
<Button disabled={disableSubmit()} waves="light" onClick={handleSubmit}>
|
||||||
|
Do It
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export default ChipSelection;
|
||||||
@@ -17,4 +17,5 @@
|
|||||||
|
|
||||||
ActiveSupport::Inflector.inflections do |inflect|
|
ActiveSupport::Inflector.inflections do |inflect|
|
||||||
inflect.irregular 'work', 'work'
|
inflect.irregular 'work', 'work'
|
||||||
|
inflect.irregular 'gangsta', 'gangstas'
|
||||||
end
|
end
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
Rails.application.routes.draw do
|
Rails.application.routes.draw do
|
||||||
constraints format: :json do
|
constraints format: :json do
|
||||||
scope :api do
|
scope :api do
|
||||||
|
resources :original_gangstas, only: [:show, :update]
|
||||||
resources :money_moves
|
resources :money_moves
|
||||||
resources :work
|
resources :work
|
||||||
resources :chips, only: %i[index create destroy]
|
resources :chips, only: %i[index create destroy]
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
class RemoveDefaultChipRefFromHomies < ActiveRecord::Migration[5.2]
|
||||||
|
def change
|
||||||
|
remove_reference :homies, :chip
|
||||||
|
end
|
||||||
|
end
|
||||||
13
db/migrate/20201006120951_create_original_gangstas.rb
Normal file
13
db/migrate/20201006120951_create_original_gangstas.rb
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
class CreateOriginalGangstas < ActiveRecord::Migration[5.2]
|
||||||
|
def change
|
||||||
|
create_table :original_gangstas do |t|
|
||||||
|
t.text :chip_name
|
||||||
|
t.text :chip_code
|
||||||
|
t.text :chip_symbol
|
||||||
|
t.boolean :chip_prefixed
|
||||||
|
t.integer :chip_scale
|
||||||
|
|
||||||
|
t.timestamps
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
14
db/schema.rb
14
db/schema.rb
@@ -10,7 +10,7 @@
|
|||||||
#
|
#
|
||||||
# It's strongly recommended that you check this file into your version control system.
|
# It's strongly recommended that you check this file into your version control system.
|
||||||
|
|
||||||
ActiveRecord::Schema.define(version: 2020_10_06_103421) do
|
ActiveRecord::Schema.define(version: 2020_10_06_120951) do
|
||||||
|
|
||||||
# These are extensions that must be enabled in order to support this database
|
# These are extensions that must be enabled in order to support this database
|
||||||
enable_extension "plpgsql"
|
enable_extension "plpgsql"
|
||||||
@@ -41,8 +41,6 @@ ActiveRecord::Schema.define(version: 2020_10_06_103421) do
|
|||||||
t.text "about"
|
t.text "about"
|
||||||
t.datetime "created_at", null: false
|
t.datetime "created_at", null: false
|
||||||
t.datetime "updated_at", null: false
|
t.datetime "updated_at", null: false
|
||||||
t.bigint "chip_id"
|
|
||||||
t.index ["chip_id"], name: "index_homies_on_chip_id"
|
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "money_moves", force: :cascade do |t|
|
create_table "money_moves", force: :cascade do |t|
|
||||||
@@ -53,6 +51,16 @@ ActiveRecord::Schema.define(version: 2020_10_06_103421) do
|
|||||||
t.datetime "updated_at", null: false
|
t.datetime "updated_at", null: false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
create_table "original_gangstas", force: :cascade do |t|
|
||||||
|
t.text "chip_name"
|
||||||
|
t.text "chip_code"
|
||||||
|
t.text "chip_symbol"
|
||||||
|
t.boolean "chip_prefixed"
|
||||||
|
t.integer "chip_scale"
|
||||||
|
t.datetime "created_at", null: false
|
||||||
|
t.datetime "updated_at", null: false
|
||||||
|
end
|
||||||
|
|
||||||
create_table "work", force: :cascade do |t|
|
create_table "work", force: :cascade do |t|
|
||||||
t.text "description"
|
t.text "description"
|
||||||
t.integer "amount"
|
t.integer "amount"
|
||||||
|
|||||||
Reference in New Issue
Block a user