mirror of
https://github.com/hcengineering/platform.git
synced 2024-11-21 16:09:12 +03:00
Workslot fixes (#7084)
Some checks are pending
CI / build (push) Waiting to run
CI / svelte-check (push) Blocked by required conditions
CI / formatting (push) Blocked by required conditions
CI / test (push) Blocked by required conditions
CI / uitest (push) Waiting to run
CI / uitest-pg (push) Waiting to run
CI / uitest-qms (push) Waiting to run
CI / docker-build (push) Blocked by required conditions
CI / dist-build (push) Blocked by required conditions
Some checks are pending
CI / build (push) Waiting to run
CI / svelte-check (push) Blocked by required conditions
CI / formatting (push) Blocked by required conditions
CI / test (push) Blocked by required conditions
CI / uitest (push) Waiting to run
CI / uitest-pg (push) Waiting to run
CI / uitest-qms (push) Waiting to run
CI / docker-build (push) Blocked by required conditions
CI / dist-build (push) Blocked by required conditions
This commit is contained in:
parent
01350d870d
commit
c190b1c079
@ -21,7 +21,7 @@ import { type Resource } from '@hcengineering/platform'
|
||||
import serverCore, { type TriggerControl } from '@hcengineering/server-core'
|
||||
import tracker from '@hcengineering/tracker'
|
||||
import serverTime, { type ToDoFactory, type OnToDo } from '@hcengineering/server-time'
|
||||
import { type ToDo, type WorkSlot } from '@hcengineering/time'
|
||||
import time, { type ToDo, type WorkSlot } from '@hcengineering/time'
|
||||
|
||||
@Mixin(serverTime.mixin.ToDoFactory, core.class.Class)
|
||||
export class TToDoFactory extends TClass implements ToDoFactory {
|
||||
@ -45,6 +45,7 @@ export function createModel (builder: Builder): void {
|
||||
trigger: serverTime.trigger.OnToDoUpdate,
|
||||
txMatch: {
|
||||
_class: core.class.TxCollectionCUD,
|
||||
'tx.objectClass': time.class.ToDo,
|
||||
'tx._class': core.class.TxUpdateDoc
|
||||
}
|
||||
})
|
||||
@ -53,6 +54,7 @@ export function createModel (builder: Builder): void {
|
||||
trigger: serverTime.trigger.OnToDoRemove,
|
||||
txMatch: {
|
||||
_class: core.class.TxCollectionCUD,
|
||||
'tx.objectClass': time.class.ToDo,
|
||||
'tx._class': core.class.TxRemoveDoc
|
||||
}
|
||||
})
|
||||
@ -61,6 +63,7 @@ export function createModel (builder: Builder): void {
|
||||
trigger: serverTime.trigger.OnToDoCreate,
|
||||
txMatch: {
|
||||
_class: core.class.TxCollectionCUD,
|
||||
'tx.objectClass': time.class.ToDo,
|
||||
'tx._class': core.class.TxCreateDoc
|
||||
},
|
||||
isAsync: true
|
||||
@ -70,10 +73,20 @@ export function createModel (builder: Builder): void {
|
||||
trigger: serverTime.trigger.OnWorkSlotCreate,
|
||||
txMatch: {
|
||||
_class: core.class.TxCollectionCUD,
|
||||
'tx.objectClass': time.class.WorkSlot,
|
||||
'tx._class': core.class.TxCreateDoc
|
||||
}
|
||||
})
|
||||
|
||||
builder.createDoc(serverCore.class.Trigger, core.space.Model, {
|
||||
trigger: serverTime.trigger.OnWorkSlotUpdate,
|
||||
txMatch: {
|
||||
_class: core.class.TxCollectionCUD,
|
||||
'tx.objectClass': time.class.WorkSlot,
|
||||
'tx._class': core.class.TxUpdateDoc
|
||||
}
|
||||
})
|
||||
|
||||
builder.mixin(tracker.class.Issue, core.class.Class, serverTime.mixin.ToDoFactory, {
|
||||
factory: serverTime.function.IssueToDoFactory
|
||||
})
|
||||
|
@ -16,8 +16,8 @@
|
||||
import { createQuery } from '@hcengineering/presentation'
|
||||
import { Label } from '@hcengineering/ui'
|
||||
import { ToDo, WorkSlot } from '@hcengineering/time'
|
||||
import time from '../plugin'
|
||||
import ToDoPresenter from './ToDoPresenter.svelte'
|
||||
import calendar from '@hcengineering/calendar'
|
||||
|
||||
export let event: WorkSlot
|
||||
export let oneRow: boolean = false
|
||||
@ -26,13 +26,15 @@
|
||||
let todo: ToDo
|
||||
|
||||
const query = createQuery()
|
||||
$: query.query(event.attachedToClass, { _id: event.attachedTo }, (res) => {
|
||||
$: !hideDetails
|
||||
? query.query(event.attachedToClass, { _id: event.attachedTo }, (res) => {
|
||||
todo = res[0]
|
||||
})
|
||||
: query.unsubscribe()
|
||||
</script>
|
||||
|
||||
{#if hideDetails}
|
||||
<Label label={time.string.WorkSlot} />
|
||||
<Label label={calendar.string.Busy} />
|
||||
{:else if todo}
|
||||
<ToDoPresenter value={todo} withoutSpace={oneRow} />
|
||||
{/if}
|
||||
|
@ -85,20 +85,19 @@ export async function applicationTextPresenter (doc: Doc, control: TriggerContro
|
||||
* @public
|
||||
*/
|
||||
export async function OnRecruitUpdate (tx: Tx, control: TriggerControl): Promise<Tx[]> {
|
||||
const actualTx = TxProcessor.extractTx(tx)
|
||||
const cud = actualTx as TxCUD<Doc>
|
||||
if (!control.hierarchy.isDerived(cud.objectClass, recruit.class.Vacancy)) {
|
||||
const actualTx = TxProcessor.extractTx(tx) as TxCUD<Doc>
|
||||
if (!control.hierarchy.isDerived(actualTx.objectClass, recruit.class.Vacancy)) {
|
||||
return []
|
||||
}
|
||||
|
||||
const res: Tx[] = []
|
||||
|
||||
if (actualTx._class === core.class.TxCreateDoc) {
|
||||
handleVacancyCreate(control, cud, actualTx, res)
|
||||
handleVacancyCreate(control, actualTx, res)
|
||||
} else if (actualTx._class === core.class.TxUpdateDoc) {
|
||||
await handleVacancyUpdate(control, cud, res)
|
||||
await handleVacancyUpdate(control, actualTx, res)
|
||||
} else if (actualTx._class === core.class.TxRemoveDoc) {
|
||||
await handleVacancyRemove(control, cud, actualTx)
|
||||
handleVacancyRemove(control, actualTx, res)
|
||||
}
|
||||
return res
|
||||
}
|
||||
@ -156,16 +155,13 @@ async function handleVacancyUpdate (control: TriggerControl, cud: TxCUD<Doc>, re
|
||||
}
|
||||
}
|
||||
|
||||
async function handleVacancyRemove (control: TriggerControl, cud: TxCUD<Doc>, actualTx: Tx): Promise<void> {
|
||||
const removeTx = actualTx as TxRemoveDoc<Vacancy>
|
||||
function handleVacancyRemove (control: TriggerControl, cud: TxCUD<Doc>, res: Tx[]): void {
|
||||
const removeTx = cud as TxRemoveDoc<Vacancy>
|
||||
// It could be null or new value
|
||||
const txes = (
|
||||
await control.findAll(control.ctx, core.class.TxCUD, {
|
||||
objectId: removeTx.objectId
|
||||
})
|
||||
).filter((it) => it._id !== removeTx._id)
|
||||
const vacancy = TxProcessor.buildDoc2Doc(txes) as Vacancy
|
||||
const res: Tx[] = []
|
||||
const vacancy = control.removedMap.get(removeTx.objectId) as Vacancy
|
||||
if (vacancy === undefined) {
|
||||
return
|
||||
}
|
||||
if (vacancy.company != null) {
|
||||
// We have old value
|
||||
res.push(
|
||||
@ -182,8 +178,8 @@ async function handleVacancyRemove (control: TriggerControl, cud: TxCUD<Doc>, ac
|
||||
}
|
||||
}
|
||||
|
||||
function handleVacancyCreate (control: TriggerControl, cud: TxCUD<Doc>, actualTx: Tx, res: Tx[]): void {
|
||||
const createTx = actualTx as TxCreateDoc<Vacancy>
|
||||
function handleVacancyCreate (control: TriggerControl, cud: TxCUD<Doc>, res: Tx[]): void {
|
||||
const createTx = cud as TxCreateDoc<Vacancy>
|
||||
const vacancy = TxProcessor.createDoc2Doc(createTx)
|
||||
if (vacancy.company !== undefined) {
|
||||
res.push(
|
||||
|
@ -69,6 +69,21 @@ export async function OnTask (tx: Tx, control: TriggerControl): Promise<Tx[]> {
|
||||
return []
|
||||
}
|
||||
|
||||
export async function OnWorkSlotUpdate (tx: Tx, control: TriggerControl): Promise<Tx[]> {
|
||||
const actualTx = TxProcessor.extractTx(tx) as TxCUD<WorkSlot>
|
||||
if (!control.hierarchy.isDerived(actualTx.objectClass, time.class.WorkSlot)) return []
|
||||
if (!control.hierarchy.isDerived(actualTx._class, core.class.TxUpdateDoc)) return []
|
||||
const updTx = actualTx as TxUpdateDoc<WorkSlot>
|
||||
const visibility = updTx.operations.visibility
|
||||
if (visibility !== undefined) {
|
||||
const workslot = (await control.findAll(control.ctx, time.class.WorkSlot, { _id: updTx.objectId }, { limit: 1 }))[0]
|
||||
if (workslot === undefined) return []
|
||||
const todo = (await control.findAll(control.ctx, time.class.ToDo, { _id: workslot.attachedTo }))[0]
|
||||
return [control.txFactory.createTxUpdateDoc(todo._class, todo.space, todo._id, { visibility })]
|
||||
}
|
||||
return []
|
||||
}
|
||||
|
||||
export async function OnWorkSlotCreate (tx: Tx, control: TriggerControl): Promise<Tx[]> {
|
||||
const actualTx = TxProcessor.extractTx(tx) as TxCUD<WorkSlot>
|
||||
if (!control.hierarchy.isDerived(actualTx.objectClass, time.class.WorkSlot)) return []
|
||||
@ -578,6 +593,22 @@ async function changeIssueStatusHandler (
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (status.category === task.statusCategory.Won || status.category === task.statusCategory.Lost) {
|
||||
const issue = (await control.findAll(control.ctx, tracker.class.Issue, { _id: issueId }))[0]
|
||||
if (issue !== undefined) {
|
||||
const todos = await control.findAll(control.ctx, time.class.ToDo, {
|
||||
attachedTo: issue._id,
|
||||
doneOn: null
|
||||
})
|
||||
const res: Tx[] = []
|
||||
const now = Date.now()
|
||||
for (const todo of todos) {
|
||||
if (todo.doneOn == null) {
|
||||
res.push(control.txFactory.createTxUpdateDoc(todo._class, todo.space, todo._id, { doneOn: now }))
|
||||
}
|
||||
}
|
||||
return res
|
||||
}
|
||||
}
|
||||
return []
|
||||
}
|
||||
@ -648,6 +679,7 @@ export default async () => ({
|
||||
OnToDoUpdate,
|
||||
OnToDoRemove,
|
||||
OnToDoCreate,
|
||||
OnWorkSlotCreate
|
||||
OnWorkSlotCreate,
|
||||
OnWorkSlotUpdate
|
||||
}
|
||||
})
|
||||
|
@ -56,6 +56,7 @@ export default plugin(serverTimeId, {
|
||||
OnToDoUpdate: '' as Resource<TriggerFunc>,
|
||||
OnToDoRemove: '' as Resource<TriggerFunc>,
|
||||
OnToDoCreate: '' as Resource<TriggerFunc>,
|
||||
OnWorkSlotCreate: '' as Resource<TriggerFunc>
|
||||
OnWorkSlotCreate: '' as Resource<TriggerFunc>,
|
||||
OnWorkSlotUpdate: '' as Resource<TriggerFunc>
|
||||
}
|
||||
})
|
||||
|
@ -13,7 +13,7 @@
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
import core, { AnyAttribute, Hierarchy, Tx, TxCUD, TxProcessor, TxRemoveDoc } from '@hcengineering/core'
|
||||
import core, { AnyAttribute, Hierarchy, Tx, TxRemoveDoc } from '@hcengineering/core'
|
||||
import type { TriggerControl } from '@hcengineering/server-core'
|
||||
import view from '@hcengineering/view'
|
||||
|
||||
@ -24,8 +24,7 @@ export async function OnCustomAttributeRemove (tx: Tx, control: TriggerControl):
|
||||
const hierarchy = control.hierarchy
|
||||
const ptx = tx as TxRemoveDoc<AnyAttribute>
|
||||
if (!checkTx(ptx, hierarchy)) return []
|
||||
const txes = await control.findAll<TxCUD<AnyAttribute>>(control.ctx, core.class.TxCUD, { objectId: ptx.objectId })
|
||||
const attribute = TxProcessor.buildDoc2Doc<AnyAttribute>(txes)
|
||||
const attribute = control.removedMap.get(ptx.objectId) as AnyAttribute
|
||||
if (attribute === undefined) return []
|
||||
const preferences = await control.findAll(control.ctx, view.class.ViewletPreference, {
|
||||
config: attribute.name,
|
||||
|
Loading…
Reference in New Issue
Block a user