// 转移入库接收
import React from 'react';
import { Card, Row, Col, Form, DatePicker, Select, Button, Icon, Table, Switch, message, Popconfirm } from 'antd';
import ColumnAuthoritysModel from 'pages/columnAuthority/ColumnAuthoritysModel';
import { $http } from 'containers/config/https';
import { Util } from 'tools';
import CommonPagination from 'components/pagination/index';
import Moment from 'moment';
import store from 'store';
import './style/index.less';
var serialNumber = 0; //入库单序列号

const { Option } = Select;
const FormItem = Form.Item;
const formItemLayout = {    // label 和input宽度
    labelCol: { span: 7 },
    wrapperCol: { span: 17 },
};

const TransferWarehouseReceiving = Form.create()(
    class extends React.Component {
        constructor() {
            super();
            this.state = {
                userInfo: JSON.parse(window.sessionStorage.userData),
                data: [],
                queryCondition: {},
                SelectData: {},
                inOpLocDr: '',
                vendor: '',
                detailsId: '',//入库单ID
                detailsListData: [], //入库单明细数据
                WaListData: [], //入库单数据
                pageSize: 10,
                page: 1,
                pageSize2: 10,
                page2: 1,
                total: 0,
                detailTotal: 0,
                warehouseListId: '',
                noData: false,
                stateID: '',
                detailWidthTotal: '',
                columns: [],
                modalColumns: [],
                modificationList: false,  //默认隐藏修改表头弹窗
                showDetailPopup: false,  //默认隐藏修改表头弹窗
                listLength: '',  //列表长度
                parameterCode: '',
                ChineseEnglishSize: [], //中英文字体
            };
            // 入库单的数据表头
            this.columns = [
                {
                    key: 1,
                    title: '库存转移单号',
                    dataIndex: 'transNO',
                    align: "center",
                    width: '11%'
                },
                {
                    key: 2,
                    title: '请求单号',
                    dataIndex: 'stkReqNO',
                    align: "center",
                    width: '10%'
                },
                {
                    key: 3,
                    title: '入库科室',
                    dataIndex: 'toLocDesc',
                    align: "center",
                    width: '10%'
                },
                {
                    key: 4,
                    title: '供给科室',
                    dataIndex: 'frLocDesc',
                    align: "center",
                    width: '10%'
                },
                {
                    key: 5,
                    title: '单号状态',
                    dataIndex: 'stateDesc',
                    align: "center",
                    width: '5%'
                },
                {
                    key: 6,
                    title: '入库日期',
                    dataIndex: 'createDate',
                    align: "center",
                    width: '7%'
                },
                {
                    key: 7,
                    title: '制单人',
                    dataIndex: 'createUserName',
                    align: "center",
                    width: '6%'
                },
                {
                    key: 8,
                    title: '入库类型',
                    dataIndex: 'stkCatDesc',
                    align: "center",
                    width: '6%'
                },
                {
                    key: 9,
                    title: '审核人',
                    dataIndex: 'auditUserName',
                    align: "center",
                    width: '6%'
                },
                {
                    key: 10,
                    title: '审核日期',
                    dataIndex: 'auditDate',
                    align: "center",
                    width: '7%'
                },
                {
                    key: 11,
                    title: '进价金额',
                    dataIndex: 'rpAmt',
                    align: "center",
                    width: '5%'
                },
                {
                    key: 12,
                    title: '售价金额',
                    dataIndex: 'spAmt',
                    align: "center",
                    width: '5%'
                },
                {
                    key: 13,
                    title: '进销差价',
                    dataIndex: 'difRS',
                    align: "center",
                    width: '5%'
                },
                {
                    key: 14,
                    title: '备注',
                    dataIndex: 'remark',
                    align: "center",
                    width: '7%'
                },
            ]
            // 入库单详细表头
            this.modalColumns = [
                {
                    key: 1,
                    title: '药品名称',
                    dataIndex: 'stockDesc',
                    align: "center",
                    width: '11%'
                },
                {
                    key: 2,
                    title: '批号/效期',
                    dataIndex: 'batExp',
                    align: "center",
                    width: '12%'
                },
                {
                    key: 3,
                    title: '单位',
                    dataIndex: 'unitDesc',
                    align: "center",
                    width: '11%'
                },
                {
                    key: 4,
                    title: '数量',
                    dataIndex: 'qty',
                    align: "center",
                    width: '11%'
                },
                {
                    key: 5,
                    title: '进价',
                    dataIndex: 'rp',
                    align: "center",
                    width: '11%'
                },
                {
                    key: 6,
                    title: '售价',
                    dataIndex: 'sp',
                    align: "center",
                    width: '11%'
                },
                {
                    key: 7,
                    title: '进价金额',
                    dataIndex: 'rpAmt',
                    align: "center",
                    width: '11%'
                },
                {
                    key: 8,
                    title: '售价金额',
                    dataIndex: 'spAmt',
                    align: "center",
                    width: '11%'
                },
                {
                    key: 9,
                    title: '备注',
                    dataIndex: 'remark',
                    align: "center",
                    width: '11%'
                }
            ]
        }

        componentDidMount() {
            // 初始化数据
            this.getTacitlyApproveData();
            this.getDetailTableColumns();
            this.getDetailListTableColumns();
            let leftList = document.querySelectorAll('.tableListHeight  .ant-table-body');
            if (leftList.length > 0) {
                leftList[0].style.height = (store.getState().tableHeight.y) / 2 + 'px';
            }
            let listData = document.querySelectorAll('.tableDetailHeight  .ant-table-body');
            if (listData.length > 0) {
                listData[0].style.height = (store.getState().tableHeight.y) / 2 + 'px';
            }
        }

        componentWillUnmount() {
            // 组件销毁前将静止让setState修改state的状态，防止内存泄漏
            this.setState = (state, callback) => { return; }
        }

        // 获取明系列表头数据
        getDetailTableColumns = () => {
            let { userInfo } = this.state;
            let data = {
                params: [{
                    reactCode: ['TransferIntoTheWarehouse'],
                    compontName: 'WarehouseReceivingList',
                    type: 'C',
                }]
            }
            $http.post('urlS', this, {
                code: '01040073',
                data: data,
                success: function (res) {
                    if (+res.errorCode === 0) {
                        let arr = res.result.C && res.result.C.length > 0 ? JSON.parse(JSON.stringify(res.result.C)).map((item, index) => {
                            return {
                                ...item,
                                key: index + 1,
                                title: <div onDoubleClick={() => {
                                    this.setState({ parameterCode: 'WarehouseReceivingList' }, () => {
                                        this.columnRef.onOpenModel();
                                    })
                                }}>{userInfo.language == 'EN' ? item.enDescripts : item.title}</div>
                            }
                        }) : '';
                        let filterArr = arr.filter(function (item) { return item.display === 'Y' });
                        this.setState({ columns: filterArr, detailWidthTotal: res.totalWidth, ChineseEnglishSize: userInfo.language == 'EN' ? res.result.language.EN : res.result.language.CN })
                    }
                }
            })
        };

        // 获取明系列表头数据
        getDetailListTableColumns = () => {
            let { userInfo } = this.state;
            let data = {
                params: [{
                    compontName: 'WarehouseReceivingDetailList',
                    type: 'C',
                }]
            }
            $http.post('urlS', this, {
                code: '01040073',
                data: data,
                success: function (res) {
                    if (+res.errorCode === 0) {
                        let arr = res.result.C && res.result.C.length > 0 ? JSON.parse(JSON.stringify(res.result.C)).map((item, index) => {
                            return {
                                ...item,
                                key: index + 1,
                                title: <div onDoubleClick={() => {
                                    this.setState({ parameterCode: 'WarehouseReceivingDetailList' }, () => {
                                        this.columnRef.onOpenModel();
                                    })
                                }}>{userInfo.language == 'EN' ? item.enDescripts : item.title}</div>
                            }
                        }) : '';
                        let filterArr = arr.filter(function (item) { return item.display === 'Y' });
                        this.setState({ modalColumns: filterArr, listLength: res.totalWidth })
                    }
                }
            })
        };

        //清空表格内容
        handleReset = () => {
            this.setState({ WaListData: [], detailsListData: [], total: 0, detailsId: '', warehouseListId: '', stateID: '' });
            this.props.form.resetFields();
        };

        // 获取界面默认值
        getTacitlyApproveData() {
            let data = {
                params: []
            };
            // 获取下拉数据
            $http.post('urlS', this, {
                code: "02020109",
                data: data,
                success: function (res) {
                    if (+res.errorCode === 0) {
                        this.setState({
                            SelectData: res
                        }, () => { console.log(this.state.SelectData, "zxz1122") })
                    }
                }
            })
        }

        searchInformation = () => {
            this.setState({ page: 1 }, () => {
                this.getWarehouseList()
            })
        };

        // 获取入库单列表数据
        getWarehouseList = () => {
            let { ChineseEnglishSize } = this.state;
            this.setState({ detailsId: '', loading: true });
            let frLoc = this.props.form.getFieldValue('frLoc');
            let toLoc = this.props.form.getFieldValue('toLoc');
            let StartDate = this.props.form.getFieldValue('StartDate');
            let EndData = this.props.form.getFieldValue('EndData');
            let approve = this.props.form.getFieldValue('approve');
            ///!frLoc ||
            if (!StartDate || !EndData) {
                message.info("请完善必填信息再点击查询。");
                return;
            }
            let data = {
                params: [{
                    begin: Moment(StartDate).format('YYYY-MM-DD'),
                    end: Moment(EndData).format('YYYY-MM-DD'),
                    frLocID: frLoc,
                    toLocID: toLoc,
                    stateID: approve ? 40 : 30,
                    /**
                     * @shizi: 新增入库过滤条件menuFlag
                     * Create 2021-05-12
                     */
                    menuFlag: "TransferIn"
                }],
                pagination: [
                    {
                        pageSize: this.state.pageSize,
                        currentPage: this.state.page,
                        sort: "ID",
                        dir: "asc",
                    }
                ],
            };
            $http.post('urlS', this, {
                code: "02020098",
                data: data,
                success: function (res) {
                    if (res.rows.length > 0) {
                        for (let i = 0; i < res.rows.length; i++) {
                            res.rows[i].key = i;
                        }
                        serialNumber = 0;
                        this.setState({ WaListData: res.rows, total: res.total, warehouseListId: res.rows[0].transID, page2: 1, stateID: res.rows[0].stateID, loading: false }, () => {
                            this.getWarehouseEntryDetails(res.rows[0].transID);
                        });
                    } else {
                        this.setState({ detailsListData: [], WaListData: [], stateID: '' });
                        if (!this.state.noData) {
                            message.error(ChineseEnglishSize.TransferIntoTheWarehousenoData ? ChineseEnglishSize.TransferIntoTheWarehousenoData.descripts : '没数据');
                        } else {
                            this.setState({ noData: false })
                        }
                    }
                },
                error: function (err) {
                    message.error(err.errorMessage)
                }
            });
        };

        // 获取入库单明细
        getWarehouseEntryDetails(id) {
            this.setState({ detailsLoading: true })
            let data = {
                params: [{
                    transID: id ? id : this.state.warehouseListId,
                }],
                pagination: [
                    {
                        pageSize: this.state.pageSize2,
                        currentPage: this.state.page2,
                        sort: "ID",
                        dir: "asc",
                    }
                ]
            };
            $http.post('urlS', this, {
                code: "02020151",
                data: data,
                success: function (res) {
                    if (+res.errorCode === 0) {
                        serialNumber = this.state.detailsId ? this.state.detailsId : 0;
                        for (let i = 0; i < res.rows.length; i++) {
                            res.rows[i].key = i;
                        }
                        this.setState({ detailsListData: res.rows, detailTotal: res.total, detailsLoading: false });
                    }
                }
            })
        }

        // 提交审核确定
        approveDetermine = () => {
            let { ChineseEnglishSize } = this.state;
            let data = {
                params: [{
                    transID: this.state.detailsId ? this.state.detailsId : this.state.warehouseListId
                }]
            };

            //是否有审核的内容
            if (this.state.detailsId || this.state.warehouseListId) {
                $http.post('urlS', this, {
                    code: "02020107",
                    data: data,
                    success: function (res) {
                        if (+res.errorCode == '0') {
                            this.setState({ noData: true });
                            this.getWarehouseList();
                            message.success(res.errorMessage);
                        }
                    },
                    error: function (err) {
                        message.error(err.errorMessage);
                    }
                });
            } else {
                message.error(ChineseEnglishSize.TransferIntoTheWarehouseselectAuditObject ? ChineseEnglishSize.TransferIntoTheWarehouseselectAuditObject.descripts : '请选择审核对象')
            }
        };

        //点击行，渲染当前行样式
        setRowClassName = (record) => {
            serialNumber = serialNumber + 1;
            if (record) {
                if (serialNumber == 1) return 'clickRowStyle';
                else if (this.state.detailsId == record.transID) return 'clickRowStyle';
                else return '';
                // return this.state.detailsId == record.inOperID ? 'clickRowStyle ': '';
            } else {
                return '';
            }
        };

        // 页码改变的回调，参数是改变后的页码及每页条数 入库单
        onChange = (page, pageSize) => {
            this.setState({ page: page, pageSize: this.state.pageSize }, () => {
                // 重新调用查询方法
                this.getWarehouseList();
            });
        };

        onShowSizeChange = (current, size) => {
            this.setState({ page: current, pageSize: size }, () => {
                // 重新调用查询方法
                this.onChange(current, size);
            })
        };

        // 页码改变的回调，参数是改变后的页码及每页条数 入库单详情
        onChange2 = (page, pageSize) => {
            this.setState({ page2: page, pageSize2: this.state.pageSize2 }, () => {
                // 重新调用查询方法
                this.getWarehouseEntryDetails(this.state.detailsId);
            });
        };

        onShowSizeChange2 = (current, size) => {
            this.setState({ page2: current, pageSize2: size }, () => {
                // 重新调用查询方法
                this.onChange2(current, size);
            })
        };

        // 显示分页总条数
        showTotal(total) {
            return `共 ${total} 条`;
        }

        //组件权限编辑器
        onColumnRef = (ref) => {
            this.columnRef = ref;
        };

        /**
        * @ByShizi: 退回
        * Create 2023-02-16
        * */
        handleReturn = Util.debounce(async () => {
            try {
                let data = {
                    params: [{
                        transID: this.state.detailsId ? this.state.detailsId : this.state.warehouseListId
                    }]
                };
                let res = await React.$asyncPost(this, '02020395', data);
                this.setState({ noData: true });
                this.getWarehouseList();
                message.success(res?.errorMessage || '退回成功');
            } catch (error) {
                this.setState({ selectData: {} });
            }

        })

        render() {
            const { getFieldDecorator } = this.props.form;
            const { modalColumns, columns, listLength, detailWidthTotal, ChineseEnglishSize } = this.state;
            let userInfo = this.state.userInfo ? this.state.userInfo : {};
            //入库科室列表
            let inOpLocDrSelect = [];
            this.state.SelectData.loc && this.state.SelectData.loc.map((item, i) => {
                inOpLocDrSelect.push(<Option value={item.id} key={i}>{item.descripts}</Option>)
            });

            return (
                <div className="OutInventoryCkeck">
                    <Row>
                        <Card
                            size="small"
                            title={<div className="card-title-left-icon"><div></div>{ChineseEnglishSize.TransferIntoTheWarehouseSearchTitle ? ChineseEnglishSize.TransferIntoTheWarehouseSearchTitle.descripts : '查询条件'}</div>}
                        >
                            <Col span={18}>
                                <Form>
                                    <Row >
                                        <Col span={8}>
                                            <FormItem {...formItemLayout} label={ChineseEnglishSize.TransferIntoTheWarehousetoLoc ? ChineseEnglishSize.TransferIntoTheWarehousetoLoc.descripts : '入库科室'}>
                                                {getFieldDecorator('toLoc', {
                                                    initialValue: this.state.userInfo.locID ? this.state.userInfo.locID : undefined,
                                                    rules: [{ required: ChineseEnglishSize.TransferIntoTheWarehousetoLoc ? ChineseEnglishSize.TransferIntoTheWarehousetoLoc.required == 'Y' ? true : false : false, message: ChineseEnglishSize.TransferIntoTheWarehousetoLoc ? ChineseEnglishSize.TransferIntoTheWarehousetoLoc.message : '入库科室不能为空' }]
                                                })(
                                                    <Select allowClear>
                                                        {inOpLocDrSelect}
                                                    </Select>
                                                )}
                                            </FormItem>
                                        </Col>
                                        <Col span={8}>
                                            <FormItem {...formItemLayout} label={ChineseEnglishSize.TransferIntoTheWarehousefrLoc ? ChineseEnglishSize.TransferIntoTheWarehousefrLoc.descripts : '供给科室'}>
                                                {getFieldDecorator('frLoc', {
                                                    initialValue: undefined,
                                                    rules: [{ required: false, message: '供给科室不能为空' }]
                                                })(
                                                    <Select allowClear>
                                                        {this.state.SelectData.allLoc && this.state.SelectData.allLoc.map((item, i) => {
                                                            return <Option value={item.id} key={i}>{item.descripts}</Option>
                                                        })}
                                                    </Select>
                                                )}
                                            </FormItem>
                                        </Col>
                                    </Row>
                                    <Row>
                                        <Col span={8}>
                                            <FormItem {...formItemLayout} label={ChineseEnglishSize.TransferIntoTheWarehouseStartDate ? ChineseEnglishSize.TransferIntoTheWarehouseStartDate.descripts : '起初日期'}>
                                                {getFieldDecorator('StartDate', {
                                                    initialValue: this.state.SelectData.params ? Moment(this.state.SelectData.params.startDate, 'YYYY-MM-DD') : Moment(Moment().format('L'), 'YYYY-MM-DD'),
                                                    rules: [{ required: true, message: ChineseEnglishSize.TransferIntoTheWarehouseStartDate ? ChineseEnglishSize.TransferIntoTheWarehouseStartDate.message : '起初日期不能为空' }]
                                                })(
                                                    <DatePicker style={{ width: '100%' }} />
                                                )}
                                            </FormItem>
                                        </Col>
                                        <Col span={8}>
                                            <FormItem {...formItemLayout} label={ChineseEnglishSize.TransferIntoTheWarehousedeadline ? ChineseEnglishSize.TransferIntoTheWarehousedeadline.descripts : '截至日期'}>
                                                {getFieldDecorator('EndData', {
                                                    initialValue: this.state.SelectData.params ? Moment(this.state.SelectData.params.endDate, 'YYYY-MM-DD') : Moment(Moment().format('L'), 'YYYY-MM-DD'),
                                                    rules: [{ required: true, message: ChineseEnglishSize.TransferIntoTheWarehousedeadline ? ChineseEnglishSize.TransferIntoTheWarehousedeadline.message : '截至日期不能为空' }]
                                                })(
                                                    <DatePicker style={{ width: '100%' }} />
                                                )}
                                            </FormItem>
                                        </Col>
                                        <Col span={7}>
                                            <FormItem {...formItemLayout} label={ChineseEnglishSize.TransferIntoTheWarehouseapprove ? ChineseEnglishSize.TransferIntoTheWarehouseapprove.descripts : '已接收'}>
                                                {getFieldDecorator('approve', {
                                                    valuePropName: 'checked',
                                                    initialValue: false,
                                                    rules: [{ required: false }]
                                                })(
                                                    userInfo.language == 'EN' ? <Switch checkedChildren="Yes" unCheckedChildren="No" /> : <Switch checkedChildren="是" unCheckedChildren="否" />
                                                )}
                                            </FormItem>
                                        </Col>
                                    </Row>
                                </Form>
                            </Col>
                            <Col span={6}>
                                <Row style={{ marginBottom: '18px' }} className="button">
                                    <Button style={{ marginRight: '30px' }} onClick={this.searchInformation}>{ChineseEnglishSize.TransferIntoTheWarehousesearch ? ChineseEnglishSize.TransferIntoTheWarehousesearch.descripts : '查询'}</Button>
                                    <Button type="primary" onClick={this.handleReset}>{ChineseEnglishSize.TransferIntoTheWarehouseclean ? ChineseEnglishSize.TransferIntoTheWarehouseclean.descripts : '清屏'}</Button>
                                </Row>
                                <Row style={{ marginBottom: '18px' }}>
                                    <Button type="primary" disabled={this.state.stateID == 30 ? false : true} style={{ marginRight: '30px' }} onClick={this.approveDetermine}>{ChineseEnglishSize.TransferIntoTheWarehousereceive ? ChineseEnglishSize.TransferIntoTheWarehousereceive.descripts : '接收'}</Button>
                                    <Popconfirm
                                        title="确定退回单据吗?"
                                        onConfirm={this.handleReturn}
                                    >
                                        <Button type="danger">退回</Button>
                                    </Popconfirm>
                                </Row>
                            </Col>
                        </Card>
                    </Row>
                    <Row>
                        <Col>
                            <Card
                                size="small"
                                title={<div className="card-title-left-icon"><div></div>{ChineseEnglishSize.TransferIntoTheWarehousereceiptsForm ? ChineseEnglishSize.TransferIntoTheWarehousereceiptsForm.descripts : '入库单'}</div>}
                                extra={<span style={{ color: '#666' }} className='span' onClick={() => {
                                    this.setState({ parameterCode: 'WarehouseReceivingList' }, () => {
                                        this.columnRef.onOpenModel();
                                    })
                                }}><Icon type="setting" title={ChineseEnglishSize.TransferIntoTheWarehousecolumnSettings ? ChineseEnglishSize.TransferIntoTheWarehousecolumnSettings.descripts : '列权限设置'} /></span>}
                            >
                                <div>
                                    <Table
                                        columns={columns.length > 0 ? columns : this.columns}
                                        dataSource={this.state.WaListData}
                                        pagination={false}
                                        bordered
                                        scroll={{ x: detailWidthTotal ? detailWidthTotal : 1600, y: (store.getState().tableHeight.y) / 2 - 85 }}
                                        rowKey={record => record.key}
                                        rowClassName={this.setRowClassName}
                                        className='tableListHeight'
                                        onRow={(record) => {
                                            return {
                                                onClick: () => {
                                                    serialNumber = 9999;
                                                    this.setState({ detailsId: record.transID, page2: 1, stateID: record.stateID }, () => {
                                                        this.getWarehouseEntryDetails(record.transID)
                                                    });
                                                },
                                            };
                                        }}
                                    />
                                    <CommonPagination size='small' current={this.state.page} total={this.state.total} search='search'
                                        onShowSizeChange={this.onShowSizeChange.bind(this)} complete={true} dataSource={this.state.WaListData}
                                        loading={this.state.loading} onChange={this.onChange.bind(this)} />
                                </div>
                            </Card>
                        </Col>
                    </Row>
                    <Row>
                        <Col>
                            <Card
                                size="small"
                                title={<div className="card-title-left-icon"><div></div>{ChineseEnglishSize.TransferIntoTheWarehousereceiptsDetail ? ChineseEnglishSize.TransferIntoTheWarehousereceiptsDetail.descripts : '入库单明细'}</div>}
                                extra={<span style={{ color: '#666' }} className='span' onClick={() => {
                                    this.setState({ parameterCode: 'WarehouseReceivingDetailList' }, () => {
                                        this.columnRef.onOpenModel();
                                    })
                                }}><Icon type="setting" title={ChineseEnglishSize.TransferIntoTheWarehousecolumnSettings ? ChineseEnglishSize.TransferIntoTheWarehousecolumnSettings.descripts : '列权限设置'} /></span>}
                            >
                                <div>
                                    <Table
                                        columns={modalColumns.length > 0 ? modalColumns : this.modalColumns}
                                        dataSource={this.state.detailsListData}
                                        pagination={false}
                                        bordered
                                        scroll={{ x: listLength ? listLength : 1350, y: (store.getState().tableHeight.y) / 2 - 85 }}
                                        rowKey={record => record.key}
                                        className="tableDetailHeight"
                                    />
                                    <CommonPagination size='small' current={this.state.page2} total={this.state.detailTotal} search='search'
                                        onShowSizeChange={this.onShowSizeChange2.bind(this)} complete={true} dataSource={this.state.detailsListData}
                                        loading={this.state.detailsLoading} onChange={this.onChange2.bind(this)} />
                                </div>
                            </Card>
                        </Col>
                    </Row>
                    <ColumnAuthoritysModel
                        clientWidth='800px'
                        compontName={this.state.parameterCode}
                        configType="C"
                        onRef={this.onColumnRef}
                        reloadData={() => {
                            if (this.state.parameterCode == 'WarehouseReceivingList') {
                                this.getDetailTableColumns()
                            } else if (this.state.parameterCode == 'WarehouseReceivingDetailList') {
                                this.getDetailListTableColumns()
                            }
                        }}
                    />
                </div>
            )
        }
    }
);

export default TransferWarehouseReceiving;