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:", "ChooseNewType": "Choose new type:",
"UnchangeableType": "This type cannot be changed", "UnchangeableType": "This type cannot be changed",
"Request": "Request", "Request": "Request",
"ExistingRequests": "There are already existing requests for set dates",
"Staff": "Worker", "Staff": "Worker",
"Member": "Member", "Member": "Member",
"Members": "Members", "Members": "Members",

View File

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

View File

@ -21,14 +21,16 @@
import { translate } from '@hcengineering/platform' import { translate } from '@hcengineering/platform'
import { Card, createQuery, getClient } from '@hcengineering/presentation' import { Card, createQuery, getClient } from '@hcengineering/presentation'
import { EmployeeBox } from '@hcengineering/contact-resources' 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 { createEventDispatcher } from 'svelte'
import hr from '../plugin' import hr from '../plugin'
import { getRequests } from '../utils'
export let staff: Staff export let staff: Staff
export let date: Date export let date: Date
export let readonly: boolean export let readonly: boolean
export let docQuery: DocumentQuery<Employee> | undefined export let docQuery: DocumentQuery<Employee> | undefined
export let employeeRequests: Map<Ref<Staff>, Request[]>
let description: string = '' let description: string = ''
let employee: Ref<Employee> = staff._id let employee: Ref<Employee> = staff._id
@ -77,13 +79,33 @@
function typeSelected (_id: Ref<RequestType>): void { function typeSelected (_id: Ref<RequestType>): void {
type = types.find((p) => p._id === _id) 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> </script>
<Card <Card
label={hr.string.CreateRequest} label={hr.string.CreateRequest}
labelProps={{ type: typeLabel }} labelProps={{ type: typeLabel }}
okAction={saveRequest} okAction={saveRequest}
canSave={value !== undefined} canSave={value !== undefined && !notLimit}
on:close={() => { on:close={() => {
dispatch('close') dispatch('close')
}} }}
@ -138,4 +160,9 @@
}} }}
/> />
</svelte:fragment> </svelte:fragment>
<svelte:fragment slot="error">
{#if notLimit}
<Label label={hr.string.ExistingRequests} />
{/if}
</svelte:fragment>
</Card> </Card>

View File

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

View File

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