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