update company & crud budgets

This commit is contained in:
Alexandro Uc Santos
2023-12-30 14:41:07 -06:00
parent 7afd77b218
commit 25528cae8f
12 changed files with 380 additions and 48 deletions

View File

@@ -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">

View File

@@ -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">&times;</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>

View File

@@ -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>

View File

@@ -51,6 +51,8 @@
:type="type"
:id="name"
:name="name"
:min="0"
:step="0.1"
:value="field"
:disabled="readonly"
:readonly="readonly"

View File

@@ -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">