update company & crud budgets
This commit is contained in:
@@ -1,10 +1,55 @@
|
||||
<script setup>
|
||||
import { useCompanyStore } from '../stores/company';
|
||||
|
||||
defineProps({
|
||||
budget: {
|
||||
type: Object,
|
||||
required: true
|
||||
}
|
||||
})
|
||||
|
||||
defineEmits(['set-budget'])
|
||||
|
||||
const companyStore = useCompanyStore();
|
||||
|
||||
const handleDeleteBudget = async() => {
|
||||
Swal.fire({
|
||||
title: 'Eliminar Presupuesto!',
|
||||
text: '¿Estás seguro de eliminar este presupuesto?',
|
||||
icon: 'warning',
|
||||
showCancelButton: true,
|
||||
cancelButtonColor: "#d33",
|
||||
confirmButtonText: 'Eliminar',
|
||||
cancelButtonText: 'Cancelar',
|
||||
}).then(async(result) => {
|
||||
if(result.isConfirmed) {
|
||||
Swal.fire({
|
||||
title: 'Por favor espere!',
|
||||
html: 'Eliminando presupuesto...',// add html attribute if you want or remove
|
||||
allowOutsideClick: false,
|
||||
didOpen: () => {
|
||||
Swal.showLoading()
|
||||
},
|
||||
});
|
||||
const resp = await companyStore.deleteBudgetCompany(props.budget._id);
|
||||
if(resp != null) {
|
||||
Swal.fire({
|
||||
title: "Presupuesto eliminado!",
|
||||
text: "Tu presupuesto ha sido eliminado exitosamente.",
|
||||
icon: "success"
|
||||
});
|
||||
} else {
|
||||
Swal.fire({
|
||||
title: "No eliminado!",
|
||||
text: "Tu presupuesto no se pudo eliminar, intente más tarde.",
|
||||
icon: "error"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
@@ -32,10 +77,17 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-footer">
|
||||
<button class="btn-primary-sm radius-sm">
|
||||
<button
|
||||
class="btn-primary-sm radius-sm"
|
||||
@click="handleDeleteBudget"
|
||||
>
|
||||
<i class="fa-solid fa-trash" /> <span class="clear-xsm">Eliminar</span>
|
||||
</button>
|
||||
<button class="btn-primary-sm radius-sm">
|
||||
<button
|
||||
class="btn-primary-sm radius-sm"
|
||||
@click="$emit('set-budget')"
|
||||
data-toggle="modal" data-target="#budgetModal"
|
||||
>
|
||||
<i class="fa-solid fa-pen-to-square" /> <span class="clear-xsm">Editar</span>
|
||||
</button>
|
||||
<button type="button" class="btn btn-dark">
|
||||
|
||||
@@ -1,18 +1,72 @@
|
||||
<script setup>
|
||||
import { computed, reactive } from 'vue';
|
||||
import { computed, onMounted, reactive } from 'vue';
|
||||
import CustomInput from './ui/CustomInput.vue';
|
||||
import Products from './ui/Products.vue';
|
||||
import TruckTypes from './ui/TruckTypes.vue';
|
||||
import { useAuthStore } from '../stores/auth';
|
||||
import { useCompanyStore } from '../stores/company';
|
||||
|
||||
|
||||
defineProps({
|
||||
const props = defineProps({
|
||||
budget: {
|
||||
type: Object,
|
||||
required: false
|
||||
}
|
||||
})
|
||||
|
||||
const budgetForm = reactive({
|
||||
const authStore = useAuthStore();
|
||||
const companyStore = useCompanyStore();
|
||||
|
||||
onMounted(() => {
|
||||
console.log('entra onmounted')
|
||||
console.log(props.budget);
|
||||
if(props.budget) {
|
||||
budgetForm.budget_id = props.budget._id;
|
||||
budgetForm.client = props.budget.client;
|
||||
budgetForm.material = props.budget.material._id;
|
||||
budgetForm.origin = props.budget.origin;
|
||||
budgetForm.destination = props.budget.destination;
|
||||
|
||||
// let product = props.budget.material.name;
|
||||
// budgetForm.budgetproduct = {
|
||||
// name: product
|
||||
// }
|
||||
budgetForm.budgetproduct = props.budget.material
|
||||
|
||||
budgetForm.budgetTrucktypes = props.budget.truck_type
|
||||
// let truck_type = props.budget.truck_type;
|
||||
// budgetForm.budgetTrucktypes = {
|
||||
// meta_value: truck_type
|
||||
// }
|
||||
|
||||
budgetForm.num_tons = props.budget.num_tons;
|
||||
budgetForm.price_per_ton = props.budget.price_per_ton;
|
||||
budgetForm.tonnage = props.budget.tonnage;
|
||||
budgetForm.pickup_distance = props.budget.pickup_distance;
|
||||
budgetForm.delivery_distance = props.budget.delivery_distance;
|
||||
budgetForm.warehouse_distance = props.budget.warehouse_distance;
|
||||
|
||||
budgetForm.cost_per_liter = props.budget.cost_per_liter;
|
||||
budgetForm.fuel_price_per_liter = props.budget.fuel_price_per_liter;
|
||||
budgetForm.other_fuel_expenses = props.budget.other_fuel_expenses;
|
||||
|
||||
budgetForm.driver_salary = props.budget.driver_salary;
|
||||
budgetForm.accomadation_allowance = props.budget.accomadation_allowance;
|
||||
budgetForm.other_administrative_expenses = props.budget.other_administrative_expenses;
|
||||
budgetForm.total_administrative_expenses = props.budget.total_administrative_expenses;
|
||||
|
||||
budgetForm.total_before_tax = props.budget.total_before_tax;
|
||||
budgetForm.total_utility_per_km = props.budget.total_utility_per_km;
|
||||
budgetForm.total_profit = props.budget.total_profit;
|
||||
budgetForm.profit_percentage = props.budget.profit_percentage;
|
||||
} else {
|
||||
Object.assign(budgetForm, initalState);
|
||||
}
|
||||
})
|
||||
|
||||
defineEmits(['reset-budget']);
|
||||
|
||||
const initalState = {
|
||||
client: '',
|
||||
material: '',
|
||||
origin: '',
|
||||
@@ -39,47 +93,46 @@
|
||||
total_fuel_cost: 0.0,
|
||||
budgetproduct:[],
|
||||
budgetTrucktypes:[],
|
||||
})
|
||||
|
||||
const clearMoal = () => {
|
||||
// loadsStore.openProposalsModal = false;
|
||||
// loadsStore.currentLoad = false;
|
||||
}
|
||||
|
||||
const budgetForm = reactive({
|
||||
...initalState
|
||||
})
|
||||
|
||||
// const total = computed(() => {
|
||||
|
||||
// });
|
||||
|
||||
const totalTravel = computed(() => {
|
||||
budgetForm.total_travel = budgetForm.warehouse_distance * 1 + budgetForm.delivery_distance * 1 + budgetForm.pickup_distance * 1;
|
||||
budgetForm.total_travel = isNaN(budgetForm.total_travel) ? 0.0 : budgetForm.total_travel;
|
||||
return budgetForm.total_travel;
|
||||
});
|
||||
|
||||
const totalFuel = computed(() => {
|
||||
budgetForm.total_fuel = budgetForm.total_travel / budgetForm.cost_per_liter;
|
||||
console.log(budgetForm.total_travel)
|
||||
console.log(budgetForm.cost_per_liter)
|
||||
console.log('TOTAL: ', budgetForm.total_fuel);
|
||||
budgetForm.total_fuel = isNaN(budgetForm.total_travel / budgetForm.cost_per_liter) ? 0.0 : (budgetForm.total_travel / budgetForm.cost_per_liter);
|
||||
return isNaN(budgetForm.total_fuel) ? '0.0' : parseFloat(budgetForm.total_fuel).toFixed(2);
|
||||
});
|
||||
|
||||
const totalFuelCost = computed(() => {
|
||||
budgetForm.total_fuel_cost = budgetForm.total_fuel * budgetForm.fuel_price_per_liter;
|
||||
budgetForm.total_fuel_cost = isNaN(budgetForm.total_fuel * budgetForm.fuel_price_per_liter) ? 0.0 : budgetForm.total_fuel * budgetForm.fuel_price_per_liter;
|
||||
return "$" + (isNaN(budgetForm.total_fuel_cost) ? '0.0' : parseFloat(budgetForm.total_fuel_cost).toFixed(2));
|
||||
});
|
||||
|
||||
const totalAdminExpenses = computed(() => {
|
||||
budgetForm.total_administrative_expenses = budgetForm.driver_salary*1 + budgetForm.accomadation_allowance*1 + budgetForm.other_administrative_expenses*1;
|
||||
budgetForm.total_administrative_expenses = budgetForm.driver_salary*1 + budgetForm.accomadation_allowance*1 + budgetForm.other_administrative_expenses*1;
|
||||
budgetForm.total_administrative_expenses = isNaN(budgetForm.total_administrative_expenses) ? 0.0 : budgetForm.total_administrative_expenses;
|
||||
return "$" + (isNaN(budgetForm.total_administrative_expenses) ? '0.0' : parseFloat(budgetForm.total_administrative_expenses).toFixed(2));
|
||||
});
|
||||
|
||||
const totalBeforeTax = computed(() => {
|
||||
budgetForm.total_before_tax = budgetForm.tonnage * budgetForm.price_per_ton;
|
||||
budgetForm.total_before_tax = isNaN(budgetForm.total_before_tax) ? 0.0 : budgetForm.total_before_tax;
|
||||
return "$" + (isNaN(budgetForm.total_before_tax) ? '0.0' : parseFloat(budgetForm.total_before_tax).toFixed(2));
|
||||
});
|
||||
|
||||
const totalUtilityPerKm = computed(() => {
|
||||
budgetForm.total_utility_per_km = budgetForm.total_before_tax / budgetForm.total_travel;
|
||||
budgetForm.total_utility_per_km = isNaN(budgetForm.total_before_tax / budgetForm.total_travel) ? 0.0 : (budgetForm.total_before_tax / budgetForm.total_travel);
|
||||
return "$" + (isNaN(budgetForm.total_utility_per_km) ? '0.0' : parseFloat(budgetForm.total_utility_per_km).toFixed(2));
|
||||
});
|
||||
|
||||
@@ -90,9 +143,53 @@
|
||||
|
||||
const totalPercentage = computed(() => {
|
||||
budgetForm.profit_percentage = budgetForm.total_profit / budgetForm.total_before_tax * 100;
|
||||
budgetForm.profit_percentage = isNaN(budgetForm.profit_percentage) ? 0.0 : budgetForm.profit_percentage;
|
||||
return (isNaN(budgetForm.profit_percentage) ? '0.0' : parseFloat(budgetForm.profit_percentage).toFixed(2)) + "%";
|
||||
});
|
||||
|
||||
const saveBudget = async() => {
|
||||
let budgetData ={
|
||||
client: budgetForm.client,
|
||||
material: budgetForm.budgetproduct.length <= 0 ? null : budgetForm.budgetproduct,
|
||||
origin: budgetForm.origin,
|
||||
destination: budgetForm.destination,
|
||||
truck_type: budgetForm.budgetTrucktypes.length <= 0 ? null : budgetForm.budgetTrucktypes,
|
||||
num_tons: budgetForm.num_tons,
|
||||
price_per_ton: budgetForm.price_per_ton,
|
||||
|
||||
tonnage: budgetForm.tonnage,
|
||||
pickup_distance: budgetForm.pickup_distance,
|
||||
delivery_distance: budgetForm.delivery_distance,
|
||||
warehouse_distance: budgetForm.warehouse_distance,
|
||||
total_km_travel: budgetForm.total_travel,
|
||||
|
||||
cost_per_liter: budgetForm.cost_per_liter,
|
||||
fuel_price_per_liter: budgetForm.fuel_price_per_liter,
|
||||
other_fuel_expenses: budgetForm.other_fuel_expenses,
|
||||
total_fuel_consumed: budgetForm.total_fuel,
|
||||
total_cost_fuel: budgetForm.total_fuel_cost,
|
||||
|
||||
driver_salary: budgetForm.driver_salary,
|
||||
accomadation_allowance: budgetForm.accomadation_allowance,
|
||||
other_administrative_expenses: budgetForm.other_administrative_expenses,
|
||||
total_administrative_expenses: budgetForm.total_administrative_expenses,
|
||||
|
||||
total_before_tax: budgetForm.total_before_tax,
|
||||
total_utility_per_km: budgetForm.total_utility_per_km,
|
||||
total_profit: budgetForm.total_profit,
|
||||
profit_percentage: (isNaN(budgetForm.profit_percentage) || isFinite(budgetForm.profit_percentage)) ? 0.0 : budgetForm.profit_percentage,
|
||||
company: authStore.user.company,
|
||||
}
|
||||
|
||||
if(props.budget !== null) { // update
|
||||
const result = companyStore.updateBudgetCompany(props.budget._id, budgetData);
|
||||
console.log(result)
|
||||
} else { // create
|
||||
const result = companyStore.createBudgetCompany(budgetData);
|
||||
console.log(result)
|
||||
}
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<template>
|
||||
@@ -104,7 +201,7 @@
|
||||
<button
|
||||
id="btnClosebudgetModal"
|
||||
type="button"
|
||||
@click="clearMoal"
|
||||
@click="$emit('reset-budget')"
|
||||
class="close bg-white" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
@@ -352,7 +449,7 @@
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-dark"
|
||||
@click="clearMoal"
|
||||
@click="$emit('reset-budget')"
|
||||
data-dismiss="modal">Cerrar</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -199,7 +199,9 @@
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-dark"
|
||||
data-dismiss="modal">Cerrar</button>
|
||||
data-dismiss="modal"
|
||||
@click="$emit('reset-load')"
|
||||
>Cerrar</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -51,6 +51,8 @@
|
||||
:type="type"
|
||||
:id="name"
|
||||
:name="name"
|
||||
:min="0"
|
||||
:step="0.1"
|
||||
:value="field"
|
||||
:disabled="readonly"
|
||||
:readonly="readonly"
|
||||
|
||||
@@ -25,10 +25,12 @@
|
||||
|
||||
onMounted(() => {
|
||||
console.log('EditCompanyModal');
|
||||
console.log(companyStore.company)
|
||||
if(companyStore.company){
|
||||
companyCategories.value = companyStore.company.categories.map(m =>{
|
||||
return { name: m.name };
|
||||
});
|
||||
// companyCategories.value = companyStore.company.categories.map(m =>{
|
||||
// return { name: m.name };
|
||||
// });
|
||||
companyCategories.value = companyStore.company.categories;
|
||||
}
|
||||
if(companyStore.company){
|
||||
companyStates.value = companyStore.company.company_state.map(m =>{
|
||||
@@ -54,17 +56,34 @@
|
||||
description: companyStore.company?.company_description ?? '',
|
||||
});
|
||||
|
||||
const handleSave = () => {
|
||||
const handleSave = async() => {
|
||||
// const resp = editCompany()
|
||||
const resp = validations();
|
||||
if(resp !== '') {
|
||||
msgError.value = resp;
|
||||
clearMessages();
|
||||
} else {
|
||||
// $('#editcompanymodal').modal('toggle');
|
||||
document.getElementById('btnCloseEditCompany').click();
|
||||
notifications.show = true;
|
||||
notifications.text = 'Empresa actualizada';
|
||||
loading.value = true;
|
||||
let companyData = {
|
||||
is_company: companyStore.company._id,
|
||||
company_type: companyStore.company.company_type,
|
||||
meta_data: companyStore.company.meta_data,
|
||||
categories: company.segments,
|
||||
company_city: company.cities.map((e) => e.city_name),
|
||||
company_state: company.states.map((e) => e.state_name),
|
||||
truck_type: company.truckTypes.map((e) => e.meta_value),
|
||||
company_description: company.description
|
||||
};
|
||||
const result = await companyStore.editCompany(companyData);
|
||||
loading.value = false;
|
||||
if(result === 'success') {
|
||||
document.getElementById('btnCloseEditCompany').click();
|
||||
notifications.show = true;
|
||||
notifications.text = 'Empresa actualizada';
|
||||
} else {
|
||||
msgError.value === result;
|
||||
clearMessages();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -89,6 +108,7 @@
|
||||
|
||||
}
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
<template>
|
||||
@@ -139,8 +159,11 @@
|
||||
:filled="false"
|
||||
v-model:field="company.description"
|
||||
/>
|
||||
|
||||
<input type="submit" value="Cuardar cambios" class="btn-primary-lg btn-lg-block my-4">
|
||||
<Spiner v-if="loading"/>
|
||||
<input
|
||||
v-else
|
||||
type="submit"
|
||||
value="Cuardar cambios" class="btn-primary-lg btn-lg-block my-4">
|
||||
</form>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
|
||||
Reference in New Issue
Block a user