From d14bf4a220abef996bd81df3bd941ca57b54b91d Mon Sep 17 00:00:00 2001 From: martin chaparro Date: Wed, 12 May 2021 22:36:30 -0500 Subject: [PATCH] front presupuesto --- APP/README.md | 13 + APP/components/Formularios/Fpresupuesto.vue | 8 +- APP/pages/presupuesto.vue | 279 ++++++++++++++------ index.js | 1 + routes/presupuesto.js | 78 ++++++ 5 files changed, 288 insertions(+), 91 deletions(-) create mode 100644 routes/presupuesto.js diff --git a/APP/README.md b/APP/README.md index aad00d3..4fe7ea0 100644 --- a/APP/README.md +++ b/APP/README.md @@ -17,4 +17,17 @@ $ npm run start $ npm run generate ``` +## ToDo + +### Front + +[ ] Verificación formulario nuevo presupuesto y duplicados +[ ] Delete Items presupuesto Front + +### Back + +[ ] API delete items presupuesto +[ ] Verificación de nombre presupuesto repetidos + + For detailed explanation on how things work, check out [Nuxt.js docs](https://nuxtjs.org). diff --git a/APP/components/Formularios/Fpresupuesto.vue b/APP/components/Formularios/Fpresupuesto.vue index c977975..c3efc5c 100644 --- a/APP/components/Formularios/Fpresupuesto.vue +++ b/APP/components/Formularios/Fpresupuesto.vue @@ -10,15 +10,9 @@ -
- + + + + +
- +
- - - - - - - + :data="selectedPresupuesto.datos" + border + empty-text="No hay items" + stripe + style="width: 100%" + height="300" + > + + - -
- - - - - - - -
-
-
+ + + + + +
+ + + + + +
+
+
- + - + + + - - - - Guardar -
-
- Ingresos: {{formatMoneda(totalIngresos)}} + Ingresos: {{ formatMoneda(totalIngresos) }}
-
- Egreso: {{formatMoneda(totalEgresos)}} +
+ Egreso: {{ formatMoneda(totalEgresos) }}
-
- Total: {{formatMoneda(total)}} +
+ Total: + {{ formatMoneda(total) }}
-
@@ -105,54 +120,93 @@ import { Table, TableColumn } from "element-ui"; export default { - components: { - + components: { [Table.name]: Table, [TableColumn.name]: TableColumn, - }, + }, middleware: "authenticated", data() { return { newPresupuesto: { - fecha: "", - detalle: "", + nombrePresupuesto: "", }, - selectedPresupuesto:{ - - _id:"", - fecha:"", - nombrePresupuesto:"", - datos:[] - + selectedPresupuesto: { + _id: "", + nombrePresupuesto: "", + datos: [], }, + selectedPresupuestoName: "", newItem: { - detalle:"", + _id: "", + detalle: "", valor: 0, - tipo:"Egreso" - + tipo: "Egreso", }, presupuestos: [], - totalIngresos:0, - totalEgresos:0, - total:0 + totalIngresos: 0, + totalEgresos: 0, + total: 0, }; }, methods: { - savePresupuesto() {}, + savePresupuesto() { + const axiosHeader = { + headers: { + token: this.$store.state.auth.token, + }, + }; + this.newPresupuesto.nombrePresupuesto = this.newPresupuesto.nombrePresupuesto.trim(); + const toSend = this.newPresupuesto; + console.log(axiosHeader.data); + this.$axios + .post("/presupuesto", toSend, axiosHeader) + .then((res) => { + console.log(res.data.status); + this.getPresupuesto(); + }) + .catch((e) => console.log(e)); + }, addItem() { - this.selectedPresupuesto.datos.push(JSON.parse(JSON.stringify(this.newItem))) - this.sumItems() + //this.selectedPresupuesto.datos.push(JSON.parse(JSON.stringify(this.newItem))) + console.log(this.newItem._id); + var nameSelected = this.selectedPresupuestoName; + console.log(nameSelected); + const axiosHeader = { + headers: { + token: this.$store.state.auth.token, + }, + }; + const toSend = this.newItem; + this.$axios + .put("/presupuesto", toSend, axiosHeader) + .then((res) => { + console.log(res.data.status); + this.getPresupuesto(); + this.selectedPresupuestoName = nameSelected; + console.log(this.selectedPresupuestoName); + this.selectedPresupuesto = this.presupuestos.find( + (x) => x.nombrePresupuesto === this.selectedPresupuestoName + ); + this.newItem._id = this.selectedPresupuesto._id; + }) + .catch((e) => console.log(e)); + + this.sumItems(); }, - sumItems(){ - - this.totalIngresos=this.selectedPresupuesto.datos.reduce((acc,x) => x.tipo ==="Ingreso"?acc + Number(x.valor):acc,0) - - this.totalEgresos = this.selectedPresupuesto.datos.reduce((acc,x) => x.tipo==="Egreso"?acc + Number(x.valor):acc,0) - this.total = this.totalIngresos - this.totalEgresos + sumItems() { + this.totalIngresos = this.selectedPresupuesto.datos.reduce( + (acc, x) => (x.tipo === "Ingreso" ? acc + Number(x.valor) : acc), + 0 + ); + this.totalEgresos = this.selectedPresupuesto.datos.reduce( + (acc, x) => (x.tipo === "Egreso" ? acc + Number(x.valor) : acc), + 0 + ); + this.total = this.totalIngresos - this.totalEgresos; }, - formatMoneda(dato) { + formatMoneda(dato) { var num = dato; if (!isNaN(num)) { num = Math.abs(num) @@ -165,11 +219,68 @@ export default { return `$ ${num}`; } }, + getPresupuesto() { + const axiosHeader = { + headers: { + token: this.$store.state.auth.token, + }, + }; + + + this.$axios + .get("/presupuesto", axiosHeader) + .then((res) => { + this.presupuestos=[] + if (res.data.data.length) { + this.presupuestos = res.data.data; + this.selectedPresupuesto = this.presupuestos[0]; + this.selectedPresupuestoName = this.selectedPresupuesto.nombrePresupuesto; + this.newItem._id = this.selectedPresupuesto._id; + console.log(this.selectedPresupuesto); + this.sumItems(); + } + }) + .catch((e) => console.log(e)); + }, + onChange() { + this.selectedPresupuesto = this.presupuestos.find( + (x) => x.nombrePresupuesto === this.selectedPresupuestoName + ); + this.newItem._id = this.selectedPresupuesto._id; + this.sumItems(); + }, + deletePresupuesto() { + console.log(this.selectedPresupuesto._id); + const axiosHeader = { + headers: { + token: this.$store.state.auth.token, + }, + params: { + id: this.selectedPresupuesto._id, + }, + }; + this.$axios + .delete("/presupuesto", axiosHeader) + .then((res) => { + console.log(res.data); + + this.selectedPresupuesto = { + _id: "", + nombrePresupuesto: "", + datos: [], + } + this.selectedPresupuestoName="" + this.getPresupuesto(); + + }) + .catch((e) => console.log(e)); + }, }, mounted() { - this.newPresupuesto.fecha = this.$store.state.fecha; - }, + // this.newPresupuesto.fecha = this.$store.state.fecha; + this.getPresupuesto(); + }, }; diff --git a/index.js b/index.js index ccb6a47..7a56e0c 100644 --- a/index.js +++ b/index.js @@ -27,6 +27,7 @@ app.use(cors()); app.use('/api',require('./routes/users')); app.use('/api',require('./routes/compras')) app.use('/api',require('./routes/ingresos')) +app.use('/api',require('./routes/presupuesto')) app.use('/api',require('./routes/categorias')) app.use('/api',require('./routes/metodos_pago')) app.disable('x-powered-by'); diff --git a/routes/presupuesto.js b/routes/presupuesto.js new file mode 100644 index 0000000..51826a9 --- /dev/null +++ b/routes/presupuesto.js @@ -0,0 +1,78 @@ +const router = require("express").Router(); +const presupuesto = require("../models/presupuestoMes").Presupuesto; +const itemPresupuesto = require("../models/presupuestoMes").itemPresupuesto; +const { checkAuth } = require("../middlewares/authentication"); + + +router.get("/presupuesto", checkAuth, async (req, res) => { + var presupuestos; + presupuestos = await presupuesto.find({ user: req.userData._id }).sort({ + date: "desc", + }); + + return res.send( + { + status:"ok", + data:presupuestos + } + ) + }); + + router.post("/presupuesto", checkAuth, async (req, res) => { + const {nombrePresupuesto} = req.body; + const Presupuesto = new presupuesto({ + nombrePresupuesto:nombrePresupuesto + }); + + console.log(Presupuesto) + Presupuesto.user = req.userData._id; + await Presupuesto.save(); + + res.json({ + status:"OK" + }) + + + }); + + + router.put("/presupuesto", checkAuth, async (req, res) => { + const { _id, detalle, valor, tipo } = req.body; + console.log(_id) + const presupuesto_edit = await presupuesto.findOne({ _id: _id }); + const itemP = new itemPresupuesto({detalle,valor,tipo}); + presupuesto_edit.datos.push(itemP); + await presupuesto_edit.save(); + + //await presupuesto_edit.updateOne({ fecha, detalle, valor}); + + + + res.json({ + status:"OK" + }) + + + }); + + + + router.delete("/presupuesto", checkAuth, async (req, res) => { + + try{ + const userId = req.userData._id; + const id = req.query.id; + + const resultado = await presupuesto.deleteOne({user:userId,_id:id}); + + return res.json({status:"ok",data: resultado}) + + } + catch(error){ + console.log(error); + return res.status(500).json({status:"fail",error:error}) + } + }); + + + module.exports = router; \ No newline at end of file