Compare commits

...

41 Commits

Author SHA1 Message Date
Javier Segarra dafc9f83b9 Merge pull request 'Desarrollo de los submodulos basic data, notes y pbx' (!245) from hyervoni/salix-front-mindshore:features/ms_submodulos_worker into dev
gitea/salix-front/pipeline/pr-dev This commit looks good Details
gitea/salix-front/pipeline/head There was a failure building this commit Details
Reviewed-on: #245
Reviewed-by: Javier Segarra <jsegarra@verdnatura.es>
Reviewed-by: Alex Moreno <alexm@verdnatura.es>
2024-04-08 06:19:28 +00:00
William Buezas 4701714aa9 merge with dev
gitea/salix-front/pipeline/pr-dev This commit looks good Details
2024-04-05 08:42:13 -03:00
William Buezas 970d1a48e3 Merge branch 'dev' of https://gitea.verdnatura.es/verdnatura/salix-front into features/ms_submodulos_worker 2024-04-05 08:25:28 -03:00
William Buezas 03be831ee5 remove package-lock.json
gitea/salix-front/pipeline/pr-dev This commit looks good Details
2024-04-05 08:24:55 -03:00
Javier Casado d72c151d82 Merge pull request 'refs #6816 remove microsip tag' (!267) from 6816-removeMicroSip into dev
gitea/salix-front/pipeline/head This commit looks good Details
Reviewed-on: #267
Reviewed-by: Alex Moreno <alexm@verdnatura.es>
2024-04-05 08:01:10 +00:00
Javier Casado 5d7fed3b32 Merge branch 'dev' into 6816-removeMicroSip
gitea/salix-front/pipeline/pr-dev This commit looks good Details
2024-04-05 07:57:21 +00:00
Alex Moreno e14993c114 minor changes
gitea/salix-front/pipeline/head This commit looks good Details
2024-04-05 09:12:49 +02:00
Jon Elias b5f721316b Merge pull request 'refactor: refs #6894 changed filter fields and checked functionality' (!269) from 6894-invoiceInChangeFilters into dev
gitea/salix-front/pipeline/head This commit looks good Details
Reviewed-on: #269
Reviewed-by: Javi Gallego <jgallego@verdnatura.es>
2024-04-04 12:33:34 +00:00
Jon Elias 59a631b19e Merge branch 'dev' into 6894-invoiceInChangeFilters
gitea/salix-front/pipeline/pr-dev This commit looks good Details
2024-04-04 12:32:40 +00:00
Jon Elias 97b7c2469a refactor: refs #6894 changed filter fields and checked functionality
gitea/salix-front/pipeline/pr-dev This commit looks good Details
2024-04-04 14:13:34 +02:00
Guillermo Bonet b21c54f20d Merge branch 'test' into dev
gitea/salix-front/pipeline/head This commit looks good Details
2024-04-04 11:31:20 +02:00
Guillermo Bonet d98e5d78ff hotfix: refs #6930 Rollback tokenMultimedia
gitea/salix-front/pipeline/head This commit looks good Details
2024-04-04 10:17:13 +02:00
jcasado d00ec3c41c refs #6816 remove microsip tag
gitea/salix-front/pipeline/pr-dev This commit looks good Details
2024-04-04 09:38:47 +02:00
Alex Moreno 06af04a043 Merge pull request '7167-testToMaster_2414' (!266) from 7167-testToMaster_2414 into master
gitea/salix-front/pipeline/head This commit looks good Details
Reviewed-on: #266
Reviewed-by: Guillermo Bonet <guillermo@verdnatura.es>
2024-04-04 05:35:07 +00:00
Pablo Natek ef489b74df Merge pull request '7128-copyStyles' (!265) from 7128-copyStyles into dev
gitea/salix-front/pipeline/head This commit looks good Details
Reviewed-on: #265
Reviewed-by: Javi Gallego <jgallego@verdnatura.es>
2024-04-03 19:12:23 +00:00
Pablo Natek be42593368 Merge branch 'dev' into 7128-copyStyles
gitea/salix-front/pipeline/pr-dev This commit looks good Details
2024-04-03 19:10:38 +00:00
Alex Moreno 7ed505bde8 Merge branch 'test' of https://gitea.verdnatura.es/verdnatura/salix-front into dev
gitea/salix-front/pipeline/head This commit looks good Details
2024-04-03 16:30:10 +02:00
Alex Moreno dec71dbf62 Merge branch 'master' of https://gitea.verdnatura.es/verdnatura/salix-front into test
gitea/salix-front/pipeline/head This commit looks good Details
gitea/salix-front/pipeline/pr-master This commit looks good Details
2024-04-03 16:29:40 +02:00
Pablo Natek c0ed8da0b7 remove space
gitea/salix-front/pipeline/pr-dev This commit looks good Details
2024-04-03 15:02:31 +02:00
William Buezas 507c979cc2 Remove unused reactive import
gitea/salix-front/pipeline/pr-dev This commit looks good Details
2024-04-02 12:48:14 -03:00
William Buezas 3569afdb85 Update fetch-data name 2024-04-02 12:46:50 -03:00
William Buezas 71b2f7c8dc Remove col divs 2024-04-02 12:43:32 -03:00
William Buezas addbe9345b Resolve conflicts 2024-04-02 12:40:26 -03:00
William Buezas 3055db8ef8 Delete file 2024-04-02 12:32:15 -03:00
Pablo Natek f18cefd999 Merge branch 'dev' of https://gitea.verdnatura.es/verdnatura/salix-front into 7128-copyStyles
gitea/salix-front/pipeline/pr-dev This commit looks good Details
2024-04-02 14:12:58 +02:00
Pablo Natek c66be3c2b5 feat #7128 fix styles 2024-04-02 14:04:09 +02:00
Pablo Natek 148224344d feat(style): refs #7128 add style 2024-04-02 10:46:27 +02:00
William Buezas 239daceca6 Apply changes in Worker PBX
gitea/salix-front/pipeline/pr-dev There was a failure building this commit Details
2024-03-28 13:45:35 -03:00
Alex Moreno bed0b9e8e9 Merge pull request '#6951 warmfix ticketDescriptor' (!263) from 6951-warmfix_ticketDescriptor into test
gitea/salix-front/pipeline/head This commit looks good Details
Reviewed-on: #263
Reviewed-by: Alex Moreno <alexm@verdnatura.es>
2024-03-28 09:09:09 +00:00
Jorge Penadés 7020fab851 fix: refs #6951 drop hook & change selector
gitea/salix-front/pipeline/pr-test This commit looks good Details
2024-03-28 09:46:18 +01:00
Alex Moreno 9ed8fa1bcb Merge pull request '7152-devToTest_2414' (!262) from 7152-devToTest_2414 into test
gitea/salix-front/pipeline/head This commit looks good Details
gitea/salix-front/pipeline/pr-test This commit looks good Details
Reviewed-on: #262
Reviewed-by: Carlos Satorres <carlossa@verdnatura.es>
2024-03-28 08:20:23 +00:00
carlosfonseca 8cf14929e3 Se implementa nuevo componente para la gestion de notas
gitea/salix-front/pipeline/pr-dev There was a failure building this commit Details
2024-03-27 08:52:31 -05:00
Alex Moreno f0ccb526f0 Merge pull request 'refs #7147 add value' (!260) from 7147-hotfixLanguage into master
gitea/salix-front/pipeline/head This commit looks good Details
Reviewed-on: #260
Reviewed-by: Alex Moreno <alexm@verdnatura.es>
2024-03-27 12:40:35 +00:00
Carlos Satorres e651e116e7 refs #7147 add value
gitea/salix-front/pipeline/pr-master This commit looks good Details
2024-03-27 13:36:51 +01:00
carlosfonseca 081d4bf5fc Solucion a comentarios 4
gitea/salix-front/pipeline/pr-dev There was a failure building this commit Details
2024-03-26 23:11:41 -05:00
carlosfonseca 1d37b91e09 Solucion a comentarios 3
gitea/salix-front/pipeline/pr-dev There was a failure building this commit Details
2024-03-26 17:17:40 -05:00
Alex Moreno 13a0e683f4 Merge pull request '7118_testToMaster_2412' (!249) from 7118_testToMaster_2412 into master
gitea/salix-front/pipeline/head This commit looks good Details
Reviewed-on: #249
Reviewed-by: Guillermo Bonet <guillermo@verdnatura.es>
2024-03-21 06:34:43 +00:00
Carlos Fonseca 142155e14e Merge branch 'dev' into features/ms_submodulos_worker
gitea/salix-front/pipeline/pr-dev This commit looks good Details
2024-03-20 16:55:09 +00:00
carlosfonseca c06d810fe9 Soluciones a comentarios 1
gitea/salix-front/pipeline/pr-dev This commit looks good Details
2024-03-20 11:53:03 -05:00
Carlos Fonseca 5867649d0c Merge branch 'dev' into features/ms_submodulos_worker
gitea/salix-front/pipeline/pr-dev This commit looks good Details
2024-03-18 13:50:06 +00:00
carlosfonseca 844cd0e12b Desarrollo de los submodulos basic data, notes y pbx
gitea/salix-front/pipeline/pr-dev This commit looks good Details
2024-03-18 08:39:10 -05:00
23 changed files with 474 additions and 123 deletions

