fixes: vehicles & offers

This commit is contained in:
Alexandro Uc Santos
2024-07-29 13:39:57 -06:00
parent d9a0cd626f
commit 0870d96f73
9 changed files with 101 additions and 51 deletions

View File

@@ -9,7 +9,6 @@
const { getAttachmentLoad, loading, attachments } = useAttachments(); const { getAttachmentLoad, loading, attachments } = useAttachments();
onMounted(() => { onMounted(() => {
console.log('se ejcyta attach');
getAttachmentLoad(); getAttachmentLoad();
}) })
const { t } = useI18n(); const { t } = useI18n();

View File

@@ -120,8 +120,8 @@
</div> </div>
<div class="col-lg-6 col-sm-12" v-if="authStore.user?.permissions === 'role_shipper'"> <div class="col-lg-6 col-sm-12" v-if="authStore.user?.permissions === 'role_shipper'">
<p><span>{{t('loads.postStatus')}}:</span> <span>{{ getStatusPublished(load) }}</span></p> <p><span>{{t('loads.postStatus')}}:</span> <span class="simple">{{ getStatusPublished(load) }}</span></p>
<p :style="{color: getStatusLoad(load).color}"><span>{{t('loads.loadStatus')}}:</span> <span>{{ getStatusLoad(load).status }}</span></p> <p :style="{color: getStatusLoad(load).color}"><span>{{t('loads.loadStatus')}}:</span> <spa class="simple">{{ getStatusLoad(load).status }}</spa></p>
</div> </div>
</div> </div>
<div class="divider"></div> <div class="divider"></div>
@@ -231,7 +231,7 @@
height: 33px; height: 33px;
} }
p { p .simple {
font-size: 1rem; font-size: 1rem;
font-weight: 400; font-weight: 400;
color: #323032; color: #323032;
@@ -242,6 +242,7 @@
font-weight: 700; font-weight: 700;
} }
.btn-row { .btn-row {
margin-top: 2rem; margin-top: 2rem;
display: flex; display: flex;

View File

@@ -4,6 +4,7 @@
import { getStatusLoad } from '../helpers/status'; import { getStatusLoad } from '../helpers/status';
import { useCompanyStore } from '../stores/company'; import { useCompanyStore } from '../stores/company';
import { useAuthStore } from '../stores/auth'; import { useAuthStore } from '../stores/auth';
import { useLoadsStore } from '../stores/loads';
import { useI18n } from 'vue-i18n'; import { useI18n } from 'vue-i18n';
const props = defineProps({ const props = defineProps({
@@ -17,6 +18,7 @@
const companyStore = useCompanyStore(); const companyStore = useCompanyStore();
const authStore = useAuthStore(); const authStore = useAuthStore();
const loadsStore = useLoadsStore();
const { t, locale } = useI18n(); const { t, locale } = useI18n();
const handleWithdrawnProposal = async() => { const handleWithdrawnProposal = async() => {
@@ -72,6 +74,11 @@
} }
defineEmits(['set-proposal']); defineEmits(['set-proposal']);
const openAttachmentsModal = () => {
loadsStore.currentLoad = props.proposal.load;
loadsStore.openAttachmentsModal = true;
}
</script> </script>
<template> <template>
@@ -86,26 +93,33 @@
<p v-if="proposal.vehicle"><span>{{ t('labels.dateAvailable') }}:</span> {{ getDateMonthDay(proposal.vehicle.available_date) }}</p> <p v-if="proposal.vehicle"><span>{{ t('labels.dateAvailable') }}:</span> {{ getDateMonthDay(proposal.vehicle.available_date) }}</p>
<p v-if="proposal.vehicle"><span>{{ t('vehicles.availableIn') }}:</span> {{proposal.vehicle.city}}<template v-if="proposal.vehicle.state">, {{proposal.vehicle.state}}</template></p> <p v-if="proposal.vehicle"><span>{{ t('vehicles.availableIn') }}:</span> {{proposal.vehicle.city}}<template v-if="proposal.vehicle.state">, {{proposal.vehicle.state}}</template></p>
<p v-if="proposal.vehicle"><span>{{ t('loads.destination') }}:</span> {{proposal.vehicle.destino}}</p> <p v-if="proposal.vehicle"><span>{{ t('loads.destination') }}:</span> {{proposal.vehicle.destino}}</p>
<p><span>{{ t('vehicles.truckPlates') }}:</span> {{ proposal.vehicle.circulation_serial_number }}</p>
<p v-if="proposal.vehicle"><span>{{ t('vehicles.trailerPlates') }} 1:</span> {{proposal.vehicle.trailer_plate_1}}</p> <p v-if="proposal.vehicle"><span>{{ t('vehicles.trailerPlates') }} 1:</span> {{proposal.vehicle.trailer_plate_1}}</p>
<p v-if="proposal.vehicle"><span>{{ t('vehicles.trailerPlates') }} 2:</span> {{proposal.vehicle.trailer_plate_2}}</p> <p v-if="proposal.vehicle"><span>{{ t('vehicles.trailerPlates') }} 2:</span> {{proposal.vehicle.trailer_plate_2}}</p>
<p v-if="proposal.vehicle" :style="{color: getStatusLoad(proposal.load, locale).color}"><span>{{ t('loads.loadStatus') }}:</span> {{ getStatusLoad(proposal.load, locale).status}}</p>
</div> </div>
<div class=""> <div class="">
<p v-if="proposal.load"> {{ t('loads.loadCode') }}: <p v-if="proposal.load"> <span>{{ t('loads.loadCode') }}: </span>
<span <span
class="code-enruta" class="code-enruta"
@click="$emit('set-proposal', {proposal: proposal, modal: 'detail'})" @click="$emit('set-proposal', {proposal: proposal, modal: 'detail'})"
data-toggle="modal" data-target="#loadDetailModal" data-toggle="modal" data-target="#loadDetailModal"
>{{proposal.load.shipment_code}}</span></p> >{{proposal.load.shipment_code}}</span></p>
<p v-if="proposal.vehicle" :style="{color: getStatusLoad(proposal.load, locale).color}"><span>{{ t('loads.loadStatus') }}:</span> {{ getStatusLoad(proposal.load, locale).status}}</p>
<p v-if="proposal._driver">{{ t('labels.operator') }}: {{proposal._driver}}</p> <p v-if="proposal._driver">{{ t('labels.operator') }}: {{proposal._driver}}</p>
</div> </div>
</div> </div>
<div class="btn-row"> <div class="btn-row">
<!-- <button <button
class="btn-primary-sm" type="button"
data-toggle="modal" data-target="#editcompanymodal" data-toggle="modal" data-target="#attachmentModal"
><i class="fa-solid fa-ban"></i> Retirar</button> --> class="btn-primary-sm"
@click="openAttachmentsModal"
>
<i class="fa-solid fa-image"></i>
{{ t('evidence.evidence') }}
</button>
<div v-if="proposal.is_withdrawn" class="indicator-cancel"> <div v-if="proposal.is_withdrawn" class="indicator-cancel">
<i class="fa-solid fa-ban"></i> <i class="fa-solid fa-ban"></i>
{{ t('proposals.retired') }} {{ t('proposals.retired') }}

View File

@@ -4,6 +4,7 @@
import { useVehiclesStore } from '../stores/vehicles'; import { useVehiclesStore } from '../stores/vehicles';
import { useAuthStore } from '../stores/auth'; import { useAuthStore } from '../stores/auth';
import { useI18n } from 'vue-i18n'; import { useI18n } from 'vue-i18n';
import { getStatusLoad } from '../helpers/status';
const props = defineProps({ const props = defineProps({
vehicle: { vehicle: {
@@ -14,7 +15,7 @@
console.log(props.vehicle); console.log(props.vehicle);
defineEmits(['set-vehicle']); defineEmits(['set-vehicle']);
const { t } = useI18n() const { t, locale } = useI18n()
const vehicleStore = useVehiclesStore(); const vehicleStore = useVehiclesStore();
const authStore = useAuthStore(); const authStore = useAuthStore();
@@ -81,13 +82,13 @@
</i> </i>
</span> </span>
</p> </p>
<p v-if="vehicle.is_available">{{ t('vehicles.availableIn') }}: <span>{{ vehicle.destino }}</span></p>
</div>
<div class="col-lg-6">
<p>{{ t('vehicles.truckPlates') }}: <span>{{ vehicle.circulation_serial_number }}</span></p> <p>{{ t('vehicles.truckPlates') }}: <span>{{ vehicle.circulation_serial_number }}</span></p>
<p>{{ t('vehicles.trailerPlates') }} 1: <span>{{ vehicle.trailer_plate_1 }}</span></p> <p>{{ t('vehicles.trailerPlates') }} 1: <span>{{ vehicle.trailer_plate_1 }}</span></p>
</div>
<div class="col-lg-6">
<p>{{ t('vehicles.trailerPlates') }} 2: <span>{{ vehicle.trailer_plate_2 }}</span></p> <p>{{ t('vehicles.trailerPlates') }} 2: <span>{{ vehicle.trailer_plate_2 }}</span></p>
<p>{{ t('vehicles.chargingBase') }}: <span>{{ vehicle.city }}, {{ vehicle.state }}</span></p> <p>{{ t('vehicles.chargingBase') }}: <span>{{ vehicle.city }}, {{ vehicle.state }}</span></p>
<p v-if="vehicle.is_available">{{ t('vehicles.availableIn') }}: <span>{{ vehicle.destino }}</span></p>
<p>Status: <p>Status:
<span>{{ vehicle.is_available ? t('vehicles.available') : t('vehicles.reserved')}} <span>{{ vehicle.is_available ? t('vehicles.available') : t('vehicles.reserved')}}
<i <i
@@ -99,6 +100,8 @@
</span> </span>
</p> </p>
<p v-if="vehicle.is_available">{{ t('vehicles.availableDate') }}: <span>{{ getDateMonthDayEs(vehicle.available_date, false) }}</span></p> <p v-if="vehicle.is_available">{{ t('vehicles.availableDate') }}: <span>{{ getDateMonthDayEs(vehicle.available_date, false) }}</span></p>
<p v-if="vehicle.active_load">{{ t('loads.loadCode') }}: <span>{{ vehicle.active_load.shipment_code}}</span></p>
<p v-if="vehicle.active_load">{{ t('loads.loadStatus') }}: <span>{{ getStatusLoad(vehicle.active_load, locale).status}}</span></p>
</div> </div>
</div> </div>
<p v-if="vehicle.notes">{{ t('vehicles.additionalInfoVehicle') }}:</p> <p v-if="vehicle.notes">{{ t('vehicles.additionalInfoVehicle') }}:</p>

View File

@@ -5,9 +5,10 @@ export default function useCalendar() {
const loads = ref([]); const loads = ref([]);
const loading = ref(false); const loading = ref(false);
const getCalendarDate = async(startDate, endDate) => { const getCalendarDate = async(startDate, endDate, filter) => {
console.log(filter);
loading.value = true; loading.value = true;
const resp = await getCalendar(startDate, endDate); const resp = await getCalendar(startDate, endDate, filter);
if(resp === null) { if(resp === null) {
loading.value = false; loading.value = false;
loads.value = []; loads.value = [];

View File

@@ -21,7 +21,7 @@ export const getStatusLoad = (load, locale = 'es') => {
break; break;
case 'Delivered': case 'Delivered':
statusTemp = "Entregado"; statusTemp = "Entregado";
color = "#000000"; color = "#1B70AF";
break; break;
default: default:
statusTemp = 'Sin publicar'; statusTemp = 'Sin publicar';
@@ -41,23 +41,24 @@ export const eventStatusLoad = (loadStatus) => {
switch (loadStatus) { switch (loadStatus) {
case 'Published': case 'Published':
status = "Publicado"; status = "Publicado";
color = "yellow"; color = "#A9B0B2";
// color = "#4CC8EA";
break; break;
case 'Loading': case 'Loading':
color = "green"; color = "#F44336";
status = "Cargando"; status = "Cargando";
break; break;
case 'Transit': case 'Transit':
status = "En Transito"; status = "En Transito";
color = "red" color = "#ffd22b"
break; break;
case 'Downloading': case 'Downloading':
status = "Descargando"; status = "Descargando";
color = "blue" color = "#428502"
break; break;
case 'Delivered': case 'Delivered':
color = "blue"; color = "blue";
status = "Entregado"; status = "#1B70AF";
break; break;
default: default:
color = "yellow"; color = "yellow";

View File

@@ -175,9 +175,9 @@ export const deleteLocation = async(id) => {
} }
} }
export const getCalendar = async(startDate, endDate) => { export const getCalendar = async(startDate, endDate, global) => {
try { try {
const endpoint = `/v1/loads/calendar?$sort[createdAt]=-1&date[lte]=${endDate}&date[gte]=${startDate}&elements=1000`; const endpoint = `/v1/loads/calendar?$sort[createdAt]=-1&date[lte]=${endDate}&date[gte]=${startDate}&global=${global}&elements=1000`;
console.log(endpoint); console.log(endpoint);
const {data} = await api.get(endpoint); const {data} = await api.get(endpoint);
return { return {

View File

@@ -7,14 +7,16 @@
import { useI18n } from 'vue-i18n'; import { useI18n } from 'vue-i18n';
import useCalendar from '../composables/useCalendar'; import useCalendar from '../composables/useCalendar';
import CustomPopup from '../components/CustomPopup.vue'; import CustomPopup from '../components/CustomPopup.vue';
import { watch } from 'vue'; import { watch } from 'vue';
const events = ref([]); const events = ref([]);
const router = useRouter(); const router = useRouter();
const { t, locale } = useI18n() const { t, locale } = useI18n()
const { getCalendarDate, loading, loads } = useCalendar() const { getCalendarDate, loading, loads } = useCalendar()
const filter = ref({value: 'general', label: t('calendar.general')}) const filter = ref({value: 'my', label: t('calendar.my')})
const startDate = ref('');
const endDate = ref('');
const optionsFilter = ref([]) const optionsFilter = ref([])
const openPopup = ref(false); const openPopup = ref(false);
@@ -33,13 +35,25 @@ import { watch } from 'vue';
style: { style: {
fontFamily: 'Nunito', fontFamily: 'Nunito',
colorSchemes: { colorSchemes: {
meetings: { published: {
color: "#fff", color: "#fff",
backgroundColor: "#131313", backgroundColor: "#A9B0B2",
}, },
sports: { loading: {
color: "#fff", color: "#fff",
backgroundColor: "#ff4081", backgroundColor: "#F44336",
},
transit: {
color: "#ffd22b",
backgroundColor: "#ffd22b",
},
downloading: {
color: "#fff",
backgroundColor: "#428502",
},
delivered: {
color: "#fff",
backgroundColor: "#1B70AF",
}, },
}, },
}, },
@@ -56,10 +70,12 @@ import { watch } from 'vue';
const year = currentDate.getFullYear(); const year = currentDate.getFullYear();
const month = currentDate.getMonth(); const month = currentDate.getMonth();
const startDate = new Date(year, month, 1); const startDateTemp = new Date(year, month, 1);
const endDate = new Date(year, month + 1, 0); const endDateTemp = new Date(year, month + 1, 0);
await getCalendarDate(formatOnlyDate(startDate), formatOnlyDate(endDate)); startDate.value = formatOnlyDate(startDateTemp);
// console.log(loads.value) endDate.value = formatOnlyDate(endDateTemp);
await getCalendarDate(startDate.value, endDate.value, 0);
console.log(loads.value)
optionsFilter.value = [ optionsFilter.value = [
{value: 'general',label: t('calendar.general')}, {value: 'general',label: t('calendar.general')},
{value: 'my',label: t('calendar.my')}, {value: 'my',label: t('calendar.my')},
@@ -79,20 +95,18 @@ import { watch } from 'vue';
}) })
const handleUpdateMode = (ev) => { const handleUpdateMode = (ev) => {
console.log(ev)
console.log('clic en el calendario');
} }
const handleClickDate = (ev) => { const handleClickDate = (ev) => {
console.log(ev);
console.log('clic en la fecha');
} }
const handleUpdatedPeriod = async(ev) => { const handleUpdatedPeriod = async(ev) => {
console.log(ev); // console.log(ev);
const start = formatOnlyDate(ev.start) const global = filter.value.value === 'general' ? 1 : 0;
const end = formatOnlyDate(ev.end) startDate.value = formatOnlyDate(ev.start)
await getCalendarDate(start, end); endDate.value = formatOnlyDate(ev.end)
console.log(startDate.value, endDate.value);
await getCalendarDate(startDate.value, endDate.value, global);
console.log('LOADS: ', loads.value) console.log('LOADS: ', loads.value)
mapLoadsToEvents() mapLoadsToEvents()
} }
@@ -101,21 +115,26 @@ import { watch } from 'vue';
events.value = []; events.value = [];
loads.value.forEach((e) => { loads.value.forEach((e) => {
const indicator = eventStatusLoad(e.load_status); const indicator = eventStatusLoad(e.load_status);
const dateStart = getDateTime(e.load_status_updated, 0); const dateStart = getDateTime(e.est_loading_date, 0);
const dateEnd = getDateTime(e.load_status_updated, 1); const dateEnd = getDateTime(e.est_loading_date, 1);
// console.log('dateStart', dateStart) // console.log('dateStart', dateStart)
// console.log('dateEnd', dateEnd) // console.log('dateEnd', dateEnd)
events.value.push({ events.value.push({
id: e._id, id: e._id,
title: e.shipment_code, title: e.shipment_code,
with: indicator.status, with: indicator.status,
start: e.est_loading_date,
end: e.est_unloading_date,
description: indicator.load_status, description: indicator.load_status,
colorScheme: e.load_status.toLowerCase(),
color: indicator.color, color: indicator.color,
time: { time: {
start: dateStart, start: dateStart,
end: dateEnd end: dateEnd
} },
}) })
console.log(events.value);
}); });
} }
@@ -124,9 +143,12 @@ import { watch } from 'vue';
openPopup.value = false openPopup.value = false
} }
const selectedFilter = (type) => { const selectedFilter = async (type) => {
filter.value = type filter.value = type
const global = type.value === 'general' ? 1 : 0;
openPopup.value = false openPopup.value = false
await getCalendarDate(startDate.value, endDate.value, global);
mapLoadsToEvents()
} }
</script> </script>
@@ -149,11 +171,11 @@ import { watch } from 'vue';
<h2>{{ t('calendar.helpText') }}</h2> <h2>{{ t('calendar.helpText') }}</h2>
<div class="header"> <div class="header">
<div class="indicators"> <div class="indicators">
<span><i class="fa-solid fa-circle" style="color: yellow"></i> {{ t('global.published') }}</span> <span><i class="fa-solid fa-circle" style="color: #A9B0B2"></i> {{ t('global.published') }}</span>
<span><i class="fa-solid fa-circle" style="color: green"></i> {{ t('global.loading') }}</span> <span><i class="fa-solid fa-circle" style="color: #F44336"></i> {{ t('global.loading') }}</span>
<span><i class="fa-solid fa-circle" style="color: red"></i> {{ t('global.transit') }}</span> <span><i class="fa-solid fa-circle" style="color: #ffd22b"></i> {{ t('global.transit') }}</span>
<span><i class="fa-solid fa-circle" style="color: blue"></i> {{ t('global.downloading') }}</span> <span><i class="fa-solid fa-circle" style="color: #428502"></i> {{ t('global.downloading') }}</span>
<span><i class="fa-solid fa-circle" style="color: blue"></i> {{ t('global.delivered') }}</span> <span><i class="fa-solid fa-circle" style="color: #1B70AF"></i> {{ t('global.delivered') }}</span>
</div> </div>
<div class="box-filter" <div class="box-filter"
@click="openPopup = true" @click="openPopup = true"

View File

@@ -1,14 +1,19 @@
<script setup> <script setup>
import { onMounted, ref } from 'vue'; import { onMounted, ref } from 'vue';
import { useCompanyStore } from '../stores/company'; import { useCompanyStore } from '../stores/company';
import { useAuthStore } from '../stores/auth';
import { useLoadsStore } from '../stores/loads';
import Spiner from '../components/ui/Spiner.vue'; import Spiner from '../components/ui/Spiner.vue';
import CardProposal from '../components/CardProposal.vue'; import CardProposal from '../components/CardProposal.vue';
import LoadDetailModal from '../components/LoadDetailModal.vue'; import LoadDetailModal from '../components/LoadDetailModal.vue';
import MakeProposalModal from '../components/MakeProposalModal.vue'; import MakeProposalModal from '../components/MakeProposalModal.vue';
import Pagination from '../components/Pagination.vue'; import Pagination from '../components/Pagination.vue';
import AttachmentsModal from '../components/AttachmentsModal.vue';
import { useI18n } from 'vue-i18n'; import { useI18n } from 'vue-i18n';
const companyStore = useCompanyStore(); const companyStore = useCompanyStore();
const authStore = useAuthStore();
const loadStore = useLoadsStore();
const loading = ref(false); const loading = ref(false);
const proposalCurrent = ref(null); const proposalCurrent = ref(null);
const openModal = ref(false); const openModal = ref(false);
@@ -51,9 +56,13 @@
proposalCurrent.value = null; proposalCurrent.value = null;
// console.log('clear proposal'); // console.log('clear proposal');
} }
</script> </script>
<template> <template>
<AttachmentsModal
v-if="loadStore.openAttachmentsModal"
/>
<LoadDetailModal <LoadDetailModal
v-if="openModal" v-if="openModal"
:proposal="proposalCurrent" :proposal="proposalCurrent"