forked from ddrilling/asb_cloud_front
Исправления по DailyReport
* Добавлена блокировка некорректных дат рапортов * Изменён формат запрашиваемой даты * Добавлен сброс полей после добавления рапорта * Изменено правило фильтрации отображаемых рапортов
This commit is contained in:
parent
b02fec42f2
commit
5f03b751ee
@ -16,9 +16,15 @@ const Item = memo(({ style, ...other }) => <RawItem style={{ margin: 0, ...style
|
||||
|
||||
const table1Columns = [
|
||||
makeGroupColumn('Отчётный период', [
|
||||
makeColumn('От (дата, время)', 'dateStart', { width: 200, render: (_, { disabled, onChange }) => (
|
||||
makeColumn('От (дата, время)', 'dateStart', { width: 200, render: (_, { disabled, onChange, checkIsDateBusy }) => (
|
||||
<Item name={'reportDate'}>
|
||||
<DatePicker disabled={disabled} format={'DD.MM.YYYY'} style={{ width: '100%' }} onChange={onChange} />
|
||||
<DatePicker
|
||||
onChange={onChange}
|
||||
disabled={disabled}
|
||||
format={'DD.MM.YYYY'}
|
||||
style={{ width: '100%' }}
|
||||
disabledDate={checkIsDateBusy}
|
||||
/>
|
||||
</Item>
|
||||
)}),
|
||||
]),
|
||||
@ -122,7 +128,7 @@ const table2Summary = () => (
|
||||
</Summary.Row>
|
||||
)
|
||||
|
||||
export const ReportEditor = memo(({ visible, data, onDone, onCancel }) => {
|
||||
export const ReportEditor = memo(({ visible, data, onDone, onCancel, checkIsDateBusy }) => {
|
||||
const [form] = Form.useForm()
|
||||
const [isInvalid, setIsInvalid] = useState(false)
|
||||
const [isLoading, setIsLoading] = useState(false)
|
||||
@ -150,22 +156,25 @@ export const ReportEditor = memo(({ visible, data, onDone, onCancel }) => {
|
||||
else
|
||||
await DailyReportService.add(idWell, formData)
|
||||
onDone?.(formData)
|
||||
form.resetFields()
|
||||
},
|
||||
setIsLoading,
|
||||
'Не удалось сохранить суточный рапорт',
|
||||
'Сохранение суточного рапорта',
|
||||
), [data, onDone, idWell])
|
||||
), [data, onDone, idWell, form])
|
||||
|
||||
const onDateChange = useCallback((date) => invokeWebApiWrapperAsync(
|
||||
async () => {
|
||||
if (data) return
|
||||
const newData = await DailyReportService.getOrGenerate(idWell, date.toISOString())
|
||||
const newData = await DailyReportService.getOrGenerate(idWell, date.format('YYYY-MM-DD') + 'Z')
|
||||
if (checkIsDateBusy(moment(newData.reportDate)))
|
||||
throw 'Рапорт на данную дату уже существует'
|
||||
setFields(newData)
|
||||
},
|
||||
setIsLoading,
|
||||
'Не удалось загрузить автозаполняемые данные для нового рапорта',
|
||||
'Получение автозаполняемых данных суточного рапорта',
|
||||
), [idWell, data, setFields])
|
||||
), [idWell, data, setFields, checkIsDateBusy])
|
||||
|
||||
return (
|
||||
<Modal
|
||||
@ -191,7 +200,12 @@ export const ReportEditor = memo(({ visible, data, onDone, onCancel }) => {
|
||||
onChange={onFormChange}
|
||||
>
|
||||
<Item name={'reportDate'} label={'Дата рапорта'} rules={[{ required: true }]}>
|
||||
<DatePicker disabled={!!data} format={'DD.MM.YYYY'} onChange={onDateChange} />
|
||||
<DatePicker
|
||||
disabled={!!data}
|
||||
format={'DD.MM.YYYY'}
|
||||
onChange={onDateChange}
|
||||
disabledDate={checkIsDateBusy}
|
||||
/>
|
||||
</Item>
|
||||
<Divider />
|
||||
<Space direction={'vertical'} size={'middle'} style={{ width: '100%' }}>
|
||||
@ -201,7 +215,7 @@ export const ReportEditor = memo(({ visible, data, onDone, onCancel }) => {
|
||||
bordered
|
||||
size={'small'}
|
||||
columns={table1Columns}
|
||||
dataSource={[{ key: '', disabled: !!data, onChange: onDateChange }]}
|
||||
dataSource={[{ key: '', disabled: !!data, onChange: onDateChange, checkIsDateBusy }]}
|
||||
pagination={false}
|
||||
/>
|
||||
<Item label={'Бурильщик 1 смена'} name={'firstDriller'}><Input /></Item>
|
||||
|
@ -1,11 +1,11 @@
|
||||
import moment from 'moment'
|
||||
import { Button, DatePicker } from 'antd'
|
||||
import { Button } from 'antd'
|
||||
import { FileExcelOutlined, EditOutlined, PlusOutlined } from '@ant-design/icons'
|
||||
import { memo, useCallback, useContext, useEffect, useMemo, useState } from 'react'
|
||||
|
||||
import { IdWellContext } from '@asb/context'
|
||||
import LoaderPortal from '@components/LoaderPortal'
|
||||
import { Table, makeDateColumn, makeColumn } from '@components/Table'
|
||||
import { DateRangeWrapper, Table, makeDateColumn, makeColumn } from '@components/Table'
|
||||
import { download, invokeWebApiWrapperAsync } from '@components/factory'
|
||||
import { DailyReportService } from '@api'
|
||||
import { arrayOrDefault } from '@utils'
|
||||
@ -33,8 +33,10 @@ export const DailyReport = memo(() => {
|
||||
|
||||
useEffect(updateTable, [updateTable])
|
||||
|
||||
const checkIsDateBusy = useCallback((current) => current.isAfter(moment(), 'day') || data.some((row) => moment(row.reportDate).isSame(current, 'day')), [data])
|
||||
|
||||
const columns = useMemo(() => [
|
||||
makeDateColumn('Дата', 'reportDate', undefined, undefined, { width: 300 }),
|
||||
makeDateColumn('Дата', 'reportDate', undefined, 'YYYY.MM.DD', { width: 300 }),
|
||||
makeColumn('', '', { width: 200, render: (_, report) => (
|
||||
<>
|
||||
<Button
|
||||
@ -58,7 +60,8 @@ export const DailyReport = memo(() => {
|
||||
|
||||
const filteredData = useMemo(() => {
|
||||
if (!searchDate) return data
|
||||
return data.filter((row) => moment.utc(row.reportDate).local().isBetween(...searchDate))
|
||||
const endDate = moment(searchDate[1]).add(1, 'd')
|
||||
return data.filter((row) => moment(row.reportDate).isBetween(searchDate[0], endDate, 'ms', '[)'))
|
||||
}, [data, searchDate])
|
||||
|
||||
return (
|
||||
@ -68,8 +71,8 @@ export const DailyReport = memo(() => {
|
||||
<div>
|
||||
<div>
|
||||
<div>Диапозон дат отчёта</div>
|
||||
<DatePicker.RangePicker
|
||||
allowClear={false}
|
||||
<DateRangeWrapper
|
||||
showTime={false}
|
||||
format={'DD.MM.YYYY'}
|
||||
defaultValue={searchDate}
|
||||
onCalendarChange={setSearchDate}
|
||||
@ -102,6 +105,7 @@ export const DailyReport = memo(() => {
|
||||
setIsEditorVisible(false)
|
||||
updateTable()
|
||||
}}
|
||||
checkIsDateBusy={checkIsDateBusy}
|
||||
/>
|
||||
</>
|
||||
)
|
||||
|
Loading…
Reference in New Issue
Block a user