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

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

const outInvoiceQuery = React.createClass({
  loadData(pageNo) {
    this.state.data = [];
    this.setState({
      loading: 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,
        orderDep: this.state.departmenttList,
        status: this.state.statusSearch,
        type: 1,
        approval: this.state.processStatus,
        all:1,
      },
      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,
              projectStatus: thisdata.projectStatus,
              processStatus: thisdata.processStatus,
              amount: thisdata.amount,
              sumAmount: thisdata.sumAmount,
              createTime: thisdata.createTime
                ? new Date(thisdata.createTime).toLocaleString()
                : "",
              settlementAmount: thisdata.settlementAmount,
              notAmount: thisdata.notAmount,
              approval: thisdata.approval
            });
          }
        }
        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({
          loading: 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;
        this.setState({
          orderNo: thisdata.orderNo,
          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,
          contractNo: thisdata.contractNo,
          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"
            )
            : []
        });
      }.bind(this)
    }).done(
      function () {
        this.setState({
          loading: false
        });
      }.bind(this)
    );
  },

  getInitialState() {
    return {
      searchMore: true,
      assignVisible: false,
      releaseDate: [],
      totalPage: 0,
      boHuivisible: false,
      selectedRowKeys: [],
      selectedRows: [],
      contractNo: "",
      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",
        },
        {
          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 => {
            return getProcessStatus(text);
          }
        },
        {
          title: "项目状态",
          dataIndex: "projectStatus",
          key: "projectStatus",
          render: text => {
            return getProjectName(text);
          }
        },
        // {
        //   title: "特批状态",
        //   dataIndex: "approval",
        //   key: "approval",
        //   render: text => {
        //     return getApproval(text);
        //   }
        // },
        {
          title: "审核状态",
          dataIndex: "status",
          key: "statusA",
          render: text => {
            return text === 1 ? "待审核" : "审核通过";
          }
        },

        {
          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>
                }
                {
                  <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 => {
          //   return getInvoiceStatus(text, {
          //     approval: 0
          //   });
            
          // }
          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/approvalExamine",
      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审核通过
            });
          }
        }
        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
    });
  },

  changeList(arr) {
    const newArr = [];
    this.state.columns.forEach(item => {
      arr.forEach(val => {
        if (val === item.title) {
          newArr.push(item);
        }
      });
    });
    this.setState({
      changeList: newArr
    });
  },

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

  componentWillMount() {
    this.loadData();
  },
  reset() {
    this.state.nameSearch = "";
    this.state.releaseDate = [];
    this.state.orderNoSearch = "";
    this.state.processStatus = [];
    this.state.departmenttList = [];
    this.state.statusSearch = [];
    this.loadData();
  },
  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">
              <Input
                placeholder="营销员名称"
                value={this.state.nameSearch}
                style={{ marginLeft: 10 }}
                onChange={e => {
                  this.setState({ nameSearch: e.target.value });
                }}
              />
              <Input
                placeholder="订单编号"
                value={this.state.orderNoSearch}
                onChange={e => {
                  this.setState({ orderNoSearch: e.target.value });
                }}
              />
              <DepartmentList
                  value={this.state.departmenttList}
                  onChange={e => {
                    this.setState({ departmenttList: e });
                  }}/>
              {/* <Select
                placeholder="特批状态"
                onChange={e => {
                  this.setState({ processStatus: e });
                }}
                style={{ width: 160, marginRight: 5 }}
                value={this.state.processStatus}
              >
                <Option value="1">特批未审核</Option>
                <Option value="2">特批已审核</Option>
              </Select>
              <Select
                placeholder="审核状态"
                onChange={e => {
                  this.setState({ statusSearch: e });
                }}
                style={{ width: 160, marginRight: 5 }}
                value={this.state.statusSearch}
              >
                <Option value="1">待审核</Option>
                <Option value="2">审核通过</Option>
              </Select> */}
              <Button
                type="primary"
                onClick={this.search}
                style={{ marginLeft: 10 }}
              >
                搜索
          </Button>
              <Button onClick={this.reset}>重置</Button>
            </div>
          </TabPane>
          <TabPane tab="更改表格显示数据" key="2">
            <div style={{ marginLeft: 10 }}>
              <ChooseList
                columns={this.state.columns}
                changeFn={this.changeList}
                changeList={this.state.changeList}
                top={55}
                margin={11}
              />
            </div>
          </TabPane>
        </Tabs>
        <div className="patent-table">
          <Spin spinning={this.state.loading}>
            <Table
              columns={
                this.state.changeList == undefined
                  ? this.state.columns
                  : this.state.changeList
              }
              scroll={{ x: 1500, y: 0 }}
              dataSource={this.state.dataSource}
              pagination={this.state.pagination}
              bordered
              size="small"
            />
          </Spin>
        </div>
        <Modal
          maskClosable={false}
          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"
              onClick={e => {
                e.stopPropagation(), this.commit();
              }}
              style={{ float: "right" }}
            >
              提交
            </Button>
          </div>
        </Modal>
        {this.state.avisible ? <Modal
          maskClosable={false}
          className="admin-desc-content"
          footer=""
          title="开具发票申请单"
          width="900px"
          visible={this.state.avisible}
          onOk={this.visitOks}
          onCancel={this.visitCancels}
        >
          <Form
            layout="horizontal"
            id="demand-form"
            style={{ paddingBottom: "40px" }}
          >
            <Spin spinning={this.state.loading}>
              <div className="clearfix">
                <div className="clearfix">
                  <FormItem
                    className="half-item"
                    {...formItemLayout}
                    label="合同编号"
                  >
                    <span>{this.state.contractNo}</span>
                  </FormItem>
                  <FormItem
                    className="half-item"
                    {...formItemLayout}
                    label="备注"
                  >
                    <span>{this.state.remarks}</span>
                  </FormItem>
                </div>
                <div className="clearfix">
                  <FormItem
                    className="half-item"
                    {...formItemLayout}
                    label={
                      <span>
                        <strong style={{ color: "#f00" }}>*</strong>省内/外
                      </span>
                    }
                  >
                    <span>{getProvinceA(this.state.type)}</span>
                  </FormItem>
                </div>
                <hr
                  style={{
                    border: "1px dashed #aaa",
                    width: "90%",
                    margin: "auto"
                  }}
                />
                <div style={{ marginTop: "13px", marginLeft: "16px" }}>
                  <span style={{ fontSize: "14px" }}>发票内容</span>
                </div>
                <div className="clearfix">
                  <FormItem
                    className="half-item"
                    {...formItemLayout}
                    label={
                      <span>
                        <strong style={{ color: "#f00" }}>*</strong>发票类型
                      </span>
                    }
                  >
                    <span>
                      {this.state.invoiceType === 0
                        ? "增值税专用发票"
                        : this.state.invoiceType === 1
                          ? "增值税普通发票"
                          : "其他"}
                    </span>
                  </FormItem>
                </div>
                <div className="clearfix">
                  <FormItem
                    className="half-item"
                    {...formItemLayout}
                    label={
                      <span>
                        <strong style={{ color: "#f00" }}>*</strong>单位名称
                      </span>
                    }
                  >
                    <span>{this.state.unitName}</span>
                  </FormItem>
                  <FormItem
                    className="half-item"
                    {...formItemLayout}
                    label={
                      <span>
                        <strong style={{ color: "#f00" }}>*</strong>税号
                      </span>
                    }
                  >
                    <span>{this.state.taxNumber}</span>
                  </FormItem>
                  <FormItem
                    className="half-item"
                    {...formItemLayout}
                    label={
                      <span>
                        <strong style={{ color: "#f00" }}>*</strong>
                        开票金额(万元)
                      </span>
                    }
                  >
                    <span>{this.state.amount}</span>
                  </FormItem>
                  <FormItem
                    className="half-item"
                    {...formItemLayout}
                    label={
                      <span>
                        <strong style={{ color: "#f00" }}>*</strong>
                        开户行银行账号
                      </span>
                    }
                  >
                    <span>{this.state.banks}</span>
                  </FormItem>
                  <FormItem
                    className="half-item"
                    {...formItemLayout}
                    label={
                      <span>
                        <strong style={{ color: "#f00" }}>*</strong>
                        开票内容及说明
                      </span>
                    }
                  >
                    <span>{this.state.content}</span>
                  </FormItem>
                  <FormItem
                    className="half-item"
                    {...formItemLayout}
                    label={
                      <span>
                        <strong style={{ color: "#f00" }}>*</strong>单位地址
                      </span>
                    }
                  >
                    <span>{this.state.unitAddress}</span>
                  </FormItem>
                  <FormItem
                    className="half-item"
                    {...formItemLayout}
                    label="备注"
                  >
                    <span>{this.state.invoiceRemarks}</span>
                  </FormItem>
                  <FormItem
                    className="half-item"
                    {...formItemLayout}
                    label={
                      <span>
                        <strong style={{ color: "#f00" }}>*</strong>单位电话
                      </span>
                    }
                  >
                    <span>{this.state.unitMobile}</span>
                  </FormItem>
                </div>
                <div className="clearfix">
                  <FormItem
                    labelCol={{ span: 4 }}
                    wrapperCol={{ span: 18 }}
                    label={
                      <span>
                        <strong style={{ color: "#f00" }}>*</strong>附件
                      </span>
                    }
                  >
                    {/*<Upload*/}
                    {/*  className="demandDetailShow-upload"*/}
                    {/*  listType="picture-card"*/}
                    {/*  fileList={this.state.orgCodeUrl}*/}
                    {/*  onPreview={file => {*/}
                    {/*    this.setState({*/}
                    {/*      previewImage: file.url || file.thumbUrl,*/}
                    {/*      previewVisible: true*/}
                    {/*    });*/}
                    {/*  }}*/}
                    {/*/>*/}
                    {this.state.avisible && this.state.orgCodeUrl ? <div style={{paddingTop:'10px',paddingBottom:'10px'}}>
                      <ImgList fileList={this.state.orgCodeUrl} ItemWidth={'96px'}/>
                    </div> : <div/>}
                    <Modal
                      maskClosable={false}
                      footer={null}
                      visible={this.state.previewVisible}
                      onCancel={() => {
                        this.setState({ previewVisible: false });
                      }}
                    >
                      <img
                        alt=""
                        style={{ width: "100%" }}
                        src={this.state.previewImage || ""}
                      />
                    </Modal>
                  </FormItem>
                </div>
                <hr
                  style={{
                    border: "1px dashed #aaa",
                    width: "90%",
                    margin: "auto"
                  }}
                />
                <div className="clearfix" style={{ marginTop: "10px" }}>
                  <FormItem
                    className="half-item"
                    {...formItemLayout}
                    label="发票是否邮寄:"
                  >
                    <span>{this.state.post === 0 ? "是" : "否"}</span>
                  </FormItem>
                </div>
                {this.state.post === 0 ? (
                  <div>
                    <div className="clearfix">
                      <FormItem
                        className="half-item"
                        {...formItemLayout}
                        label="收信人姓名"
                      >
                        <span>{this.state.addressee}</span>
                      </FormItem>
                      <FormItem
                        className="half-item"
                        {...formItemLayout}
                        label="电话"
                      >
                        <span>{this.state.addresseeMobile}</span>
                      </FormItem>
                    </div>
                    <div className="clearfix">
                      <FormItem
                        className="half-item"
                        {...formItemLayout}
                        label="省-市-区"
                      >
                        <span>
                          {getprovince(this.state.addresseeProvince)}/
                          {getprovince(this.state.addresseeCity)}/
                          {getprovince(this.state.addresseeArea)}
                        </span>
                      </FormItem>
                    </div>
                    <div className="clearfix">
                      <FormItem
                        className="half-item"
                        {...formItemLayout}
                        label="详细地址"
                      >
                        <span>{this.state.recipientAddress}</span>
                      </FormItem>
                    </div>
                  </div>
                ) : (
                    ""
                  )}
                {/* <FormItem
                  className="half-item"
                  {...formItemLayout}
                  label={
                    <span>
                      <strong style={{ color: "#f00" }}>*</strong>开票金额总计
                    </span>
                  }
                >
                  <span>{this.state.alreadyAmount}万元</span>
                </FormItem> */}
              </div>
            </Spin>
          </Form>
        </Modal> : <div/>}
        <Modal
          maskClosable={false}
          visible={this.state.bvisible}
          footer=""
          title="开票历史记录"
          className="admin-desc-content"
          width="900px"
          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>
      </div>
    );
  }
});

export default outInvoiceQuery;
