diff --git a/src/components/FormModel.vue b/src/components/FormModel.vue index ba0bf0a3dd..b38ccdd837 100644 --- a/src/components/FormModel.vue +++ b/src/components/FormModel.vue @@ -135,7 +135,7 @@ async function save() { } else { response = await axios.patch($props.urlUpdate || $props.url, body); } - emit('onDataSaved', formData.value, response.data); + emit('onDataSaved', formData.value, response?.data); originalData.value = JSON.parse(JSON.stringify(formData.value)); hasChanges.value = false; } catch (err) { diff --git a/src/components/LeftMenu.vue b/src/components/LeftMenu.vue index 2eac97c65d..1721adfecc 100644 --- a/src/components/LeftMenu.vue +++ b/src/components/LeftMenu.vue @@ -206,6 +206,17 @@ async function togglePinned(item, event) { diff --git a/src/i18n/en/index.js b/src/i18n/en/index.js index a76de1f3ac..af5c90563a 100644 --- a/src/i18n/en/index.js +++ b/src/i18n/en/index.js @@ -131,6 +131,8 @@ export default { log: 'Log', sms: 'Sms', creditManagement: 'Credit management', + creditContracts: 'Credit contracts', + creditOpinion: 'Credit opinion', others: 'Others', }, list: { diff --git a/src/i18n/es/index.js b/src/i18n/es/index.js index 19e877fb72..4035c9a634 100644 --- a/src/i18n/es/index.js +++ b/src/i18n/es/index.js @@ -131,6 +131,8 @@ export default { log: 'Historial', sms: 'Sms', creditManagement: 'Gestión de crédito', + creditContracts: 'Contratos de crédito', + creditOpinion: 'Opinión de crédito', others: 'Otros', }, list: { diff --git a/src/pages/Customer/Card/CustomerBalance.vue b/src/pages/Customer/Card/CustomerBalance.vue index 9e44f67f54..184667d6ee 100644 --- a/src/pages/Customer/Card/CustomerBalance.vue +++ b/src/pages/Customer/Card/CustomerBalance.vue @@ -1,3 +1,282 @@ + + + + +es: + Company: Empresa + Total by company: Total por empresa + New payment: Añadir pago + Date: Fecha + Creation date: Fecha de creación + Employee: Empleado + Reference: Referencia + Bank: Caja + Debit: Debe + Havings: Haber + Balance: Balance + Conciliated: Conciliado + diff --git a/src/pages/Customer/Card/CustomerConsignees.vue b/src/pages/Customer/Card/CustomerConsignees.vue index bf61ea3026..7e643208e0 100644 --- a/src/pages/Customer/Card/CustomerConsignees.vue +++ b/src/pages/Customer/Card/CustomerConsignees.vue @@ -137,21 +137,15 @@ const toCustomerConsigneeEdit = (consigneeId) => { - - - - - {{ t('New consignee') }} - - + + + + {{ t('New consignee') }} + + + + +es: + Total: Total + Date: Fecha + Created by: Creado por + Comment: Comentario + Type: Tipo + Amount: Importe + New greuge: Nuevo greuge + diff --git a/src/pages/Customer/Card/CustomerNotes.vue b/src/pages/Customer/Card/CustomerNotes.vue index 303ea09800..0909758f31 100644 --- a/src/pages/Customer/Card/CustomerNotes.vue +++ b/src/pages/Customer/Card/CustomerNotes.vue @@ -60,7 +60,7 @@ const toCustomerNoteCreate = () => { +import { ref, computed, onBeforeMount } from 'vue'; +import { useI18n } from 'vue-i18n'; +import { useRoute, useRouter } from 'vue-router'; + +import { date, QBtn } from 'quasar'; + +import { useArrayData } from 'composables/useArrayData'; +import { useStateStore } from 'stores/useStateStore'; +import { toCurrency } from 'src/filters'; + +import WorkerDescriptorProxy from 'src/pages/Worker/Card/WorkerDescriptorProxy.vue'; + +const { t } = useI18n(); +const route = useRoute(); +const router = useRouter(); +const stateStore = useStateStore(); + +const arrayData = ref(null); +const workerId = ref(0); +const rows = computed(() => arrayData.value.store.data); + +onBeforeMount(async () => { + const filter = { + where: { clientFk: `${route.params.id}` }, + order: ['started DESC'], + limit: 20, + }; + + arrayData.value = useArrayData('CustomerRecoveriesCard', { + url: 'Recoveries', + filter, + }); + await arrayData.value.fetch({ append: false }); + stateStore.rightDrawer = true; +}); + +const tableColumnComponents = { + since: { + component: 'span', + props: () => {}, + event: () => {}, + }, + to: { + component: 'span', + props: () => {}, + event: () => {}, + }, + amount: { + component: 'span', + props: () => {}, + event: () => {}, + }, + period: { + component: 'span', + props: () => {}, + event: () => {}, + }, +}; + +const columns = computed(() => [ + { + align: 'left', + field: 'started', + label: t('Since'), + name: 'since', + format: (value) => date.formatDate(value, 'DD/MM/YYYY'), + }, + { + align: 'left', + field: 'finished', + label: t('To'), + name: 'to', + format: (value) => date.formatDate(value, 'DD/MM/YYYY'), + }, + { + align: 'left', + field: 'amount', + label: t('Amount'), + name: 'amount', + format: (value) => toCurrency(value), + }, + { + align: 'left', + field: 'period', + label: t('Period'), + name: 'period', + }, +]); + +const toCustomerRecoverieCreate = () => { + router.push({ name: 'CustomerRecoverieCreate' }); +}; + + + + + + +es: + Since: Desde + To: Hasta + Amount: Importe + Period: Periodo + New recoverie: Nuevo recobro + diff --git a/src/pages/Customer/Card/CustomerWebAccess.vue b/src/pages/Customer/Card/CustomerWebAccess.vue index 95ec77c3de..d3be7bec85 100644 --- a/src/pages/Customer/Card/CustomerWebAccess.vue +++ b/src/pages/Customer/Card/CustomerWebAccess.vue @@ -1,3 +1,69 @@ + + + + +es: + Enable web access: Habilitar acceso web + User: Usuario + Recovery email: Correo de recuperacion + This email is used for user to regain access their account: Este correo electrónico se usa para que el usuario recupere el acceso a su cuenta + diff --git a/src/pages/Customer/components/CustomerConsigneeCreate.vue b/src/pages/Customer/components/CustomerConsigneeCreate.vue index aadf554b3b..c725742b7c 100644 --- a/src/pages/Customer/components/CustomerConsigneeCreate.vue +++ b/src/pages/Customer/components/CustomerConsigneeCreate.vue @@ -12,7 +12,7 @@ import VnInput from 'src/components/common/VnInput.vue'; import VnSelectFilter from 'src/components/common/VnSelectFilter.vue'; import VnSelectCreate from 'src/components/common/VnSelectCreate.vue'; import CustomerCreateNewPostcode from 'src/components/CreateNewPostcodeForm.vue'; -import CustomsNewCustomsAgent from 'src/pages/Customer/components/CustomerNewCustomsAgent.vue'; +import CustomerNewCustomsAgent from 'src/pages/Customer/components/CustomerNewCustomsAgent.vue'; const { t } = useI18n(); const route = useRoute(); @@ -233,7 +233,7 @@ const refreshData = () => { v-model="data.customsAgentFk" > diff --git a/src/pages/Customer/components/CustomerGreugeCreate.vue b/src/pages/Customer/components/CustomerGreugeCreate.vue new file mode 100644 index 0000000000..1ff467d972 --- /dev/null +++ b/src/pages/Customer/components/CustomerGreugeCreate.vue @@ -0,0 +1,93 @@ + + + + + + + +es: + Amount: Importe + Date: Fecha + Comment: Comentario + Type: Tipo + diff --git a/src/pages/Customer/components/CustomerNewPayment.vue b/src/pages/Customer/components/CustomerNewPayment.vue new file mode 100644 index 0000000000..fc0c52b0fe --- /dev/null +++ b/src/pages/Customer/components/CustomerNewPayment.vue @@ -0,0 +1,286 @@ + + + + + +es: + New payment: Añadir pago + Date: Fecha + Company: Empresa + Bank: Caja + Amount: Importe + Reference: Referencia + Cash: Efectivo + Delivered amount: Cantidad entregada + Amount to return: Cantidad a devolver + View recipt: Ver recibido + Send email: Enviar correo + Compensation: Compensación + Compensation account: Cuenta para compensar + diff --git a/src/pages/Customer/components/CustomerNoteCreate.vue b/src/pages/Customer/components/CustomerNoteCreate.vue index cea90f9758..640f6f3a02 100644 --- a/src/pages/Customer/components/CustomerNoteCreate.vue +++ b/src/pages/Customer/components/CustomerNoteCreate.vue @@ -32,8 +32,8 @@ const toCustomerNotes = () => { -
{{ data }}
diff --git a/src/router/modules/customer.js b/src/router/modules/customer.js index fa57682afa..716b0fa6cf 100644 --- a/src/router/modules/customer.js +++ b/src/router/modules/customer.js @@ -254,13 +254,31 @@ export default { }, { path: 'greuges', - name: 'CustomerGreuges', - meta: { - title: 'greuges', - icon: 'vn:greuge', - }, - component: () => - import('src/pages/Customer/Card/CustomerGreuges.vue'), + name: 'GreugesCard', + redirect: { name: 'CustomerGreuges' }, + children: [ + { + path: '', + name: 'CustomerGreuges', + meta: { + title: 'greuges', + icon: 'vn:greuge', + }, + component: () => + import('src/pages/Customer/Card/CustomerGreuges.vue'), + }, + { + path: 'create', + name: 'CustomerGreugeCreate', + meta: { + title: 'greuge-create', + }, + component: () => + import( + 'src/pages/Customer/components/CustomerGreugeCreate.vue' + ), + }, + ], }, { path: 'balance', @@ -274,13 +292,31 @@ export default { }, { path: 'recoveries', - name: 'CustomerRecoveries', - meta: { - title: 'recoveries', - icon: 'vn:recovery', - }, - component: () => - import('src/pages/Customer/Card/CustomerRecoveries.vue'), + name: 'RecoveriesCard', + redirect: { name: 'CustomerRecoveries' }, + children: [ + { + path: '', + name: 'CustomerRecoveries', + meta: { + title: 'recoveries', + icon: 'vn:recovery', + }, + component: () => + import('src/pages/Customer/Card/CustomerRecoveries.vue'), + }, + { + path: 'create', + name: 'CustomerRecoverieCreate', + meta: { + title: 'recoverie-create', + }, + component: () => + import( + 'src/pages/Customer/components/CustomerRecoverieCreate.vue' + ), + }, + ], }, { path: 'web-access', @@ -316,10 +352,49 @@ export default { meta: { title: 'creditManagement', icon: 'paid', + menuChildren: [ + { + name: 'CustomerCreditContracts', + title: 'creditContracts', + icon: 'paid', + }, + { + name: 'CustomerCreditOpinion', + title: 'creditOpinion', + icon: 'paid', + }, + ], }, component: () => import('src/pages/Customer/Card/CustomerCreditManagement.vue'), + children: [ + { + path: 'credit-contracts', + name: 'CustomerCreditContracts', + meta: { + title: 'creditContracts', + icon: 'paid', + }, + component: () => + import( + 'src/pages/Customer/Card/CustomerCreditContracts.vue' + ), + }, + { + path: 'credit-opinion', + name: 'CustomerCreditOpinion', + meta: { + title: 'creditOpinion', + icon: 'paid', + }, + component: () => + import( + 'src/pages/Customer/Card/CustomerCreditOpinion.vue' + ), + }, + ], }, + { path: 'others', name: 'CustomerOthers', diff --git a/src/stores/useNavigationStore.js b/src/stores/useNavigationStore.js index 2eda6f6862..1da7ca25c1 100644 --- a/src/stores/useNavigationStore.js +++ b/src/stores/useNavigationStore.js @@ -52,13 +52,20 @@ export const useNavigationStore = defineStore('navigationStore', () => { function addMenuItem(module, route, parent) { const { meta } = route; + let { menuChildren = null } = meta; + if (menuChildren) + menuChildren = menuChildren.map(({ name, title, icon }) => ({ + name, + icon, + title: `${module}.pageTitles.${title}`, + })); if (meta && meta.roles && role.hasAny(meta.roles) === false) return; const item = { name: route.name, + children: menuChildren, }; - if (meta) { item.title = `${module}.pageTitles.${meta.title}`; item.icon = meta.icon;