View File

@ -16,7 +16,7 @@ onMounted(() => {
if (availableLocales.includes(userLang)) {
locale.value = userLang;
} else {
locale.value = fallbackLocale;
locale.value = fallbackLocale.value;
}
});

View File

@ -1,5 +1,5 @@
<script setup>
import { h, onMounted } from 'vue';
import { onMounted } from 'vue';
import axios from 'axios';
const $props = defineProps({

View File

@ -227,6 +227,7 @@ watch(formUrl, async () => {
defineExpose({
save,
isLoading,
hasChanges,
});
</script>
<template>
@ -284,6 +285,9 @@ defineExpose({
/>
</template>
<style lang="scss" scoped>
.q-notifications {
color: black;
}
#formModel {
max-width: 800px;
width: 100%;

View File

@ -20,12 +20,7 @@ const itemComputed = computed(() => {
});
</script>
<template>
<QItem
active-class="text-primary"
:to="{ name: itemComputed.name }"
clickable
v-ripple
>
<QItem active-class="bg-hover" :to="{ name: itemComputed.name }" clickable v-ripple>
<QItemSection avatar v-if="itemComputed.icon">
<QIcon :name="itemComputed.icon" />
</QItemSection>

View File

@ -157,7 +157,7 @@ const emit = defineEmits(['onFetch']);
<div class="icons">
<slot name="icons" :entity="entity" />
</div>
<div class="actions">
<div class="actions justify-center">
<slot name="actions" :entity="entity" />
</div>
<slot name="after" />
@ -176,22 +176,23 @@ const emit = defineEmits(['onFetch']);
.body {
background-color: var(--vn-section-color);
.text-h5 {
font-size: 20px;
padding-top: 5px;
padding-bottom: 5px;
padding-bottom: 0px;
}
.q-item {
min-height: 20px;
.link {
margin-left: 5px;
margin-left: 10px;
}
}
.vn-label-value {
display: flex;
padding: 2px 16px;
padding: 0px 16px;
.label {
color: var(--vn-label-color);
font-size: 12px;
font-size: 14px;
&:not(:has(a))::after {
content: ':';
@ -200,7 +201,7 @@ const emit = defineEmits(['onFetch']);
.value {
color: var(--vn-text-color);
font-size: 14px;
margin-left: 12px;
margin-left: 4px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
@ -218,18 +219,19 @@ const emit = defineEmits(['onFetch']);
overflow: hidden;
text-overflow: ellipsis;
span {
color: $primary;
color: var(--vn-text-color);
font-weight: bold;
}
}
.subtitle {
color: var(--vn-text-color);
font-size: 16px;
margin-bottom: 15px;
margin-bottom: 2px;
}
.list-box {
.q-item__label {
color: var(--vn-label-color);
padding-bottom: 0%;
}
}
.descriptor {
@ -247,6 +249,7 @@ const emit = defineEmits(['onFetch']);
}
.actions {
margin: 0 5px;
justify-content: center !important;
}
}
</style>

View File

@ -74,7 +74,7 @@ async function fetch() {
</router-link>
<span v-else></span>
</slot>
<slot name="header" :entity="entity">
<slot name="header" :entity="entity" dense>
<VnLv :label="`${entity.id} -`" :value="entity.name" />
</slot>
<slot name="header-right">
@ -97,7 +97,6 @@ async function fetch() {
.cardSummary {
width: 100%;
.summaryHeader {
text-align: center;
font-size: 20px;
@ -132,6 +131,7 @@ async function fetch() {
padding: 7px;
font-size: 16px;
min-width: 275px;
box-shadow: none;
.vn-label-value {
display: flex;

View File

@ -15,7 +15,6 @@ const { t } = useI18n();
color="primary"
padding="none"
:href="`sip:${props.phoneNumber}`"
:title="t('globals.microsip')"
@click.stop
/>
</template>

View File

@ -14,7 +14,7 @@ onUnmounted(() => {
</script>
<template>
<QToolbar class="justify-end sticky">
<QToolbar class="bg-vn-section-color justify-end sticky">
<slot name="st-data">
<div id="st-data"></div>
</slot>
@ -24,6 +24,11 @@ onUnmounted(() => {
</slot>
</QToolbar>
</template>
<style lang="scss">
.q-toolbar {
background: var(--vn-section-color);
}
</style>
<style lang="scss" scoped>
.sticky {
position: sticky;

View File

@ -14,8 +14,8 @@ export function useSession() {
return localToken || sessionToken || '';
}
function getTokenMultimedia() {
const localTokenMultimedia = localStorage.getItem('tokenMultimedia');
const sessionTokenMultimedia = sessionStorage.getItem('tokenMultimedia');
const localTokenMultimedia = localStorage.getItem('token'); // Temporal
const sessionTokenMultimedia = sessionStorage.getItem('token'); // Temporal
return localTokenMultimedia || sessionTokenMultimedia || '';
}

View File

@ -14,21 +14,15 @@ body.body--light {
.q-header .q-toolbar {
color: var(--font-color);
}
.q-card,
.q-table,
.q-table__bottom,
.q-drawer {
background-color: var(--vn-section-color);
}
}
body.body--dark {
--vn-section-color: #403c3c;
--vn-page-color: #222;
--vn-section-color: #3d3d3d;
--vn-text-color: white;
--vn-label-color: #a8a8a8;
--vn-accent-color: #424242;
background-color: #222;
background-color: var(--vn-page-color);
}
a {
@ -76,6 +70,9 @@ select:-webkit-autofill {
.bg-vn-section-color {
background-color: var(--vn-section-color);
}
.bg-hover {
background-color: #666666;
}
.color-vn-text {
color: var(--vn-text-color);
@ -85,6 +82,11 @@ select:-webkit-autofill {
color: $white;
}
.card-width {
max-width: 800px;
width: 100%;
}
.vn-card {
background-color: var(--vn-section-color);
color: var(--vn-text-color);
@ -118,9 +120,36 @@ select:-webkit-autofill {
content: ' *';
}
.q-chip {
.q-card,
.q-table,
.q-table__bottom,
.q-drawer {
background-color: var(--vn-section-color);
}
.q-chip,
.q-notification__message,
.q-notification__icon {
color: black;
}
.q-notification--standard.bg-negative {
background-color: #fa3939 !important;
}
.q-notification--standard.bg-positive {
background-color: #a3d131 !important;
}
.q-tooltip {
background-color: var(--vn-page-color);
color: var(--font-color);
font-size: medium;
}
.q-card__actions {
justify-content: center;
}
/* q-notification row items-stretch q-notification--standard bg-negative text-white */
input[type='number'] {
-moz-appearance: textfield;

View File

@ -22,7 +22,7 @@ $warning: #f4b974;
$success: $positive;
$alert: $negative;
$white: #fff;
$dark: #3c3b3b;
$dark: #3d3d3d;
// custom
$color-link: #66bfff;
$color-spacer-light: #a3a3a31f;

View File

@ -48,7 +48,6 @@ export default {
today: 'Today',
yesterday: 'Yesterday',
dateFormat: 'en-GB',
microsip: 'Open in MicroSIP',
noSelectedRows: `You don't have any line selected`,
downloadCSVSuccess: 'CSV downloaded successfully',
reference: 'Reference',
@ -852,12 +851,14 @@ export default {
pageTitles: {
workers: 'Workers',
list: 'List',
basicData: 'Basic data',
summary: 'Summary',
notifications: 'Notifications',
workerCreate: 'New worker',
department: 'Department',
basicData: 'Basic data',
notes: 'Notes',
pda: 'PDA',
notifications: 'Notifications',
pbx: 'Private Branch Exchange',
log: 'Log',
},
list: {

View File

@ -49,7 +49,6 @@ export default {
yesterday: 'Ayer',
dateFormat: 'es-ES',
noSelectedRows: `No tienes ninguna línea seleccionada`,
microsip: 'Abrir en MicroSIP',
downloadCSVSuccess: 'Descarga de CSV exitosa',
reference: 'Referencia',
agency: 'Agencia',
@ -851,12 +850,14 @@ export default {
pageTitles: {
workers: 'Trabajadores',
list: 'Listado',
basicData: 'Datos básicos',
summary: 'Resumen',
notifications: 'Notificaciones',
workerCreate: 'Nuevo trabajador',
department: 'Departamentos',
basicData: 'Datos básicos',
notes: 'Notas',
pda: 'PDA',
notifications: 'Notificaciones',
pbx: 'Centralita',
log: 'Historial',
},
list: {

View File

@ -29,6 +29,7 @@ const suppliersRef = ref();
order="nickname"
limit="30"
@on-fetch="(data) => (suppliers = data)"
auto-load
/>
<VnFilterPanel :data-key="props.dataKey" :search-button="true">
<template #tags="{ tag, formatFn }">
@ -38,46 +39,6 @@ const suppliersRef = ref();
</div>
</template>
<template #body="{ params, searchFn }">
<QItem>
<QItemSection>
<VnInput
:label="t('Id or Supplier')"
v-model="params.search"
is-outlined
>
<template #prepend>
<QIcon name="badge" size="sm"></QIcon>
</template>
</VnInput>
</QItemSection>
</QItem>
<QItem>
<QItemSection>
<VnInput
:label="useCapitalize(t('params.correctedFk'))"
v-model="params.correctedFk"
is-outlined
>
<template #prepend>
<QIcon name="attachment" size="sm" />
</template>
</VnInput>
</QItemSection>
</QItem>
<QItem>
<QItemSection>
<VnInput
:label="t('params.supplierRef')"
v-model="params.supplierRef"
is-outlined
lazy-rules
>
<template #prepend>
<QIcon name="vn:client" size="sm"></QIcon>
</template>
</VnInput>
</QItemSection>
</QItem>
<QItem>
<QItemSection>
<VnSelectFilter
@ -97,31 +58,31 @@ const suppliersRef = ref();
<QItem>
<QItemSection>
<VnInput
:label="t('params.fi')"
v-model="params.fi"
:label="t('params.supplierRef')"
v-model="params.supplierRef"
is-outlined
lazy-rules
>
<template #prepend>
<QIcon name="badge" size="sm"></QIcon>
<QIcon name="vn:client" size="sm"></QIcon>
</template>
</VnInput>
</QItemSection>
</QItem>
<QItem>
<QItemSection>
<VnInput
:label="t('params.serialNumber')"
v-model="params.serialNumber"
is-outlined
lazy-rules
>
<template #prepend>
<QIcon name="badge" size="sm"></QIcon>
</template>
</VnInput>
</QItemSection>
</QItem>
<QItemSection>
<VnInputDate
:label="t('From')"
v-model="params.from"
is-outlined
/>
</QItemSection>
</QItem>
<QItem>
<QItemSection>
<VnInputDate :label="t('To')" v-model="params.to" is-outlined />
</QItemSection>
</QItem>
<QItem>
<QItemSection>
<VnInput
@ -152,6 +113,34 @@ const suppliersRef = ref();
</QItemSection>
</QItem>
<QExpansionItem :label="t('More options')" expand-separator>
<QItem>
<QItemSection>
<VnInput
:label="t('params.fi')"
v-model="params.fi"
is-outlined
lazy-rules
>
<template #prepend>
<QIcon name="badge" size="sm"></QIcon>
</template>
</VnInput>
</QItemSection>
</QItem>
<QItem>
<QItemSection>
<VnInput
:label="t('params.serialNumber')"
v-model="params.serialNumber"
is-outlined
lazy-rules
>
<template #prepend>
<QIcon name="badge" size="sm"></QIcon>
</template>
</VnInput>
</QItemSection>
</QItem>
<QItem>
<QItemSection>
<VnInput
@ -180,20 +169,6 @@ const suppliersRef = ref();
</VnInput>
</QItemSection>
</QItem>
<QItem>
<QItemSection>
<VnInputDate
:label="t('From')"
v-model="params.from"
is-outlined
/>
</QItemSection>
</QItem>
<QItem>
<QItemSection>
<VnInputDate :label="t('To')" v-model="params.to" is-outlined />
</QItemSection>
</QItem>
<QItem>
<QItemSection>
<VnInputDate

View File

@ -55,7 +55,7 @@ async function onSubmit() {
if (res.response?.data?.error?.code === 'REQUIRES_2FA') {
Notify.create({
message: t('login.twoFactorRequired'),
icon: 'phonelink_lock',
icon: 'phoneLink_lock',
type: 'warning',
});
params.keepLogin = keepLogin.value;

View File

@ -277,7 +277,6 @@ function navigateToRoadmapSummary(event, row) {
.route-list {
width: 100%;
}
.table-actions {
gap: 12px;
}

View File

@ -1,5 +1,5 @@
<script setup>
import { onMounted, ref, computed, onUpdated } from 'vue';
import { onMounted, ref, computed } from 'vue';
import { useRoute, useRouter } from 'vue-router';
import { useI18n } from 'vue-i18n';
import axios from 'axios';
@ -14,8 +14,6 @@ import { getUrl } from 'src/composables/getUrl';
import VnUserLink from 'src/components/ui/VnUserLink.vue';
import VnTitle from 'src/components/common/VnTitle.vue';
onUpdated(() => summaryRef.value.fetch());
const route = useRoute();
const router = useRouter();

View File

@ -0,0 +1,168 @@
<script setup>
import { ref } from 'vue';
import { useRoute } from 'vue-router';
import { useI18n } from 'vue-i18n';
import FetchData from 'components/FetchData.vue';
import FormModel from 'src/components/FormModel.vue';
import VnRow from 'components/ui/VnRow.vue';
import VnInput from 'src/components/common/VnInput.vue';
import VnSelectFilter from 'src/components/common/VnSelectFilter.vue';
const route = useRoute();
const { t } = useI18n();
const workersOptions = ref([]);
const countriesOptions = ref([]);
const educationLevelsOptions = ref([]);
const workerFilter = {
include: [
{
relation: 'user',
scope: {
fields: ['name', 'emailVerified'],
include: { relation: 'emailUser', scope: { fields: ['email'] } },
},
},
{ relation: 'sip', scope: { fields: ['extension', 'secret'] } },
{ relation: 'department', scope: { include: { relation: 'department' } } },
],
};
const workersFilter = {
fields: ['id', 'nickname'],
order: 'nickname ASC',
limit: 30,
};
const countriesFilter = {
fields: ['id', 'country', 'code'],
order: 'country ASC',
limit: 30,
};
const educationLevelsFilter = { fields: ['id', 'name'], order: 'name ASC', limit: 30 };
const maritalStatus = [
{ code: 'M', name: t('Married') },
{ code: 'S', name: t('Single') },
];
</script>
<template>
<FetchData
:filter="workersFilter"
@on-fetch="(data) => (workersOptions = data)"
auto-load
url="Workers/search"
/>
<FetchData
:filter="countriesFilter"
@on-fetch="(data) => (countriesOptions = data)"
auto-load
url="Countries"
/>
<FetchData
:filter="educationLevelsFilter"
@on-fetch="(data) => (educationLevelsOptions = data)"
auto-load
url="EducationLevels"
/>
<FormModel
:filter="workerFilter"
:url="`Workers/${route.params.id}`"
auto-load
model="Worker"
>
<template #form="{ data }">
<VnRow class="row q-gutter-md q-mb-md">
<VnInput :label="t('Name')" clearable v-model="data.firstName" />
<VnInput :label="t('Last name')" clearable v-model="data.lastName" />
</VnRow>
<VnRow class="row q-gutter-md q-mb-md">
<VnInput v-model="data.phone" :label="t('Business phone')" clearable />
<VnInput
v-model="data.mobileExtension"
:label="t('Mobile extension')"
clearable
/>
</VnRow>
<VnRow class="row q-gutter-md q-mb-md">
<VnSelectFilter
:label="t('Boss')"
:options="workersOptions"
hide-selected
option-label="nickname"
option-value="id"
v-model="data.bossFk"
>
<template #option="scope">
<QItem v-bind="scope.itemProps">
<QItemSection>
<QItemLabel>{{ scope.opt?.name }}</QItemLabel>
<QItemLabel caption>
{{ scope.opt?.nickname }},
{{ scope.opt?.code }}
</QItemLabel>
</QItemSection>
</QItem>
</template>
</VnSelectFilter>
<VnSelectFilter
:label="t('Marital status')"
:options="maritalStatus"
hide-selected
option-label="name"
option-value="code"
v-model="data.maritalStatus"
/>
</VnRow>
<VnRow class="row q-gutter-md q-mb-md">
<VnSelectFilter
:label="t('Origin country')"
:options="countriesOptions"
hide-selected
option-label="country"
option-value="id"
v-model="data.originCountryFk"
/>
<VnSelectFilter
:label="t('Education level')"
:options="educationLevelsOptions"
hide-selected
option-label="name"
option-value="id"
v-model="data.educationLevelFk"
/>
</VnRow>
<VnRow class="row q-gutter-md q-mb-md">
<VnInput v-model="data.SSN" :label="t('SSN')" clearable />
<VnInput
v-model="data.locker"
type="number"
:label="t('Locker')"
clearable
/>
</VnRow>
</template>
</FormModel>
</template>
<i18n>
es:
Name: Nombre
Last name: Apellidos
Business phone: Teléfono de empresa
Mobile extension: Extensión móvil
Boss: Jefe
Marital status: Estado civil
Married: Casado/a
Single: Soltero/a
Origin country: País origen
Education level: Nivel educación
SSN: NSS
Locker: Taquilla
</i18n>

View File

@ -1,5 +1,5 @@
<script setup>
import { computed, ref } from 'vue';
import { computed, ref, watch } from 'vue';
import { useRoute } from 'vue-router';
import { useI18n } from 'vue-i18n';
import { useSession } from 'src/composables/useSession';
@ -7,6 +7,7 @@ import CardDescriptor from 'src/components/ui/CardDescriptor.vue';
import VnLv from 'src/components/ui/VnLv.vue';
import VnLinkPhone from 'src/components/ui/VnLinkPhone.vue';
import useCardDescription from 'src/composables/useCardDescription';
import { useState } from 'src/composables/useState';
const $props = defineProps({
id: {
@ -23,6 +24,7 @@ const $props = defineProps({
const route = useRoute();
const { t } = useI18n();
const { getTokenMultimedia } = useSession();
const state = useState();
const entityId = computed(() => {
return $props.id || route.params.id;
@ -53,7 +55,18 @@ const filter = {
],
};
const sip = computed(() => worker.value?.sip && worker.value.sip.extension);
const sip = ref(null);
watch(
() => [worker.value?.sip?.extension, state.get('extension')],
([newWorkerSip, newStateExtension], [oldWorkerSip, oldStateExtension]) => {
if (newStateExtension !== oldStateExtension || sip.value === oldStateExtension) {
sip.value = newStateExtension;
} else if (newWorkerSip !== oldWorkerSip && sip.value !== newStateExtension) {
sip.value = newWorkerSip;
}
}
);
function getWorkerAvatar() {
const token = getTokenMultimedia();

View File

@ -0,0 +1,38 @@
<script setup>
import { useRoute } from 'vue-router';
import VnNotes from 'src/components/ui/VnNotes.vue';
const route = useRoute();
const filter = {
order: 'created DESC',
where: { workerFk: route.params.id },
include: {
relation: 'worker',
scope: {
fields: ['id', 'firstName', 'lastName'],
include: {
relation: 'user',
scope: {
fields: ['id', 'nickname'],
},
},
},
},
};
const body = {
workerFk: route.params.id,
};
</script>
<template>
<VnNotes
style="overflow-y: auto"
:add-note="{ type: Boolean, default: true }"
url="WorkerObservations"
:filter="filter"
:body="body"
/>
</template>

View File

@ -0,0 +1,70 @@
<script setup>
import { watch, ref } from 'vue';
import { useI18n } from 'vue-i18n';
import { useRoute } from 'vue-router';
import { useState } from 'src/composables/useState';
import FormModel from 'src/components/FormModel.vue';
import VnRow from 'components/ui/VnRow.vue';
import VnInput from 'src/components/common/VnInput.vue';
const { t } = useI18n();
const state = useState();
const route = useRoute();
const workerPBXForm = ref();
const extension = ref(null);
const filter = {
include: [
{
relation: 'sip',
},
],
};
watch(
() => route.params.id,
() => state.set('extension', null)
);
const onFetch = (data) => {
state.set('extension', data?.sip?.extension);
extension.value = state.get('extension');
};
const updateModelValue = (data) => {
state.set('extension', data);
workerPBXForm.value.hasChanges = true;
};
</script>
<template>
<FormModel
ref="workerPBXForm"
:filter="filter"
:url="`Workers/${route.params.id}`"
url-update="Sips"
auto-load
:mapper="
() => ({
userFk: +route.params.id,
extension,
})
"
model="DeviceProductionUser"
@on-fetch="onFetch"
>
<template #form="{}">
<VnRow class="row q-gutter-md q-mb-md">
<div class="col">
<VnInput
:label="t('worker.summary.sipExtension')"
v-model="extension"
@update:model-value="updateModelValue"
/>
</div>
</VnRow>
</template>
</FormModel>
</template>

View File

@ -12,7 +12,14 @@ export default {
redirect: { name: 'WorkerMain' },
menus: {
main: ['WorkerList', 'WorkerDepartment'],
card: ['WorkerNotificationsManager', 'WorkerPda', 'WorkerLog'],
card: [
'WorkerBasicData',
'WorkerNotes',
'WorkerPda',
'WorkerNotificationsManager',
'WorkerPBX',
'WorkerLog',
],
departmentCard: ['BasicData'],
},
children: [
@ -66,6 +73,52 @@ export default {
},
component: () => import('src/pages/Worker/Card/WorkerSummary.vue'),
},
{
path: 'basic-data',
name: 'WorkerBasicData',
meta: {
title: 'basicData',
icon: 'vn:settings',
},
component: () => import('src/pages/Worker/Card/WorkerBasicData.vue'),
},
{
path: 'notes',
name: 'NotesCard',
redirect: { name: 'WorkerNotes' },
children: [
{
path: '',
name: 'WorkerNotes',
meta: {
title: 'notes',
icon: 'vn:notes',
},
component: () =>
import('src/pages/Worker/Card/WorkerNotes.vue'),
},
{
path: 'create',
name: 'WorkerNoteCreate',
meta: {
title: 'note-create',
},
component: () =>
import(
'src/pages/Worker/components/WorkerNoteCreate.vue'
),
},
],
},
{
name: 'WorkerPda',
path: 'pda',
meta: {
title: 'pda',
icon: 'phone_android',
},
component: () => import('src/pages/Worker/Card/WorkerPda.vue'),
},
{
name: 'WorkerNotificationsManager',
path: 'notifications',
@ -77,13 +130,13 @@ export default {
import('src/pages/Worker/Card/WorkerNotificationsManager.vue'),
},
{
name: 'WorkerPda',
path: 'pda',
path: 'pbx',
name: 'WorkerPBX',
meta: {
title: 'pda',
icon: 'phone_android',
title: 'pbx',
icon: 'vn:pbx',
},
component: () => import('src/pages/Worker/Card/WorkerPda.vue'),
component: () => import('src/pages/Worker/Card/WorkerPBX.vue'),
},
{
name: 'WorkerLog',

View File

@ -1,7 +1,7 @@
/// <reference types="cypress" />
describe('Ticket descriptor', () => {
const toCloneOpt = '.q-list > :nth-child(5)';
const warehouseValue = '.summaryBody > :nth-child(2) > :nth-child(6) > .value > span';
const warehouseValue = ':nth-child(1) > :nth-child(6) > .value > span';
const summaryHeader = '.summaryHeader > div';
beforeEach(() => {