TSK-1066: don't allow creating requests if already exists for set days (#3053)

Signed-off-by: Vyacheslav Tumanov <me@slavatumanov.me>
This commit is contained in:
Vyacheslav Tumanov 2023-04-25 21:13:27 +05:00 committed by GitHub
parent 34565c5890
commit 46933f1bd7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 34 additions and 2 deletions

View File

@ -36,6 +36,7 @@
"ChooseNewType": "Choose new type:",
"UnchangeableType": "This type cannot be changed",
"Request": "Request",
"ExistingRequests": "There are already existing requests for set dates",
"Staff": "Worker",
"Member": "Member",
"Members": "Members",

View File

@ -36,6 +36,7 @@
"ChooseNewType": "Выберите новый тип:",
"UnchangeableType": "Этот тип нельзя поменять",
"Request": "Запрос",
"ExistingRequests": "На данные даты уже существуют запросы",
"Staff": "Работник",
"Member": "Сотрудник",
"Members": "Сотрудники",

View File

@ -21,14 +21,16 @@
import { translate } from '@hcengineering/platform'
import { Card, createQuery, getClient } from '@hcengineering/presentation'
import { EmployeeBox } from '@hcengineering/contact-resources'
import ui, { Button, DateRangePresenter, DropdownLabelsIntl, IconAttachment } from '@hcengineering/ui'
import ui, { Button, DateRangePresenter, DropdownLabelsIntl, IconAttachment, Label } from '@hcengineering/ui'
import { createEventDispatcher } from 'svelte'
import hr from '../plugin'
import { getRequests } from '../utils'
export let staff: Staff
export let date: Date
export let readonly: boolean
export let docQuery: DocumentQuery<Employee> | undefined
export let employeeRequests: Map<Ref<Staff>, Request[]>
let description: string = ''
let employee: Ref<Employee> = staff._id
@ -77,13 +79,33 @@
function typeSelected (_id: Ref<RequestType>): void {
type = types.find((p) => p._id === _id)
}
function moreThanLimit (
employeeRequests: Map<Ref<Staff>, Request[]>,
staff: Staff,
startDate: Date,
endDate: Date,
type: RequestType | undefined
): boolean {
if (employeeRequests === undefined) return true
if (type === undefined) return true
const requests = getRequests(employeeRequests, startDate, endDate, staff._id)
return requests.length > 0
}
$: notLimit = moreThanLimit(
employeeRequests,
staff,
new Date(value),
new Date(new Date(dueDate).setHours(23, 59, 59, 999)),
type
)
</script>
<Card
label={hr.string.CreateRequest}
labelProps={{ type: typeLabel }}
okAction={saveRequest}
canSave={value !== undefined}
canSave={value !== undefined && !notLimit}
on:close={() => {
dispatch('close')
}}
@ -138,4 +160,9 @@
}}
/>
</svelte:fragment>
<svelte:fragment slot="error">
{#if notLimit}
<Label label={hr.string.ExistingRequests} />
{/if}
</svelte:fragment>
</Card>

View File

@ -69,6 +69,7 @@
staff,
date,
readonly,
employeeRequests,
docQuery: { active: true, $search: editableList.join(' | ') }
},
eventToHTMLElement(e)
@ -236,6 +237,7 @@
<div class:worked={ww > 0} class="h-full w-full">
{#if requests.length}
<ScheduleRequests
{employeeRequests}
{departments}
{requests}
{editable}

View File

@ -40,6 +40,7 @@ export default mergeIds(hrId, hr, {
ChooseNewType: '' as IntlString,
UnchangeableType: '' as IntlString,
CreateRequest: '' as IntlString,
ExistingRequests: '' as IntlString,
Today: '' as IntlString,
NoEmployeesInDepartment: '' as IntlString,
Summary: '' as IntlString,