presupuestos

This commit is contained in:
2021-05-23 11:29:02 -05:00
parent bb5b6fc86e
commit a505fe102e
6 changed files with 165 additions and 100 deletions

View File

@@ -67,11 +67,10 @@ import Card from '../Cards/Card.vue';
export default { export default {
components: { Card }, components: { Card },
name: "Fcompras", name: "Fcompras",
props: ["categorias", "metodos_pago", "newCompra", "saveCompra","isUpdate","updateCompra","openForm"], props: ["categorias", "metodos_pago", "newCompra", "saveCompra","isUpdate","updateCompra"],
data() { data() {
return { return {
isOpen: this.openForm isOpen: false
}; };
}, },
methods: { methods: {

View File

@@ -32,12 +32,13 @@
<script> <script>
export default { export default {
name: "Fpresupuesto", name: "Fpresupuesto",
props: ["newPresupuesto", "savePresupuesto"], props: ["newPresupuesto", "savePresupuesto","isOpen"],
data() { // data() {
return {
isOpen: false, // return {
}; // isOpen: false,
}, // };
// },
methods: { methods: {
toggleDropDown() { toggleDropDown() {
this.isOpen = !this.isOpen; this.isOpen = !this.isOpen;

View File

@@ -14,7 +14,7 @@
) )
" "
border border
empty-text="No hay compras realizadas" empty-text="No hay compras registadas"
stripe stripe
:summary-method="getSummaries" :summary-method="getSummaries"
show-summary show-summary
@@ -75,7 +75,7 @@
:saveCompra="saveCompra" :saveCompra="saveCompra"
:updateCompra="updateCompra" :updateCompra="updateCompra"
:isUpdate="isUpdate" :isUpdate="isUpdate"
:openForm="openForm"
/> />
</div> </div>
</div> </div>
@@ -105,7 +105,7 @@ export default {
metodos_pago: [], metodos_pago: [],
categorias: [], categorias: [],
isUpdate: false, isUpdate: false,
openForm: false, openForm: false ,
}; };
}, },
mounted() { mounted() {
@@ -184,7 +184,8 @@ export default {
updateCompraClic(id) { updateCompraClic(id) {
this.isUpdate = true; this.isUpdate = true;
this.newCompra = JSON.parse(JSON.stringify(this.compras[id])); this.newCompra = JSON.parse(JSON.stringify(this.compras[id]));
this.openForm = !this.openForm; this.openForm = true;
console.log("SJS")
}, },
deleteCompra(id) { deleteCompra(id) {

View File

@@ -12,7 +12,7 @@
) )
" "
border border
empty-text="No hay compras realizadas" empty-text="No hay Ingresos registrados"
stripe stripe
:summary-method="getSummaries" :summary-method="getSummaries"
show-summary show-summary

View File

@@ -30,6 +30,7 @@
<Fpresupuesto <Fpresupuesto
:newPresupuesto="newPresupuesto" :newPresupuesto="newPresupuesto"
:savePresupuesto="savePresupuesto" :savePresupuesto="savePresupuesto"
:isOpen="isOpen"
/> />
</div> </div>
</div> </div>
@@ -40,7 +41,7 @@
v-if="selectedPresupuesto.nombrePresupuesto !== ''" v-if="selectedPresupuesto.nombrePresupuesto !== ''"
> >
<div class="row"> <div class="row">
<div class="col-6"> <div class="col-8">
<el-table <el-table
:data="selectedPresupuesto.datos" :data="selectedPresupuesto.datos"
border border
@@ -65,7 +66,7 @@
icon icon
size="sm" size="sm"
class="btn-link" class="btn-link"
@click="deleteIngreso(row._id)" @click="deleteItem(row._id)"
> >
<i class="el-icon-delete-solid"></i> <i class="el-icon-delete-solid"></i>
</base-button> </base-button>
@@ -75,7 +76,7 @@
</el-table> </el-table>
</div> </div>
<div class="col-6"> <div class="col-4">
<base-input v-model="newItem.detalle" label="Descripción"> <base-input v-model="newItem.detalle" label="Descripción">
</base-input> </base-input>
<base-input v-model="newItem.valor" type="Number"> </base-input> <base-input v-model="newItem.valor" type="Number"> </base-input>
@@ -127,6 +128,8 @@ export default {
middleware: "authenticated", middleware: "authenticated",
data() { data() {
return { return {
isOpen: false,
newPresupuesto: { newPresupuesto: {
nombrePresupuesto: "", nombrePresupuesto: "",
}, },
@@ -158,20 +161,28 @@ export default {
}; };
this.newPresupuesto.nombrePresupuesto = this.newPresupuesto.nombrePresupuesto.trim(); this.newPresupuesto.nombrePresupuesto = this.newPresupuesto.nombrePresupuesto.trim();
const toSend = this.newPresupuesto; const toSend = this.newPresupuesto;
console.log(axiosHeader.data);
this.$axios this.$axios
.post("/presupuesto", toSend, axiosHeader) .post("/presupuesto", toSend, axiosHeader)
.then((res) => { .then((res) => {
console.log(res.data.status); this.$notify({
type: "success",
icon: "tim-icons icon-check-2",
message: "Presupuesto Creado",
});
this.isOpen = false;
this.getPresupuesto(); this.getPresupuesto();
}) })
.catch((e) => console.log(e)); .catch((e) => {
this.$notify({
type: "danger",
icon: "tim-icons icon-alert-circle-exc",
message: "El presupuesto ya existe :(",
});
return;
});
}, },
addItem() { addItem() {
//this.selectedPresupuesto.datos.push(JSON.parse(JSON.stringify(this.newItem)))
console.log(this.newItem._id);
var nameSelected = this.selectedPresupuestoName;
console.log(nameSelected);
const axiosHeader = { const axiosHeader = {
headers: { headers: {
token: this.$store.state.auth.token, token: this.$store.state.auth.token,
@@ -182,18 +193,45 @@ export default {
.put("/presupuesto", toSend, axiosHeader) .put("/presupuesto", toSend, axiosHeader)
.then((res) => { .then((res) => {
console.log(res.data.status); console.log(res.data.status);
this.getPresupuesto(); this.getItems();
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)); .catch((e) => console.log(e));
this.sumItems();
}, },
deleteItem(item_id) {
const axiosHeader = {
headers: {
token: this.$store.state.auth.token,
},
params: {
idPresupuesto: this.selectedPresupuesto._id,
iditem: item_id,
},
};
this.$axios
.delete("/presupuestoitem", axiosHeader)
.then((res) => {
this.getItems();
})
.catch((e) => console.log(e));
},
getItems() {
const axiosHeader = {
headers: {
token: this.$store.state.auth.token,
},
params: {
presupuesto_id: this.selectedPresupuesto._id,
},
};
this.$axios
.get("/presupuesto_items", axiosHeader)
.then((res) => {
this.selectedPresupuesto.datos = res.data.data;
this.sumItems();
})
.catch((e) => console.log(e));
},
sumItems() { sumItems() {
this.totalIngresos = this.selectedPresupuesto.datos.reduce( this.totalIngresos = this.selectedPresupuesto.datos.reduce(
(acc, x) => (x.tipo === "Ingreso" ? acc + Number(x.valor) : acc), (acc, x) => (x.tipo === "Ingreso" ? acc + Number(x.valor) : acc),
@@ -226,11 +264,10 @@ export default {
}, },
}; };
this.$axios this.$axios
.get("/presupuesto", axiosHeader) .get("/presupuesto", axiosHeader)
.then((res) => { .then((res) => {
this.presupuestos=[] this.presupuestos = [];
if (res.data.data.length) { if (res.data.data.length) {
this.presupuestos = res.data.data; this.presupuestos = res.data.data;
this.selectedPresupuesto = this.presupuestos[0]; this.selectedPresupuesto = this.presupuestos[0];
@@ -268,17 +305,14 @@ export default {
_id: "", _id: "",
nombrePresupuesto: "", nombrePresupuesto: "",
datos: [], datos: [],
} };
this.selectedPresupuestoName="" this.selectedPresupuestoName = "";
this.getPresupuesto(); this.getPresupuesto();
}) })
.catch((e) => console.log(e)); .catch((e) => console.log(e));
}, },
}, },
mounted() { mounted() {
// this.newPresupuesto.fecha = this.$store.state.fecha;
this.getPresupuesto(); this.getPresupuesto();
}, },
}; };

View File

@@ -3,76 +3,106 @@ const presupuesto = require("../models/presupuestoMes").Presupuesto;
const itemPresupuesto = require("../models/presupuestoMes").itemPresupuesto; const itemPresupuesto = require("../models/presupuestoMes").itemPresupuesto;
const { checkAuth } = require("../middlewares/authentication"); const { checkAuth } = require("../middlewares/authentication");
router.get("/presupuesto", checkAuth, async (req, res) => { router.get("/presupuesto", checkAuth, async (req, res) => {
var presupuestos; var presupuestos;
presupuestos = await presupuesto.find({ user: req.userData._id }).sort({ presupuestos = await presupuesto.find({ user: req.userData._id }).sort({
date: "desc", date: "desc",
}); });
return res.send( return res.send({
{ status: "ok",
status:"ok", data: presupuestos,
data:presupuestos });
} });
)
router.post("/presupuesto", checkAuth, async (req, res) => {
const { nombrePresupuesto } = req.body;
var presupuestos = await presupuesto.find({
user: req.userData._id,
nombrePresupuesto: nombrePresupuesto,
}); });
router.post("/presupuesto", checkAuth, async (req, res) => { if (presupuestos.length == 0) {
const {nombrePresupuesto} = req.body;
const Presupuesto = new presupuesto({ const Presupuesto = new presupuesto({
nombrePresupuesto:nombrePresupuesto nombrePresupuesto: nombrePresupuesto,
}); });
console.log(Presupuesto) console.log(Presupuesto);
Presupuesto.user = req.userData._id; Presupuesto.user = req.userData._id;
await Presupuesto.save(); await Presupuesto.save();
res.json({ return res.json({
status:"OK" status: "OK",
})
}); });
}
return res.status(500).json({
router.put("/presupuesto", checkAuth, async (req, res) => { status: "FAIL",
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 {
router.delete("/presupuesto", checkAuth, async (req, res) => {
try{
const userId = req.userData._id; const userId = req.userData._id;
const id = req.query.id; const id = req.query.id;
const resultado = await presupuesto.deleteOne({user:userId,_id:id}); const resultado = await presupuesto.deleteOne({ user: userId, _id: id });
return res.json({status:"ok",data: resultado}) return res.json({ status: "ok", data: resultado });
} catch (error) {
}
catch(error){
console.log(error); console.log(error);
return res.status(500).json({status:"fail",error:error}) return res.status(500).json({ status: "fail", error: error });
} }
});
router.put("/presupuesto", checkAuth, async (req, res) => {
const { _id, detalle, valor, tipo } = req.body;
const presupuesto_edit = await presupuesto.findOne({
_id: _id,
user: req.userData._id,
});
const itemP = new itemPresupuesto({ detalle, valor, tipo });
presupuesto_edit.datos.push(itemP);
await presupuesto_edit.save();
res.json({
status: "OK",
});
});
router.get("/presupuesto_items", checkAuth, async (req, res) => {
const _id = req.query.presupuesto_id;
const presupuesto_edit = await presupuesto.findOne({
_id: _id,
user: req.userData._id,
}); });
return res.json({
status: "OK",
data: presupuesto_edit.datos,
});
});
module.exports = router; router.delete("/presupuestoitem", checkAuth, async (req, res) => {
try {
const userId = req.userData._id;
const iditem = req.query.iditem;
const idPresupuesto = req.query.idPresupuesto;
var presupuesto_edit = await presupuesto.findOne({
user: userId,
_id: idPresupuesto,
});
presupuesto_edit.datos.id(iditem).remove();
await presupuesto_edit.save();
return res.json({ status: "ok" });
} catch (error) {
console.log(error);
return res.status(500).json({ status: "fail", error: error });
}
});
module.exports = router;