diff --git a/src/pages/Reports/DailyReport/ReportEditor.jsx b/src/pages/Reports/DailyReport/ReportEditor.jsx
index 8b56887..f4b6cbe 100644
--- a/src/pages/Reports/DailyReport/ReportEditor.jsx
+++ b/src/pages/Reports/DailyReport/ReportEditor.jsx
@@ -1,4 +1,4 @@
-import { DatePicker, Descriptions, Divider, Form, Input, InputNumber, Modal, Select, Space, Table } from 'antd'
+import { DatePicker, Descriptions, Form, Input, InputNumber, Modal, Table, Tabs } from 'antd'
import { memo, useCallback, useEffect, useState } from 'react'
import moment from 'moment'
@@ -7,15 +7,11 @@ import LoaderPortal from '@components/LoaderPortal'
import { invokeWebApiWrapperAsync } from '@components/factory'
import { makeColumn, makeGroupColumn } from '@components/Table'
import { DailyReportService } from '@api'
-import { Tabs } from 'antd'
const { Item: RawItem } = Form
const { Summary } = Table
const { TabPane } = Tabs
-const onChange = (key) => {
- console.log(key)
-}
const Item = memo(({ style, ...other }) => )
const table1Columns = [
@@ -54,13 +50,30 @@ const table1Columns = [
}),
]),
]
+
const names = [
- ['head', ['wellName', 'clusterName','contractor','countLaunchesMSE','customer','bottomholeDepth','verticalDepth','firstDriller','secondDriller','zenithAngle','azimuthAngle','penetrationSAUB','penetrationSpinMaster','penetrationTorkMaster','secondDriller','wellDepthIntervalFinishDate','wellDepthIntervalStartDate','workTimeSAUB','workTimeSpinMaster','workTimeTorkMaster','reportDate']],
- ['bha', ['bhaDescription','extensionDrillingOneBegin','extensionDrillingOneFinish','sluiceBegin','sluiceFinish','climbBegin','climbFinish','descentBegin','descentFinish','extensionDrillingTwoBegin','extensionDrillingTwoFinish']],
- ['noDrilling', ['actualTimeBarrelPreparation','actualTimeExtension','standardTimeBarrelPreparation','standardTimeExtension']],
- ['timeBalance', ['drilling','flushing','building','elaboration','extension','repair','knbk','spo','pzr','pzr','pgr','gis','ozc','engineeringWorks','takingMeasure','cementing','simple','npv']],
- ['saub', ['avgDiffDropRotor','avgDiffPressureSlide','declinesReasonsROP','deviationFromTVD','drillingTimeInRotor','declinesReasonsROP','extensionsCount','extensionsCount','penetrationInRotor','penetrationInSlide','rotorDrillingModes','rotorSlidePercent','reductionTimeDrilling','increaseSpeedSection','increaseSpeedDay','sectionDrillingTimeTotal','sectionPenetrationTotal','sectionROPPlan','slideDrillingModes','mspSection']],
- ['sign', ['drillingMaster','supervisor']],
+ ['head', [
+ 'wellName', 'clusterName', 'contractor', 'countLaunchesMSE', 'customer', 'bottomholeDepth', 'verticalDepth',
+ 'firstDriller', 'secondDriller', 'zenithAngle', 'azimuthAngle', 'penetrationSAUB', 'penetrationSpinMaster',
+ 'penetrationTorkMaster', 'secondDriller', 'wellDepthIntervalFinishDate', 'wellDepthIntervalStartDate',
+ 'workTimeSAUB', 'workTimeSpinMaster', 'workTimeTorkMaster', 'reportDate',
+ ]],
+ ['bha', [
+ 'bhaDescription', 'extensionDrillingOneBegin', 'extensionDrillingOneFinish', 'sluiceBegin', 'sluiceFinish',
+ 'climbBegin', 'climbFinish', 'descentBegin', 'descentFinish', 'extensionDrillingTwoBegin', 'extensionDrillingTwoFinish',
+ ]],
+ ['noDrilling', ['actualTimeBarrelPreparation', 'actualTimeExtension', 'standardTimeBarrelPreparation', 'standardTimeExtension']],
+ ['timeBalance', [
+ 'drilling', 'flushing', 'building', 'elaboration', 'extension', 'repair', 'knbk', 'spo', 'pzr', 'pzr', 'pgr', 'gis',
+ 'ozc', 'engineeringWorks', 'takingMeasure', 'cementing', 'simple', 'npv',
+ ]],
+ ['saub', [
+ 'avgDiffDropRotor', 'avgDiffPressureSlide', 'declinesReasonsROP', 'deviationFromTVD', 'drillingTimeInRotor',
+ 'declinesReasonsROP', 'extensionsCount', 'extensionsCount', 'penetrationInRotor', 'penetrationInSlide',
+ 'rotorDrillingModes', 'rotorSlidePercent', 'reductionTimeDrilling', 'increaseSpeedSection', 'increaseSpeedDay',
+ 'sectionDrillingTimeTotal', 'sectionPenetrationTotal', 'sectionROPPlan', 'slideDrillingModes', 'mspSection'
+ ]],
+ ['sign', ['drillingMaster', 'supervisor']],
]
const cellData = {
@@ -233,6 +246,44 @@ const table2Summary = () => (
)
+const makeItem = (name, label) => ({ name, label })
+const renderDescriptions = (items) => items.map(({ name, label }) => (
+
+ -
+
+
+
+))
+
+const tab1Items = [
+ makeItem('wellName', 'Название скважины'),
+ makeItem('clusterName', 'Название куста'),
+ makeItem('customer', 'Заказчик'),
+ makeItem('contractor', 'Подрядчик'),
+]
+
+const tab4Items = [
+ makeItem('drilling', 'Бурение'),
+ makeItem('sectionDrillingTimeTotal', 'Время бурения за секцию'),
+ makeItem('flushing', 'Промывка'),
+ makeItem('building', 'Наращивание'),
+ makeItem('elaboration', 'Проработка'),
+ makeItem('extension', 'Расширка'),
+ makeItem('repair', 'Ремонт'),
+ makeItem('knbk', 'КНБК'),
+ makeItem('spo', 'СПО'),
+ makeItem('pzr', 'ПЗР'),
+ makeItem('pvo', 'ПВО'),
+ makeItem('pgr', 'ПГР'),
+ makeItem('gis', 'ГИС'),
+ makeItem('ozc', 'ОЗЦ'),
+ makeItem('engineeringWorks', 'Тех. работы'),
+ makeItem('takingMeasure', 'Снятие замера'),
+ makeItem('cementing', 'Цементирование'),
+ makeItem('simple', 'Простой'),
+ makeItem('npv', 'НПВ'),
+]
+
export const ReportEditor = memo(({ visible, data, onDone, onCancel, checkIsDateBusy }) => {
const [form] = Form.useForm()
const [isInvalid, setIsInvalid] = useState(false)
@@ -240,69 +291,52 @@ export const ReportEditor = memo(({ visible, data, onDone, onCancel, checkIsDate
const idWell = useIdWell()
- const setFields = useCallback(
- (data) =>
- form.setFieldsValue(
- data
- ? {
- ...data.head,
- ...data.bha,
- ...data.noDrilling,
- ...data.timeBalance,
- ...data.saub,
- ...data.sign,
- reportDate: moment.utc(data.head.reportDate).local(),
- }
- : {}
- ),
- [form]
- )
+ const setFields = useCallback((data) =>
+ form.setFieldsValue(data ? {
+ ...data.head,
+ ...data.bha,
+ ...data.noDrilling,
+ ...data.timeBalance,
+ ...data.saub,
+ ...data.sign,
+ reportDate: moment.utc(data.head.reportDate).local(),
+ } : {})
+ , [form])
useEffect(() => setFields(data), [data, setFields])
- const onFormChange = useCallback(
- async () =>
+ const onFormChange = useCallback(async () =>
await form
.validateFields()
.then(() => setIsInvalid(false))
- .catch(() => setIsInvalid(true)),
- [form]
- )
+ .catch(() => setIsInvalid(true))
+ , [form])
- const onFormFinish = useCallback(
- (formData) =>
- invokeWebApiWrapperAsync(
- async () => {
- console.log(formData)
- const payload = Object.fromEntries(names.map(([head, names]) => [head, Object.fromEntries(names.map((name) => [name, formdata[name]]))]))
- if (data) await DailyReportService.update(idWell, data.head.reportDate, payload)
- else await DailyReportService.add(idWell, payload)
- onDone?.(formData)
- form.resetFields()
- },
- setIsLoading,
- 'Не удалось сохранить суточный рапорт',
- 'Сохранение суточного рапорта'
- ),
- [data, onDone, idWell, form]
- )
+ const onFormFinish = useCallback((formData) => invokeWebApiWrapperAsync(
+ async () => {
+ const payload = Object.fromEntries(names.map(([head, names]) => [head, Object.fromEntries(names.map((name) => [name, formData[name]]))]))
+ if (data) await DailyReportService.update(idWell, data.head.reportDate, payload)
+ else await DailyReportService.add(idWell, payload)
+ onDone?.(formData)
+ form.resetFields()
+ },
+ setIsLoading,
+ 'Не удалось сохранить суточный рапорт',
+ 'Сохранение суточного рапорта'
+ ), [data, onDone, idWell, form])
- const onDateChange = useCallback(
- (date) =>
- invokeWebApiWrapperAsync(
- async () => {
- if (data) return
- const newData = await DailyReportService.getOrGenerate(idWell, date.format('YYYY-MM-DD') + 'Z')
- if (checkIsDateBusy(moment(newData.reportDate)))
- throw new Error('Рапорт на данную дату уже существует')
- setFields(newData)
- },
- setIsLoading,
- (e) => `Не удалось загрузить автозаполняемые данные для нового рапорта: ${e}`,
- 'Получение автозаполняемых данных суточного рапорта'
- ),
- [idWell, data, setFields, checkIsDateBusy]
- )
+ const onDateChange = useCallback((date) => invokeWebApiWrapperAsync(
+ async () => {
+ if (data) return
+ const newData = await DailyReportService.getOrGenerate(idWell, date.format('YYYY-MM-DD') + 'Z')
+ if (checkIsDateBusy(moment(newData.reportDate)))
+ throw new Error('Рапорт на данную дату уже существует')
+ setFields(newData)
+ },
+ setIsLoading,
+ (e) => `Не удалось загрузить автозаполняемые данные для нового рапорта: ${e}`,
+ 'Получение автозаполняемых данных суточного рапорта'
+ ), [idWell, data, setFields, checkIsDateBusy])
return (
- Суточная сводка бурения скважины № {data?.wellName} куст № {data?.clusterName}
- >
- ) : (
- <>Новая cуточная сводка бурения скважины>
- )
- }
+ title={data ? (
+ <>Суточная сводка бурения скважины № {data?.wellName} куст № {data?.clusterName}>
+ ) : (
+ <>Новая cуточная сводка бурения скважины>
+ )}
onOk={form.submit}
okButtonProps={{
disabled: isInvalid,
@@ -336,29 +366,10 @@ export const ReportEditor = memo(({ visible, data, onDone, onCancel, checkIsDate
disabledDate={checkIsDateBusy}
/>
-
-
+
+
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
+ {renderDescriptions(tab1Items)}
- -
+
-
- -
+
-
@@ -390,7 +401,7 @@ export const ReportEditor = memo(({ visible, data, onDone, onCancel, checkIsDate
pagination={false}
/>
-
+
-
+
-
+
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
+ {renderDescriptions(tab4Items)}
-
-
-
+
- -
+
-
@@ -619,14 +534,13 @@ export const ReportEditor = memo(({ visible, data, onDone, onCancel, checkIsDate
-
- -
+
+
-
-
- -
+
+
-
+
diff --git a/src/pages/Reports/DailyReport/index.jsx b/src/pages/Reports/DailyReport/index.jsx
index 1ff339e..d160ded 100644
--- a/src/pages/Reports/DailyReport/index.jsx
+++ b/src/pages/Reports/DailyReport/index.jsx
@@ -24,7 +24,7 @@ const DailyReport = memo(() => {
const updateTable = useCallback(() => invokeWebApiWrapperAsync(
async () => {
const data = arrayOrDefault(await DailyReportService.getList(idWell))
- setData(data)
+ setData(data.map((row) => ({ ...row, reportDate: row.head.reportDate })))
},
setIsLoading,
'Не удалось загрузить список суточных рапортов',