From 0337c7746b83ccf16b330eb436c3b52324698b1a Mon Sep 17 00:00:00 2001 From: JunaBD <99616690+JunaBD@users.noreply.github.com> Date: Wed, 27 Jul 2022 11:44:24 +0500 Subject: [PATCH] change daily report --- ReportEditor.jsx | 499 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 499 insertions(+) create mode 100644 ReportEditor.jsx diff --git a/ReportEditor.jsx b/ReportEditor.jsx new file mode 100644 index 0000000..827469d --- /dev/null +++ b/ReportEditor.jsx @@ -0,0 +1,499 @@ +import { DatePicker, Descriptions, Divider, Form, Input, InputNumber, Modal, Select, Space, Table } from 'antd' +import { memo, useCallback, useEffect, useState } from 'react' +import moment from 'moment' + +import { useIdWell } from '@asb/context' +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 = [ + makeGroupColumn('Отчётный период', [ + makeColumn('От (дата, время)', 'dateStart', { width: 200, render: (_, { disabled, onChange, checkIsDateBusy }) => ( + + + + )}), + ]), + makeGroupColumn('Забой за отчётный период, м', [ + makeColumn('От', 'depthStart', { width: 200, render: () => ( + + + + )}), + makeColumn('До', 'depthEnd', { width: 200, render: () => ( + + + + )}), + ]) +] + +const cellData = { + width: 200, + render: (name) => ( + + + + ) +} + +const table2Columns = [ + makeColumn('Работа модулей САУБ', 'label', { width: 400 }), + makeColumn('Часов:', 'hours', cellData), + makeColumn('Метров:', 'meters', cellData), +] + +const table2Data = [ + { key: '1', label: 'АПД (автоматическая подача долота), ч/м:', hours: 'workTimeSAUB', meters: 'penetrationSAUB' }, + { key: '2', label: 'Спин Мастер (осцилляция), ч/м:', hours: 'workTimeSpinMaster', meters: 'penetrationSpinMaster' }, + { key: '3', label: 'Торк Мастер (демпфирование), ч/м:', hours: 'workTimeTorkMaster', meters: 'penetrationTorkMaster' }, +] + +const table3Columns = [ + makeGroupColumn('Бурение в роторе (за отчётный период) с использованием САУБ-1', [ + makeColumn('Проходка', 'sinking', cellData), + makeColumn('Часы бурения', 'hours', cellData), + makeColumn('Среднее диф. Давление', 'pressure', cellData), + ]), +] + +const table3Data = [{ key: '', sinking: 'penetrationInRotor', hours: 'numberDrillingHours', pressure: 'avgDiffDropRotor' }] + +const table4Columns = [ + makeGroupColumn('Бурение в слайде (за отчётный период) с использованием САУБ-1', [ + makeColumn('Проходка', 'sinking', cellData), + makeColumn('Часы бурения', 'hours', cellData), + makeColumn('Среднее диф. Давление', 'pressure', cellData), + ]), +] + +const table4Data = [{ key: '', sinking: 'penetrationInSlide', hours: 'drillingTimeInRotor', pressure: 'avgDiffPressureSlide' }] + +const table6Columns = [ + makeGroupColumn('БЕЗМЕТРАЖНЫЕ РАБОТЫ', [ + makeColumn('Подготовка ствола скважины к наращиванию', 'l_label', { colSpan: 2, width: 200 }), + makeColumn('', 'l_value', { colSpan: 0, ...cellData }), + makeColumn('Наращивание', 'r_label', { colSpan: 2, width: 200 }), + makeColumn('', 'r_value', { colSpan: 0, ...cellData }), + ]), +] + +const table6Data = [{ + key: '1', + l_label: 'Норматив на одну операцию, (мин):', + r_label: 'Норматив на одну операцию, (мин):', + l_value: 'standardTimeBarrelPreparation', + r_value: 'standardTimeExtension' +}, { + key: '2', + l_label: 'Проработка при бур, факт (ч):', + r_label: 'Наращивание, факт (ч):', + l_value: 'actualTimeBarrelPreparation', + r_value: 'actualTimeExtension' +}] + +const table6Summary = () => ( + + + Краткие причины: доп проработки при переходе из слайда в ротор, в середине свечи. + + + Краткие причины: нехватка пальцев на обоих руках у первого помощника бурильщика. + + +) + +const table2Summary = () => ( + + МСЕ, колличество запусков, раз: + + + + + + +) + +export const ReportEditor = memo(({ visible, data, onDone, onCancel, checkIsDateBusy }) => { + const [form] = Form.useForm() + const [isInvalid, setIsInvalid] = useState(false) + const [isLoading, setIsLoading] = useState(false) + + const idWell = useIdWell() + + const setFields = useCallback((data) => form.setFieldsValue(data ? { + ...data, + rotorDrillingModes: Array.isArray(data.rotorDrillingModes) ? data.rotorDrillingModes ?? [] : [], + slideDrillingModes: Array.isArray(data.slideDrillingModes) ? data.slideDrillingModes ?? [] : [], + reportDate: moment.utc(data.reportDate).local(), + } : {}), [form]) + + useEffect(() => setFields(data), [data, setFields]) + + const onFormChange = useCallback(async () => await form.validateFields() + .then(() => setIsInvalid(false)) + .catch(() => setIsInvalid(true)) + , [form]) + + const onFormFinish = useCallback((formData) => invokeWebApiWrapperAsync( + async () => { + if (data) + await DailyReportService.update(idWell, data.reportDate, formData) + else + await DailyReportService.add(idWell, formData) + 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]) + + return ( + Суточная сводка бурения скважины № {data?.wellName} куст № {data?.clusterName} : + <>Новая cуточная сводка бурения скважины + } + onOk={form.submit} + okButtonProps={{ + disabled: isInvalid, + loading: isLoading, + }} + > + +
+ + + +
Имя скважины:
+ + +
Имя кластера:
+ + +
Заказчик:
+ + +
Подрядчик:
+ + +
Дата рапорта:
+ + +
Глубина забоя на дату начала интервала:
+ + +
Глубина забоя на дату окончания интервала:
+ + +
Глубина забоя по стволу на окончание отчетного периода:
+ + +
Глубина забоя по вертикали на дату окончания отчетного периода:
+ + +
Зенитный угол на дату окончания отчетного периода:
+ + +
Азимутальный угол на дату окончания отчетного периода:
+ + +
ФИО бурильщиков:
+ + +
ФИО бурильщиков:
+ + +
Время работы АПД:
+ + +
Время работы спин мастер:
+ + +
Время работы torqueMaster:
+ + +
Количество метров пробуренных с включенным АПД:
+ + +
Количество метров пробуренных с включенным Спин мастер:
+ + +
Количество метров пробуренных с включенным torqueMaster:
+ + +
Количество запусков МСЕ:
+ +
+ +
КНБК описание:
+
Бурение с наращиваниями в инт. 2195-2763м. Время начала:
+
Бурение с наращиваниями в инт. 2195-2763м. Время окончания:
+
Промывка. Время начала:
+
Промывка. Время окончания:
+
Подьем КНБК. Время начала:
+
Подьем КНБК. Время окончания:
+
Спуск КНБК. Время начала:
+
Бурение с наращиваниями в инт. 2763-2850м. Время начала:
+
Бурение с наращиваниями в инт. 2763-2850м. Время окончания:
+ +
+ +
Нормативное время на одну операцию по подготовке ствола скважины к наращиванию:
+ +
Нормативное время на одну операцию по наращиванию:
+ +
Фактическое время проработок при подготовке ствола скважины к наращиванию.:
+ +
Фактическое время наращиваний:
+ +
+ +
Бурение:
+ +
Промывка:
+ +
Наращивание:
+ +
Проработка:
+ +
Расширка:
+ +
Ремонт:
+ +
КНБК:
+ +
СПО:
+ +
ПЗР:
+ +
ПВО:
+ +
ПГР:
+ +
ГИС:
+ +
ОЗЦ:
+ +
Тех.работы:
+ +
Снятие замера:
+ +
Цементирование:
+ +
Простой:
+ +
НПВ:
+ +
+ +
Режимы бурения на роторе:
+ +
Режимы бурения на слайде:
+ +
Количество метров пробуренных в роторе за отчетный период:
+ +
Количество часов бурения в роторе за отчетный период:
+ +
Средний диф. перепад в роторе за отчетный период:
+ +
Количество метров пробуренных в слайде за отчетный период:
+ +
Время бурения в роторе за отчетный период:
+ +
Средний диф. перепад в слайде за отчетный период:
+ +
Плановая МСП за секцию:
+ +
Общее время бурения за секцию:
+ +
Общая проходка за секцию:
+ +
Количество наращиваний за отчетный период:
+ +
Отклонение относительно ГГД:
+ +
Указываются все причины, которые влияют на снижение МСП.:
+ +
+ +
ФИО Мастера буровой:
+ +
ФИО супервайзера:
+ +
+
+ + {/* + + + + + + + + + + +
+ + + + + +
+ + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + */} + + + + ) +}) + +export default ReportEditor