/*******************************************************************************
 * Copyright(c) 2021 dongke All rights reserved. / Confidential
 * 类的信息：
 *		1.程序名称：
 *		2.功能描述：新建其他出库 销售出库 销售退货出库
 * 编辑履历：
 *		作者				日期					版本				修改内容
 *		姜永辉	2024年3月22日		  1.00		   	    一览
 *******************************************************************************/
const mixins = require('@/mixins/index.js')
const util = require('@/utils/util.js')
const Constants = require('@/utils/Constants.js');
const app = getApp()
Page({
  mixins: [mixins],
  /**
   * 页面的初始数据
   */
  data: {
    formMode: Constants.formMode.index,
    // 弹出按钮
    buttonList: [{
      name: 'merge',
      title: ''
    }],
    contentList: [{
      code: 'need',
      title: mixins.$t('totalAmount'),
      type: 'str'
    }, {
      code: 'amount',
      content: 0,
      type: 'number'
    }],
    // 动态的
    cardList: [],
    contentObj: {},
    popContent: [{
      code: 'outingQty',
      type: 'step',
      title: mixins.$t('count'),
    },
    {
      code: 'whId',
      name: 'whName',
      title: mixins.$t('warehouseId'),
      type: 'choose',
      urlKey: 'openingInventory'
    },
    {
      code: 'skuSpec',
      title: mixins.$t('goodSpec'),
      type: 'str',
      readonly: true
    },
    {
      code: 'nonStdCode',
      title: mixins.$t('goodsBatch'),
      type: 'str',
    },
    ],

    cardContentList: [
      { code: 'whId', name: 'whName', title: '库区', type: 'choose', }],

    // 路由
    routeObjName: 'outbound',
    outboundOtherService: app.globalData['outboundOtherService'],
    outboundProcessingService: app.globalData['outboundProcessingService'],
    outboundSaleReturnService: app.globalData['outboundSaleReturnService'],
    // 主键Id
    primaryKey: 'outId',
    table: Constants.tables.outbound,
  },
  /**
   * @desc : dk-from choose 回调事件
   * @date : 2024/2/1 15:49
   * @author : 姜永辉
   */
  chooseData(e) { 
    let formData = JSON.parse(this.data.formData)
    let code = e.detail.code
    let data = e.detail.data.data
    if (code == "whId") { //商品品牌
      formData.whId = data.id
      formData.whName = data.name
    }
    if (code == "staffId") { //员工
      formData.staffId = data.id
      formData.staffName = data.name
    }
    if (code == "orgId") { //部门
      formData.orgId = data.id
      formData.orgName = data.name
    }
    if (code == "outReason") { //出库原因
      formData.outReason = data.id
      formData.outReasonName = data.name
    }
    if (code == "outObject") { //出库对象
      formData.outObject = data.id
      formData.outObjectName = data.name
      formData.objType = data.objType
    }
    this.setData({
      formData: JSON.stringify(formData)
    })
  },
  /**
   * @desc : 给表单赋值
   * @date : 2024/2/1 15:49
   * @author : 姜永辉
   */
  setValuesByEdit(data) { 
    let cardList_ = this.data.cardList
    let contentList_ = this.data.contentList
    let sumitemAmt = 0
    let formType = this.data.formType
    // 入库对象
    if (data.outType == Constants.outType.other) {
      data.outObject = (data.supId!=null)?data.supId:data.cusId
      data.outObjectName = (data.supplierName!=null)?data.supplierName:data.cusName
  }       
    //  出库状态-已出库
    if (data.outStatus == Constants.outStatus.outBounded) {
      //查询采购订单表 未出库的 详细 
      this.setData({
        buttonList: [{
          name: 'merge',
          title: mixins.$t("close")
        }],
      })
    } else {
      this.setData({
        buttonList: [{
          name: 'merge',
          title: mixins.$t("outProcessing")
        }],
      })
    }

    sumitemAmt =   Number(data.outingAmt)
    cardList_.forEach(card => {
      if (card.name === 'items') {
        if (data.outStatus == Constants.outStatus.outBounding) {
          card.info = "（" + mixins.$t("outboundProcessing") + "）"
          card.color = "#E4002B"
        } else {
          card.info = "（" + mixins.$t("checkouted") + "）"
          card.color = "#1B365D"
        }
        card.itemAmt = sumitemAmt
      }
    })
    contentList_[1].content = sumitemAmt

    // 明细的最大出库办理的量
    data.goodsList.forEach(element => {
      if (this.data.item.outType == Constants.outType.purReturn) {
        element['outingQty_max'] = -1
        element['outingQty_min'] = -1 * Math.abs(element.outingQty)
      } else {
        element['outingQty_max'] = element.outingQty
        element['outingQty_min'] = 1
      }
      // 显示库区和可售量开关
      element.usableQtyInsufficientFlag = true
    })

    // 刷新商品明细 显示 查看更多
    let card = this.data.cardList.filter(it => it.name == 'items');
    this.selectComponent('#' + this.data.formName).handleContentObj(card[0])

    this.setData({
      itemData: data,
      cardList: cardList_,
      contentList: contentList_,
      formData: JSON.stringify(data),
      sumitemAmt
    })

  },

  /**
     * @desc : 外露设置产品方法 
     * @date : 2024/2/1 15:49
     * @author : 姜永辉
     */
  setGoods(e) {
    let contentList_ = this.data.contentList
    let cardList = this.data.cardList
    let formData = JSON.parse(this.data.formData) 
    let totalAmout = Number(0)
    // 各个明细的金额数量
    formData.goodsList.forEach(element => {  //循环出商品总共价格   
      element.outingAmt = element.priceOut * element.outingQty
      totalAmout += Number(element.priceOut * element.outingQty)
      // 显示库区和可售量开关
      element.usableQtyInsufficientFlag = true
    })
    // 左下角的合计金额
    contentList_.forEach(card => {
      if (card.code === 'amount') {
        card.content = totalAmout
      }
    })
    // 明细的合计金额
    cardList.forEach(card => {  //循环出商品总共价格
      if (card.name === 'items') {
        //合计金额
        card.itemAmt = totalAmout
      }
    })
    this.setData({
      contentList: contentList_,
      cardList,
      formData: JSON.stringify(formData)
    })
  },

  /**
  * @desc : 保存数据服务--校验
  * @date : 2024/2/1 15:49
  * @author : 姜永辉
  */
  validData() {
    // 已出库
    if (this.data.itemData.outStatus == Constants.outStatus.outBounded) {
      return true
    }
    // 出库中
    let formData = JSON.parse(this.data.formData)
    if (formData.goodsList == null || formData.goodsList.length == 0) {
      util.showToast(mixins.$t("chooseGoodsInfo"));
      return false
    }
    // 明细的数量和仓库不能为空
    for (let index = 0; index < formData.goodsList.length; index++) {
      const element = formData.goodsList[index];
      if (element.whId == null) {
        util.showToast(mixins.$t("chooseWh"));
        return false
      }
      if (element.outingQty == null || element.outingQty == '' || element.outingQty == 0) {
        util.showToast(mixins.$t("inputWords") + "[" + element.skuCode + "]" + mixins.$t("count"));
        return false
      }
      if (element.outingQty > element.outingQty_max) {
        util.showToast("[" + element.skuCode + "]" + mixins.$t("maxCount") + element.outingQty_max);
        return false
      }
    }
    return true
  },

  /**
   * @desc : 保存的參數設置
   * @date : 2024/2/1 15:49
   * @author : 姜永辉
   */
  setParams(params) {
    let formData = JSON.parse(this.data.formData)
    params.allEdit = true //大编辑
    // 由于办理后直接生成出库单，将画面的删除的数据放入deleteItemList数组中
    params.deleteItemList = formData.deleteList || []

    params.fromId = formData.fromId  //来源id
    params.fromNo = formData.fromNo  //来源单号
    params.orgId = formData.orgId  //组织部门
    params.staffId = formData.staffId  // 员工 
    params.supId = formData.supId // 供应商
    //  // 供应商1 客户2 所有 传空
    if (formData.objType == 1) {
      params.supId = formData.outObject  // 供应商
    }
    if (formData.objType == 2) {
      params.cusId = formData.outObject  // 客户
    }
    params.whId = formData.whId  // 仓库
    params.remarks = formData.remarks  // 备注
    params.makeStaff = app.globalData.user.staffId  // 制单人  
    // 退货出库传负值
    if (this.data.item.outType == Constants.outType.purReturn) {
      // 总单的 出库中数量和金额合计

      params.outingAmt = -1 * Math.abs(formData.goodsList.sum("outingAmt"))   //金额
      params.outingQty = -1 * Math.abs(formData.goodsList.sum("outingQty"))     //一共的商品数量
      params.outAmt = 0     //  已出库金额
      params.outQty = 0     //  已出库数量   
      formData.goodsList.forEach(item => {
        item.outingAmt = -1 * Math.abs(item.outingAmt)
        item.outingQty = -1 * Math.abs(item.outingQty)
      })
    } else {
      // 总单的 出库中数量和金额合计
      params.outingAmt = formData.goodsList.sum("outingAmt")   //金额
      params.outingQty = formData.goodsList.sum("outingQty")     //一共的商品数量
      params.outAmt = 0     //  已出库金额
      params.outQty = 0     //  已出库数量   
    }
    params.itemList = formData.goodsList //商品明细
    params.annexPaths = formData.annexPaths || [] //附件  
    return params
  },
  /**
   * @desc : 保存数据服务
   * @date : 2024/2/1 15:49
   * @author : 姜永辉
   */
  saveData() {
    if (this.data.itemData.outStatus == Constants.outStatus.outBounding) {
      if (this.data.item.outType == Constants.outType.sale) {
        return this.excute(this.data.outboundProcessingService, this.data.outboundProcessingService.outBoundHandle, this.data.params)
      } else if (this.data.item.outType == Constants.outType.other) {
        return this.excute(this.data.outboundOtherService, this.data.outboundOtherService.outBoundHandle, this.data.params)
      } else {
        return this.excute(this.data.outboundSaleReturnService, this.data.outboundSaleReturnService.outBoundHandle, this.data.params)
      }
    } else {
      wx.navigateBack({
        delta: 1
      })
    }

  },
  /**
   * @desc : 加载数据
   * @date : 2024/2/1 15:49
   * @author : 姜永辉
   */
  loadInit() {
    let contentObj = {}
    let cardList = []
    // 销售出库
    if (this.data.item.outType == Constants.outType.sale) {
      wx.setNavigationBarTitle({
        title: mixins.$t('saleOutBound'),
      })
      cardList = [{
        name: 'main',
        title: mixins.$t('serviceInfo'),
      }, {
        name: 'items',
        title: mixins.$t('goodsDetail'),
        chooseGoodsFlag: '',
        itemAmt: '',
        displayNum: 2
      }, {
        name: 'other',
        title: mixins.$t('otherInfo')
      }]
      contentObj = {
        main: [
          {
            code: 'serviceType',
            name: 'serviceTypeName',
            title: mixins.$t('serviceType'),
            type: 'choose',
            urlKey: 'chooseStaff'
          },
          {
            code: 'deliverId',
            name: 'deliverName',
            title: mixins.$t('deliverMan'),
            type: 'choose',
            urlKey: 'chooseStaff'
          }, {
            code: 'installId',
            name: 'installName',
            title: mixins.$t('installMan'),
            type: 'choose',
            urlKey: 'chooseStaff'
          },

        ],
        items: [{
          code: 'sumQuantity',
          name: 'collectName',
          type: 'drop',
          dropType: 'collect',

        }, {
          code: 'sumAmount',
          type: 'number',
          title: mixins.$t('totalAmount'),
        }],

        other: [{
          code: 'remarks',
          type: 'textarea',
          title: mixins.$t('remarks'),
        }, {
          code: 'file',
          type: 'uploader',
          title: mixins.$t('uploader')
        }]
      }
      this.setData({
        contentObj,
        cardList,
      })

    } else if (this.data.item.outType == Constants.outType.other) {
      // 其他出库
      wx.setNavigationBarTitle({
        title: mixins.$t('otherOutWh'),
      })
      cardList = [{
        name: 'main',
        title: mixins.$t('outBoundInfo'),
      },
      {
        name: 'items',
        title: mixins.$t('goodsDetail'),
        info: '(' + mixins.$t('outboundProcessing') + ')',
        chooseGoodsFlag: false,
        color: '#E4002B',
        displayNum: 2
      }, {
        name: 'other',
        title: mixins.$t('otherInfo')
      }
      ]
      contentObj = {
        main: [
          {
            code: 'outReason',
            name: 'outReasonName',
            type: 'choose',
            required: true,
            urlKey: 'chooseStorageOutReason',
            urlKeyParam: Constants.kindCode.basicOut
          },
          {
            code: 'staffId',
            name: 'staffName',
            title: mixins.$t('responsiblePerson'),
            type: 'choose',
            required: true,
            urlKey: 'chooseStaff'
          }, {
            code: 'orgId',
            name: 'orgName',
            title: mixins.$t('orgId'),
            type: 'choose',
            required: true,
            urlKey: 'chooseOrg'
          },
          {
            code: 'outDate',
            name: 'outDate',
            type: 'date',
            required: true,
          },
          {
            code: 'outObject',
            name: 'outObjectName',
            title: mixins.$t('outObject'),
            type: 'choose',
            urlKey: 'chooseStorageObject'
          },
        ],

        items: [{
          code: 'collectType',
          name: 'collectName',
          type: 'drop',
          dropType: 'collect'
        }, {
          code: 'collectAmount',
          type: 'number',
          title: mixins.$t('totalAmount'),
        }],

        other: [{
          code: 'remarks',
          type: 'textarea',
          title: mixins.$t('remarks'),
          readonly: false
        }, {
          code: 'file',
          type: 'uploader',
          title: mixins.$t('uploader')
        }]
      }
      this.setData({
        contentObj,
        cardList,
      })
    } else {
      // 销售退货出库
      cardList = [{
        name: 'main',
        title: mixins.$t('outBoundInfo'),
      }, {
        name: 'items',
        title: mixins.$t('goodsDetail'),
        chooseGoodsFlag: '',
        itemAmt: '0',
        displayNum: 2
      }, {
        name: 'other',
        title: mixins.$t('otherInfo')
      }]
      contentObj = {
        main: [
          {
            code: 'staffId',
            name: 'staffName',
            title: mixins.$t('responsiblePerson'),
            type: 'choose',
            required: true,
            urlKey: 'chooseStaff'
          }, {
            code: 'orgId',
            name: 'orgName',
            title: mixins.$t('orgId'),
            type: 'choose',
            urlKey: 'chooseOrg'
          },
          {
            code: 'outDate',
            name: 'outDate',
            type: 'date',
          },
        ],
        items: [{
          code: 'sumQuantity',
          name: 'collectName',
          type: 'drop',
          dropType: 'collect',

        }, {
          code: 'sumAmount',
          type: 'number',
          title: mixins.$t('totalAmount'),
        }],

        other: [{
          code: 'remarks',
          type: 'textarea',
          title: mixins.$t('remarks')
        }, {
          code: 'file',
          type: 'uploader',
          title: mixins.$t('uploader')
        }]
      }
      this.setData({
        contentObj,
        cardList,
      })
      wx.setNavigationBarTitle({
        title: mixins.$t('saleReturn'),
      })
    }
  },

  /**
 * @desc : （编辑）
 * @date : 2024/2/1 15:49
 * @author : 姜永辉
 */
  toEdit(e) {
    let id = e.currentTarget.dataset.item.outId
    // 销售出库
    if (this.data.item.outType == Constants.outType.sale) {
      wx.navigateTo({
        url: this.data.route.add.url,
        events: {
          // 回调后，在这里给页面赋值
          bandData: function (e) { }
        },
        success: function (res) {
          res.eventChannel.emit('params', {
            id: id,
            formMode: Constants.formMode.edit
          })
        }
      })
    }
    // 其他出库
    else if (this.data.item.outType == Constants.outType.other) {
      wx.navigateTo({
        url: this.data.route.addOther.url,
        events: {
          // 回调后，在这里给页面赋值
          bandData: function (e) { }
        },
        success: function (res) {
          res.eventChannel.emit('params', {
            id: id,
            formMode: Constants.formMode.edit
          })
        }
      })
      // 销售退货
    } else {
      wx.navigateTo({
        url: this.data.route.addReturn.url,
        events: {
          // 回调后，在这里给页面赋值
          bandData: function (e) { }
        },
        success: function (res) {
          res.eventChannel.emit('params', {
            id: id,
            formMode: Constants.formMode.edit
          })
        }
      })
    }

  },
})