From 7d0b3fb26f13799deadf7bfff826d70475b527a6 Mon Sep 17 00:00:00 2001 From: Paolo Arena Date: Wed, 3 Feb 2021 01:32:56 +0100 Subject: [PATCH] Project e Todos sistemati... aggiunti Gruppi --- src/common/shared_vuejs.ts | 58 +- src/components/CGridTableRec/CGridTableRec.ts | 4 + src/components/Footer/Footer.vue | 8 +- .../FormNewsletter/FormNewsletter.vue | 3 +- .../projects/SingleProject/SingleProject.ts | 54 +- .../projects/SingleProject/SingleProject.vue | 112 +-- src/components/todos/CTodo/CTodo.ts | 10 +- src/components/todos/SingleTodo/SingleTodo.ts | 42 +- .../todos/SingleTodo/SingleTodo.vue | 163 ++-- src/globalroutines/index.ts | 17 +- src/globalroutines/indexdb.ts | 2 +- src/layouts/menuone/menuOne.ts | 6 +- src/model/GlobalStore.ts | 11 +- src/model/Products.ts | 9 + src/model/Projects.ts | 4 +- src/model/Todos.ts | 2 +- src/model/UserStore.ts | 1 + .../admin/departments/departments.scss | 0 src/rootgen/admin/departments/departments.ts | 44 + src/rootgen/admin/departments/departments.vue | 27 + src/rootgen/admin/groups/groups.scss | 0 src/rootgen/admin/groups/groups.ts | 44 + src/rootgen/admin/groups/groups.vue | 27 + src/rootgen/admin/orders/orders.scss | 0 src/rootgen/admin/orders/orders.ts | 44 + src/rootgen/admin/orders/orders.vue | 28 + src/statics/lang/it.js | 7 +- src/store/Modules/ApiTables.ts | 75 +- src/store/Modules/GlobalStore.ts | 37 +- src/store/Modules/Products.ts | 16 +- src/store/Modules/Projects.ts | 37 +- src/store/Modules/Todos.ts | 33 +- src/store/Modules/UserStore.ts | 4 + src/store/Modules/fieldsTable.ts | 42 +- src/store/Modules/tools.ts | 218 +++-- src/views/Error404.vue | 4 +- src/views/ecommerce/checkOut/checkOut.ts | 2 +- src/views/ecommerce/orderInfo/orderInfo.vue | 2 +- src/views/projects/proj-list/proj-list.ts | 263 +++--- src/views/projects/proj-list/proj-list.vue | 794 ++++++++++-------- 40 files changed, 1487 insertions(+), 767 deletions(-) create mode 100755 src/rootgen/admin/departments/departments.scss create mode 100755 src/rootgen/admin/departments/departments.ts create mode 100755 src/rootgen/admin/departments/departments.vue create mode 100755 src/rootgen/admin/groups/groups.scss create mode 100755 src/rootgen/admin/groups/groups.ts create mode 100755 src/rootgen/admin/groups/groups.vue create mode 100755 src/rootgen/admin/orders/orders.scss create mode 100755 src/rootgen/admin/orders/orders.ts create mode 100755 src/rootgen/admin/orders/orders.vue diff --git a/src/common/shared_vuejs.ts b/src/common/shared_vuejs.ts index a9a2761..5759c3b 100755 --- a/src/common/shared_vuejs.ts +++ b/src/common/shared_vuejs.ts @@ -73,6 +73,12 @@ export const shared_consts = { label: 'dashboard.zoomeri', icon: 'fas fa-user-tie', color: 'yellow' + }, + Department: { + value: 64, + label: 'pages.department', + icon: 'fas fa-user-tie', + color: 'yellow' } }, @@ -91,7 +97,7 @@ export const shared_consts = { TypeMsg_Actions: { NORMAL: 0, YESNO: 1, - OPZ1_2: 2, + OPZ1_2: 2 }, selectActions: [ @@ -138,13 +144,53 @@ export const shared_consts = { OrderStatus: { NONE: 0, IN_CART: 1, - CHECKOUT_CONFIRMED: 2, - PAYED: 3, - DELIVEDED: 4, - RECEIVED: 5, - CANCELED: 10, + CHECKOUT_SENT: 2, + ORDER_CONFIRMED: 3, + PAYED: 4, + DELIVEDED: 5, + RECEIVED: 6, + CANCELED: 10 }, + OrderStatusStr: [ + { + label: 'Nessuno', + value: 0 + }, + { + label: 'In Carrello', + value: 1 + }, + { + label: 'Ordine Inviato', + value: 2 + }, + { + label: 'Ordine Confermato', + value: 3 + }, + { + label: 'Pagato', + value: 4 + }, + { + label: 'Spedito', + value: 5 + }, + { + label: 'Ricevuto', + value: 6 + }, + { + label: 'Cancellato', + value: 10 + } + ], + + getStatusStr(status) { + const trovatorec = this.OrderStatusStr.find((rec) => rec.value === status) + return (!!trovatorec) ? trovatorec.label : '' + }, fieldsUserToChange() { return ['_id', 'username', 'email', 'name', 'surname', 'perm', 'date_reg', 'verified_email', 'img', 'ipaddr', 'lasttimeonline', 'profile', 'news_on'] diff --git a/src/components/CGridTableRec/CGridTableRec.ts b/src/components/CGridTableRec/CGridTableRec.ts index f56170e..aeaea77 100755 --- a/src/components/CGridTableRec/CGridTableRec.ts +++ b/src/components/CGridTableRec/CGridTableRec.ts @@ -79,6 +79,10 @@ export default class CGridTableRec extends Vue { return UserStore.state.isManager } + get isSocioResidente() { + return UserStore.state.my.profile.socioresidente + } + get isTutor() { return UserStore.state.isTutor } diff --git a/src/components/Footer/Footer.vue b/src/components/Footer/Footer.vue index 0e4b434..d2a168b 100755 --- a/src/components/Footer/Footer.vue +++ b/src/components/Footer/Footer.vue @@ -114,8 +114,8 @@

- {{$t('privacy_policy')}} + + {{$t('privacy_policy')}}

@@ -131,8 +131,8 @@ {{tools.getLabelByItem(myitemmenu, mythisfoot)}}
- - +     {{tools.getLabelByItem(myitemmenu, mythisfoot)}}
diff --git a/src/components/FormNewsletter/FormNewsletter.vue b/src/components/FormNewsletter/FormNewsletter.vue index 74e2376..c2426c5 100755 --- a/src/components/FormNewsletter/FormNewsletter.vue +++ b/src/components/FormNewsletter/FormNewsletter.vue @@ -44,7 +44,8 @@ - {{$t('privacy_policy')}} + + {{$t('privacy_policy')}} diff --git a/src/components/projects/SingleProject/SingleProject.ts b/src/components/projects/SingleProject/SingleProject.ts index b39585c..6a11010 100755 --- a/src/components/projects/SingleProject/SingleProject.ts +++ b/src/components/projects/SingleProject/SingleProject.ts @@ -83,6 +83,26 @@ export default class SingleProject extends Vue { this.watchupdate('themecolor') } + @Watch('itemproject.pos') + public valueChangedpos() { + this.watchupdate('pos') + } + + @Watch('itemproject.groupId') + public valueChangedgroupId() { + this.watchupdate('groupId') + } + + @Watch('itemproject.respUsername') + public valueChangedresp() { + this.watchupdate('respUsername') + } + + @Watch('itemproject.viceRespUsername') + public valueChangedviceResp() { + this.watchupdate('viceRespUsername') + } + @Watch('itemproject.themebgcolor') public valueChangedthemebgcolor() { this.watchupdate('themebgcolor') @@ -130,7 +150,7 @@ export default class SingleProject extends Vue { @Watch('itemproject.progressCalc') public valueChanged6() { - console.log('itemproject.progressCalc') + // console.log('itemproject.progressCalc') this.updateClasses() // console.log('this.percentageProgress', this.percentageProgress, 'this.itemproject.progressCalc', this.itemproject.progressCalc) @@ -169,7 +189,7 @@ export default class SingleProject extends Vue { } public watchupdate(field = '') { - console.log('watchupdate PROJ', field) + // console.log('watchupdate PROJ', field) this.$emit('eventupdateproj', { myitem: this.itemproject, field }) this.updateicon() } @@ -231,7 +251,7 @@ export default class SingleProject extends Vue { } public clickRiga(clickmenu: boolean = false) { - console.log('CLICK RIGA PROJ ************') + // console.log('CLICK RIGA PROJ ************') // if (!this.sel) { @@ -287,7 +307,7 @@ export default class SingleProject extends Vue { } public activeEdit() { - console.log('Attiva Edit') + // console.log('Attiva Edit') this.attivaEdit = true this.editProject() } @@ -297,7 +317,11 @@ export default class SingleProject extends Vue { } get tipoProj() { - return this.$route.name + const myarr = this.$route.name.split('.') + if (myarr) + return myarr[1] + else + return this.$route.name } get getrouteto() { @@ -342,7 +366,7 @@ export default class SingleProject extends Vue { } // console.log('focus()') - }, 400) + }, 100) } public getFocus(e) { @@ -379,7 +403,9 @@ export default class SingleProject extends Vue { } public keyDownArea(e) { - console.log('keyDownArea') + // console.log('keyDownArea', e.keyCode, 'key', e.key) + // console.log('precDescr', this.precDescr) + // console.log('shiftKey', e.shiftKey) /* if ((e.key === 'ArrowUp') && !e.shiftKey) { e.key = 'Tab' @@ -405,6 +431,7 @@ export default class SingleProject extends Vue { } if (((e.key === 'Enter') || (e.key === 'Tab')) && !e.shiftKey) { + // console.log(' updateTodo...') this.updateTodo() if ((e.key === 'Tab') && !e.shiftKey) { @@ -427,14 +454,17 @@ export default class SingleProject extends Vue { } public updateTodo() { + // console.log('this.itemproject.descr', this.itemproject.descr) + // console.log('precDescr', this.precDescr) + if (this.itemproject.descr === this.precDescr) { return } this.itemproject.descr = this.precDescr - console.log('updateTodo', this.precDescr, this.itemproject.descr) - console.log('itemproject', this.itemproject) - console.log('Prec:', this.itemprojectPrec) + // console.log('updateTodo', this.precDescr, this.itemproject.descr) + // console.log('itemproject', this.itemproject) + // console.log('Prec:', this.itemprojectPrec) this.watchupdate('descr') this.inEdit = false @@ -467,7 +497,7 @@ export default class SingleProject extends Vue { public updatedata(field: string) { // const myitem = tools.jsonCopy(this.itemproject) - console.log('calling this.$emit(eventupdateproj)', this.itemproject) + // console.log('calling this.$emit(eventupdateproj)', this.itemproject) this.$emit('eventupdateproj', { myitem: this.itemproject, field }) } @@ -497,7 +527,7 @@ export default class SingleProject extends Vue { } public async clickMenu(action) { - console.log('click menu: ', action) + // console.log('click menu: ', action) if (action === lists.MenuAction.DELETE) { return await this.askConfirmDelete() } else if (action === lists.MenuAction.TOGGLE_EXPIRING) { diff --git a/src/components/projects/SingleProject/SingleProject.vue b/src/components/projects/SingleProject/SingleProject.vue index 654e83e..51e9e59 100755 --- a/src/components/projects/SingleProject/SingleProject.vue +++ b/src/components/projects/SingleProject/SingleProject.vue @@ -1,67 +1,71 @@ diff --git a/src/components/todos/CTodo/CTodo.ts b/src/components/todos/CTodo/CTodo.ts index 3330e7f..710fd99 100755 --- a/src/components/todos/CTodo/CTodo.ts +++ b/src/components/todos/CTodo/CTodo.ts @@ -91,10 +91,10 @@ export default class CTodo extends Vue { } public created() { - const $service = this.$dragula.$service - tools.dragula_option($service, this.dragname) + const service = this.$dragula.$service + tools.dragula_option(service, this.dragname) - $service.eventBus.$on('dragend', (args) => { + service.eventBus.$on('dragend', (args) => { // console.log('args', args) if (args.name === this.dragname) { const itemdragend: IDrag = { @@ -106,10 +106,10 @@ export default class CTodo extends Vue { } }) - $service.eventBus.$on('drag', (el, source) => { + service.eventBus.$on('drag', (el, source) => { this.scrollable = false }) - $service.eventBus.$on('drop', (el, source) => { + service.eventBus.$on('drop', (el, source) => { this.scrollable = true }) diff --git a/src/components/todos/SingleTodo/SingleTodo.ts b/src/components/todos/SingleTodo/SingleTodo.ts index 46e9a3e..d58f927 100755 --- a/src/components/todos/SingleTodo/SingleTodo.ts +++ b/src/components/todos/SingleTodo/SingleTodo.ts @@ -71,19 +71,23 @@ export default class SingleTodo extends Vue { } @Watch('itemtodo.hoursplanned') public valueChangedhoursplanned() { - console.log('itemtodo.hoursplanned', this.itemtodo.hoursplanned) + // console.log('itemtodo.hoursplanned', this.itemtodo.hoursplanned) this.watchupdate('hoursplanned') } + @Watch('itemtodo.pos') public valueChangedpos() { + // console.log('itemtodo.hoursplanned', this.itemtodo.hoursplanned) + this.watchupdate('pos') + } @Watch('itemtodo.statustodo') public valueChangedstatus() { - console.log('itemtodo.statustodo', this.itemtodo.statustodo) + // console.log('itemtodo.statustodo', this.itemtodo.statustodo) this.watchupdate('statustodo') } @Watch('itemtodo.completed_at') public valueChangedcompleted_at() { - console.log('itemtodo.completed_at', this.itemtodo.completed_at) + // console.log('itemtodo.completed_at', this.itemtodo.completed_at) this.watchupdate('completed_at') } @Watch('itemtodo.hoursworked') public valueChangedhoursworked() { - console.log('itemtodo.hoursworked', this.itemtodo.hoursworked) + // console.log('itemtodo.hoursworked', this.itemtodo.hoursworked) this.watchupdate('hoursworked') } @Watch('itemtodo.start_date') public valueChangedstart_date() { @@ -102,11 +106,15 @@ export default class SingleTodo extends Vue { this.watchupdate('phase') } + @Watch('itemtodo.assignedToUsers') public valueChangeassignedToUsers() { + this.watchupdate('assignedToUsers') + } + @Watch('itemtodo.progress') public valueChanged6() { - console.log('itemtodo.progress') + // console.log('itemtodo.progress') this.updateClasses() - console.log('this.percentageProgress', this.percentageProgress, 'this.itemtodo.progress', this.itemtodo.progress) + // console.log('this.percentageProgress', this.percentageProgress, 'this.itemtodo.progress', this.itemtodo.progress) this.watchupdate('progress') } @@ -239,7 +247,7 @@ export default class SingleTodo extends Vue { } public deselectRiga() { - console.log('DeselectRiga', this.itemtodo.descr) + // console.log('DeselectRiga', this.itemtodo.descr) this.sel = false this.classRow = '' this.inEdit = false @@ -298,7 +306,7 @@ export default class SingleTodo extends Vue { } if (!!theField) { - console.log('FOCUS TODO', theField) + // console.log('FOCUS TODO', theField) theField.focus() } // console.log('focus()') @@ -320,7 +328,7 @@ export default class SingleTodo extends Vue { } public keyDownRow(e) { - console.log('keyDownRow') + // console.log('keyDownRow') // Delete Key or Backspage if (((e.keyCode === 8) || (e.keyCode === 46)) && (this.precDescr === '') && !e.shiftKey) { e.preventDefault() @@ -335,7 +343,7 @@ export default class SingleTodo extends Vue { } public keyDownArea(e) { - console.log('keyDownArea') + // console.log('keyDownArea') /* if ((e.key === 'ArrowUp') && !e.shiftKey) { e.key = 'Tab' @@ -376,7 +384,7 @@ export default class SingleTodo extends Vue { if (e.key === 'Escape') { this.deselectRiga() // this.faiFocus('insertTask', true) - console.log('LOAD this.precDescr', this.precDescr) + // console.log('LOAD this.precDescr', this.precDescr) this.precDescr = this.itemtodo.descr } @@ -388,9 +396,9 @@ export default class SingleTodo extends Vue { } this.itemtodo.descr = this.precDescr - console.log('updateTodo', this.precDescr, this.itemtodo.descr) - console.log('itemtodo', this.itemtodo) - console.log('Prec:', this.itemtodoPrec) + // console.log('updateTodo', this.precDescr, this.itemtodo.descr) + // console.log('itemtodo', this.itemtodo) + // console.log('Prec:', this.itemtodoPrec) this.watchupdate('descr') this.inEdit = false @@ -426,7 +434,7 @@ export default class SingleTodo extends Vue { public updatedata(field: string) { // const myitem = tools.jsonCopy(this.itemtodo) - console.log('calling this.$emit(eventupdate)', this.itemtodo) + // console.log('calling this.$emit(eventupdate)', this.itemtodo) this.$emit('eventupdate', { myitem: this.itemtodo, field } ) } @@ -462,13 +470,13 @@ export default class SingleTodo extends Vue { } public activeEdit() { - console.log('Attiva Edit') + // console.log('Attiva Edit') this.attivaEdit = true this.editTodo() } public async clickMenu(action) { - console.log('click menu: ', action) + // console.log('click menu: ', action) if (action === lists.MenuAction.DELETE) { return await this.askConfirmDelete() } else if (action === lists.MenuAction.TOGGLE_EXPIRING) { diff --git a/src/components/todos/SingleTodo/SingleTodo.vue b/src/components/todos/SingleTodo/SingleTodo.vue index 404abb2..0fdbe65 100755 --- a/src/components/todos/SingleTodo/SingleTodo.vue +++ b/src/components/todos/SingleTodo/SingleTodo.vue @@ -1,90 +1,93 @@ diff --git a/src/globalroutines/index.ts b/src/globalroutines/index.ts index 782d89e..7fdaffa 100755 --- a/src/globalroutines/index.ts +++ b/src/globalroutines/index.ts @@ -5,15 +5,14 @@ export default async (context, cmd, table, data = null, id = '') => { const descr = data !== null ? data.descr : '' // console.log('globalroutines', cmd, table, descr, id) return await indexdb(context, cmd, table, data, id) - .then(ris => { - setTimeout(() => { - GlobalStore.state.connData.uploading_indexeddb = 0 - GlobalStore.state.connData.downloading_indexeddb = 0 - }, 1000) - return ris - } - - ).catch(err => { + .then((ris) => { + setTimeout(() => { + GlobalStore.state.connData.uploading_indexeddb = 0 + GlobalStore.state.connData.downloading_indexeddb = 0 + }, 1000) + return ris + } + ).catch((err) => { setTimeout(() => { GlobalStore.state.connData.uploading_indexeddb = (GlobalStore.state.connData.uploading_indexeddb === 1) ? -1 : GlobalStore.state.connData.uploading_indexeddb GlobalStore.state.connData.downloading_indexeddb = (GlobalStore.state.connData.downloading_indexeddb === 1) ? -1 : GlobalStore.state.connData.downloading_indexeddb diff --git a/src/globalroutines/indexdb.ts b/src/globalroutines/indexdb.ts index 2d36551..c9154ba 100755 --- a/src/globalroutines/indexdb.ts +++ b/src/globalroutines/indexdb.ts @@ -67,7 +67,7 @@ async function readfromIndexDbToState(context, table) { } else { const arrris = tools.setArrayMainByTable(table, reccat) - // console.log('************ ARRAYS SALVATI IN MEMORIA ', table, arrris) + console.log('************ ARRAYS SALVATI IN MEMORIA ', table, arrris) } diff --git a/src/layouts/menuone/menuOne.ts b/src/layouts/menuone/menuOne.ts index bd3a334..1bd845b 100755 --- a/src/layouts/menuone/menuOne.ts +++ b/src/layouts/menuone/menuOne.ts @@ -60,7 +60,7 @@ export default class MenuOne extends Vue { return text } - get static_data(){ + get static_data() { return static_data } @@ -80,6 +80,10 @@ export default class MenuOne extends Vue { menu += ' isAdmin' if (elem.onlyManager) menu += ' isManager' + if (elem.onlySocioResidente) + menu += ' isSocioResidente' + if (elem.onlyDepartment) + menu += ' isDepartment' if (elem.onlyTutor) menu += ' isTutor' if (elem.onlyTraduttrici) diff --git a/src/model/GlobalStore.ts b/src/model/GlobalStore.ts index fa50872..22243aa 100755 --- a/src/model/GlobalStore.ts +++ b/src/model/GlobalStore.ts @@ -2,7 +2,7 @@ import { IAction } from '@src/model/Projects' import { Component } from 'vue-router/types/router' import { lists } from '@src/store/Modules/lists' import { IPaymentType } from '@src/model/UserStore' -import { ICart, IProducer, IProduct, IShareWithUs, IStorehouse } from '@src/model/Products' +import { ICart, IDepartment, IProducer, IProduct, IShareWithUs, IStorehouse } from '@src/model/Products' export interface IPost { title: string @@ -98,6 +98,11 @@ export interface ICalZoom { note?: string } +export interface IGroup { + _id?: any + descr?: string +} + export interface IMailinglist { name?: string surname?: string @@ -175,7 +180,9 @@ export interface IGlobalState { calzoom: ICalZoom[], producers: IProducer[], storehouses: IStorehouse[], + departments: IDepartment[], sharewithus: IShareWithUs[], + groups: IGroup[], autoplaydisc: number } @@ -208,6 +215,8 @@ export interface IListRoutes { onlyAdmin?: boolean onlyif_logged?: boolean onlyManager?: boolean + onlySocioResidente?: boolean + onlyDepartment?: boolean onlyTutor?: boolean onlyTraduttrici?: boolean extraclass?: string diff --git a/src/model/Products.ts b/src/model/Products.ts index 0a36c2d..f83097e 100755 --- a/src/model/Products.ts +++ b/src/model/Products.ts @@ -70,6 +70,13 @@ export interface IProducer { website?: string, } +export interface IDepartment { + _id?: any + idapp?: string + name?: string, + username?: string, +} + export interface IStorehouse { _id?: any idapp?: string @@ -89,6 +96,7 @@ export interface ICart { userId?: string totalQty?: number totalPrice?: number + department?: string items?: IBaseOrder[] note?: string modify_at?: Date @@ -101,6 +109,7 @@ export interface IOrderCart { userId?: string totalQty?: number totalPrice?: number + department?: string items?: IBaseOrder[] status?: number note?: string diff --git a/src/model/Projects.ts b/src/model/Projects.ts index d9b2e5e..886eecb 100755 --- a/src/model/Projects.ts +++ b/src/model/Projects.ts @@ -26,7 +26,6 @@ export interface IProject { completed_at?: Date expiring_at?: Date enableExpiring?: boolean - id_prev?: string modified?: boolean favourite?: number pos?: number @@ -47,6 +46,9 @@ export interface IProject { privacywrite?: string themecolor?: string themebgcolor?: string + groupId?: string + respUsername?: string + viceRespUsername?: string } export interface IProjectsState { diff --git a/src/model/Todos.ts b/src/model/Todos.ts index a02f268..990a712 100755 --- a/src/model/Todos.ts +++ b/src/model/Todos.ts @@ -12,7 +12,6 @@ export interface ITodo { completed_at?: Date, expiring_at?: Date, enableExpiring?: boolean, - id_prev?: string, modified?: boolean, pos?: number, order?: number, @@ -25,6 +24,7 @@ export interface ITodo { start_date?: Date themecolor?: string themebgcolor?: string + assignedToUsers?: string[] } export interface IParamTodo { diff --git a/src/model/UserStore.ts b/src/model/UserStore.ts index 923ca46..f79c032 100755 --- a/src/model/UserStore.ts +++ b/src/model/UserStore.ts @@ -120,6 +120,7 @@ export interface IUserState { isLogged?: boolean isAdmin?: boolean isManager?: boolean + isDepartment?: boolean isTutor?: boolean isZoomeri?: boolean isTraduttrici?: boolean diff --git a/src/rootgen/admin/departments/departments.scss b/src/rootgen/admin/departments/departments.scss new file mode 100755 index 0000000..e69de29 diff --git a/src/rootgen/admin/departments/departments.ts b/src/rootgen/admin/departments/departments.ts new file mode 100755 index 0000000..3a31186 --- /dev/null +++ b/src/rootgen/admin/departments/departments.ts @@ -0,0 +1,44 @@ +import Vue from 'vue' +import { Component, Prop } from 'vue-property-decorator' +import { GlobalStore, UserStore } from '@store' + +import { tools } from '../../../store/Modules/tools' +import { toolsext } from '../../../store/Modules/toolsext' +import { static_data } from '../../../db/static_data' +import { Screen } from 'quasar' + +import { colTabledepartments } from '@src/store/Modules/fieldsTable' + +import { CImgText } from '../../../components/CImgText/index' +import { CCard, CGridTableRec, CMyPage, CTitleBanner } from '@components' +import MixinMetaTags from '../../../mixins/mixin-metatags' +import MixinBase from '@src/mixins/mixin-base' + +@Component({ + mixins: [MixinBase], + components: { CImgText, CCard, CMyPage, CTitleBanner, CGridTableRec } +}) +export default class StorehousePage extends MixinMetaTags { + public pagination = { + sortBy: 'name', + descending: false, + page: 2, + rowsPerPage: 5 + // rowsNumber: xx if getting data from a server + } + + public selected = [] + public dataPages = [] + + get getcoldepartments() { + return colTabledepartments + } + + public meta() { + return tools.metafunc(this) + } + + get static_data() { + return static_data + } +} diff --git a/src/rootgen/admin/departments/departments.vue b/src/rootgen/admin/departments/departments.vue new file mode 100755 index 0000000..35978ad --- /dev/null +++ b/src/rootgen/admin/departments/departments.vue @@ -0,0 +1,27 @@ + + + diff --git a/src/rootgen/admin/groups/groups.scss b/src/rootgen/admin/groups/groups.scss new file mode 100755 index 0000000..e69de29 diff --git a/src/rootgen/admin/groups/groups.ts b/src/rootgen/admin/groups/groups.ts new file mode 100755 index 0000000..33d8b9a --- /dev/null +++ b/src/rootgen/admin/groups/groups.ts @@ -0,0 +1,44 @@ +import Vue from 'vue' +import { Component, Prop } from 'vue-property-decorator' +import { GlobalStore, UserStore } from '@store' + +import { tools } from '../../../store/Modules/tools' +import { toolsext } from '../../../store/Modules/toolsext' +import { static_data } from '../../../db/static_data' +import { Screen } from 'quasar' + +import { colTablegroups } from '@src/store/Modules/fieldsTable' + +import { CImgText } from '../../../components/CImgText/index' +import { CCard, CGridTableRec, CMyPage, CTitleBanner } from '@components' +import MixinMetaTags from '../../../mixins/mixin-metatags' +import MixinBase from '@src/mixins/mixin-base' + +@Component({ + mixins: [MixinBase], + components: { CImgText, CCard, CMyPage, CTitleBanner, CGridTableRec } +}) +export default class GroupPage extends MixinMetaTags { + public pagination = { + sortBy: 'descr', + descending: false, + page: 2, + rowsPerPage: 5 + // rowsNumber: xx if getting data from a server + } + + public selected = [] + public dataPages = [] + + get getcolgroups() { + return colTablegroups + } + + public meta() { + return tools.metafunc(this) + } + + get static_data() { + return static_data + } +} diff --git a/src/rootgen/admin/groups/groups.vue b/src/rootgen/admin/groups/groups.vue new file mode 100755 index 0000000..cbb3fb1 --- /dev/null +++ b/src/rootgen/admin/groups/groups.vue @@ -0,0 +1,27 @@ + + + diff --git a/src/rootgen/admin/orders/orders.scss b/src/rootgen/admin/orders/orders.scss new file mode 100755 index 0000000..e69de29 diff --git a/src/rootgen/admin/orders/orders.ts b/src/rootgen/admin/orders/orders.ts new file mode 100755 index 0000000..0f5b7e2 --- /dev/null +++ b/src/rootgen/admin/orders/orders.ts @@ -0,0 +1,44 @@ +import Vue from 'vue' +import { Component, Prop } from 'vue-property-decorator' +import { GlobalStore, UserStore } from '@store' + +import { tools } from '../../../store/Modules/tools' +import { toolsext } from '../../../store/Modules/toolsext' +import { static_data } from '../../../db/static_data' +import { Screen } from 'quasar' + +import { getcolorderscart } from '@src/store/Modules/fieldsTable' + +import { CImgText } from '../../../components/CImgText/index' +import { CCard, CGridTableRec, CMyPage, CTitleBanner } from '@components' +import MixinMetaTags from '../../../mixins/mixin-metatags' +import MixinBase from '@src/mixins/mixin-base' + +@Component({ + mixins: [MixinBase], + components: { CImgText, CCard, CMyPage, CTitleBanner, CGridTableRec } +}) +export default class StorehousePage extends MixinMetaTags { + public pagination = { + sortBy: 'name', + descending: false, + page: 2, + rowsPerPage: 5 + // rowsNumber: xx if getting data from a server + } + + public selected = [] + public dataPages = [] + + get getcolorderscart() { + return getcolorderscart + } + + public meta() { + return tools.metafunc(this) + } + + get static_data() { + return static_data + } +} diff --git a/src/rootgen/admin/orders/orders.vue b/src/rootgen/admin/orders/orders.vue new file mode 100755 index 0000000..25ef95e --- /dev/null +++ b/src/rootgen/admin/orders/orders.vue @@ -0,0 +1,28 @@ + + + diff --git a/src/statics/lang/it.js b/src/statics/lang/it.js index 581f4bf..ea209e7 100755 --- a/src/statics/lang/it.js +++ b/src/statics/lang/it.js @@ -220,6 +220,7 @@ const msg_it = { options: 'Opzioni', }, dashboard: { + info: 'Info', commento: 'Commento', azione: 'Azione', inviato: 'Inviato', @@ -416,6 +417,9 @@ const msg_it = { non_verificato: "Non Verificato", forgetpassword: "Password dimenticata?", modificapassword: "Modifica Password", + resp: "Responsabile", + viceResp: "Vice Rrsponsabile", + userslist: "Lista Persone", err: { required: 'è richiesto', email: 'inserire una email valida', @@ -534,7 +538,8 @@ const msg_it = { privacywrite: 'Chi lo puo modificare:', totalphases: 'Totale Fasi', themecolor: 'Tema Colore', - themebgcolor: 'Tema Colore Sfondo' + themebgcolor: 'Tema Colore Sfondo', + group: 'Gruppo' }, where: { code: 'Id', diff --git a/src/store/Modules/ApiTables.ts b/src/store/Modules/ApiTables.ts index 92d53f3..0965a06 100755 --- a/src/store/Modules/ApiTables.ts +++ b/src/store/Modules/ApiTables.ts @@ -8,7 +8,7 @@ import { toolsext } from '@src/store/Modules/toolsext' export const OtherTables = ['categories', 'config', 'swmsg'] export const MainTables = ['todos', 'projects'] -export const allMethod = ['sync_post_', 'sync_patch_', 'delete_'] +export const allMethod = ['sync_post_', 'sync_patch_', 'delete_', 'hide_'] export function getLinkByTableName(nametable) { if (nametable === 'todos') { @@ -24,9 +24,11 @@ export const DB = { CMD_SYNC: 'sync', CMD_SYNC_NEW: 'sync-new', CMD_DELETE: 'sync-delete', + CMD_HIDE: 'sync-hide', TABLE_SYNC_POST: 'sync_post_', TABLE_SYNC_PATCH: 'sync_patch_', - TABLE_DELETE: 'delete_' + TABLE_DELETE: 'delete_', + TABLE_HIDE: 'hide_' } export function allTables() { @@ -82,7 +84,7 @@ async function dbDeleteItem(call, item) { call = '/' + call - const res = await Api.SendReq(call + item._id, 'DELETE', item) + const res = await Api.SendReq(call + item._id, 'DELETE', null) .then((myres) => { console.log('dbdeleteItem to the Server') return myres @@ -96,6 +98,37 @@ async function dbDeleteItem(call, item) { } } +async function dbHideItem(call, item) { + + if (!('serviceWorker' in navigator)) { + // console.log('dbdeleteItem', item) + if (UserStore.getters.isUserInvalid) { + return false + } // Login not made + + item = { + ...item, + hide: true + } + + console.log('dbHideItem', item) + + call = '/' + call + + const res = await Api.SendReq(call + item._id + '/true', 'DELETE', null) + .then((myres) => { + console.log('dbHideItem to the Server') + return myres + }) + .catch((error) => { + UserStore.mutations.setErrorCatch(error) + return UserStore.getters.getServerCode + }) + + return res + } +} + async function Sync_Execute(cmd, tablesync, nametab, method, item: ITodo, id, msg: String) { // Send to Server to Sync @@ -105,7 +138,7 @@ async function Sync_Execute(cmd, tablesync, nametab, method, item: ITodo, id, ms } let cmdSw = cmd - if ((cmd === DB.CMD_SYNC_NEW) || (cmd === DB.CMD_DELETE)) { + if ((cmd === DB.CMD_SYNC_NEW) || (cmd === DB.CMD_DELETE) || (cmd === DB.CMD_HIDE)) { cmdSw = DB.CMD_SYNC } @@ -161,7 +194,7 @@ async function Sync_Execute(cmd, tablesync, nametab, method, item: ITodo, id, ms } } -async function Sync_ExecuteCmd(cmd, nametab: string, method, item: ITodo, id, msg: String) { +async function Sync_ExecuteCmd(cmd, nametab: string, method, item: ITodo, id, msg: string) { // Send to Server to Sync let tablesync = '' @@ -171,6 +204,8 @@ async function Sync_ExecuteCmd(cmd, nametab: string, method, item: ITodo, id, ms tablesync = DB.TABLE_SYNC_PATCH + nametab } else if (method === 'DELETE') { tablesync = DB.TABLE_DELETE + nametab + } else if (method === 'HIDE') { + tablesync = DB.TABLE_HIDE + nametab } const risdata = await Sync_Execute(cmd, tablesync, nametab, method, item, id, msg) @@ -181,6 +216,8 @@ async function Sync_ExecuteCmd(cmd, nametab: string, method, item: ITodo, id, ms } } else if (cmd === DB.CMD_DELETE) { await dbDeleteItem(nametab, item) + } else if (cmd === DB.CMD_HIDE) { + await dbHideItem(nametab, item) } return risdata @@ -194,6 +231,10 @@ export function Sync_DeleteItem(nametab: string, item, id) { Sync_ExecuteCmd(DB.CMD_DELETE, nametab, 'DELETE', item, id, '') } +export function Sync_HideItem(nametab: string, item, id) { + Sync_ExecuteCmd(DB.CMD_HIDE, nametab, 'HIDE', item, id, '') +} + export async function aftercalling(ris, checkPending: boolean, nametabindex: string) { if (ris.status !== 200) { @@ -387,13 +428,14 @@ function setmodifiedIfchanged(recOut, recIn, field) { } export async function table_ModifyRecord(nametable, myitem, listFieldsToChange, field) { + console.log('table_ModifyRecord ... ', nametable) if (myitem === null) { return new Promise((resolve, reject) => { resolve() }) } - console.log('--> table_ModifyRecord', nametable, myitem.descr) + // console.log('--> table_ModifyRecord', nametable, myitem.descr) if ((field === 'status') && (nametable === 'todos') && (myitem.status === tools.Status.COMPLETED)) { myitem.completed_at = tools.getDateNow() @@ -412,8 +454,10 @@ export async function table_ModifyRecord(nametable, myitem, listFieldsToChange, setmodifiedIfchanged(miorec, myobjsaved, myfield) }) + console.log( ' ... 4 ') + if (miorec.modified) { - // console.log(' ' + nametable + ' MODIFICATO! ', miorec.descr, miorec.pos, 'SALVALO SULLA IndexedDB') + console.log(' ' + nametable + ' MODIFICATO! ', miorec.descr, miorec.pos, 'SALVALO SULLA IndexedDB') miorec.modify_at = tools.getDateNow() miorec.modified = false @@ -429,7 +473,7 @@ export async function table_ModifyRecord(nametable, myitem, listFieldsToChange, return Sync_SaveItem(nametable, 'PATCH', miorec) }) - // } else { + // } else { // console.log(' ', miorec.descr, 'NON MODIF!') } } @@ -448,3 +492,18 @@ export function table_DeleteRecord(nametable, myobjtrov, id) { Sync_DeleteItem(nametable, myobjtrov, id) } + +export function table_HideRecord(nametable, myobjtrov, id) { + + const mymodule = tools.getModulesByTable(nametable) + + // 1) Delete from the Todos Array + mymodule.mutations.deletemyitem(myobjtrov) + + // 2) Delete from the IndexedDb + globalroutines(null, 'delete', nametable, null, id) + + // 3) Hide from the Server (call) + Sync_DeleteItem(nametable, myobjtrov, id) + +} diff --git a/src/store/Modules/GlobalStore.ts b/src/store/Modules/GlobalStore.ts index d5fcb3b..0d96904 100755 --- a/src/store/Modules/GlobalStore.ts +++ b/src/store/Modules/GlobalStore.ts @@ -83,7 +83,9 @@ const state: IGlobalState = { mypage: [], calzoom: [], producers: [], + groups: [], storehouses: [], + departments: [], sharewithus: [] } @@ -133,8 +135,7 @@ namespace Getters { const config = state.arrConfig.find((item) => item._id === costanti.CONFIG_ID_SHOW_TYPE_TODOS) if (config) { return config.value - } - else { + } else { return '' } @@ -205,6 +206,10 @@ namespace Getters { return GlobalStore.state.producers else if (table === 'storehouses') return GlobalStore.state.storehouses + else if (table === 'groups') + return GlobalStore.state.groups + else if (table === 'departments') + return GlobalStore.state.departments else if (table === 'sharewithus') return GlobalStore.state.sharewithus else if (table === 'paymenttypes') @@ -1042,7 +1047,7 @@ namespace Actions { }) } - async function GetFlotta(context, { riga, col_prima, col_ultima}) { + async function GetFlotta(context, { riga, col_prima, col_ultima }) { console.log('GetFlotta') const mydata = { @@ -1092,11 +1097,13 @@ namespace Actions { GlobalStore.state.calzoom = (res.data.calzoom) ? [...res.data.calzoom] : [] GlobalStore.state.producers = (res.data.producers) ? [...res.data.producers] : [] GlobalStore.state.storehouses = (res.data.storehouses) ? [...res.data.storehouses] : [] + GlobalStore.state.groups = (res.data.groups) ? [...res.data.groups] : [] + GlobalStore.state.departments = (res.data.departments) ? [...res.data.departments] : [] // console.log('res.data.cart', res.data.cart) if (res.data.cart) - Products.state.cart = (res.data.cart) ? {...res.data.cart} : {} + Products.state.cart = (res.data.cart) ? { ...res.data.cart } : {} else - Products.state.cart = { items: [], totalPrice: 0, totalQty: 0, userId: ''} + Products.state.cart = { items: [], totalPrice: 0, totalQty: 0, userId: '' } Products.state.orders = (res.data.orders) ? [...res.data.orders] : [] @@ -1134,8 +1141,14 @@ namespace Actions { return true - }) - .catch((error) => { + }).then((res) => { + + if (static_data.functionality.ENABLE_PROJECTS_LOADING) + Projects.actions.dbLoad({ checkPending: false, onlyiffirsttime: true }) + + return res + + }).catch((error) => { console.log('error dbLoad', error) // UserStore.mutations.setErrorCatch(error) return new Types.AxiosError(serv_constants.RIS_CODE_ERR, null, tools.ERR_GENERICO, error) @@ -1222,9 +1235,15 @@ namespace Actions { static_data.routes = static_data.routes.sort((a, b) => a.order - b.order) if (tools.sito_online(false)) { - router.addRoutes([...arrpagesroute, last]) + for (const r of arrpagesroute) { + router.addRoute(r) + } + router.addRoute(last) + // router.addRoutes([...arrpagesroute, last]) } else { - router.addRoutes([sito_offline, last]) + router.addRoute(sito_offline) + router.addRoute(last) + // router.addRoutes([sito_offline, last]) this.$router.replace('/sito_offline') } } diff --git a/src/store/Modules/Products.ts b/src/store/Modules/Products.ts index 63d877d..bf292b5 100755 --- a/src/store/Modules/Products.ts +++ b/src/store/Modules/Products.ts @@ -75,9 +75,9 @@ namespace Getters { const getOrdersCart = b.read((stateparamf: IProductsState) => (tipoord: string): IOrderCart[] => { if (tipoord === 'incorso') - return state.orders.filter((rec) => rec.status <= shared_consts.OrderStatus.CHECKOUT_CONFIRMED) + return state.orders.filter((rec) => rec.status <= shared_consts.OrderStatus.CHECKOUT_SENT) else - return state.orders.filter((rec) => rec.status < shared_consts.OrderStatus.RECEIVED && rec.status > shared_consts.OrderStatus.CHECKOUT_CONFIRMED) + return state.orders.filter((rec) => rec.status < shared_consts.OrderStatus.RECEIVED && rec.status > shared_consts.OrderStatus.CHECKOUT_SENT) }, 'getOrdersCart') const existProductInCart = b.read((stateparamf: IProductsState) => (idproduct): boolean => { @@ -218,14 +218,14 @@ namespace Actions { return ris } - async function loadCart(context) { + async function loadOrders(context) { - console.log('loadCart') + console.log('loadOrders') if (!static_data.functionality.ENABLE_ECOMMERCE) return null - console.log('loadCart', 'userid=', UserStore.state.my._id) + console.log('loadOrders', 'userid=', UserStore.state.my._id) // if (UserStore.state.my._id === '') { // return new Types.AxiosError(0, null, 0, '') @@ -244,7 +244,7 @@ namespace Actions { return res }) .catch((error) => { - console.log('error loadCart', error) + console.log('error loadOrders', error) UserStore.mutations.setErrorCatch(error) return new Types.AxiosError(serv_constants.RIS_CODE_ERR, null, tools.ERR_GENERICO, error) }) @@ -349,7 +349,7 @@ namespace Actions { ris = await Api.SendReq('/cart/' + UserStore.state.my._id + '/cartstatus', 'POST', { cart_id, status }) .then((res) => { - if (res.data.status === shared_consts.OrderStatus.CHECKOUT_CONFIRMED) { + if (res.data.status === shared_consts.OrderStatus.CHECKOUT_SENT) { ProductsModule.state.cart = {} if (res.data.orders) Products.state.orders = res.data.orders @@ -366,13 +366,13 @@ namespace Actions { } export const actions = { - // loadCart: b.dispatch(loadCart), loadProduct: b.dispatch(loadProduct), loadProducts: b.dispatch(loadProducts), addToCart: b.dispatch(addToCart), addSubQtyToItem: b.dispatch(addSubQtyToItem), UpdateStatusCart: b.dispatch(UpdateStatusCart), removeFromCart: b.dispatch(removeFromCart), + loadOrders: b.dispatch(loadOrders), } } diff --git a/src/store/Modules/Projects.ts b/src/store/Modules/Projects.ts index d37abfe..87c562b 100755 --- a/src/store/Modules/Projects.ts +++ b/src/store/Modules/Projects.ts @@ -27,8 +27,8 @@ const stateglob: IProjectsState = { visuLastCompleted: 10 } -const listFieldsToChange: string [] = ['descr', 'longdescr', 'hoursplanned', 'hoursleft', 'hoursworked', 'id_parent', 'statusproj', - 'category', 'expiring_at', 'priority', 'id_prev', 'pos', 'enableExpiring', 'progressCalc', 'live_url', 'test_url', +const listFieldsToChange: string [] = ['descr', 'respUsername', 'viceRespUsername', 'longdescr', 'hoursplanned', 'hoursleft', 'hoursworked', 'id_parent', 'statusproj', + 'category', 'expiring_at', 'priority', 'pos', 'groupId', 'enableExpiring', 'progressCalc', 'live_url', 'test_url', 'begin_development', 'begin_test', 'actualphase', 'totalphases', 'hoursweeky_plannedtowork', 'endwork_estimate', 'privacyread', 'privacywrite', 'id_main_project', 'typeproj', 'favourite', 'themecolor', 'themebgcolor'] @@ -62,12 +62,14 @@ function getproj(projects, idproj, tipoproj: string) { let ris = null if (tipoproj === RouteNames.myprojects) - ris = projects.filter((proj) => (proj.id_parent === idproj) && (proj.userId === UserStore.state.my._id) && (proj.privacyread === Privacy.onlyme)) + ris = projects.filter((proj) => (proj.id_parent === idproj) && (proj.userId === UserStore.state.my._id)) else if (tipoproj === RouteNames.projectsshared) ris = projects.filter((proj) => (proj.id_parent === idproj) && (proj.userId === UserStore.state.my._id) && (proj.privacyread !== Privacy.onlyme)) else if (tipoproj === RouteNames.projectsall) ris = projects.filter((proj) => (proj.id_parent === idproj) && (proj.userId !== UserStore.state.my._id) ) + if (ris) + ris = ris.sort((a, b) => a.pos - b.pos) // console.log('idproj', idproj, 'projects', projects, 'getproj', tipoproj, 'ris=', ris) return ris @@ -93,7 +95,6 @@ namespace Getters { category: '', // expiring_at: tomorrow, enableExpiring: false, - id_prev: '', pos: 0, modified: false, live_url: '', @@ -111,7 +112,10 @@ namespace Getters { hoursweeky_plannedtowork: 0, endwork_estimate: tools.getDateNull(), themecolor: '', - themebgcolor: '' + themebgcolor: '', + groupId: '', + respUsername: '', + viceRespUsername: '' } return obj @@ -156,6 +160,8 @@ namespace Getters { }, 'getDescrById') const getRecordById = b.read((state: IProjectsState) => (id: string): IProject => { + // console.log('state.projects', state.projects) + // console.log('find', state.projects.find((item) => item._id === id)) if (state.projects) { return state.projects.find((item) => item._id === id) } @@ -293,6 +299,8 @@ namespace Actions { // return false // Login not made // } + console.log('UserStore.state.my', UserStore.state.my) + console.log('dbLoad', nametable, checkPending, 'userid=', UserStore.state.my._id) const ris = await Api.SendReq('/projects/' + UserStore.state.my._id, 'GET', null) @@ -333,15 +341,19 @@ namespace Actions { console.log('myobjtrov', myobjtrov.descr) if (!!myobjtrov) { + /* const myobjnext = tools.getElemPrevById(myarr, myobjtrov._id) if (!!myobjnext) { - myobjnext.id_prev = myobjtrov.id_prev + myobjnext.pos = myobjtrov.pos + 1 myobjnext.modified = true - await modify(context, { myitem: myobjnext, field: 'id_prev' }) + await modify(context, { myitem: myobjnext, field: 'pos' }) } - ApiTables.table_DeleteRecord(nametable, myobjtrov, idobj) + */ + + // ApiTables.table_DeleteRecord(nametable, myobjtrov, idobj) + ApiTables.table_HideRecord(nametable, myobjtrov, idobj) } } @@ -365,13 +377,13 @@ namespace Actions { if (atfirst) { console.log('INSERT AT THE TOP') elemtochange = tools.getFirstList(myarr) - objproj.id_prev = ApiTables.LIST_START + objproj.pos = 10 } else { console.log('INSERT AT THE BOTTOM') // INSERT AT THE BOTTOM , so GET LAST ITEM const lastelem = tools.getLastListNotCompleted(nametable, objproj.id_parent, this.tipoProj) - objproj.id_prev = (!!lastelem) ? lastelem._id : ApiTables.LIST_START + objproj.pos = (!!lastelem) ? lastelem.pos + 10 : 10 } objproj.modified = false @@ -382,9 +394,9 @@ namespace Actions { let field = '' if (atfirst) { // update also the last elem if (!!elemtochange) { - elemtochange.id_prev = id + elemtochange.pos = objproj.pos console.log('elemtochange', elemtochange) - field = 'id_prev' + field = 'pos' // Modify the other record await modify(context, { myitem: elemtochange, field }) @@ -429,7 +441,6 @@ namespace Actions { dest_obj.id_parent = dest._id dest_obj.id_main_project = dest.id_main_project dest_obj.modified = true - dest_obj.id_prev = null GlobalStore.state.lastaction.type = 0 diff --git a/src/store/Modules/Todos.ts b/src/store/Modules/Todos.ts index 3ca18bc..583e0e4 100755 --- a/src/store/Modules/Todos.ts +++ b/src/store/Modules/Todos.ts @@ -32,7 +32,7 @@ const state: ITodosState = { visuLastCompleted: 10 } -const listFieldsToChange: string [] = ['descr', 'statustodo', 'category', 'expiring_at', 'priority', 'id_prev', 'pos', 'enableExpiring', 'progress', 'phase', 'assigned_to_userId', 'hoursplanned', 'hoursworked', 'start_date', 'completed_at', 'themecolor', 'themebgcolor'] +const listFieldsToChange: string [] = ['descr', 'statustodo', 'category', 'expiring_at', 'priority', 'pos', 'enableExpiring', 'progress', 'phase', 'assigned_to_userId', 'hoursplanned', 'hoursworked', 'start_date', 'completed_at', 'themecolor', 'themebgcolor', 'assignedToUsers'] const b = storeBuilder.module('Todos', state) const stateGetter = b.state() @@ -77,7 +77,6 @@ namespace Getters { category: '', expiring_at: tomorrow, enableExpiring: false, - id_prev: '', pos: 0, modified: false, progress: 0, @@ -88,7 +87,8 @@ namespace Getters { hoursworked: 0, start_date: tools.getDateNull(), themecolor: 'blue', - themebgcolor: 'white' + themebgcolor: 'white', + assignedToUsers: [] } // return this.copy(objtodo) return objtodo @@ -104,6 +104,9 @@ namespace Getters { arrout = [] } + if (arrout) + arrout = arrout.sort((a, b) => a.pos - b.pos) + // return tools.mapSort(arrout) return arrout }, 'items_dacompletare') @@ -126,7 +129,10 @@ namespace Getters { arrout = [] } - console.log('arrout', arrout) + if (arrout) + arrout = arrout.sort((a, b) => a.pos - b.pos) + + // console.log('arrout', arrout) return arrout // return tools.mapSort(arrout) @@ -309,15 +315,18 @@ namespace Actions { console.log('myobjtrov', myobjtrov.descr) if (!!myobjtrov) { + /* const myobjnext = tools.getElemPrevById(myarr, myobjtrov._id) if (!!myobjnext) { - myobjnext.id_prev = myobjtrov.id_prev + myobjnext.pos = myobjtrov.pos + 1 myobjnext.modified = true - await modify(context, { myitem: myobjnext, field: 'id_prev' }) + await modify(context, { myitem: myobjnext, field: 'pos' }) } - ApiTables.table_DeleteRecord(nametable, myobjtrov, idobj) + */ + + ApiTables.table_HideRecord(nametable, myobjtrov, idobj) } } } @@ -336,13 +345,13 @@ namespace Actions { if (atfirst) { console.log('INSERT AT THE TOP') elemtochange = tools.getFirstList(myarr) - objtodo.id_prev = ApiTables.LIST_START + objtodo.pos = 10 } else { console.log('INSERT AT THE BOTTOM') // INSERT AT THE BOTTOM , so GET LAST ITEM const lastelem = tools.getLastListNotCompleted(nametable, objtodo.category, this.tipoProj) - objtodo.id_prev = (!!lastelem) ? lastelem._id : ApiTables.LIST_START + objtodo.pos = (!!lastelem) ? lastelem.pos + 10 : 10 } objtodo.modified = false @@ -353,9 +362,9 @@ namespace Actions { let field = '' if (atfirst) { // update also the last elem if (!!elemtochange) { - elemtochange.id_prev = id + elemtochange.pos = objtodo.pos console.log('elemtochange', elemtochange) - field = 'id_prev' + field = 'pos' // Modify the other record await modify(context, { myitem: elemtochange, field }) @@ -444,7 +453,7 @@ namespace Actions { if (!!dest_obj) { dest_obj.category = action._id dest_obj.modified = true - dest_obj.id_prev = null + dest_obj.pos = 1 GlobalStore.state.lastaction.type = 0 diff --git a/src/store/Modules/UserStore.ts b/src/store/Modules/UserStore.ts index 1ba98e7..cf48b24 100755 --- a/src/store/Modules/UserStore.ts +++ b/src/store/Modules/UserStore.ts @@ -57,6 +57,7 @@ export const DefaultUser: IUserFields = { userId: '', items: [], totalPrice: 0, + department: '', totalQty: 0, note: '', } @@ -103,6 +104,7 @@ const state: IUserState = { isLogged: false, isAdmin: false, isManager: false, + isDepartment: false, isTutor: false, isZoomeri: false, isTraduttrici: false, @@ -341,6 +343,7 @@ namespace Mutations { mystate.isManager = tools.isBitActive(mystate.my.perm, shared_consts.Permissions.Manager.value) mystate.isTutor = tools.isBitActive(mystate.my.perm, shared_consts.Permissions.Tutor.value) mystate.isZoomeri = tools.isBitActive(mystate.my.perm, shared_consts.Permissions.Zoomeri.value) + mystate.isDepartment = tools.isBitActive(mystate.my.perm, shared_consts.Permissions.Department.value) mystate.isTeacher = tools.isBitActive(mystate.my.perm, shared_consts.Permissions.Teacher.value) mystate.isTraduttrici = tools.isBitActive(mystate.my.perm, shared_consts.Permissions.Traduttrici.value) @@ -897,6 +900,7 @@ namespace Actions { GlobalStore.mutations.setCategorySel(localStorage.getItem(tools.localStorage.categorySel)) GlobalStore.actions.checkUpdates() + } const isok = await GlobalStore.actions.loadAfterLogin() diff --git a/src/store/Modules/fieldsTable.ts b/src/store/Modules/fieldsTable.ts index 6414305..6e299e3 100755 --- a/src/store/Modules/fieldsTable.ts +++ b/src/store/Modules/fieldsTable.ts @@ -174,11 +174,36 @@ export const colTableProducer = [ AddCol({ name: 'website', label_trans: 'producer.website' }), ] +export const getcolorderscart = [ + AddCol({ name: 'numorder', label_trans: 'order.numorder' }), + AddCol({ name: 'created_at', label_trans: 'order.created_at', fieldtype: tools.FieldType.date }), + AddCol({ name: 'status', label_trans: 'order.status' }), + AddCol({ name: 'items', label_trans: 'order.items' }), + AddCol({ name: 'userId', label_trans: 'order.users', fieldtype: tools.FieldType.select, jointable: 'users' }), + AddCol({ name: 'note', label_trans: 'order.note' }), +] + export const colTableShareWithUs = [ AddCol({ name: 'description', label_trans: 'share.description' }), AddCol({ name: 'numshared', label_trans: 'share.numshared', fieldtype: tools.FieldType.number }), AddCol({ name: 'rating', label_trans: 'share.rating', fieldtype: tools.FieldType.number }), ] +export const colTablegroups = [ + AddCol({ name: 'descr', label_trans: 'share.description' }), + AddCol({ name: 'resp', label_trans: 'reg.resp' }), + AddCol({ name: 'viceResp', label_trans: 'reg.viceResp' }), + AddCol({ + name: 'assignedToUsers', + label_trans: 'reg.userslist', + fieldtype: tools.FieldType.multiselect, + jointable: 'users' + }), +] + +export const colTabledepartments = [ + AddCol({ name: 'name', label_trans: 'store.name' }), + AddCol({ name: 'username', label_trans: 'store.username' }) +] export const colTableStorehouse = [ AddCol({ name: 'name', label_trans: 'store.name' }), @@ -197,7 +222,6 @@ export const colTableProducts = [ AddCol({ name: 'description', label_trans: 'products.description' }), AddCol({ name: 'icon', label_trans: 'products.icon' }), AddCol({ name: 'img', label_trans: 'products.img' }), - AddCol({ name: 'department', label_trans: 'products.department' }), // AddCol({ name: 'idProducer', label_trans: 'products.idProducer' }), AddCol({ name: 'idProducer', @@ -211,6 +235,13 @@ export const colTableProducts = [ fieldtype: tools.FieldType.multiselect, jointable: 'storehouses' }), + AddCol({ + name: 'department', + label_trans: 'products.department', + fieldtype: tools.FieldType.select, + jointable: 'departments' + }), + // AddCol({ name: 'department', label_trans: 'products.department' }), AddCol({ name: 'category', label_trans: 'products.category' }), AddCol({ name: 'price', label_trans: 'products.price', fieldtype: tools.FieldType.number }), AddCol({ name: 'color', label_trans: 'products.color' }), @@ -517,7 +548,7 @@ export const fieldsTable = { getTableJoinByName(table) { if (table === 'permissions') - return [shared_consts.Permissions.Admin, shared_consts.Permissions.Manager, shared_consts.Permissions.Teacher, shared_consts.Permissions.Tutor, shared_consts.Permissions.Traduttrici, shared_consts.Permissions.Zoomeri] + return [shared_consts.Permissions.Admin, shared_consts.Permissions.Manager, shared_consts.Permissions.Teacher, shared_consts.Permissions.Tutor, shared_consts.Permissions.Traduttrici, shared_consts.Permissions.Zoomeri, shared_consts.Permissions.Department] else if (table === 'accepted') return [shared_consts.Accepted.CHECK_READ_GUIDELINES, shared_consts.Accepted.CHECK_SEE_VIDEO_PRINCIPI] else if (table === 'fieldstype') @@ -932,6 +963,13 @@ export const fieldsTable = { colkey: '_id', collabel: 'name' }, + { + value: 'departments', + label: 'Uffici', + columns: colTabledepartments, + colkey: 'username', + collabel: 'name' + }, { value: 'storehouses', label: 'Magazzini', diff --git a/src/store/Modules/tools.ts b/src/store/Modules/tools.ts index b746dc1..a32d615 100755 --- a/src/store/Modules/tools.ts +++ b/src/store/Modules/tools.ts @@ -110,6 +110,7 @@ export const tools = { TABMAILINGLIST: 'mailinglist', TABMYPAGE: 'mypage', TABCALZOOM: 'calzoom', + TABGROUPS: 'groups', TABTEMPLEMAIL: 'templemail', TABOPZEMAIL: 'opzemail', TABSHAREWITHUS: 'sharewithus', @@ -1072,11 +1073,9 @@ export const tools = { if (priority === tools.Priority.PRIORITY_HIGH) { cl = 'high_priority' - } - else if (priority === tools.Priority.PRIORITY_NORMAL) { + } else if (priority === tools.Priority.PRIORITY_NORMAL) { cl = 'medium_priority' - } - else if (priority === tools.Priority.PRIORITY_LOW) { + } else if (priority === tools.Priority.PRIORITY_LOW) { cl = 'low_priority' } @@ -1116,12 +1115,12 @@ export const tools = { , logelem(mystr, elem) { - console.log(mystr, 'elem [', elem._id, '] ', elem.descr, ' Pr(', tools.getPriorityByInd(elem.priority), ') [', elem.id_prev, '] modif=', elem.modified) + console.log(mystr, 'elem [', elem._id, '] ', elem.descr, 'pos', elem.pos, ' Pr(', tools.getPriorityByInd(elem.priority), ') modif=', elem.modified) } , getelemprojstr(elem) { - return 'elem [id= ' + elem._id + '] ' + elem.descr + ' [id_prev= ' + elem.id_prev + '] ' + return elem.descr + ' [id= ' + elem._id + '] ' + 'pos: ' + elem.pos + ']\n' } , @@ -1141,7 +1140,7 @@ export const tools = { , getstrelem(elem) { - return 'elem [' + elem._id + '] ' + elem.descr + ' Pr(' + tools.getPriorityByInd(elem.priority) + ') [ID_PREV=' + elem.id_prev + '] modif=' + elem.modified + ' ' + return 'elem [' + elem._id + '] ' + elem.descr + ' Pr(' + tools.getPriorityByInd(elem.priority) + ') modif=' + elem.modified + ' ' } , @@ -1151,7 +1150,7 @@ export const tools = { ) { let mystr = '\n' myarr.forEach((item) => { - mystr += '[' + item.pos + '] ' + item.descr + ' Pr(' + tools.getPriorityByInd(item.priority) + ') [' + item.id_prev + '] modif=' + item.modified + '\n' + mystr += '[' + item.pos + '] ' + item.descr + ' Pr(' + tools.getPriorityByInd(item.priority) + ')' + ' modif=' + item.modified + '\n' // mystr += '[' + item.pos + '] ' + item.descr + '\n' }) @@ -1198,25 +1197,28 @@ export const tools = { } , - update_idprev(myarr, indelemchange, indelemId) { + /* update_idprev(myarr, indelemchange, indelemId) { if (tools.isOkIndex(myarr, indelemchange)) { - const id_prev = (indelemId >= 0) ? myarr[indelemId]._id : ApiTables.LIST_START - console.log('update_idprev [', indelemchange, ']', '[id_prev=', id_prev, ']') - if (myarr[indelemchange].id_prev !== id_prev) { + // const id_prev = (indelemId >= 0) ? myarr[indelemId]._id : ApiTables.LIST_START + const id_prevnew = myarr[indelemchange].id_prevnew + console.log('update_idprev [', indelemchange, ']', myarr[indelemchange].descr, '[id_prev=', myarr[indelemchange].id_prev, ']', '[id_prevnew=', id_prevnew, ']') + if (myarr[indelemchange].id_prev !== id_prevnew) { // tools.notifyarraychanged(myarr) // myarr[indelemchange].modified = true // console.log('update_idprev Index=', indelemchange, 'indtoget', indelemId, tools.getstrelem(myarr[indelemchange])) - console.log(' MODIFICATO! ', myarr[indelemchange].descr, ' PRIMA:', myarr[indelemchange].id_prev, 'DOPO: ', id_prev) - myarr[indelemchange].id_prev = id_prev + console.log(' MODIFICATO! ', myarr[indelemchange].descr, ' PRIMA:', myarr[indelemchange].id_prev, 'DOPO: ', id_prevnew) + myarr[indelemchange].id_prev = id_prevnew return myarr[indelemchange] } } return null - } - , + }, */ + async swapGeneralElem(nametable, myarr, itemdragend, listFieldsToChange) { + const arrprec = [...myarr] + if (itemdragend.field === 'priority') { // get last elem priority console.log('get last elem priority') @@ -1235,15 +1237,16 @@ export const tools = { if (tools.isOkIndex(myarr, itemdragend.newIndex) && tools.isOkIndex(myarr, itemdragend.oldIndex)) { console.log('*** SPLICE!') - // console.log(' PRIMA!', tools.logga_arrproj(myarr)) + console.log(' PRIMA!', tools.logga_arrproj(myarr)) myarr.splice(itemdragend.newIndex, 0, myarr.splice(itemdragend.oldIndex, 1)[0]) - // console.log(' DOPO!', tools.logga_arrproj(myarr)) + console.log(' DOPO!', tools.logga_arrproj(myarr)) // Ora inverti gli indici const indold = itemdragend.oldIndex itemdragend.oldIndex = itemdragend.newIndex itemdragend.newIndex = indold + /* if (nametable === 'todos') { if (itemdragend.field !== 'priority') { const precind = itemdragend.newIndex - 1 @@ -1273,22 +1276,72 @@ export const tools = { } } + } */ + + let status = 0 + + // const arr = lists.selectPriority[toolsext.getLocale()] + // for (const priority of arr) { + for (let i = 0; i < myarr.length; ++i) { + if (nametable === 'todos') { + status = myarr[i].statustodo + } else if (nametable === 'projects') { + status = myarr[i].statusproj + } + if (status !== tools.Status.COMPLETED) { + myarr[i].pos = i + + const findelem = arrprec.find((rec) => rec._id === myarr[i]._id) + + if (findelem !== myarr[i].pos) { + myarr[i].modified = true + await ApiTables.table_ModifyRecord(nametable, myarr[i], listFieldsToChange, 'pos') + } + } + } + for (let i = 0; i < myarr.length; ++i) { + if (nametable === 'todos') { + status = myarr[i].statustodo + } else if (nametable === 'projects') { + status = myarr[i].statusproj + } + // (myarr[i].priority === priority.value) + if ((status === tools.Status.COMPLETED)) { + myarr[i].pos = 1000 + i - // Update the id_prev property - const elem1 = tools.update_idprev(myarr, itemdragend.newIndex, itemdragend.newIndex - 1) // 0, -1 - const elem2 = tools.update_idprev(myarr, itemdragend.newIndex + 1, itemdragend.newIndex) // 1, 0 - const elem3 = tools.update_idprev(myarr, itemdragend.oldIndex, itemdragend.oldIndex - 1) // 1, 0 - const elem4 = tools.update_idprev(myarr, itemdragend.oldIndex + 1, itemdragend.oldIndex) // 2, 1 + const findelem = arrprec.find((rec) => rec._id === myarr[i]._id) - await - ApiTables.table_ModifyRecord(nametable, elem1, listFieldsToChange, 'id_prev') - await - ApiTables.table_ModifyRecord(nametable, elem2, listFieldsToChange, 'id_prev') - await - ApiTables.table_ModifyRecord(nametable, elem3, listFieldsToChange, 'id_prev') - await - ApiTables.table_ModifyRecord(nametable, elem4, listFieldsToChange, 'id_prev') + if (findelem !== myarr[i].pos) { + myarr[i].modified = true + await ApiTables.table_ModifyRecord(nametable, myarr[i], listFieldsToChange, 'pos') + } + } + + } + // } + + /* + + console.table(myarr) + + // Update the id_prev property + const elem1 = tools.update_idprev(myarr, itemdragend.newIndex, itemdragend.newIndex - 1) // 0, -1 + const elem2 = tools.update_idprev(myarr, itemdragend.newIndex + 1, itemdragend.newIndex) // 1, 0 + const elem3 = tools.update_idprev(myarr, itemdragend.oldIndex, itemdragend.oldIndex - 1) // 1, 0 + const elem4 = tools.update_idprev(myarr, itemdragend.oldIndex + 1, itemdragend.oldIndex) // 2, 1 + + await + ApiTables.table_ModifyRecord(nametable, elem1, listFieldsToChange, 'id_prev') + await + ApiTables.table_ModifyRecord(nametable, elem2, listFieldsToChange, 'id_prev') + await + ApiTables.table_ModifyRecord(nametable, elem3, listFieldsToChange, 'id_prev') + await + ApiTables.table_ModifyRecord(nametable, elem4, listFieldsToChange, 'id_prev') + + + */ tools.notifyarraychanged(myarr) @@ -1318,8 +1371,8 @@ export const tools = { if (myarr === undefined) return null return myarr.find((elem) => elem.id_prev === id) - } - , + }, + getLastFirstElemPriority(myarr, priority: number, atfirst: boolean, escludiId: string) { if (myarr === null) { @@ -1350,8 +1403,7 @@ export const tools = { } else { if (priority === tools.Priority.PRIORITY_LOW) { return myarr.length - 1 - } - else if (priority === tools.Priority.PRIORITY_HIGH) { + } else if (priority === tools.Priority.PRIORITY_HIGH) { return 0 } } @@ -1380,8 +1432,7 @@ export const tools = { Projects.state.projects = tools.jsonCopy(myarr) return Projects.state.projects } - } - , + }, getmyid(id) { return 'row' + id @@ -1406,8 +1457,7 @@ export const tools = { getElemByIndex(myarr, index) { if (index >= 0 && index < myarr.length) { return myarr[index] - } - else { + } else { return null } } @@ -1429,8 +1479,11 @@ export const tools = { visumenu(elem) { // : IListRoutes let visu = ((elem.onlyAdmin && UserStore.state.isAdmin) || (elem.onlyManager && UserStore.state.isManager) + || (elem.onlySocioResidente && UserStore.state.my.profile.socioresidente) || (elem.onlyTutor && UserStore.state.isTutor) || (elem.onlyTraduttrici && UserStore.state.isTraduttrici) - || ((!elem.onlyAdmin) && (!elem.onlyManager) && (!elem.onlyTutor) && (!elem.onlyTraduttrici))) && elem.active + || (elem.onlyDepartment && UserStore.state.isDepartment) + || ((!elem.onlyAdmin) && (!elem.onlyManager) && (!elem.onlyTutor) && (!elem.onlyTraduttrici) && (!elem.onlyDepartment) + && (!elem.onlySocioResidente))) && elem.active if (!tools.isLoggedToSystem()) { if (elem.onlyif_logged) @@ -2091,6 +2144,14 @@ export const tools = { return UserStore.state.isManager }, + isSocioResidente() { + return UserStore.state.my.profile.socioresidente + }, + + isDepartment() { + return UserStore.state.isDepartment + }, + isAdmin() { return UserStore.state.isAdmin }, @@ -2209,24 +2270,24 @@ export const tools = { if (tools.getstrDate(myevent.dateTimeStart) === tools.getstrDate(myevent.dateTimeEnd)) { if (withhtml) { mystr += `${tools.getstrDate(myevent.dateTimeStart)} - ${mythis.$t('cal.starttime')} ${ tools.getstrTime(myevent.dateTimeStart) } - ${ mythis.$t('cal.endtime')} ${ tools.getstrTime(myevent.dateTimeEnd) }` + ${mythis.$t('cal.starttime')} ${tools.getstrTime(myevent.dateTimeStart)} + ${mythis.$t('cal.endtime')} ${tools.getstrTime(myevent.dateTimeEnd)}` } else { mystr = `${tools.getstrDate(myevent.dateTimeStart)} - ${mythis.$t('cal.starttime')} ${ tools.getstrTime(myevent.dateTimeStart) } - ${ mythis.$t('cal.endtime')} ${ tools.getstrTime(myevent.dateTimeEnd) }` + ${mythis.$t('cal.starttime')} ${tools.getstrTime(myevent.dateTimeStart)} + ${mythis.$t('cal.endtime')} ${tools.getstrTime(myevent.dateTimeEnd)}` } } else { mystr = `${tools.getstrDate(myevent.dateTimeStart)} - ${mythis.$t('cal.starttime')} ${ tools.getstrTime(myevent.dateTimeStart) } - ${ mythis.$t('cal.enddate')} ${tools.getstrDate(myevent.dateTimeEnd)} - ${ mythis.$t('cal.endtime')} ${ tools.getstrTime(myevent.dateTimeEnd) } ` + ${mythis.$t('cal.starttime')} ${tools.getstrTime(myevent.dateTimeStart)} + ${mythis.$t('cal.enddate')} ${tools.getstrDate(myevent.dateTimeEnd)} + ${mythis.$t('cal.endtime')} ${tools.getstrTime(myevent.dateTimeEnd)} ` } if (myevent.infoextra) { mystr += ` ${mythis.$t('cal.hours')}: - ${ myevent.infoextra } + ${myevent.infoextra} ` } @@ -2238,9 +2299,9 @@ export const tools = { // is same day? if (tools.getstrShortDate(myevent.dateTimeStart) === tools.getstrShortDate(myevent.dateTimeEnd)) { mystr = `${tools.getstrShortDate(myevent.dateTimeStart)} - - ${ tools.getstrTime(myevent.dateTimeStart) }` + - ${tools.getstrTime(myevent.dateTimeStart)}` } else { - mystr = `${tools.getstrVeryVeryShortDate(myevent.dateTimeStart)} - ${ tools.getstrShortDate(myevent.dateTimeEnd) }` + mystr = `${tools.getstrVeryVeryShortDate(myevent.dateTimeStart)} - ${tools.getstrShortDate(myevent.dateTimeEnd)}` } @@ -2252,9 +2313,9 @@ export const tools = { // is same day? if (tools.getstrShortDate(myevent.dateTimeStart) === tools.getstrShortDate(myevent.dateTimeEnd)) { mystr = `${tools.getstrVeryShortDate(myevent.dateTimeStart)} - h. ${ tools.getstrTime(myevent.dateTimeStart) }` + h. ${tools.getstrTime(myevent.dateTimeStart)}` } else { - mystr = `${tools.getstrVeryShortDate(myevent.dateTimeStart)} - ${ tools.getstrVeryShortDate(myevent.dateTimeEnd) }` + mystr = `${tools.getstrVeryShortDate(myevent.dateTimeStart)} - ${tools.getstrVeryShortDate(myevent.dateTimeEnd)}` } @@ -3076,8 +3137,7 @@ export const tools = { } finally { // ... } - } - , + }, SignUpcheckErrors(mythis, riscode: number, msg: string) { console.log('SignUpcheckErrors', riscode) @@ -3114,19 +3174,16 @@ export const tools = { } return endload - } - , + }, isCssColor(color) { return !!color && !!color.match(/^(#|(rgb|hsl)a?\()/) - } - , + }, displayClasses(eventparam) { return { // [`bg-${eventparam.bgcolor}`]: !tools.isCssColor(eventparam.bgcolor), 'text-white': !tools.isCssColor(eventparam.bgcolor) } - } - , + }, displayStyles(eventparam) { const s = { color: '' } if (tools.isCssColor(eventparam.bgcolor)) { @@ -3134,8 +3191,7 @@ export const tools = { s.color = colors.luminosity(eventparam.bgcolor) > 0.5 ? 'black' : 'white' } return s - } - , + }, CancelBookingEvent(mythis, eventparam: IEvents, bookeventid: string, notify: boolean) { console.log('CancelBookingEvent ', eventparam) tools.askConfirm(mythis.$q, translate('cal.titlebooking'), translate('cal.cancelbooking') + ' ' + tools.gettextevent(mythis, eventparam) + '?', translate('dialog.yes'), translate('dialog.no'), mythis, '', lists.MenuAction.DELETE, 0, { @@ -3143,8 +3199,7 @@ export const tools = { param2: notify, param3: eventparam.title }) - } - , + }, CancelEvent(mythis, eventparam: IEvents) { console.log('CancelEvent ', eventparam) tools.askConfirm(mythis.$q, translate('cal.event'), translate('cal.cancelevent') + ' ' + tools.gettextevent(mythis, eventparam) + '?', translate('dialog.yes'), translate('dialog.no'), mythis, '', lists.MenuAction.DELETE_EVENT, 0, { @@ -3166,8 +3221,7 @@ export const tools = { param1: id, param2: item }) - } - , + }, async createNewRecord(mythis, table, data, withnotif = true) { @@ -3687,6 +3741,14 @@ export const tools = { } }, + getGroupById(myid) { + const group = GlobalStore.state.groups.find((rec) => rec._id === myid) + if (group) { + return group.descr + } + return '' + }, + getLinkZoom() { let id = '' if (GlobalStore.state.calzoom.length > 0) { @@ -3944,6 +4006,30 @@ export const tools = { return false } + }, + + getGroupList() { + + // console.log('GlobalStore.state.groups', GlobalStore.state.groups) + const mylist = { + it: [], + es: [], + enUs: [] + } + + let myrec = {} + + for (const mygroup of GlobalStore.state.groups) { + myrec = { + id: mygroup._id, + label: mygroup.descr, + value: mygroup._id + } + mylist.it.push(myrec) + + } + + return mylist } // getLocale() { diff --git a/src/views/Error404.vue b/src/views/Error404.vue index 198c0f1..0c5fb02 100755 --- a/src/views/Error404.vue +++ b/src/views/Error404.vue @@ -12,8 +12,8 @@ keyboard_arrow_left Go back - - diff --git a/src/views/ecommerce/checkOut/checkOut.ts b/src/views/ecommerce/checkOut/checkOut.ts index 605721a..a3e1bbc 100755 --- a/src/views/ecommerce/checkOut/checkOut.ts +++ b/src/views/ecommerce/checkOut/checkOut.ts @@ -145,7 +145,7 @@ export default class CheckOut extends MixinBase { }, title: 'Ordine' }).onOk(async () => { - const status = shared_consts.OrderStatus.CHECKOUT_CONFIRMED + const status = shared_consts.OrderStatus.CHECKOUT_SENT const statusnow = await Products.actions.UpdateStatusCart({ cart_id: this.mycart._id, status }) if (statusnow === status) { diff --git a/src/views/ecommerce/orderInfo/orderInfo.vue b/src/views/ecommerce/orderInfo/orderInfo.vue index 551582a..b3108f1 100755 --- a/src/views/ecommerce/orderInfo/orderInfo.vue +++ b/src/views/ecommerce/orderInfo/orderInfo.vue @@ -37,7 +37,7 @@ {{ props.row.totalPrice }} € - {{ props.row.status }} + {{ shared_consts.getStatusStr(props.row.status) }} diff --git a/src/views/projects/proj-list/proj-list.ts b/src/views/projects/proj-list/proj-list.ts index a5b476e..e69cab0 100755 --- a/src/views/projects/proj-list/proj-list.ts +++ b/src/views/projects/proj-list/proj-list.ts @@ -37,74 +37,8 @@ const namespace: string = 'Projects' }) export default class ProjList extends Vue { - public $q: any - public projbottom: string = '' - public prova: string = '' - public provatr: string = '' - public polling = null - public service: any - public scrollable = true - public dragname: string = 'second' - public idProjAtt: string = process.env.PROJECT_ID_MAIN - public splitterModel = 50 // start at 50% - public itemproj: IProject = null - public itemprojparent: IProject = null - public idsel: string = '' - public itemselproj: IProject = Projects.getters.getRecordEmpty() - public itemtodosel: ITodo = Todos.getters.getRecordEmpty() - public whatisSel: number = 0 - public colProgress: string = 'blue' - public percProgress: string = 'percProgress' - public readonly: boolean = false - public selectStatus: any[] = tools.selectStatus[toolsext.getLocale()] - public selectPhase: any[] = tools.selectPhase[toolsext.getLocale()] - public selectPrivacy: any[] = tools.selectPrivacy[toolsext.getLocale()] - - public $refs: { - singleproject: SingleProject[], - ctodo: CTodo - } - - @Getter('projs_dacompletare', { namespace }) - public projs_dacompletare: (state: IProjectsState, id_parent: string, tipoproj: string) => IProject[] - - // @Watch('projs_dacompletare') - // public changeitems() { - // this.updateindexProj() - // } - - @Watch('$route.name') - public changename() { - console.log('tools.getUrlByTipoProj(this.tipoProj)', tools.getUrlByTipoProj(this.tipoProj)) - this.changeparent() - } - - @Watch('$route.params.idProj') - public changeparent() { - this.idProjAtt = this.$route.params.idProj - this.updateindexProj() - this.selproj() - } - - @Watch('itemselproj.progressCalc') - public changeprogress() { - this.updateclasses() - } - - private updateindexProj() { - // console.log('idProjAtt', this.idProjAtt) - this.itemproj = Projects.getters.getRecordById(this.idProjAtt) - if (!!this.itemproj) { - this.itemprojparent = Projects.getters.getRecordById(this.itemproj.id_parent) - console.log('this.itemproj.descr', this.itemproj.descr) - } - // console.log('idproj', this.idProjAtt, 'params' , this.$route.params) - } - - public keyDownArea(e) { - console.log('keyDownArea') - } + public tabproj: string = 'info' get classTitle() { let cl = 'flex-item categorytitle shadow-4' @@ -133,12 +67,19 @@ export default class ProjList extends Vue { } else { cl += ' text-black' + ' bg-light-blue' } + + if (!tools.isMobile()) + cl += ' full-width ' return cl } get tipoProj() { // console.log('this.$route.name', this.$route.name) - return this.$route.name + const myarr = this.$route.name.split('.') + if (myarr) + return myarr[1] + else + return this.$route.name } get readonly_PanelPrivacy() { @@ -182,7 +123,7 @@ export default class ProjList extends Vue { } set showtype(value) { - console.log('showtype', value) + // console.log('showtype', value) GlobalStore.mutations.setShowType(value) } @@ -268,10 +209,10 @@ export default class ProjList extends Vue { if (date.getDateDiff(mydate, datenow) < 0) { mydate = datenow } - console.log('mydate', mydate) + // console.log('mydate', mydate) this.itemselproj.endwork_estimate = date.addToDate(mydate, { days }) - console.log(' days', days, 'weeks', weeks, 'orerimaste', orerimaste, 'dateestimated', this.itemselproj.endwork_estimate) + // console.log(' days', days, 'weeks', weeks, 'orerimaste', orerimaste, 'dateestimated', this.itemselproj.endwork_estimate) return this.itemselproj.endwork_estimate } catch (e) { @@ -295,10 +236,81 @@ export default class ProjList extends Vue { } + get isHorizontal() { + return (Screen.width < 600) + } + + get myStyle() { + if (this.isHorizontal) + return 'height: 600px' + else + return '' + } + public $q: any + public projbottom: string = '' + public prova: string = '' + public provatr: string = '' + public polling = null + public service: any + public scrollable = true + public dragname: string = 'second' + public idProjAtt: string = process.env.PROJECT_ID_MAIN + public splitterModel = 50 // start at 50% + public itemproj: IProject = null + public itemprojparent: IProject = null + public idsel: string = '' + public itemselproj: IProject = Projects.getters.getRecordEmpty() + public itemtodosel: ITodo = Todos.getters.getRecordEmpty() + public whatisSel: number = 0 + public colProgress: string = 'blue' + public percProgress: string = 'percProgress' + public readonly: boolean = false + + public selectStatus: any[] = tools.selectStatus[toolsext.getLocale()] + public selectPhase: any[] = tools.selectPhase[toolsext.getLocale()] + public selectPrivacy: any[] = tools.selectPrivacy[toolsext.getLocale()] + public selectGroup: any[] = [] + + public $refs: { + singleproject: SingleProject[], + ctodo: CTodo + } + + @Getter('projs_dacompletare', { namespace }) + public projs_dacompletare: (state: IProjectsState, id_parent: string, tipoproj: string) => IProject[] + + // @Watch('projs_dacompletare') + // public changeitems() { + // this.updateindexProj() + // } + + @Watch('$route.name') + public changename() { + // console.log('tools.getUrlByTipoProj(this.tipoProj)', tools.getUrlByTipoProj(this.tipoProj)) + this.changeparent() + } + + @Watch('$route.params.idProj') + public changeparent() { + // console.log('this.$route.params.idProj', this.$route.params) + this.idProjAtt = this.$route.params.idProj + this.updateindexProj() + this.selproj() + } + + @Watch('itemselproj.progressCalc') + public changeprogress() { + this.updateclasses() + } + + public keyDownArea(e) { + // console.log('keyDownArea') + } + // I use this because the statustodo will disappear from the UI, so it won't call the status changed... // in this case I need to call manually the modify. public modifyfieldtodo(field) { - console.log('modifyfieldtodo', field) + // console.log('modifyfieldtodo', field) Todos.actions.modify({ myitem: this.itemtodosel, field }) } @@ -313,17 +325,17 @@ export default class ProjList extends Vue { } public async onEndproj(itemdragend) { - console.log('onEndproj...') + // console.log('onEndproj...') await Projects.actions.swapElems(itemdragend) } public created() { - const $service = this.$dragula.$service - tools.dragula_option($service, this.dragname) + const service = this.$dragula.$service + tools.dragula_option(service, this.dragname) this.updateclasses() - $service.eventBus.$on('dragend', (args) => { + service.eventBus.$on('dragend', (args) => { // console.log('args proj-list', args) if (args.name === this.dragname) { @@ -340,27 +352,16 @@ export default class ProjList extends Vue { } }) - $service.eventBus.$on('drag', (el, source) => { + service.eventBus.$on('drag', (el, source) => { this.scrollable = false }) - $service.eventBus.$on('drop', (el, source) => { + service.eventBus.$on('drop', (el, source) => { this.scrollable = true }) this.load() } - get isHorizontal() { - return (Screen.width < 600) - } - - get myStyle(){ - if (this.isHorizontal) - return 'height: 600px' - else - return '' - } - public mounted() { // console.log('Screen.width', Screen.width) @@ -378,12 +379,16 @@ export default class ProjList extends Vue { } public async load() { - console.log('LOAD PROJECTS....') + // console.log('LOAD PROJECTS....') if (!!this.$route.params.idProj) { this.idProjAtt = this.$route.params.idProj this.updateindexProj() } + this.selectGroup = tools.getGroupList()[toolsext.getLocale()] + + console.log('this.selectGroup', this.selectGroup) + // Set last category selected // localStorage.setItem(tools.localStorage.categorySel, this.categoryAtt) @@ -402,12 +407,12 @@ export default class ProjList extends Vue { } public mydeleteitemproj(idobj: string) { - console.log('mydeleteitemtodo', idobj) + // console.log('mydeleteitemtodo', idobj) return Projects.actions.deleteItem({ idobj }) } public dbInsert() { - console.log('dbInsert') + // console.log('dbInsert') const descr = this.projbottom.trim() this.projbottom = '' @@ -416,13 +421,17 @@ export default class ProjList extends Vue { } public async clickMenuProjList(action) { - console.log('clickMenuProjList: ', action) + // console.log('clickMenuProjList: ', action) if (action === lists.MenuAction.ADD_PROJECT) { - const idnewelem = await this.addProject('', this.tipoProj) + const idnewelem = await this.addProject('test...', this.tipoProj) + // console.log('idnewelem', idnewelem) // get element by id const elem = this.getCompProjectById(idnewelem) - // @ts-ignore - elem.activeEdit() + + if (!!elem) { + // @ts-ignore + elem.activeEdit() + } // console.log('idnewelem', idnewelem, 'Elem Trovato', elem) } else if (action === lists.MenuAction.PASTE) { @@ -441,7 +450,7 @@ export default class ProjList extends Vue { public getCompProjectById(id): SingleProject { if (!!this.$refs.singleproject) { - console.log('this.$refs.singleproject', this.$refs.singleproject) + // console.log('this.$refs.singleproject', this.$refs.singleproject) for (const elem of this.$refs.singleproject) { // @ts-ignore if (elem.itemproject._id === id) { @@ -449,12 +458,14 @@ export default class ProjList extends Vue { } } } + return null } // const descr = this.$t('project.newproj').toString() public async addProject(descr, tipoproj: string) { const projatt = Projects.getters.getRecordById(this.idProjAtt) + // console.log('projatt', projatt) let myobj: IProject = null if (this.idProjAtt === process.env.PROJECT_ID_MAIN) { myobj = { @@ -462,15 +473,21 @@ export default class ProjList extends Vue { id_parent: this.idProjAtt, privacyread: tools.getprivacyreadbytipoproj(tipoproj), privacywrite: tools.getprivacywritebytipoproj(tipoproj), - actualphase: projatt.actualphase + } + + if (projatt) { + myobj.actualphase = projatt.actualphase } } else { myobj = { descr, id_parent: this.idProjAtt, - privacyread: projatt.privacyread, - privacywrite: projatt.privacywrite, - actualphase: projatt.actualphase + } + + if (projatt) { + myobj.actualphase = projatt.actualphase + myobj.privacyread = projatt.privacyread + myobj.privacywrite = projatt.privacywrite } } @@ -488,11 +505,13 @@ export default class ProjList extends Vue { myobj.id_main_project = this.itemproj.id_main_project } + // console.log('myobj', myobj) + if (!tools.checkIfUserExist(this)) { return } - console.log('Nuovo PROJ', myobj) + // console.log('Nuovo PROJ', myobj) return await Projects.actions.dbInsert({ myobj, atfirst: false }) } @@ -518,14 +537,20 @@ export default class ProjList extends Vue { } public checkiftoenable() { - if (this.whatisSel === tools.WHAT_NOTHING) - this.splitterModel = 100 - else + + if (tools.isMobile()) { + + if (this.whatisSel === tools.WHAT_NOTHING) + this.splitterModel = 100 + else + this.splitterModel = 0 + } else { this.splitterModel = 0 + } } public setdeselectrow() { - console.log('setdeselectrow') + // console.log('setdeselectrow') this.itemtodosel = null this.itemselproj = null this.whatisSel = tools.WHAT_NOTHING @@ -538,7 +563,7 @@ export default class ProjList extends Vue { } public async updateitemproj({ myitem, field }) { - console.log('calling MODIFY updateitemproj', myitem, field) + // console.log('calling MODIFY updateitemproj', myitem, field) await Projects.actions.modify({ myitem, field }) @@ -627,6 +652,16 @@ export default class ProjList extends Vue { ApiTables.waitAndcheckPendingMsg() } + private updateindexProj() { + // console.log('idProjAtt', this.idProjAtt) + this.itemproj = Projects.getters.getRecordById(this.idProjAtt) + if (!!this.itemproj) { + this.itemprojparent = Projects.getters.getRecordById(this.itemproj.id_parent) + // console.log('this.itemproj.descr', this.itemproj.descr) + } + // console.log('idproj', this.idProjAtt, 'params' , this.$route.params) + } + private getElementIndex(el: any) { return [].slice.call(el.parentElement.children).indexOf(el) } @@ -635,5 +670,19 @@ export default class ProjList extends Vue { return parseInt(el.attributes.index.value, 10) } + get iconPriority() { + let iconpriority = '' + if (this.itemtodosel.priority === tools.Priority.PRIORITY_HIGH) { + iconpriority = 'expand_less' + } // expand_less + else if (this.itemtodosel.priority === tools.Priority.PRIORITY_NORMAL) { + iconpriority = 'remove' + } + else if (this.itemtodosel.priority === tools.Priority.PRIORITY_LOW) { + iconpriority = 'expand_more' + } // expand_more + + return iconpriority + } } diff --git a/src/views/projects/proj-list/proj-list.vue b/src/views/projects/proj-list/proj-list.vue index c9af31e..7c8497a 100755 --- a/src/views/projects/proj-list/proj-list.vue +++ b/src/views/projects/proj-list/proj-list.vue @@ -1,366 +1,472 @@ + + +
+