Commit f8fc471f authored by Hasitha Samarasekara's avatar Hasitha Samarasekara

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	BackEnd/WebBackEnd/server.js
#	WebFrontEnd/smartcoach-frontend/src/App.js
parents 3d7f4ace 5ca7d3f7
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
let FinanceSchema = new Schema({
account_month : {type:String, required:true},
direct_income : {type: String, required:true},
indirect_income : {type: String, required:true},
total_income : {type: String, required:true},
direct_expenses : {type: String, required:true},
indirect_expenses : {type: String, required:true},
total_expenses : {type: String, required:true},
gross_revenue : {type: String, required:true}
},{
timestamps : true
});
const Finance = mongoose.model('finance', FinanceSchema);
module.exports = Finance;
\ No newline at end of file
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
let Question = new Schema({
question_id: mongoose.Schema.Types.ObjectId,
category:{
type:String
},
name:{
type:String
},
question_text:{
type:String
},
question_answer:{
type:String
},
defult_mark:{
type: Number
},
q_type:{
type: String
},
time_createdby:{
type: Date
},
time_modifiedby:{
type: Date
},
general_feedback:{
type: String
}
});
module.exports = mongoose.model('Question',Question);
\ No newline at end of file
const router = require('express').Router();
//import models
const Finance = require('../models/finance.model');
let Tutor = require('../models/tutor.user.model');
router.route('/tutors').get((req,res) =>{
Tutor.find({}, {tutor_name:1, _id:0})
.then(tutors => res.json(tutors))
.catch(err => res.status(400).json('Error: '+ err));
});
router.route('/').get((req ,res) => {
Finance.find()
.then( financedetails => res.json(financedetails))
.catch(err => res.status(400).json('Error :'+err));
});
router.route('/store').post((req ,res) =>{
const account_month = req.body.account_month;
const direct_income = req.body.direct_income;
const indirect_income = req.body.indirect_income;
const total_income = req.body.total_income;
const direct_expenses = req.body.direct_expenses;
const indirect_expenses = req.body.indirect_expenses;
const total_expenses = req.body.total_expenses;
const gross_revenue = req.body.gross_revenue;
const newFinancialDetails = new Finance({
account_month,
direct_income,
indirect_income,
total_income,
direct_expenses,
indirect_expenses,
total_expenses,
gross_revenue
});
newFinancialDetails.save()
.then(()=> res.json('Financial Details Added!'))
.catch(err => res.status(400).json('Error :'+err));
});
router.route('/:id').get((req , res) =>{
Finance.findById(req.params.id)
.then(financedetails => res.json(financedetails))
.catch(err => res.status(400).json('Error :'+err));
});
router.route('/update/:id').post((req , res) =>{
Finance.findById(req.params.id)
.then(financialDetails =>{
financialDetails.account_month = req.body.account_month;
financialDetails.direct_income = req.body.direct_income;
financialDetails.indirect_income = req.body.indirect_income;
financialDetails.total_income = req.body.total_income;
financialDetails.direct_expenses = req.body.direct_expenses;
financialDetails.indirect_expenses = req.body.indirect_expenses;
financialDetails.total_expenses = req.body.total_expenses;
financialDetails.gross_revenue = req.body.gross_revenue;
financialDetails.save()
.then(()=> res.json('Finance Details Updated!'))
.catch(err => res.status(400).json('Error :'+err));
})
.catch(err => res.status(400).json('Error :'+err));
});
router.route('/:id').delete((req ,res) =>{
Finance.findByIdAndDelete(req.params.id)
.then(()=> res.json('Financial Details Deleted!'))
.catch(err => res.status(400).json('Error :'+err));
});
module.exports = router;
\ No newline at end of file
const questionRouter = require('express').Router();
let Question = require('../models/question.model.js');
const mongoose = require('mongoose');
questionRouter.route('/').get(function(req, res) {
Question.find(function(err, questions) {
if (err) {
console.log(err);
res.render('index');
} else {
res.json(questions);
}
});
});
questionRouter.route('/:id').get(function (req, res) {
let id = req.params.id;
Question.findById(id, function (err, question) {
res.json(question);
});
});
questionRouter.route('/questionId/:id').get(function (req, res) {
console.log("Question ID");
console.log(req.params.id);
let id = req.params.id;
Question.find({"_id" : id}, function (err, question) {
res.json(question);
});
});
questionRouter.route('/add').post(function(req, res) {
const question = new Question({
question_id: new mongoose.Types.ObjectId(),
category : req.body.category,
name : req.body.name,
question_text: req.body.question_text,
question_answer:req.body.question_answer,
defult_mark: req.body.defult_mark,
q_type: req.body.q_type,
time_createdby: req.body.time_createdby,
time_modifiedby: req.body.time_modifiedby,
general_feedback: req.body.general_feedback
});
question
.save()
.then(result => {
res.json(result);
console.log(result);
res.status(201).json({
message: "Created product successfully",
createdProduct: {
category: result.category,
name: result.name,
question_text: result.question_text,
defult_mark: result.defult_mark,
q_type: result.q_type,
time_createdby: req.body.time_createdby,
time_modifiedby: req.body.time_modifiedby,
general_feedback: req.body.general_feedback,
question_id: result.question_id,
request: {
type: 'GET',
url: "http://localhost:5000/questions/" + result._id
}
}
});
})
.catch(err => {
console.log(err);
res.status(500).json({error: err});
});
});
questionRouter.route('/update/:id').post((req, res) => {
Question.findById(req.params.id,function(err, question){
if(!question)
req.status(404).send("data is not found");
else
question.category = req.body.category;
question.name =req.body.name;
question.question_text = req.body.question_text;
question.defult_mark = req.body.defult_mark;
question.q_type = req.body.q_type;
question.time_createdby = req.body.time_createdby;
question.time_modifiedby = req.body.time_modifiedby;
question.general_feedback = req.body.general_feedback;
question.save().then(question =>{
res.json('Item update!');
})
.catch(err =>{
res.status(400).send("Update not possible");
});
});
});
questionRouter.route('/delete/:id').delete((req, res) => {
Question.findByIdAndDelete(req.params.id)
.then(() => res.json('Product Deleted.'))
.catch(err => res.status(400).json('Error: ' + err));
});
module.exports = questionRouter;
\ No newline at end of file
const express = require('express');
const cors = require('cors');
const bodyParser = require('body-parser');
const mongoose =require('mongoose');
require('dotenv').config();
const app = express();
const port = process.env.PORT || 5000;
app.use(bodyParser.urlencoded({ extended: true }));
app.use(cors({}));
app.use(cors());
app.use(express.json());
const uri = process.env.ATLAS_URI;
......@@ -18,17 +17,24 @@ mongoose.connect(uri,{useNewUrlParser:true, useUnifiedTopology: true, useCreateI
const connection = mongoose.connection;
connection.once('open',() => {
console.log("MongoDB database connection established successfully");
}).catch(err => {
console.error('App starting error:', err.stack);
process.exit(1);
});
const studentRouter = require('./routes/student.route');
const tutorRouter = require('./routes/tutor.route');
const instituteRouter = require('./routes/institute.route');
const userAccount = require('./routes/userAccount.route');
const questionManage = require('./routes/question.route');
const financeRouter = require('./routes/finance.route');
app.use('/studentSingUp',studentRouter);
app.use('/tutorSingUp',tutorRouter);
app.use('/instituteSingUp',instituteRouter);
app.use('/userAccount',userAccount);
app.use('/questions', questionManage);
app.use('/admin/finance', financeRouter);
app.listen(port, () => {
console.log(`Server is running on Port: ${port}`);
......
.dropdown1 {
position: relative;
display: inline-block;
cursor:pointer;
}
.dropdown-content1 {
position: absolute;
display: none;
top: 100%;
left: 0;
z-index: 1000;
float: left;
padding: .65rem 0;
font-size: .88rem;
color: #495057;
text-align: left;
list-style: none;
background-color: #fff;
background-clip: padding-box;
border: 1px solid rgba(0, 0, 0, 0.15);
border-radius: .25rem;
}
.dropdown1:hover .dropdown-content1 {
display: block;
}
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>SmartCoach</title>
<!-- bootstrap cdn css -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
<!-- dashboard css -->
<link rel="stylesheet" href="DashboardAssets/css/dashboard.css">
<link rel="stylesheet" href="DashboardAssets/css/custom.css">
<!-- fa fa icons cdn -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<title>SmartCoach</title>
</head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>
<!-- bootstrap cdn js -->
<script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script>
<!-- dashboard js -->
<script src="DashboardAssets/js/dashboard.js"></script>
</body>
</html>
import './App.css';
import 'bootstrap/dist/css/bootstrap.min.css';
import { BrowserRouter as Router, Route } from "react-router-dom";
import { BrowserRouter as Router, Route, Switch } from "react-router-dom";
//Pages
import Login from "./Components/Login";
......@@ -11,17 +10,23 @@ import Home from "./Components/Home";
import SignUp from "./Components/SignUp";
import beforeConfirmation from "./Components/beforeConfirmation";
import VerifiedAccount from "./Components/AccountVerified";
import Dashboard from "./Components/Admin/Dashboard";
function App() {
return (
<Router>
<div className="App">
{/*<ItemNav/>*/}
<Route path="/UserLogin" exact component={Login}/>
<Route path="/Home" exact component={Home}/>
<Route path="/SignUp" exact component={SignUp}/>
<Route path="/beforeConfirm" exact component={beforeConfirmation}/>
<Route path="/AccountVerified/:id" exact component={VerifiedAccount}/>
{/*<Route path="/" exact component={Dashboard}/>*/}
<Switch>
<Route path="/admin"><Dashboard/></Route>
</Switch>
</div>
</Router>
);
......
import React, {Component} from 'react';
import {NavLink, Route} from 'react-router-dom';
import {Link} from "react-router-dom";
import AddFinance from './add_financial_details';
import ViewFinance from './view_financial_details';
import EditFinance from './edit_financial_details';
export default class Dashboard extends Component {
render() {
return (
<div>
<meta charSet="utf-8"/>
<meta httpEquiv="X-UA-Compatible" content="IE=edge"/>
<meta httpEquiv="Content-Language" content="en"/>
<meta httpEquiv="Content-Type" content="text/html; charset=utf-8"/>
<title>SMART COACH - Tutor Dashboard</title>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, shrink-to-fit=no"/>
<div className="app-container app-theme-white body-tabs-shadow fixed-sidebar fixed-header">
<div className="app-header header-shadow">
<div className="app-header__logo">
<div className="logo-src"/>
<div className="header__pane ml-auto">
<div>
<button type="button" className="hamburger close-sidebar-btn hamburger--elastic"data-class="closed-sidebar">
<span className="hamburger-box">
<span className="hamburger-inner"/>
</span>
</button>
</div>
</div>
</div>
<div className="app-header__mobile-menu">
<div>
<button type="button" className="hamburger hamburger--elastic mobile-toggle-nav">
<span className="hamburger-box">
<span className="hamburger-inner"/>
</span>
</button>
</div>
</div>
<div className="app-header__menu">
<span>
<button type="button" className="btn-icon btn-icon-only btn btn-primary btn-sm mobile-toggle-header-nav">
<span className="btn-icon-wrapper">
<i className="fa fa-ellipsis-v fa-w-6"/>
</span>
</button>
</span>
</div>
<div className="app-header__content">
<div className="app-header-left">
{/* Search Bar */}
<div className="search-wrapper">
<div className="input-holder">
<input type="text" className="search-input" placeholder="Type to search"/>
<button className="search-icon"><span/></button>
</div>
<button className="close"/>
</div>
</div>
<div className="app-header-right">
<div className="header-btn-lg pr-0">
<div className="widget-content p-0">
<div className="widget-content-wrapper">
<div className="widget-content-left">
<div className="btn-group">
<div className="dropdown1">
<img width="42" className="rounded-circle" src="DashboardAssets/images/user.jpg" alt=""/>
<i className="fa fa-angle-down ml-2 opacity-8"/>
<div className="dropdown-content1 dropdown-menu-right">
<button type="button" className="dropdown-item">User Account</button>
<button type="button" className="dropdown-item" style={{color:"red"}}>Sign Out</button>
</div>
</div>
</div>
</div>
<div className="widget-content-left ml-3 header-user-info">
<div className="widget-heading">
Bandara Dissanayake
</div>
<div className="widget-subheading">
Tutor
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div className="ui-theme-settings">
<button type="button" id="TooltipDemo" className="btn-open-options btn btn-outline-secondary btn-warning" style={{color:"black"}}>
<i className="fa fa-cog fa-w-16 fa-spin fa-2x"/>
</button>
<div className="theme-settings__inner">
<div className="scrollbar-container">
<div className="theme-settings__options-wrapper">
<h3 className="themeoptions-heading">Layout Options
</h3>
<div className="p-3">
<ul className="list-group">
<li className="list-group-item">
<div className="widget-content p-0">
<div className="widget-content-wrapper">
<div className="widget-content-left mr-3">
<div className="switch has-switch switch-container-class"
data-class="fixed-header">
<div className="switch-animate switch-on">
<input type="checkbox" defaultChecked data-toggle="toggle" data-onstyle="success"/>
</div>
</div>
</div>
<div className="widget-content-left">
<div className="widget-heading">
Fixed Header
</div>
<div className="widget-subheading">
Makes the header top fixed, always visible!
</div>
</div>
</div>
</div>
</li>
<li className="list-group-item">
<div className="widget-content p-0">
<div className="widget-content-wrapper">
<div className="widget-content-left mr-3">
<div className="switch has-switch switch-container-class" data-class="fixed-sidebar">
<div className="switch-animate switch-on">
<input type="checkbox" data-toggle="toggle" data-onstyle="success"/>
</div>
</div>
</div>
<div className="widget-content-left">
<div className="widget-heading">
Fixed Sidebar
</div>
<div className="widget-subheading">
Makes the sidebar left fixed, always visible!
</div>
</div>
</div>
</div>
</li>
<li className="list-group-item">
<div className="widget-content p-0">
<div className="widget-content-wrapper">
<div className="widget-content-left mr-3">
<div className="switch has-switch switch-container-class"
data-class="fixed-footer">
<div className="switch-animate switch-off">
<input type="checkbox" data-toggle="toggle" data-onstyle="success"/>
</div>
</div>
</div>
<div className="widget-content-left">
<div className="widget-heading">Fixed Footer
</div>
<div className="widget-subheading">
Makes the app footer bottom fixed, always visible!
</div>
</div>
</div>
</div>
</li>
</ul>
</div>
<h3 className="themeoptions-heading">
<div>
Header Options
</div>
<button type="button" className="btn-pill btn-shadow btn-wide ml-auto btn btn-focus btn-sm switch-header-cs-class" data-class>
Restore Default
</button>
</h3>
<div className="p-3">
<ul className="list-group">
<li className="list-group-item">
<h5 className="pb-2">Choose Color Scheme</h5>
<div className="theme-settings-swatches">
<div className="swatch-holder bg-primary switch-header-cs-class" data-class="bg-primary header-text-light"></div>
<div className="swatch-holder bg-secondary switch-header-cs-class" data-class="bg-secondary header-text-light"></div>
<div className="swatch-holder bg-success switch-header-cs-class"data-class="bg-success header-text-dark"></div>
<div className="swatch-holder bg-info switch-header-cs-class"ata-class="bg-info header-text-dark"></div>
<div className="swatch-holder bg-warning switch-header-cs-class"data-class="bg-warning header-text-dark"></div>
<div className="swatch-holder bg-danger switch-header-cs-class"data-class="bg-danger header-text-light"></div>
<div className="swatch-holder bg-light switch-header-cs-class"data-class="bg-light header-text-dark"></div>
<div className="swatch-holder bg-dark switch-header-cs-class"data-class="bg-dark header-text-light"></div>
<div className="swatch-holder bg-focus switch-header-cs-class"data-class="bg-focus header-text-light"></div>
<div className="swatch-holder bg-alternate switch-header-cs-class"data-class="bg-alternate header-text-light"></div>
<div className="divider"></div>
<div className="swatch-holder bg-vicious-stance switch-header-cs-class" data-class="bg-vicious-stance header-text-light"></div>
<div className="swatch-holder bg-midnight-bloom switch-header-cs-class" data-class="bg-midnight-bloom header-text-light"></div>
<div className="swatch-holder bg-night-sky switch-header-cs-class" data-class="bg-night-sky header-text-light"></div>
<div className="swatch-holder bg-slick-carbon switch-header-cs-class" data-class="bg-slick-carbon header-text-light"></div>
<div className="swatch-holder bg-asteroid switch-header-cs-class" data-class="bg-asteroid header-text-light"></div>
<div className="swatch-holder bg-royal switch-header-cs-class" data-class="bg-royal header-text-light"></div>
<div className="swatch-holder bg-warm-flame switch-header-cs-class" data-class="bg-warm-flame header-text-dark"></div>
<div className="swatch-holder bg-night-fade switch-header-cs-class" data-class="bg-night-fade header-text-dark"></div>
<div className="swatch-holder bg-sunny-morning switch-header-cs-class" data-class="bg-sunny-morning header-text-dark"></div>
<div className="swatch-holder bg-tempting-azure switch-header-cs-class" data-class="bg-tempting-azure header-text-dark"></div>
<div className="swatch-holder bg-amy-crisp switch-header-cs-class" data-class="bg-amy-crisp header-text-dark"></div>
<div className="swatch-holder bg-heavy-rain switch-header-cs-class" data-class="bg-heavy-rain header-text-dark"></div>
<div className="swatch-holder bg-mean-fruit switch-header-cs-class" data-class="bg-mean-fruit header-text-dark"></div>
<div className="swatch-holder bg-malibu-beach switch-header-cs-class" data-class="bg-malibu-beach header-text-light"></div>
<div className="swatch-holder bg-deep-blue switch-header-cs-class" data-class="bg-deep-blue header-text-dark"></div>
<div className="swatch-holder bg-ripe-malin switch-header-cs-class" data-class="bg-ripe-malin header-text-light"></div>
<div className="swatch-holder bg-arielle-smile switch-header-cs-class" data-class="bg-arielle-smile header-text-light"></div>
<div className="swatch-holder bg-plum-plate switch-header-cs-class" data-class="bg-plum-plate header-text-light"></div>
<div className="swatch-holder bg-happy-fisher switch-header-cs-class" data-class="bg-happy-fisher header-text-dark"></div>
<div className="swatch-holder bg-happy-itmeo switch-header-cs-class" data-class="bg-happy-itmeo header-text-light"></div>
<div className="swatch-holder bg-mixed-hopes switch-header-cs-class" data-class="bg-mixed-hopes header-text-light"></div>
<div className="swatch-holder bg-strong-bliss switch-header-cs-class" data-class="bg-strong-bliss header-text-light"></div>
<div className="swatch-holder bg-grow-early switch-header-cs-class" data-class="bg-grow-early header-text-light"></div>
<div className="swatch-holder bg-love-kiss switch-header-cs-class" data-class="bg-love-kiss header-text-light"></div>
<div className="swatch-holder bg-premium-dark switch-header-cs-class" data-class="bg-premium-dark header-text-light"></div>
<div className="swatch-holder bg-happy-green switch-header-cs-class" data-class="bg-happy-green header-text-light"></div>
</div>
</li>
</ul>
</div>
<h3 className="themeoptions-heading">
<div>Sidebar Options</div>
<button type="button" className="btn-pill btn-shadow btn-wide ml-auto btn btn-focus btn-sm switch-sidebar-cs-class" data-class>
Restore Default
</button>
</h3>
<div className="p-3">
<ul className="list-group">
<li className="list-group-item">
<h5 className="pb-2">Choose Color Scheme</h5>
<div className="theme-settings-swatches">
<div className="swatch-holder bg-primary switch-sidebar-cs-class" data-class="bg-primary sidebar-text-light"></div>
<div className="swatch-holder bg-secondary switch-sidebar-cs-class" data-class="bg-secondary sidebar-text-light"></div>
<div className="swatch-holder bg-success switch-sidebar-cs-class" data-class="bg-success sidebar-text-dark"></div>
<div className="swatch-holder bg-info switch-sidebar-cs-class" data-class="bg-info sidebar-text-dark"></div>
<div className="swatch-holder bg-warning switch-sidebar-cs-class" data-class="bg-warning sidebar-text-dark"></div>
<div className="swatch-holder bg-danger switch-sidebar-cs-class" data-class="bg-danger sidebar-text-light"></div>
<div className="swatch-holder bg-light switch-sidebar-cs-class" data-class="bg-light sidebar-text-dark"></div>
<div className="swatch-holder bg-dark switch-sidebar-cs-class" data-class="bg-dark sidebar-text-light"></div>
<div className="swatch-holder bg-focus switch-sidebar-cs-class" data-class="bg-focus sidebar-text-light"></div>
<div className="swatch-holder bg-alternate switch-sidebar-cs-class" data-class="bg-alternate sidebar-text-light"></div>
<div className="divider"></div>
<div className="swatch-holder bg-vicious-stance switch-sidebar-cs-class" data-class="bg-vicious-stance sidebar-text-light"></div>
<div className="swatch-holder bg-midnight-bloom switch-sidebar-cs-class" data-class="bg-midnight-bloom sidebar-text-light"></div>
<div className="swatch-holder bg-night-sky switch-sidebar-cs-class" data-class="bg-night-sky sidebar-text-light"></div>
<div className="swatch-holder bg-slick-carbon switch-sidebar-cs-class" data-class="bg-slick-carbon sidebar-text-light"></div>
<div className="swatch-holder bg-asteroid switch-sidebar-cs-class" data-class="bg-asteroid sidebar-text-light"></div>
<div className="swatch-holder bg-royal switch-sidebar-cs-class" data-class="bg-royal sidebar-text-light"></div>
<div className="swatch-holder bg-warm-flame switch-sidebar-cs-class" data-class="bg-warm-flame sidebar-text-dark"></div>
<div className="swatch-holder bg-night-fade switch-sidebar-cs-class" data-class="bg-night-fade sidebar-text-dark"></div>
<div className="swatch-holder bg-sunny-morning switch-sidebar-cs-class" data-class="bg-sunny-morning sidebar-text-dark"></div>
<div className="swatch-holder bg-tempting-azure switch-sidebar-cs-class" data-class="bg-tempting-azure sidebar-text-dark"></div>
<div className="swatch-holder bg-amy-crisp switch-sidebar-cs-class" data-class="bg-amy-crisp sidebar-text-dark"></div>
<div className="swatch-holder bg-heavy-rain switch-sidebar-cs-class" data-class="bg-heavy-rain sidebar-text-dark"></div>
<div className="swatch-holder bg-mean-fruit switch-sidebar-cs-class" data-class="bg-mean-fruit sidebar-text-dark"></div>
<div className="swatch-holder bg-malibu-beach switch-sidebar-cs-class" data-class="bg-malibu-beach sidebar-text-light"></div>
<div className="swatch-holder bg-deep-blue switch-sidebar-cs-class" data-class="bg-deep-blue sidebar-text-dark"></div>
<div className="swatch-holder bg-ripe-malin switch-sidebar-cs-class" data-class="bg-ripe-malin sidebar-text-light"></div>
<div className="swatch-holder bg-arielle-smile switch-sidebar-cs-class" data-class="bg-arielle-smile sidebar-text-light"></div>
<div className="swatch-holder bg-plum-plate switch-sidebar-cs-class" data-class="bg-plum-plate sidebar-text-light"></div>
<div className="swatch-holder bg-happy-fisher switch-sidebar-cs-class" data-class="bg-happy-fisher sidebar-text-dark"></div>
<div className="swatch-holder bg-happy-itmeo switch-sidebar-cs-class" data-class="bg-happy-itmeo sidebar-text-light"></div>
<div className="swatch-holder bg-mixed-hopes switch-sidebar-cs-class" data-class="bg-mixed-hopes sidebar-text-light"></div>
<div className="swatch-holder bg-strong-bliss switch-sidebar-cs-class" data-class="bg-strong-bliss sidebar-text-light"></div>
<div className="swatch-holder bg-grow-early switch-sidebar-cs-class" data-class="bg-grow-early sidebar-text-light"></div>
<div className="swatch-holder bg-love-kiss switch-sidebar-cs-class" data-class="bg-love-kiss sidebar-text-light"></div>
<div className="swatch-holder bg-premium-dark switch-sidebar-cs-class" data-class="bg-premium-dark sidebar-text-light"></div>
<div className="swatch-holder bg-happy-green switch-sidebar-cs-class" data-class="bg-happy-green sidebar-text-light"></div>
</div>
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
<div className="app-main">
<div className="app-sidebar sidebar-shadow">
<div className="app-header__logo">
<div className="logo-src"/>
<div className="header__pane ml-auto">
<div>
<button type="button" className="hamburger close-sidebar-btn hamburger--elastic" data-class="closed-sidebar">
<span className="hamburger-box">
<span className="hamburger-inner"/>
</span>
</button>
</div>
</div>
</div>
<div className="app-header__mobile-menu">
<div>
<button type="button" className="hamburger hamburger--elastic mobile-toggle-nav">
<span className="hamburger-box">
<span className="hamburger-inner"/>
</span>
</button>
</div>
</div>
<div className="app-header__menu">
<span>
<button type="button" className="btn-icon btn-icon-only btn btn-primary btn-sm mobile-toggle-header-nav">
<span className="btn-icon-wrapper">
<i className="fa fa-ellipsis-v fa-w-6"/>
</span>
</button>
</span>
</div>
{/* Side Bar */}
<div className="scrollbar-sidebar">
<div className="app-sidebar__inner">
<ul className="vertical-nav-menu">
<li>
<NavLink activeClassName='mm-active' to={"/admin"}>
<i className="metismenu-icon fa fa-tachometer"></i>
Dashboard
</NavLink>
{/*<Link to={"/admin"}>*/}
{/* <i className="metismenu-icon fa fa-tachometer"></i>*/}
{/* Dashboard*/}
{/*</Link>*/}
</li>
<li>
<a href="#">
<i className="metismenu-icon fa fa-calendar"></i>
Classes
<i className="metismenu-state-icon fa fa-caret-down"></i>
</a>
<ul>
<li>
<a href="#">
<i className="metismenu-icon"></i>
Schedule
</a>
</li>
<li>
<a href="#">
<i className="metismenu-icon"></i>
Manage Schedule
</a>
</li>
</ul>
</li>
<li>
<a href="#">
<i className="metismenu-icon fa fa-graduation-cap"></i>
Students
<i className="metismenu-state-icon fa fa-caret-down"></i>
</a>
<ul>
<li>
<a href="#">
<i className="metismenu-icon"></i>
Attendance
</a>
</li>
<li>
<a href="#">
<i className="metismenu-icon"></i>
Progress
</a>
</li>
</ul>
</li>
<li>
<a href="#">
<i className="metismenu-icon fa fa-dollar-sign"></i>
Finance
<i className="metismenu-state-icon fa fa-caret-down"></i>
</a>
<ul>
<li>
<NavLink activeClassName='mm-active' to={"/admin/finance/add/"}>
<i className="metismenu-icon"></i>
Add Details
</NavLink>
</li>
<li>
<NavLink to={"/admin/finance/"}>
<i className="metismenu-icon"></i>
Manage Details
</NavLink>
</li>
</ul>
</li>
<li>
<a href="#">
<i className="metismenu-icon fa fa-file-pdf-o"></i>
Reports
<i className="metismenu-state-icon fa fa-caret-down"></i>
</a>
<ul>
<li>
<a href="#">
<i className="metismenu-icon"></i>
Revenue Report
</a>
</li>
<li>
<a href="#">
<i className="metismenu-icon"></i>
Student Progress Report
</a>
</li>
</ul>
</li>
</ul>
</div>
</div>
{/* End of Side Bar */}
</div>
<div className="app-main__outer">
<div className="app-main__inner">
{/* ------------------------------Content---------------------------------------- */}
<Route path="/admin/finance/" exact component={ViewFinance}/>
<Route path="/admin/finance/add" exact component={AddFinance} />
<Route path={"/admin/finance/edit/:id"} exact component={EditFinance}/>
</div>
{/* Footer */}
<div className="app-wrapper-footer">
<div className="app-footer">
<div className="app-footer__inner">
<div className="app-footer-left">
<ul className="nav">
<li className="nav-item">
<a href="javascript:void(0);" className="nav-link">Copyright &copy; 2021</a>
</li>
<li className="nav-item">
<a href="javascript:void(0);" className="nav-link" style={{color:"red",marginLeft:"-25px"}}>SMART COACH</a>
</li>
</ul>
</div>
<div className="app-footer-right">
<ul className="nav">
<li className="nav-item">
<a href="javascript:void(0);" className="nav-link">Engineered By</a>
</li>
<li className="nav-item">
<a href="javascript:void(0);" className="nav-link" style={{color:"red",marginLeft:"-25px"}}>2021-049</a>
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
)
}
}
\ No newline at end of file
import React, {Component} from "react";
import axios from "axios";
export default class AddFinancialDetails extends Component{
constructor(props) {
super(props);
this.state = {
account_month : '',
direct_income : '',
indirect_income : '',
total_income : '',
direct_expenses : '',
indirect_expenses : '',
total_expenses : '',
gross_revenue : ''
};
}
onChangeHandler = e => {
this.setState({
[e.target.name]: e.target.value
})
}
onSubmitHandler = e => {
e.preventDefault();
const financialDetails = {
account_month : this.state.account_month,
direct_income : this.state.direct_income,
indirect_income : this.state.indirect_income,
total_income : this.state.total_income,
direct_expenses : this.state.direct_expenses,
indirect_expenses : this.state.indirect_expenses,
total_expenses : this.state.total_expenses,
gross_revenue : this.state.gross_revenue
}
// console.log(`Form submitted:`);
// console.log(`account_month: ${this.state.account_month}`);
// console.log(`direct_income: ${this.state.direct_income}`);
// console.log(`indirect_income: ${this.state.indirect_income}`);
// console.log(`total_income: ${this.state.total_income}`);
// console.log(`direct_expenses: ${this.state.direct_expenses}`);
// console.log(`indirect_expenses: ${this.state.indirect_expenses}`);
// console.log(`total_expenses: ${this.state.total_expenses}`);
// console.log(`gross_revenue: ${this.state.gross_revenue}`);
axios.post('http://localhost:5000/admin/finance/store',financialDetails)
.then(res => console.log(res.data));
e.target.reset();
}
// componentDidMount() {
// axios.get('http://localhost:5000/admin/finance/tutors')
// .then(response => {
// this.setState({ tutors : response.data})
// console.log(this.state);
// })
// .catch(error =>{
// console.log(error);
// })
// }
calctot(){
let dinc = parseInt(document.getElementById('dirIncome').value, 10);
let indinc = parseInt(document.getElementById('indIncome').value, 10);
document.getElementById('sincome').innerHTML = dinc + indinc;
let totincusd = parseFloat((dinc + indinc) / 199.56).toFixed(2);
document.getElementById('totIncomeUSD').value = totincusd;
let dexp = parseInt(document.getElementById('dirExpenses').value, 10);
let indexp = parseInt(document.getElementById('indExpenses').value, 10);
document.getElementById('sexpenses').innerHTML = dexp + indexp;
let totexpusd = parseFloat((dexp + indexp) / 199.56).toFixed(2);
document.getElementById('totExpensesUSD').value = totexpusd;
let totincome = dinc + indinc;
let totexpense = dexp + indexp;
let totrev = totincome - totexpense;
document.getElementById('srevenue').innerHTML = totrev;
let totrevusd = parseFloat((totincome - totexpense) / 199.56).toFixed(2);
document.getElementById('totRevenueUSD').value = totrevusd;
}
placeHolders() {
document.getElementById("dirIncome").placeholder = "Direct Income";
document.getElementById("indIncome").placeholder = "Indirect Income";
document.getElementById("dirExpenses").placeholder = "Direct Expenses";
document.getElementById("indExpenses").placeholder = "Indirect Expenses";
}
render() {
return (
<div>
<div className="app-page-title">
<div className="page-title-wrapper">
<div className="page-title-heading">
<div className="page-title-icon">
<i className="pe-7s-display1 fa fa-line-chart"></i>
</div>
<div>
Add Financial Details
</div>
</div>
</div>
</div>
<div className="main-card mb-3 card">
<div className="card-body">
<form onSubmit={this.onSubmitHandler}>
{/*<div className="position-relative row form-group">*/}
{/* <label htmlFor="tutorName" className="col-sm-2 col-form-label">Tutor</label>*/}
{/* <div className="col-sm-3">*/}
{/* /!*<input name="email" id="exampleEmail" placeholder="with a placeholder" type="email" className="form-control" />*!/*/}
{/* <select name="name" id="tutorName" className="form-control">*/}
{/* {this.nameList()}*/}
{/* </select>*/}
{/* </div>*/}
{/*</div>*/}
<div className="position-relative row form-group">
<label htmlFor="accMonth" className="col-sm-2 col-form-label">Account Month</label>
<div className="col-sm-3">
<input type="month" name="account_month" id="accMonth" className="form-control" onChange={this.onChangeHandler} />
</div>
</div>
<div className="position-relative row form-group">
<label htmlFor="dirIncome" className="col-sm-2 col-form-label">Direct Income<span style={{fontWeight:"bold"}}>(Rs.)</span><span style={{color:"red"}}>*</span></label>
<div className="col-sm-4">
<input onClick={this.placeHolders} type="number" min="0.00" step="1" name="direct_income" id="dirIncome" className="form-control" onChange={this.onChangeHandler} />
</div>
<label htmlFor="indIncome" className="col-sm-2 col-form-label">Indirect Income<span style={{fontWeight:"bold"}}>(Rs.)</span><span style={{color:"red"}}>*</span></label>
<div className="col-sm-4">
<input onBlur={this.calctot} onClick={this.placeHolders} type="number" min="0.00" step="1" name="indirect_income" id="indIncome" className="form-control" onChange={this.onChangeHandler} />
</div>
</div>
<div className="position-relative row form-group">
<label htmlFor="totIncome" className="col-sm-2 col-form-label">Total Income<span style={{fontWeight:"bold"}}>(Rs.)</span><span style={{color:"red"}}>*</span></label>
<div className="col-sm-4">
<input type="number" min="0.00" name="total_income" id="totIncome" className="form-control" style={{backgroundColor: "#e7ebcc", color: "black"}} onChange={this.onChangeHandler}/>
<small className="form-text text-muted">Gross Income : Rs.<span style={{fontWeight:"bold"}} id="sincome">0.00</span>👆</small>
</div>
<label htmlFor="totIncomeUSD" className="col-sm-2 col-form-label">Total Income<span style={{fontWeight: "bold"}}>($)</span></label>
<div className="col-sm-4">
<input readOnly="readonly" type="number" min="0.00" name="totincomeusd" id="totIncomeUSD" className="form-control" style={{backgroundColor: "blue", color: "white"}}/>
</div>
</div>
<div className="position-relative row form-group">
<label htmlFor="dirExpenses" className="col-sm-2 col-form-label">Direct Expenses<span style={{fontWeight:"bold"}}>(Rs.)</span><span style={{color:"red"}}>*</span></label>
<div className="col-sm-4">
<input onClick={this.placeHolders} type="number" min="0.00" step="1" id="dirExpenses" name="direct_expenses" className="form-control" onChange={this.onChangeHandler} />
</div>
<label htmlFor="indExpenses" className="col-sm-2 col-form-label">Indirect Expenses<span style={{fontWeight:"bold"}}>(Rs.)</span><span style={{color:"red"}}>*</span></label>
<div className="col-sm-4">
<input onBlur={this.calctot} onClick={this.placeHolders} type="number" min="0.00" step="1" id="indExpenses" name="indirect_expenses" className="form-control" onChange={this.onChangeHandler} />
</div>
</div>
<div className="position-relative row form-group">
<label htmlFor="totExpenses" className="col-sm-2 col-form-label">Total Expenses<span style={{fontWeight:"bold"}}>(Rs.)</span><span style={{color:"red"}}>*</span></label>
<div className="col-sm-4">
<input type="number" min="0.00" name="total_expenses" id="totExpenses" className="form-control" style={{backgroundColor: "#e7ebcc", color: "black"}} onChange={this.onChangeHandler} />
<small className="form-text text-muted">Gross Expenses : Rs.<span style={{fontWeight:"bold"}} id="sexpenses">0.00</span>👆</small>
</div>
<label htmlFor="totExpensesUSD" className="col-sm-2 col-form-label">Total Expenses<span style={{fontWeight: "bold"}}>($)</span></label>
<div className="col-sm-4">
<input readOnly="readonly" type="number" min="0.00" name="totexpensesusd" id="totExpensesUSD" className="form-control" style={{backgroundColor: "blue", color: "white"}}/>
</div>
</div>
<div className="position-relative row form-group">
<label htmlFor="totRevenue" className="col-sm-2 col-form-label">Gross Revenue<span style={{fontWeight: "bold"}}>(Rs.)</span></label>
<div className="col-sm-4">
<input type="number" min="0.00" name="gross_revenue" id="totRevenue" className="form-control" style={{backgroundColor: "#e7ebcc", color: "black"}} onChange={this.onChangeHandler}/>
<small className="form-text text-muted">Gross Revenue : Rs.<span style={{fontWeight:"bold"}} id="srevenue">0.00</span>👆</small>
</div>
<label htmlFor="totRevenueUSD" className="col-sm-2 col-form-label">Gross Revenue<span style={{fontWeight: "bold"}}>($)</span></label>
<div className="col-sm-4">
<input readOnly="readonly" type="number" min="0.00" name="totrevenueusd" id="totRevenueUSD" className="form-control" style={{backgroundColor: "blue", color: "white"}}/>
</div>
</div>
<div className="position-relative row form-group">
<div className="col-sm-12">
<button className="btn btn-primary" style={{width:"150px"}} type="submit">Save Details</button>
</div>
</div>
</form>
</div>
</div>
</div>
);
}
}
\ No newline at end of file
import React, {Component} from "react";
import axios from "axios";
export default class EditFinancialDetails extends Component{
constructor(props) {
super(props);
this.state = {
account_month : '',
direct_income : '',
indirect_income : '',
total_income : '',
direct_expenses : '',
indirect_expenses : '',
total_expenses : '',
gross_revenue : ''
};
}
onChangeHandler = e => {
this.setState({
[e.target.name]: e.target.value
})
}
onSubmitHandler = e => {
e.preventDefault();
const financialDetails = {
account_month : this.state.account_month,
direct_income : this.state.direct_income,
indirect_income : this.state.indirect_income,
total_income : this.state.total_income,
direct_expenses : this.state.direct_expenses,
indirect_expenses : this.state.indirect_expenses,
total_expenses : this.state.total_expenses,
gross_revenue : this.state.gross_revenue
}
console.log(`Form submitted:`);
console.log(`account_month: ${this.state.account_month}`);
console.log(`direct_income: ${this.state.direct_income}`);
console.log(`indirect_income: ${this.state.indirect_income}`);
console.log(`total_income: ${this.state.total_income}`);
console.log(`direct_expenses: ${this.state.direct_expenses}`);
console.log(`indirect_expenses: ${this.state.indirect_expenses}`);
console.log(`total_expenses: ${this.state.total_expenses}`);
console.log(`gross_revenue: ${this.state.gross_revenue}`);
axios.post('http://localhost:5000/admin/finance/update/'+this.props.match.params.id,financialDetails)
.then(res => console.log(res.data));
window.location = '/admin';
}
componentDidMount() {
axios.get('http://localhost:5000/admin/finance/'+this.props.match.params.id)
.then(response =>{
this.setState({
account_month: response.data.account_month,
direct_income : response.data.direct_income,
indirect_income : response.data.indirect_income,
total_income : response.data.total_income,
direct_expenses : response.data.direct_expenses,
indirect_expenses : response.data.indirect_expenses,
total_expenses : response.data.total_expenses,
gross_revenue : response.data.gross_revenue
},()=>{
})
console.log(response.data);
})
.catch(function (error) {
console.log(error);
});
}
// calctot(){
// let dinc = parseInt(document.getElementById('dirIncome').value, 10);
// let indinc = parseInt(document.getElementById('indIncome').value, 10);
// document.getElementById('sincome').innerHTML = dinc + indinc;
//
// let totincusd = parseFloat((dinc + indinc) / 199.56).toFixed(2);
// document.getElementById('totIncomeUSD').value = totincusd;
//
// let dexp = parseInt(document.getElementById('dirExpenses').value, 10);
// let indexp = parseInt(document.getElementById('indExpenses').value, 10);
// document.getElementById('sexpenses').innerHTML = dexp + indexp;
//
// let totexpusd = parseFloat((dexp + indexp) / 199.56).toFixed(2);
// document.getElementById('totExpensesUSD').value = totexpusd;
//
// let totincome = dinc + indinc;
// let totexpense = dexp + indexp;
// let totrev = totincome - totexpense;
// document.getElementById('srevenue').innerHTML = totrev;
//
// let totrevusd = parseFloat((totincome - totexpense) / 199.56).toFixed(2);
// document.getElementById('totRevenueUSD').value = totrevusd;
// }
placeHolders() {
document.getElementById("dirIncome").placeholder = "Direct Income";
document.getElementById("indIncome").placeholder = "Indirect Income";
document.getElementById("dirExpenses").placeholder = "Direct Expenses";
document.getElementById("indExpenses").placeholder = "Indirect Expenses";
}
render() {
return (
<div>
<div className="app-page-title">
<div className="page-title-wrapper">
<div className="page-title-heading">
<div className="page-title-icon">
<i className="pe-7s-display1 fa fa-line-chart"></i>
</div>
<div>
Edit Financial Details
</div>
</div>
</div>
</div>
<div className="main-card mb-3 card">
<div className="card-body">
<form onSubmit={this.onSubmitHandler}>
<div className="position-relative row form-group">
<label htmlFor="accMonth" className="col-sm-2 col-form-label">Account Month</label>
<div className="col-sm-3">
<input type="month" name="account_month" id="accMonth" className="form-control" value={this.state.account_month} onChange={this.onChangeHandler} />
</div>
</div>
<div className="position-relative row form-group">
<label htmlFor="dirIncome" className="col-sm-2 col-form-label">Direct Income<span style={{fontWeight:"bold"}}>(Rs.)</span><span style={{color:"red"}}>*</span></label>
<div className="col-sm-4">
<input onClick={this.placeHolders} type="number" min="0.00" step="1" name="direct_income" id="dirIncome" className="form-control" value={this.state.direct_income} onChange={this.onChangeHandler} />
</div>
<label htmlFor="indIncome" className="col-sm-2 col-form-label">Indirect Income<span style={{fontWeight:"bold"}}>(Rs.)</span><span style={{color:"red"}}>*</span></label>
<div className="col-sm-4">
<input onBlur={this.calctot} onClick={this.placeHolders} type="number" min="0.00" step="1" name="indirect_income" id="indIncome" className="form-control" value={this.state.indirect_income} onChange={this.onChangeHandler} />
</div>
</div>
<div className="position-relative row form-group">
<label htmlFor="totIncome" className="col-sm-2 col-form-label">Total Income<span style={{fontWeight:"bold"}}>(Rs.)</span><span style={{color:"red"}}>*</span></label>
<div className="col-sm-4">
<input type="number" min="0.00" name="total_income" id="totIncome" className="form-control" style={{backgroundColor: "#e7ebcc", color: "black"}} value={this.state.total_income} onChange={this.onChangeHandler}/>
</div>
</div>
<div className="position-relative row form-group">
<label htmlFor="dirExpenses" className="col-sm-2 col-form-label">Direct Expenses<span style={{fontWeight:"bold"}}>(Rs.)</span><span style={{color:"red"}}>*</span></label>
<div className="col-sm-4">
<input onClick={this.placeHolders} type="number" min="0.00" step="1" id="dirExpenses" name="direct_expenses" className="form-control" value={this.state.direct_expenses} onChange={this.onChangeHandler} />
</div>
<label htmlFor="indExpenses" className="col-sm-2 col-form-label">Indirect Expenses<span style={{fontWeight:"bold"}}>(Rs.)</span><span style={{color:"red"}}>*</span></label>
<div className="col-sm-4">
<input onBlur={this.calctot} onClick={this.placeHolders} type="number" min="0.00" step="1" id="indExpenses" name="indirect_expenses" className="form-control" value={this.state.indirect_expenses} onChange={this.onChangeHandler} />
</div>
</div>
<div className="position-relative row form-group">
<label htmlFor="totExpenses" className="col-sm-2 col-form-label">Total Expenses<span style={{fontWeight:"bold"}}>(Rs.)</span><span style={{color:"red"}}>*</span></label>
<div className="col-sm-4">
<input type="number" min="0.00" name="total_expenses" id="totExpenses" className="form-control" style={{backgroundColor: "#e7ebcc", color: "black"}} value={this.state.total_expenses} onChange={this.onChangeHandler} />
</div>
</div>
<div className="position-relative row form-group">
<label htmlFor="totRevenue" className="col-sm-2 col-form-label">Gross Revenue<span style={{fontWeight: "bold"}}>(Rs.)</span></label>
<div className="col-sm-4">
<input type="number" min="0.00" name="gross_revenue" id="totRevenue" className="form-control" style={{backgroundColor: "#e7ebcc", color: "black"}} value={this.state.gross_revenue} onChange={this.onChangeHandler}/>
</div>
</div>
<div className="position-relative row form-group">
<div className="col-sm-12">
<button className="btn btn-primary" style={{width:"150px"}} type="submit">Update Details</button>
</div>
</div>
</form>
</div>
</div>
</div>
);
}
}
\ No newline at end of file
import React, {Component} from "react";
import {Link} from "react-router-dom";
import axios from "axios";
const Finance = props => (
<tr>
<td>{props.finance.account_month}</td>
<td>Rs.{props.finance.total_income}</td>
<td>Rs.{props.finance.total_expenses}</td>
<td>Rs.{props.finance.gross_revenue}</td>
<td>
<Link style={{color:"black"}} to={"/admin/finance/edit/"+props.finance._id}><button style={{paddingRight:"20px",width:"auto"}} className="btn btn-warning mr-1"><i className="fa fa-pencil"> Edit</i></button></Link>
<button style={{width:"auto",color:"black"}} className="btn btn-danger" onClick={() => {props.deleteFinance(props.finance._id)}}><i className="fa fa-trash"> Delete</i></button>
</td>
</tr>
);
export default class ViewFinancialDetails extends Component{
constructor(props) {
super(props);
this.deleteFinance = this.deleteFinance.bind(this);
this.state = {
finance : []
};
}
componentDidMount() {
axios.get('http://localhost:5000/admin/finance/')
.then(response => {
this.setState({ finance : response.data})
// console.log(this.state);
})
.catch(error =>{
console.log(error);
})
}
deleteFinance(id){
axios.delete('http://localhost:5000/admin/finance/'+id)
.then(res => console.log(res.data));
this.setState({
finance : this.state.finance.filter(el => el._id !== id)
})
}
financialList(){
return this.state.finance.map(currentdetails => {
return <Finance finance={currentdetails} deleteFinance={this.deleteFinance} key={currentdetails._id} />;
})
}
render() {
return(
<div>
<div className="app-page-title">
<div className="page-title-wrapper">
<div className="page-title-heading">
<div className="page-title-icon">
<i className="pe-7s-display1 fa fa-line-chart"></i>
</div>
<div>
Financial Details
</div>
</div>
</div>
</div>
<div className="col-lg-12">
<div className="main-card mb-3 card">
<div className="card-body">
<table className="mb-0 table table-striped">
<thead>
<tr>
{/*<th>#</th>*/}
<th>Account Month</th>
<th>Gross Income</th>
<th>Gross Expenses</th>
<th>Gross Revenue</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
{this.financialList()}
</tbody>
</table>
</div>
</div>
</div>
</div>
);
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment