Changes in RLS and Tenants

Many Changes in Invoice Editor
Page Loading Rebuilt
Started Rights Management
This commit is contained in:
2024-01-30 21:18:46 +01:00
parent 3167b6a20a
commit fe74e7d91b
13 changed files with 885 additions and 527 deletions

View File

@@ -1,6 +1,7 @@
import {defineStore} from 'pinia'
import dayjs from "dayjs"
import {typeOf} from "uri-js/dist/esnext/util";
import {useNumberRange} from "~/composables/useNumberRange.js";
//const supabase = createClient('https://uwppvcxflrcsibuzsbil.supabase.co','eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InV3cHB2Y3hmbHJjc2lidXpzYmlsIiwicm9sZSI6ImFub24iLCJpYXQiOjE3MDA5MzgxOTQsImV4cCI6MjAxNjUxNDE5NH0.CkxYSQH0uLfwx9GVUlO6AYMU2FMLAxGMrwEKvyPv7Oo')
@@ -21,7 +22,8 @@ export const useDataStore = defineStore('data', () => {
customers: {
label: "Kunden",
labelSingle: "Kunde",
redirect:true
redirect:true,
numberRangeHolder: "customerNumber"
},
contacts: {
label: "Kontakte",
@@ -61,7 +63,8 @@ export const useDataStore = defineStore('data', () => {
vendors: {
label: "Lieferanten",
labelSingle: "Lieferant",
redirect:true
redirect:true,
numberRangeHolder: "vendorNumber"
},
messages: {
label: "Nachrichten",
@@ -70,29 +73,58 @@ export const useDataStore = defineStore('data', () => {
spaces: {
label: "Lagerplätze",
labelSingle: "Lagerplatz",
redirect: true
redirect: true,
numberRangeHolder: "spaceNumber"
},
users: {
label: "Benutzer",
labelSingle: "Benutzer"
},
createdDocuments: {
label: "Dokumente",
labelSingle: "Dokument"
},
incomingInvoices: {
label: "Eingangsrechnungen",
labelSingle: "Eingangsrechnung"
}
}
const documentTypesForCreation = ref({
invoices: {
label: "Rechnungen",
labelSingle: "Rechnung",
},
quotes: {
label: "Angebote",
labelSingle: "Angebot"
},
deliveryNotes: {
label: "Lieferscheine",
labelSingle: "Lieferschein"
}
})
const loaded = ref(false)
const ownTenant = ref({
calendarConfig: {
eventTypes: [] as any[]
eventTypes: []
},
timeConfig: {
timeTypes: [] as any[]
timeTypes: []
},
tags: {
documents: [] as any[],
products: [] as any[]
documents: [] ,
products: []
},
measures: [] as {name:String, short:String}[]
measures: []
})
const profiles = ref([])
const currentTenant = ref(null)
const events = ref([])
const customers = ref([])
const tasks = ref([])
@@ -122,11 +154,30 @@ export const useDataStore = defineStore('data', () => {
const inventoryItems = ref([])
const chats = ref([])
const messages = ref([])
const createdDocuments = ref([])
async function initializeData () {
await fetchProfiles()
currentTenant.value = profiles.value.find(i => i.id === user.value.id).tenants[0].id
await fetchData()
}
async function changeTenant() {
loaded.value = false
await clearStore()
await fetchData()
router.push("/")
loaded.value = true
}
async function fetchData () {
await fetchProfiles()
fetchDocuments()
await fetchOwnTenant()
await fetchProfiles()
await fetchEvents()
await fetchTasks()
await fetchProjects()
@@ -156,6 +207,7 @@ export const useDataStore = defineStore('data', () => {
await fetchInventoryItems()
await fetchChats()
await fetchMessages()
await fetchCreatedDocuments()
loaded.value = true
}
@@ -193,6 +245,7 @@ export const useDataStore = defineStore('data', () => {
inventoryItems.value = []
chats.value = []
messages.value = []
createdDocuments.value = []
}
//Realtime Update
@@ -218,7 +271,20 @@ export const useDataStore = defineStore('data', () => {
)
.subscribe()
async function createNewItem (dataType:string,data:Array){
async function createNewItem (dataType,data){
console.log(dataType)
if(dataTypes[dataType].numberRangeHolder) {
const numberRange = useNumberRange(dataType)
data[dataTypes[dataType].numberRangeHolder] = await numberRange.useNextNumber()
} else if(dataType === "createdDocuments") {
console.log(data.type)
const numberRange = useNumberRange(data.type)
data.documentNumber = await numberRange.useNextNumber()
}
const {data:supabaseData,error:supabaseError} = await supabase
.from(dataType)
.insert(typeOf(data) === 'Object' ? [data] : data)
@@ -233,7 +299,7 @@ export const useDataStore = defineStore('data', () => {
}
}
async function updateItem (dataType:string, data:Object) {
async function updateItem (dataType, data) {
const {data:supabaseData,error: supabaseError} = await supabase
.from(dataType)
.update(data)
@@ -251,108 +317,116 @@ export const useDataStore = defineStore('data', () => {
}
async function fetchOwnTenant () {
ownTenant.value = (await supabase.from("tenants").select().eq('id', user.value?.app_metadata.tenant)).data[0]
ownTenant.value = (await supabase.from("tenants").select().eq('id', currentTenant.value)).data[0]
}
async function fetchProfiles () {
profiles.value = (await supabase.from("profiles").select()).data
profiles.value = (await supabase.from("profiles").select('* , tenants (id, name)')).data
}
async function fetchBankAccounts () {
bankAccounts.value = (await supabase.from("bankAccounts").select()).data
bankAccounts.value = (await supabase.from("bankaccounts").select().eq('tenant', currentTenant.value)).data
}
async function fetchBankStatements () {
bankStatements.value = (await supabase.from("bankStatements").select().order("date", {ascending:false})).data
bankStatements.value = (await supabase.from("bankstatements").select().eq('tenant', currentTenant.value).order("date", {ascending:false})).data
}
async function fetchEvents () {
events.value = (await supabase.from("events").select()).data
events.value = (await supabase.from("events").select().eq('tenant', currentTenant.value)).data
}
async function fetchContracts () {
contracts.value = (await supabase.from("contracts").select()).data
contracts.value = (await supabase.from("contracts").select().eq('tenant', currentTenant.value)).data
}
async function fetchContacts () {
contacts.value = (await supabase.from("contacts").select()).data
contacts.value = (await supabase.from("contacts").select().eq('tenant', currentTenant.value)).data
}
async function fetchCustomers () {
customers.value = (await supabase.from("customers").select().order("customerNumber", {ascending:true})).data
customers.value = (await supabase.from("customers").select().eq('tenant', currentTenant.value).order("customerNumber", {ascending:true})).data
}
async function fetchTasks () {
tasks.value = (await supabase.from("tasks").select()).data
tasks.value = (await supabase.from("tasks").select().eq('tenant', currentTenant.value)).data
}
async function fetchForms () {
forms.value = (await supabase.from("forms").select()).data
forms.value = (await supabase.from("forms").select().eq('tenant', currentTenant.value)).data
}
async function fetchFormSubmits () {
formSubmits.value = (await supabase.from("formSubmits").select()).data
formSubmits.value = (await supabase.from("formSubmits").select().eq('tenant', currentTenant.value)).data
}
async function fetchProducts () {
products.value = (await supabase.from("products").select()).data
products.value = (await supabase.from("products").select().eq('tenant', currentTenant.value)).data
}
async function fetchUnits () {
units.value = (await supabase.from("units").select()).data
}
async function fetchProjects () {
projects.value = (await supabase.from("projects").select()).data
projects.value = (await supabase.from("projects").select().eq("tenant",currentTenant.value)).data
}
async function fetchSpaces () {
spaces.value = (await supabase.from("spaces").select().order("spaceNumber", {ascending:true})).data
spaces.value = (await supabase.from("spaces").select().eq('tenant', currentTenant.value).order("spaceNumber", {ascending:true})).data
}
async function fetchMovements () {
movements.value = (await supabase.from("movements").select()).data
movements.value = (await supabase.from("movements").select().eq('tenant', currentTenant.value)).data
}
async function fetchVehicles () {
vehicles.value = (await supabase.from("vehicles").select()).data
vehicles.value = (await supabase.from("vehicles").select().eq('tenant', currentTenant.value)).data
}
async function fetchTimes () {
times.value = (await supabase.from("times").select().order("start", {ascending:false})).data
times.value = (await supabase.from("times").select().eq('tenant', currentTenant.value).order("start", {ascending:false})).data
}
async function fetchHistoryItems () {
historyItems.value = (await supabase.from("historyItems").select()).data
historyItems.value = (await supabase.from("historyitems").select().eq('tenant', currentTenant.value)).data
}
async function fetchVendors () {
vendors.value = (await supabase.from("vendors").select().order("vendorNumber", {ascending:true})).data
vendors.value = (await supabase.from("vendors").select().eq('tenant', currentTenant.value).order("vendorNumber", {ascending:true})).data
}
async function fetchIncomingInvoices () {
incomingInvoices.value = (await supabase.from("incomingInvoices").select()).data
incomingInvoices.value = (await supabase.from("incominginvoices").select().eq('tenant', currentTenant.value)).data
}
async function fetchNumberRanges () {
numberRanges.value = (await supabase.from("numberRanges").select()).data
numberRanges.value = (await supabase.from("numberranges").select().eq('tenant', currentTenant.value)).data
}
async function fetchNotifications () {
notifications.value = (await supabase.from("notifications").select().order("created_at", {ascending: false})).data
notifications.value = (await supabase.from("notifications").select().eq('tenant', currentTenant.value).order("created_at", {ascending: false})).data
}
async function fetchAbsenceRequests () {
absenceRequests.value = (await supabase.from("absenceRequests").select()).data
absenceRequests.value = (await supabase.from("absencerequests").select().eq('tenant', currentTenant.value)).data
}
async function fetchAccounts () {
accounts.value = (await supabase.from("accounts").select()).data
}
async function fetchTaxTypes () {
taxTypes.value = (await supabase.from("taxTypes").select()).data
taxTypes.value = (await supabase.from("taxtypes").select()).data
}
async function fetchPlants () {
plants.value = (await supabase.from("plants").select()).data
plants.value = (await supabase.from("plants").select().eq('tenant', currentTenant.value)).data
}
async function fetchInventoryItems () {
inventoryItems.value = (await supabase.from("inventoryItems").select()).data
inventoryItems.value = (await supabase.from("inventoryitems").select().eq('tenant', currentTenant.value)).data
}
async function fetchChats() {
chats.value = (await supabase.from("chats").select()).data
}
async function fetchMessages() {
messages.value = (await supabase.from("messages").select().order('created_at', {ascending:true})).data
messages.value = (await supabase.from("messages").select().eq('tenant', currentTenant.value).order('created_at', {ascending:true})).data
}
async function fetchCreatedDocuments() {
createdDocuments.value = (await supabase.from("createddocuments").select().eq('tenant', currentTenant.value).order('created_at', {ascending:true})).data
}
async function fetchDocuments () {
documents.value = (await supabase.from("documents").select()).data
let tempDocuments = (await supabase.from("documents").select().eq('tenant', currentTenant.value)).data
for(const [index,doc] of documents.value.entries()){
// @ts-ignore
documents.value[index].url = (await supabase.storage.from('files').createSignedUrl(doc.path, 60 * 60)).data.signedUrl
if(tempDocuments.length > 0) {
for(const [index,doc] of tempDocuments.entries()){
// @ts-ignore
tempDocuments[index].url = (await supabase.storage.from('files').createSignedUrl(doc.path, 60 * 60)).data.signedUrl
}
}
documents.value = tempDocuments
}
async function addHistoryItem(text: String, user: String, elementId: String, resourceType: String) {
async function addHistoryItem(text, user, elementId, resourceType) {
let data = {
user: user,
text: text
@@ -382,55 +456,59 @@ export const useDataStore = defineStore('data', () => {
return tasks.value.filter(task => task.categorie != "Erledigt").length
})
const getMovementsBySpace = computed(() => (spaceId:string) => {
const getOwnProfile = computed(() => {
return profiles.value.find(profile => profile.id === user.value.id)
})
const getMovementsBySpace = computed(() => (spaceId) => {
return movements.value.filter(movement => movement.spaceId === spaceId)
})
const getContactsByCustomerId = computed(() => (customerId:string) => {
const getContactsByCustomerId = computed(() => (customerId) => {
return contacts.value.filter(item => item.customer === customerId)
})
const getContactsByVendorId = computed(() => (vendorId:string) => {
const getContactsByVendorId = computed(() => (vendorId) => {
return contacts.value.filter(item => item.vendor === vendorId)
})
const getDocumentsByProjectId = computed(() => (projectId:string) => {
const getDocumentsByProjectId = computed(() => (projectId) => {
return documents.value.filter(item => item.project === projectId)
})
const getEventsByProjectId = computed(() => (projectId:string) => {
const getEventsByProjectId = computed(() => (projectId) => {
return events.value.filter(item => item.project === projectId)
})
const getTimesByProjectId = computed(() => (projectId:string) => {
const getTimesByProjectId = computed(() => (projectId) => {
return times.value.filter(time => time.projectId === projectId)
})
const getTasksByProjectId = computed(() => (projectId:string) => {
const getTasksByProjectId = computed(() => (projectId) => {
return tasks.value.filter(item => item.project === projectId)
})
const getTasksByPlantId = computed(() => (plantId:string) => {
const getTasksByPlantId = computed(() => (plantId) => {
return tasks.value.filter(item => item.plant === plantId)
})
const getProjectsByPlantId = computed(() => (plantId:string) => {
const getProjectsByPlantId = computed(() => (plantId) => {
return projects.value.filter(item => item.plant === plantId)
})
const getIncomingInvoicesByVehicleId = computed(() => (vehicleId:string) => {
const getIncomingInvoicesByVehicleId = computed(() => (vehicleId) => {
return incomingInvoices.value.filter(i => i.accounts.find(a => a.costCentre === vehicleId))
})
const getMovementsBySpaceId = computed(() => (spaceId:string) => {
const getMovementsBySpaceId = computed(() => (spaceId) => {
return movements.value.filter(movement => movement.spaceId === spaceId)
})
const getMessagesByChatId = computed(() => (chatId:string) => {
const getMessagesByChatId = computed(() => (chatId) => {
return messages.value.filter(i => i.destination === chatId)
})
const getStockByProductId = computed(() => (productId:string) => {
const getStockByProductId = computed(() => (productId) => {
let productMovements = movements.value.filter(movement => movement.productId === productId)
let count = 0
@@ -595,63 +673,67 @@ export const useDataStore = defineStore('data', () => {
//Get Item By Id
const getProductById = computed(() => (itemId:string) => {
const getProductById = computed(() => (itemId) => {
return products.value.find(item => item.id === itemId)
})
const getVendorById = computed(() => (itemId:string) => {
const getVendorById = computed(() => (itemId) => {
return vendors.value.find(item => item.id === itemId)
})
const getIncomingInvoiceById = computed(() => (itemId:string) => {
const getIncomingInvoiceById = computed(() => (itemId) => {
return incomingInvoices.value.find(item => item.id === itemId)
})
const getContractById = computed(() => (itemId:string) => {
const getContractById = computed(() => (itemId) => {
return contracts.value.find(item => item.id === itemId)
})
const getContactById = computed(() => (itemId:string) => {
const getContactById = computed(() => (itemId) => {
return contacts.value.find(item => item.id === itemId)
})
const getVehicleById = computed(() => (itemId:string) => {
const getVehicleById = computed(() => (itemId) => {
return vehicles.value.find(item => item.id === itemId)
})
const getDocumentById = computed(() => (itemId:string) => {
const getDocumentById = computed(() => (itemId) => {
return documents.value.find(item => item.id === itemId)
})
const getSpaceById = computed(() => (itemId:string) => {
const getSpaceById = computed(() => (itemId) => {
return spaces.value.find(item => item.id === itemId)
})
const getCustomerById = computed(() => (itemId:number) => {
const getCustomerById = computed(() => (itemId) => {
return customers.value.find(item => item.id === itemId)
})
const getTaskById = computed(() => (itemId:string) => {
const getTaskById = computed(() => (itemId) => {
return tasks.value.find(item => item.id === itemId)
})
const getAbsenceRequestById = computed(() => (itemId:string) => {
const getAbsenceRequestById = computed(() => (itemId) => {
return absenceRequests.value.find(item => item.id === itemId)
})
const getProfileById = computed(() => (itemId:string) => {
const getProfileById = computed(() => (itemId) => {
return profiles.value.find(item => item.id === itemId)
})
const getAccountById = computed(() => (accountId:string) => {
const getAccountById = computed(() => (accountId) => {
return accounts.value.find(item => item.id === accountId)
})
const getPlantById = computed(() => (plantId:string) => {
const getPlantById = computed(() => (plantId) => {
return plants.value.find(item => item.id === plantId)
})
const getProjectById = computed(() => (itemId:string) => {
const getCreatedDocumentById = computed(() => (documentId) => {
return createdDocuments.value.find(item => item.id === documentId)
})
const getProjectById = computed(() => (itemId) => {
if(projects.value.find(i => i.id === itemId)) {
let project = projects.value.find(project => project.id === itemId)
@@ -672,8 +754,14 @@ export const useDataStore = defineStore('data', () => {
})
return {
//General
currentTenant,
loaded,
ownTenant,
initializeData,
changeTenant,
//Data
profiles,
events,
customers,
@@ -704,6 +792,8 @@ export const useDataStore = defineStore('data', () => {
inventoryItems,
chats,
messages,
createdDocuments,
documentTypesForCreation,
//Functions
createNewItem,
updateItem,
@@ -741,6 +831,7 @@ export const useDataStore = defineStore('data', () => {
addHistoryItem,
//Getters
getOpenTasksCount,
getOwnProfile,
getMovementsBySpace,
getContactsByCustomerId,
getContactsByVendorId,
@@ -776,7 +867,8 @@ export const useDataStore = defineStore('data', () => {
getProjectById,
getProfileById,
getAccountById,
getPlantById
getPlantById,
getCreatedDocumentById
}