import React from "react";
import $ from "jquery/src/ajax";
import "./public.less";
import {
  Form,
  Button,
  Input,
  Select,
  Spin,
  Table,
  message,
  Modal,
  Popconfirm,
  Tabs,
  Tooltip,
} from "antd";
import {
  getProvinceA,
  getInvoiceStatus,
  getprovince,
  getStatus,
  getPeople,
  splitUrl,
  ShowModal,
  getProcessStatus,
} from "@/tools";
import { ChooseList } from "../../../../component/manageCenter/order/orderNew/chooseList";
import ShowModalDiv from "@/showModal.jsx";
import OrderDesc from "../orderDetail/orderDesc";
import KaiPiaoModal from "./kaiPiaoModal";
import { getProjectName } from "../../../tools";
import DepartmentList from "../../../common/departmentList";
import LogPopup from "../../../common/logPopup";
import Cascaders from "../../../common/cascaders";

const FormItem = Form.Item;
const { TabPane } = Tabs;

const invoiceApplyList = React.createClass({
  loadData(pageNo) {
    this.state.data = [];
    this.setState({
      listLoading: true,
    });
    $.ajax({
      method: "get",
      dataType: "json",
      crossDomain: false,
      url:
        globalConfig.context +
        "/api/admin/orderInvoice/financeOrderInvoiceList",
      data: {
        pageNo: pageNo || 1,
        pageSize: this.state.pagination.pageSize,
        name: this.state.nameSearch, //客户名称
        orderNo: this.state.orderNoSearch,
        deps: this.state.departmenttList,
        status: this.state.statusSearch,
        type: 0,
        approval: this.state.processStatus,
      },
      success: function (data) {
        ShowModal(this);
        let theArr = [];
        if (!data.data || !data.data.list) {
          if (data.error && data.error.length) {
            message.warning(data.error[0].message);
          }
        } else {
          for (let i = 0; i < data.data.list.length; i++) {
            let thisdata = data.data.list[i];
            theArr.push({
              key: i,
              id: thisdata.id,
              status: thisdata.status,
              unitName: thisdata.unitName,
              orderNo: thisdata.orderno,
              name: thisdata.name,
              examineName: thisdata.examineName,
              processStatus: thisdata.processStatus,
              projectStatus: thisdata.projectStatus,
              amount: thisdata.amount,
              sumAmount: thisdata.sumAmount,
              createTime: thisdata.createTime
                ? new Date(thisdata.createTime).toLocaleString()
                : "",
              settlementAmount: thisdata.settlementAmount,
              notAmount: thisdata.notAmount,
            });
          }
          this.state.pagination.current = data.data.pageNo;
          this.state.pagination.total = data.data.totalCount;
          if (data.data && data.data.list && !data.data.list.length) {
            this.state.pagination.current = 0;
            this.state.pagination.total = 0;
          }
          this.setState({
            totalPage: data.data.totalPage,
            dataSource: theArr,
            pagination: this.state.pagination,
          });
        }
      }.bind(this),
    }).always(
      function () {
        this.setState({
          listLoading: false,
        });
      }.bind(this)
    );
  },

  invoiceData() {
    this.setState({
      loading: true,
    });
    $.ajax({
      method: "get",
      dataType: "json",
      crossDomain: false,
      url:
        globalConfig.context + "/api/admin/orderInvoice/selectByIdOrderInvoice",
      data: {
        id: this.state.id,
      },
      success: function (data) {
        let thisdata = data.data;
        let obj = {
          examineName: thisdata.examineName,
          contractNo: thisdata.contractNo,
          orderNo: thisdata.orderNo,
          approval: thisdata.approval,
          type: thisdata.type,
          status: thisdata.status,
          remarks: thisdata.remarks,
          invoiceType: thisdata.invoiceType,
          unitName: thisdata.unitName,
          taxNumber: thisdata.taxNumber,
          amount: thisdata.amount,
          banks: thisdata.banks,
          content: thisdata.content,
          unitAddress: thisdata.unitAddress,
          invoiceRemarks: thisdata.invoiceRemarks,
          unitMobile: thisdata.unitMobile,
          post: thisdata.post,
          addressee: thisdata.addressee,
          addresseeMobile: thisdata.addresseeMobile,
          addresseeProvince: thisdata.addresseeProvince,
          addresseeCity: thisdata.addresseeCity,
          addresseeArea: thisdata.addresseeArea,
          alreadyAmount: thisdata.alreadyAmount,
          recipientAddress: thisdata.recipientAddress,
          orgCodeUrl: thisdata.voucherUrl
            ? splitUrl(
              thisdata.voucherUrl,
              ",",
              globalConfig.avatarHost + "/upload"
            )
            : [],
        };
        this.setState({
          modalData: obj,
        });
      }.bind(this),
    }).done(
      function () {
        this.setState({
          loading: false,
        });
      }.bind(this)
    );
  },

  getInitialState() {
    return {
      Loading: false,
      searchMore: true,
      assignVisible: false,
      releaseDate: [],
      totalPage: 0,
      boHuivisible: false,
      selectedRowKeys: [],
      // 子组件改变的表格title数组
      changeList: undefined,
      selectedRows: [],
      loading: false,
      reason: "",
      foo: 0,
      pagination: {
        defaultCurrent: 1,
        defaultPageSize: 10,
        showQuickJumper: true,
        pageSize: 10,
        onChange: function (page) {
          this.loadData(page);
        }.bind(this),
        showTotal: function (total) {
          return "共" + total + "条数据";
        },
      },
      columns: [
        {
          title: "编号",
          dataIndex: "id",
          key: "id",
          // fixed: "left"
        },
        {
          title: "客户",
          dataIndex: "unitName",
          key: "unitName",
          width: 100,
          render: (text) => {
            return (
              <Tooltip title={text}>
                <div
                  style={{
                    maxWidth: "100px",
                    overflow: "hidden",
                    textOverflow: "ellipsis",
                    whiteSpace: "nowrap",
                  }}
                >
                  {text}
                </div>
              </Tooltip>
            );
          },
        },
        {
          title: "跟单人/签单人",
          dataIndex: "name",
          key: "name",
        },
        {
          title: "开票状态",
          dataIndex: "status",
          key: "status",
          render: (text, record) => {
            // return getStatus(text);
            return getInvoiceStatus(text, record);
          },
        },
        {
          title: "流程状态",
          dataIndex: "processStatus",
          key: "processStatus",
          render: (text, record) => {
            return getProcessStatus(text, record.examineName, record.approval);
          },
        },
        {
          title: "项目状态",
          dataIndex: "projectStatus",
          key: "projectStatus",
          render: (text) => {
            return getProjectName(text);
          },
        },
        {
          title: "申请开票(万)",
          dataIndex: "amount",
          key: "amount",
        },
        {
          title: "已开票(万)",
          dataIndex: "sumAmount",
          key: "sumAmount",
        },
        {
          title: "已收款",
          dataIndex: "settlementAmount",
          key: "settlementAmount",
        },
        {
          title: "未收款",
          dataIndex: "notAmount",
          key: "notAmount",
        },
        {
          title: "申请时间",
          dataIndex: "createTime",
          key: "createTime",
        },
        {
          title: "操作",
          dataIndex: "caozuo",
          key: "caouzo",
          render: (text, record, index) => {
            return (
              <div>
                {
                  <Button
                    type="primary"
                    onClick={(e) => {
                      e.stopPropagation(), this.visit(index);
                    }}
                    style={{ background: "deepskyblue", border: "none" }}
                  >
                    申请内容
                  </Button>
                }
                {record.status !== 2 ? (
                  <Popconfirm
                    placement="top"
                    title="确定要通过吗?"
                    onConfirm={(e) => {
                      e.stopPropagation();
                      this.setState({ examine: 2 }, () => {
                        this.sende(record);
                      });
                    }}
                    okText="确定"
                    cancelText="取消"
                  >
                    <Button
                      type="primary"
                      style={{ marginLeft: "10px" }}
                      onClick={(e) => {
                        e.stopPropagation();
                      }}
                    >
                      通过
                    </Button>
                  </Popconfirm>
                ) : (
                  ""
                )}
                {record.status !== 2 ? (
                  <Popconfirm
                    placement="top"
                    title="确定要拒绝吗?"
                    onConfirm={(e) => {
                      e.stopPropagation();
                      this.setState({ examine: 3 }, () => {
                        this.reject(record);
                      });
                    }}
                    okText="确定"
                    cancelText="取消"
                  >
                    <Button
                      type="danger"
                      onClick={(e) => {
                        e.stopPropagation();
                      }}
                      style={{ marginLeft: "10px" }}
                    >
                      拒绝
                    </Button>
                  </Popconfirm>
                ) : (
                  ""
                )}
                {record.status === 2 ? (
                  <Button
                    style={{ marginLeft: "10px", color: "black" }}
                    disabled={true}
                  >
                    已通过
                  </Button>
                ) : (
                  ""
                )}
                {
                  <Button
                    type="primary"
                    style={{
                      marginLeft: "10px",
                      background: "orangered",
                      border: "none",
                    }}
                    onClick={(e) => {
                      e.stopPropagation(), this.inRecord(record, index);
                    }}
                  >
                    开票记录
                  </Button>
                }
              </div>
            );
          },
        },
      ],
      columnsDate: [
        {
          title: "编号",
          dataIndex: "id",
          key: "id",
        },
        {
          title: "订单编号",
          dataIndex: "orderno",
          key: "orderno",
        },
        {
          title: "开票金额(万元)",
          dataIndex: "amount",
          key: "amount",
        },
        {
          title: "申请时间",
          dataIndex: "createTime",
          key: "createTime",
        },
        {
          title: "开票状态",
          dataIndex: "status",
          key: "status",
          render: (text, record) => {
            return (
              <div>
                {getInvoiceStatus(text, record)} <LogPopup id={record.id} />
              </div>
            );
          },
        },
      ],
      dataSource: [],
      searchTime: [,],
    };
  },

  loadSend(record) {
    this.setState({
      loading: true,
    });
    if (this.state.examine === 3 && this.state.reason === "") {
      message.warning("拒绝理由不能为空！");
      return;
    }
    $.ajax({
      method: "post",
      dataType: "json",
      crossDomain: false,
      url: globalConfig.context + "/api/admin/orderInvoice/financeExamine",
      data: {
        id: this.state.examine === 2 ? record.id : this.state.id,
        examine: this.state.examine,
        reason: this.state.reason,
      },
      success: function () { }.bind(this),
    }).done(
      function () {
        this.setState({
          loading: false,
        });
        if (this.state.examine === 2) {
          message.success("通过成功！");
          this.loadData();
        } else {
          message.success("拒绝成功！");
          this.resetReason();
          this.rejectCancels();
          this.loadData();
        }
      }.bind(this)
    );
  },

  //重置拒绝理由
  resetReason() {
    this.setState({
      reason: "",
    });
  },

  sende(record) {
    this.loadSend(record);
  },

  commit() {
    this.loadSend();
    this.setState({
      avisible: false,
    });
  },

  visit(index) {
    this.setState(
      {
        id: this.state.dataSource[index].id,
        avisible: true,
      },
      () => {
        this.invoiceData();
      }
    );
  },
  visitCancels() {
    this.setState({
      avisible: false,
    });
  },

  reject(record) {
    this.setState({
      visibleR: true,
      id: record.id,
    });
  },
  rejectCancels() {
    this.setState({
      visibleR: false,
    });
  },
  inRecordData() {
    this.setState({
      loading: true,
    });
    $.ajax({
      method: "get",
      dataType: "json",
      crossDomain: false,
      url:
        globalConfig.context +
        "/api/admin/orderInvoice/salesmanOrderInvoiceList",
      data: {
        orderNo: this.state.orderNo2,
      },
      success: function (data) {
        let theArr = [];
        let sum = 0;
        if (!data.data) {
          if (data.error && data.error.length) {
            message.warning(data.error[0].message);
          }
        } else {
          for (let i = 0; i < data.data.list.length; i++) {
            let thisdata = data.data.list[i];
            sum += parseFloat(thisdata.amount);
            theArr.push({
              id: thisdata.id,
              orderno: thisdata.orderno, //订单编号
              amount: thisdata.amount, //签单金额
              createTime: thisdata.createTime, //流程状态
              status: thisdata.status, //结算状态
              rejectReason: thisdata.rejectReason,
              approval: thisdata.approval, //0非特批 1待审核 2审核通过
              examineName: thisdata.examineName,
            });
          }
        }
        this.setState({
          recordData: theArr,
          sum: sum.toFixed(6),
        });
      }.bind(this),
    }).done(
      function () {
        this.setState({
          loading: false,
        });
      }.bind(this)
    );
  },

  inRecord(record) {
    this.setState(
      {
        bvisible: true,
        orderNo2: record.orderNo,
      },
      () => {
        this.inRecordData();
      }
    );
  },

  inRecordCanl() {
    this.setState({
      bvisible: false,
    });
  },

  search() {
    this.loadData();
  },

  componentWillMount() {
    this.loadData();
  },
  reset() {
    this.state.nameSearch = "";
    this.state.releaseDate = [];
    this.state.orderNoSearch = "";
    this.state.processStatus = [];
    this.state.departmenttList = undefined;
    this.state.statusSearch = [];
    this.Cascaders.empty();
    this.loadData();
  },
  changeList(arr) {
    const newArr = [];
    this.state.columns.forEach((item) => {
      arr.forEach((val) => {
        if (val === item.title) {
          newArr.push(item);
        }
      });
    });
    this.setState({
      changeList: newArr,
    });
  },
  tableRowClick(record) {
    this.state.RowData = record;
    this.setState({
      showDesc: true,
    });
  },
  closeDesc(e, s) {
    this.state.showDesc = e;
    if (s) {
      this.loadData(this.state.page);
    }
  },
  render() {
    const formItemLayout = {
      labelCol: { span: 8 },
      wrapperCol: { span: 14 },
    };
    return (
      <div className="user-content">
        <ShowModalDiv ShowModal={this.state.showModal} />
        <div className="content-title" style={{ marginBottom: 10 }}>
          <span style={{ fontWeight: 900, fontSize: 16 }}>省内开票审核</span>
        </div>
        <Tabs defaultActiveKey="1" onChange={this.callback} className="test">
          <TabPane tab="搜索" key="1">
            <div className="user-search" style={{ marginLeft: 10 }}>
              <Input
                placeholder="订单编号"
                value={this.state.orderNoSearch}
                onChange={(e) => {
                  this.setState({ orderNoSearch: e.target.value });
                }}
              />
              <Input
                placeholder="营销员名称"
                value={this.state.nameSearch}
                style={{ marginLeft: 10 }}
                onChange={(e) => {
                  this.setState({ nameSearch: e.target.value });
                }}
              />
              <Cascaders
                ref={node => this.Cascaders = node}
                placeholder="订单部门"
                id="id"
                name="name"
                children="list"
                height={28}
                onSel={(e) => {
                  this.setState({
                    departmenttList: JSON.stringify(e),
                  });
                }}
              />
              {/* <DepartmentList
                value={this.state.departmenttList}
                onChange={(e) => {
                  this.setState({ departmenttList: e });
                }}
              /> */}
              <Button
                type="primary"
                onClick={this.search}
                style={{ marginLeft: 10 }}
              >
                搜索
              </Button>
              <Button onClick={this.reset}>重置</Button>
            </div>
          </TabPane>
          <TabPane tab="更改表格数据" key="2">
            <div style={{ marginTop: 10, marginLeft: 10 }}>
              <ChooseList
                columns={this.state.columns}
                changeFn={this.changeList}
                changeList={this.state.changeList}
                top={55}
              />
            </div>
          </TabPane>
        </Tabs>
        <div className="patent-table">
          <Spin spinning={this.state.listLoading}>
            <Table
              columns={
                this.state.changeList == undefined
                  ? this.state.columns
                  : this.state.changeList
              }
              scroll={{ x: 1500, y: 0 }}
              onRowClick={this.tableRowClick}
              dataSource={this.state.dataSource}
              pagination={this.state.pagination}
              bordered
              size="small"
            />
          </Spin>
        </div>
        <Modal
          visible={this.state.visibleR}
          className="admin-desc-content"
          footer=""
          title="拒绝理由"
          width="400px"
          onCancel={this.rejectCancels}
        >
          <Input.TextArea
            placeholder="请输入拒绝理由"
            rows={4}
            value={this.state.reason}
            onChange={(e) => {
              this.setState({ reason: e.target.value });
            }}
          ></Input.TextArea>
          <div className="clearfix" style={{ marginTop: "20px" }}>
            <Button
              type="primary"
              loading={this.state.loading}
              onClick={(e) => {
                e.stopPropagation(),
                  this.commit();
              }}
              style={{ float: "right" }}
            >
              提交
            </Button>
          </div>
        </Modal>
        <KaiPiaoModal
          visible={this.state.avisible}
          data={this.state.modalData}
          onCancel={this.visitCancels}
          loading={this.state.loading}
        />
        <Modal
          visible={this.state.bvisible}
          footer=""
          title="开票历史记录"
          className="admin-desc-content"
          width="1200px"
          onCancel={this.inRecordCanl}
        >
          <Spin spinning={this.state.loading}>
            <div className="patent-table">
              <Table
                columns={this.state.columnsDate}
                dataSource={this.state.recordData}
                pagination={false}
                bordered
                size="small"
              />
              <div className="clearfix" style={{ marginTop: "20px" }}>
                <FormItem
                  className="half-item"
                  {...formItemLayout}
                  label={<span style={{ fontSize: "14px" }}>开票总计</span>}
                >
                  <span>{this.state.sum + "(万元)"}</span>
                </FormItem>
              </div>
            </div>
          </Spin>
        </Modal>
        <OrderDesc
          data={this.state.RowData}
          showDesc={this.state.showDesc}
          closeDesc={this.closeDesc.bind(this)}
        />
      </div>
    );
  },
});

export default invoiceApplyList;
