Merge pull request 'Se realiza compra desde vuetify' (#36) from achive_purchase_from_vuetify_issue_#35 into main
Reviewed-on: #36
This commit is contained in:
commit
cf913884f0
@ -22,13 +22,13 @@
|
|||||||
required
|
required
|
||||||
></v-text-field>
|
></v-text-field>
|
||||||
<v-select
|
<v-select
|
||||||
v-model="purchase.client"
|
v-model="purchase.customer"
|
||||||
:items="clients"
|
:items="clients"
|
||||||
|
item-title="name"
|
||||||
|
item-value="id"
|
||||||
label="Cliente"
|
label="Cliente"
|
||||||
:rules="[rules.required]"
|
:rules="[rules.required]"
|
||||||
required
|
required
|
||||||
item-text="name"
|
|
||||||
item-value="id"
|
|
||||||
></v-select>
|
></v-select>
|
||||||
<v-textarea
|
<v-textarea
|
||||||
v-model="purchase.notes"
|
v-model="purchase.notes"
|
||||||
@ -39,26 +39,29 @@
|
|||||||
<v-toolbar>
|
<v-toolbar>
|
||||||
<v-toolbar-title secondary>Productos</v-toolbar-title>
|
<v-toolbar-title secondary>Productos</v-toolbar-title>
|
||||||
</v-toolbar>
|
</v-toolbar>
|
||||||
<div v-for="(line, index) in purchase.lines" :key="line.id">
|
<div v-for="(line, index) in purchase.saleline_set" :key="line.id">
|
||||||
<v-row>
|
<v-row>
|
||||||
<v-col>
|
<v-col>
|
||||||
<v-text-field
|
<v-select
|
||||||
v-model="line.product"
|
v-model="line.product"
|
||||||
|
:items="products"
|
||||||
|
item-title="name"
|
||||||
|
item-value="id"
|
||||||
label="Producto"
|
label="Producto"
|
||||||
:rules="[rules.required]"
|
:rules="[rules.required]"
|
||||||
required
|
required
|
||||||
></v-text-field>
|
></v-select>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col>
|
<v-col>
|
||||||
<v-text-field
|
<v-text-field
|
||||||
v-model.number="line.price"
|
v-model.number="line.unit_price"
|
||||||
label="Precio"
|
label="Precio"
|
||||||
type="number"
|
type="number"
|
||||||
:rules="[rules.required]"
|
:rules="[rules.required]"
|
||||||
required
|
required
|
||||||
></v-text-field>
|
></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
n <v-col>
|
<v-col>
|
||||||
<v-text-field
|
<v-text-field
|
||||||
v-model.number="line.quantity"
|
v-model.number="line.quantity"
|
||||||
label="Cantidad"
|
label="Cantidad"
|
||||||
@ -110,7 +113,7 @@ n <v-col>
|
|||||||
date: '',
|
date: '',
|
||||||
client: null,
|
client: null,
|
||||||
notes: '',
|
notes: '',
|
||||||
lines: [{product:'', price: 0, quantity: 0}],
|
saleline_set: [{product:'', unit_price: 0, quantity: 0}],
|
||||||
},
|
},
|
||||||
rules: {
|
rules: {
|
||||||
required: value => !!value || 'Requerido.',
|
required: value => !!value || 'Requerido.',
|
||||||
@ -120,15 +123,17 @@ n <v-col>
|
|||||||
{ title: 'Compras', route:'/compras'},
|
{ title: 'Compras', route:'/compras'},
|
||||||
],
|
],
|
||||||
clients: [],
|
clients: [],
|
||||||
|
products: [],
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
this.fetchClients();
|
this.fetchClients();
|
||||||
|
this.fetchProducts();
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
calculateTotal() {
|
calculateTotal() {
|
||||||
return this.purchase.lines.reduce((total, line) => {
|
return this.purchase.saleline_set.reduce((total, saleline) => {
|
||||||
return total + this.calculateSubtotal(line);
|
return total + this.calculateSubtotal(saleline);
|
||||||
}, 0);
|
}, 0);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -137,25 +142,36 @@ n <v-col>
|
|||||||
fetch('/don_confiao/api/customers/')
|
fetch('/don_confiao/api/customers/')
|
||||||
.then(response => response.json())
|
.then(response => response.json())
|
||||||
.then(data => {
|
.then(data => {
|
||||||
this.clients = data.map(client => client.name);
|
this.clients = data;
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
console.error(error);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
fetchProducts() {
|
||||||
|
fetch('/don_confiao/api/products/')
|
||||||
|
.then(response => response.json())
|
||||||
|
.then(data => {
|
||||||
|
console.log(data);
|
||||||
|
this.products = data;
|
||||||
})
|
})
|
||||||
.catch(error => {
|
.catch(error => {
|
||||||
console.error(error);
|
console.error(error);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
addLine() {
|
addLine() {
|
||||||
this.purchase.lines.push({ product: '', price: 0, quantity:0 });
|
this.purchase.saleline_set.push({ product: '', unit_price: 0, quantity:0 });
|
||||||
},
|
},
|
||||||
removeLine(index) {
|
removeLine(index) {
|
||||||
this.purchase.lines.splice(index, 1);
|
this.purchase.saleline_set.splice(index, 1);
|
||||||
},
|
},
|
||||||
calculateSubtotal(line) {
|
calculateSubtotal(line) {
|
||||||
return line.price * line.quantity;
|
return line.unit_price * line.quantity;
|
||||||
},
|
},
|
||||||
async submit() {
|
async submit() {
|
||||||
if (this.$refs.form.validate()) {
|
if (this.$refs.form.validate()) {
|
||||||
try {
|
try {
|
||||||
const response = await fetch('http://localhost:8000/don_confiao/', {
|
const response = await fetch('/don_confiao/api/sales/', {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
headers: {
|
headers: {
|
||||||
'Content-Type': 'application/json',
|
'Content-Type': 'application/json',
|
||||||
@ -165,6 +181,7 @@ n <v-col>
|
|||||||
if (response.ok) {
|
if (response.ok) {
|
||||||
const data = await response.json();
|
const data = await response.json();
|
||||||
console.log('Compra enviada:', data);
|
console.log('Compra enviada:', data);
|
||||||
|
this.$router.push("SummaryPurchase");
|
||||||
} else {
|
} else {
|
||||||
console.error('Error al enviar la compra:', response.statusText);
|
console.error('Error al enviar la compra:', response.statusText);
|
||||||
}
|
}
|
||||||
@ -174,7 +191,7 @@ n <v-col>
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
navigate(route) {
|
navigate(route) {
|
||||||
this.$route.push(route);
|
this.$router.push(route);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
@ -0,0 +1,18 @@
|
|||||||
|
<template>
|
||||||
|
<v-app>
|
||||||
|
<v-navigation-drawer app>
|
||||||
|
</v-navigation-drawer>
|
||||||
|
<v-app-bar>
|
||||||
|
Resumen de la compra
|
||||||
|
</v-app-bar>
|
||||||
|
<v-container>
|
||||||
|
Pon aqui la información de la compra
|
||||||
|
</v-container>
|
||||||
|
</v-app>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
|
||||||
|
</script>
|
||||||
|
<style>
|
||||||
|
|
||||||
|
</style>
|
@ -0,0 +1,7 @@
|
|||||||
|
<template>
|
||||||
|
<SummaryPurchase />
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
//
|
||||||
|
</script>
|
@ -18,9 +18,9 @@ class SaleSerializer(serializers.ModelSerializer):
|
|||||||
class ProductSerializer(serializers.ModelSerializer):
|
class ProductSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Product
|
model = Product
|
||||||
fields = ['name', 'price', 'measuring_unit', 'categories']
|
fields = ['id', 'name', 'price', 'measuring_unit', 'categories']
|
||||||
|
|
||||||
class CustomerSerializer(serializers.ModelSerializer):
|
class CustomerSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Customer
|
model = Customer
|
||||||
fields = ['name', 'address']
|
fields = ['id', 'name', 'address']
|
||||||
|
Loading…
Reference in New Issue
Block a user