/**
 *
 * @author BOGON
 * @version 1.0
 */

var page = {
    printFlag: 0,
    datagrid: undefined,
    submitFlag: 0,
    tabChange: function (title, index) {
        if (index === 1) {
            page.printFlag = 1;
            $("#batchNoDiv").show();
        } else {
            page.printFlag = 0;
            $("#batchNoDiv").hide();
        }
        $("#printFlag").val(page.printFlag);
        if (page.datagrid !== undefined) {
            if (page.printFlag === 1) {
                page.initDataGrid(true)
            } else {
                page.initDataGrid(false)
            }
            const defaultSupplierCode = $("#supplierCode").val();
            if (!defaultSupplierCode) return;
            var monthDate = $("#month").datebox('getValue')
            if (monthDate === undefined ||　monthDate == "") {
                topWin.layer.msg("请选择月份");
                return;
            }
            if(moment(monthDate).format("YYYY-MM") >= moment(new Date()).format("YYYY-MM")) {
                topWin.layer.msg("不能大于或等于当前月份，请重新选择月份");
                return;
            }
            $("#tb").datagrid("options").url = g.ctx + 'pc/order/purchaseOrder/rest/batchPrint/list'
            searchInfo()
        }
    },
    initDateBox: function () {
        //日期选择对象
        var p = $("#month").datebox('panel'),
            //日期选择对象中月份
            tds = false,
            //显示月份层的触发控件
            span = p.find('span.calendar-text');
        $("#month").datebox({
            //显示日趋选择对象后再触发弹出月份层的事件，初始化时没有生成月份层
            onShowPanel: function () {
                //触发click事件弹出月份层
                span.trigger('click');
                if (!tds)
                    //延时触发获取月份对象，因为上面的事件触发和对象生成有时间间隔
                    setTimeout(function () {
                        tds = p.find('div.calendar-menu-month-inner td');
                        tds.click(function (e) {
                            //禁止冒泡执行easyui给月份绑定的事件
                            e.stopPropagation();
                            //得到年份
                            var year = /\d{4}/.exec(span.html())[0],
                                //月份
                                //之前是这样的month = parseInt($(this).attr('abbr'), 10) + 1;
                                month = parseInt($(this).attr('abbr'), 10);

                            //隐藏日期对象
                            $("#month").datebox('hidePanel')
                                //设置日期的值
                                .datebox('setValue', year + '-' + month);
                        });
                    }, 0);
            },
            //配置parser，返回选择的日期
            parser: function (s) {
                if (!s) return new Date();
                var arr = s.split('-');
                return new Date(parseInt(arr[0], 10), parseInt(arr[1], 10) - 1, 1);
            },
            //配置formatter，只返回年月 之前是这样的d.getFullYear() + '-' +(d.getMonth());
            formatter: function (d) {
                var currentMonth = (d.getMonth() + 1);
                var currentMonthStr = currentMonth < 10 ? ('0' + currentMonth) : (currentMonth + '');
                return d.getFullYear() + '-' + currentMonthStr;
            }
        });
        $("#month").datebox("setValue", moment().format('YYYY-MM'));
        $("#month").datebox().datebox('calendar').calendar({
            validator: function (startDate) {
                return moment(startDate).format("YYYY-MM") < moment(new Date()).format("YYYY-MM");
            }
        });

    },
    /**
     * 初始化下拉框数据
     */
    initSelector: function () {
        $("#paymentMethod").combobox({
            method: 'GET',
            url: g.ctx + 'pc/sys/dict/getDicByType?type=payment_method',
            valueField: 'code',
            textField: 'codeWithDesc',
            limitToList: 'true',
            panelHeight: 300
        });
    },
    /**
     * 初始化数据表格
     */
    initDataGrid: function (pagination) {
        if (page.datagrid !== undefined) {
            $("#tbDiv").empty();
            $("#tbDiv").append('<table id="tb" style="display: none"></table>');
        }
        var searchHeight = $("#searchForm").outerHeight();
        page.datagrid = $("#tb").datagrid({
            loadMsg: '数据远程载入中,请等待...',
            singleSelect: false,
            method: "GET",
            pagination: pagination,
            checkbox: true,
            rownumbers: true,
            height: document.documentElement.clientHeight - searchHeight - 55,
            queryParams: {
                supplierCode: defaultSupplierCode
            },onLoadSuccess:function(data){
                // 在这里使用 selectAll 方法全选所有行
                $("#tb").datagrid('selectAll');
                $("input:checkbox").prop("disabled", true); //禁用checkbox复选框
            },
            onBeforeUncheck: function(rowIndex, rowData){
            // 阻止用户取消勾选任何行
            return false; // 返回 false 表示取消勾选操作不会执行
        },
        columns: [[{
                field: 'ck', checkbox: true
            }, {
                field: 'state', title: '状态', align: 'left', width: 100,sortable: true, formatter: function (value, row) {
                    if (!value) {
                        return ""
                    }
                    if (value === 1) {
                        return "新建"
                    }
                    if (value === 2) {
                        return "<span style='color:red;' > 订单不可用 </span>"
                    }
                    if (value === 3) {
                        return "<span style='color:red;' >订单审批驳回</span>"
                    }
                    if (value === 4) {
                        return "GMP审批中"
                    }
                    if (value === 5) {
                        return "<span style='color:red;' >GMP审批驳回</span>"
                    }
                    if (value === 6) {
                        return "<span style='color:saddlebrown;' > 待供应商确认 </span>"
                    }
                    if (value === 7) {
                        return "<span style='color:royalblue;' > 确认完成 </span>"
                    }
                    if (value === 8) {
                        return "<span style='color:green;' > 收货完成 </span>"
                    }
                    if (value === 9) {
                        return "删除"
                    }
                    if (value === 10) {
                        return "订单审批通过"
                    }
                    if (value === 11) {
                        return "<span style='color:orangered;' >供应商拒收</span>"
                    }
                }
            },
                {
                    field: 'batchNo', title: '汇总单号', width: 110,sortable: true
                }, {
                    field: 'orderDate', title: '凭证日期', width: 130,sortable: true
                },{
                    field: 'createTime', title: '生效日期', width: 130,sortable: true
                },{field: 'orderCode', title: 'SAP订单号', width: 120,sortable: true,}, {
                    field: 'orderTypeName', title: '订单类型', width: 100,sortable: true,  formatter: function (value, row) {
                        if (!value) {
                            return "";
                        }
                        return row.orderTypeCode + "-" + value;
                    }
                },  {field: 'remark', title: '单头备注', width: 160}, {
                    field: 'companyName',
                    title: '公司',
                    width: 120,sortable: true
                }, {field: 'purchaseOrgName', title: '采购组织',sortable: true,  width: 120}, {
                    field: 'purchaseGroupName', title: '采购组', width: 120,sortable: true,  formatter: function (value, row) {
                        if (!value) {
                            return "";
                        }
                        return row.purchaseGroupCode + "-" + value;
                    }
                }, {field: 'currencyName', title: '币别', width: 90}, {
                    field: 'orderTaxAmount', title: '含税总额', width: 100, formatter: function (value, row) {
                        if (row.returnFlag === "X") {
                            return value * -1;
                        }
                        return value;
                    }
                }, {field: 'createName', title: '创建人', width: 100}]],
            toolbar: [{
                text: '查看', id: 'btn_detail', iconCls: 'icon-search', handler: function () {
                    let rows = $("#tb").datagrid('getSelections');
                    if (!rows || rows.length != 1) {
                        topWin.layer.msg("请选中一条记录");
                        return;
                    }
                    let row = rows[0];
                    var lookupDialog = openDialog('lookupDialog', g.ctx + 'pc/order/purchaseOrder/page/lookup?id=' + row.id, {
                        title: '订单查看',
                        width: "90%",
                        height: "100%",
                        cache: false,
                        modal: true,
                        border: 'thin',
                        onClose: function () {
                            lookupDialog.dialog('destroy');
                        },
                        buttons: [{
                            text: '关闭', iconCls: 'icon-cancel', handler: function () {
                                lookupDialog.dialog('close');
                            }
                        }]
                    });

                }
            }/*,*/
             /*   {
                    text: '批量打印', id: 'btn_batch_print', iconCls: 'icon-print', handler: function () {

                        let rows = $("#tb").datagrid('getChecked');
                        if (!rows || rows.length <= 0) {
                            topWin.layer.msg("请至少选中一条记录");
                            return;
                        }
                        console.log("批量打印"+rows.length);
                        // 初始化一个变量来存储第一个供应商编码
                        let firstSupplierCode = null;
                        let firstCorporateName = null;
                        let firstFactoryCode = null;

                        let tipMsg = ''
                        // 遍历所有选中的行
                        $.each(rows, function (index, row) {
                            // 假设供应商编码在 row.supplierCode 字段中
                            if (firstSupplierCode === null) {
                                // 如果是第一个行，设置 firstSupplierCode
                                firstSupplierCode = row.supplierErpCode;
                                firstCorporateName = row.companyName;
                                firstFactoryCode = row.factoryCode;
                            } else {
                                // 检查当前行的供应商编码是否与第一个相同
                                if (firstSupplierCode !== row.supplierErpCode) {
                                    // 如果不相同，显示错误提示并终止循环
                                    tipMsg = '选中的数据供应商编码不全部相同！'
                                    return false; // 终止 $.each 循环
                                }
                                if (firstCorporateName !== row.companyName) {
                                    // 如果不相同，显示错误提示并终止循环
                                    tipMsg = '选中的数据公司名称不全部相同！'
                                    return false; // 终止 $.each 循环
                                }
                            }
                        })
                        if (tipMsg !== '') {
                            topWin.layer.alert(tipMsg, {icon: 2});
                            return;
                        }
                        let ids = '';
                        if (rows !== undefined) {
                            ids = rows.map(a => a.id).join(',');
                        }
                            $.ajax({
                                type: 'get',
                                url: g.ctx + 'pc/order/purchaseOrder/rest/batchPrint/listCheck',
                                data: {
                                    orderIds: ids,
                                    range: $("#month").datebox('getValue'),
                                },
                                success: function (data) {
                                    console.log(data);
                                   if(data.length > 0){
                                       let orderIds = ''; // 初始化orderIds字符串
                                       data.forEach(item => {
                                           // 假设每个item都有一个orderId属性
                                           if (item.orderCode) { // 确保orderId存在
                                               orderIds += item.orderCode + ','; // 将orderId添加到字符串中，并添加一个逗号作为分隔符
                                           }
                                       });
                                       // 移除最后一个逗号（如果有的话）
                                       if (orderIds.length > 0) {
                                           orderIds = orderIds.slice(0, -1);
                                       }
                                       topWin.layer.alert("单独签署的订单，不能汇总打印，订单："+orderIds);
                                       return;
                                   } else{
                                        topWin.layer.alert("允许生成汇总打印");
                                        page.batchPrintOrder(rows) // 选择物质类模板打印
                                    }

                                },
                                error: function (data) {
                                    topWin.layer.alert(JSON.parse(data.responseText).message);
                                    return false;
                                }
                            });
                    }
                }*/,
                {
                    text: '生成打印pdf', id: 'btn_batch_print_sum', iconCls: 'icon-print', handler: function () {
                        var monthDate = $("#month").datebox('getValue')
                        if (monthDate === undefined ||　monthDate == "") {
                            topWin.layer.msg("请选择月份");
                            return;
                        }
                        if(moment(monthDate).format("YYYY-MM") >= moment(new Date()).format("YYYY-MM")) {
                            topWin.layer.msg("不能大于或等于当前月份，请重新选择月份");
                            return;
                        }

                        let rows = $("#tb").datagrid('getChecked');
                        if (!rows || rows.length <= 0) {
                            topWin.layer.msg("请至少选中一条记录");
                            return;
                        }
                        console.log("批量打印"+rows.length);
                        // 初始化一个变量来存储第一个供应商编码
                        let firstSupplierCode = null;
                        let tipMsg = ''
                        let firstCorporateName = null;
                        // 遍历所有选中的行
                        $.each(rows, function (index, row) {
                            // 假设供应商编码在 row.supplierCode 字段中
                            if (firstSupplierCode === null) {
                                // 如果是第一个行，设置 firstSupplierCode
                                firstSupplierCode = row.supplierErpCode;
                                firstCorporateName = row.companyName;
                            } else {
                                // 检查当前行的供应商编码是否与第一个相同
                                if (firstSupplierCode !== row.supplierErpCode) {
                                    // 如果不相同，显示错误提示并终止循环
                                    tipMsg = '选中的数据供应商编码不全部相同！'
                                    return false; // 终止 $.each 循环
                                }
                                if (firstCorporateName !== row.companyName) {
                                    // 如果不相同，显示错误提示并终止循环
                                    tipMsg = '选中的数据公司名称不全部相同！'
                                    return false; // 终止 $.each 循环
                                }
                            }
                        })
                        if (tipMsg !== '') {
                            topWin.layer.alert(tipMsg, {icon: 2});
                            return;
                        }
                        let ids = '';
                        if (rows !== undefined) {
                            ids = rows.map(a => a.id).join(',');
                        }
                        if (page.submitFlag === 1) {
                            console.log('重复提交了!');
                            topWin.layer.alert("重复提交了!", {icon: 2});
                            return;
                        }
                        $.ajax({
                            type: 'get',
                            url: g.ctx + 'pc/order/purchaseOrder/rest/batchPrint/listCheck',
                            data: {
                                orderIds: ids,
                                range: $("#month").datebox('getValue'),
                            },
                            success: function (data) {
                                console.log(data);
                                if(data.length > 0){
                                    let orderIds = ''; // 初始化orderIds字符串
                                    data.forEach(item => {
                                        // 假设每个item都有一个orderId属性
                                        if (item.orderCode) { // 确保orderId存在
                                            orderIds += item.orderCode + ','; // 将orderId添加到字符串中，并添加一个逗号作为分隔符
                                        }
                                    });
                                    // 移除最后一个逗号（如果有的话）
                                    if (orderIds.length > 0) {
                                        orderIds = orderIds.slice(0, -1);
                                    }
                                    page.submitFlag = 0;
                                    topWin.layer.alert("单独签署的订单，不能汇总打印，订单："+orderIds);
                                    return;
                                } else{
                                    topWin.layer.alert("允许生成汇总打印");
                                 //   batchPrintOrderSumPdf(rows) // 选择物质类模板打印
                                    page.submitFlag = 1;
                                    batchPrintOrderSumPdfNew(rows);
                                }

                            },
                            error: function (data) {
                                page.submitFlag = 0;
                                topWin.layer.alert(JSON.parse(data.responseText).message);
                                reject(false);
                            }
                        });
                       //==========

                    }
                },
                {
                    text: '补打', id: 'btn_print', iconCls: 'icon-print', handler: function () {
                        var monthDate = $("#month").datebox('getValue')
                        if (monthDate === undefined ||　monthDate == "") {
                            topWin.layer.msg("请选择月份");
                            return;
                        }
                        if(moment(monthDate).format("YYYY-MM") >= moment(new Date()).format("YYYY-MM")) {
                            topWin.layer.msg("不能大于或等于当前月份，请重新选择月份");
                            return;
                        }
                        let rows = $("#tb").datagrid('getChecked');
                        console.log("批量打印"+rows.length);
                        if (!rows || rows.length <= 0) {
                            topWin.layer.msg("请至少选中一条记录");
                            return;
                        }
                        // 初始化一个变量来存储第一个供应商编码
                        let batchNo = null;
                        let tipMsg = ''
                        // 遍历所有选中的行
                        $.each(rows, function (index, row) {
                            // 假设供应商编码在 row.supplierCode 字段中
                            if (batchNo === null) {
                                // 如果是第一个行，设置 firstSupplierCode
                                batchNo = row.batchNo;
                            } else {
                                // 检查当前行的供应商编码是否与第一个相同
                                if (batchNo !== row.batchNo) {
                                    // 如果不相同，显示错误提示并终止循环
                                    tipMsg = '选中的数据汇总单号存在多个！'
                                    return false; // 终止 $.each 循环
                                }
                            }
                        })
                        if (tipMsg !== '') {
                            topWin.layer.alert(tipMsg, {icon: 2});
                            return;
                        }
                        page.batchPrintOrder(undefined, batchNo) // 选择物质类模板打印
                    }
                }/*,2024-08-19注释掉清空按钮
                {
                    text: '清空', id: 'btn_clear', iconCls: 'icon-remove', handler: function () {
                        let rows = $("#tb").datagrid('getChecked');
                        if (!rows || rows.length <= 0) {
                            topWin.layer.msg("请至少选中一条记录");
                            return;
                        }
                        // 初始化一个变量来存储第一个供应商编码
                        let batchNo = null;
                        let tipMsg = ''
                        // 遍历所有选中的行
                        $.each(rows, function (index, row) {
                            // 假设供应商编码在 row.supplierCode 字段中
                            if (batchNo === null) {
                                // 如果是第一个行，设置 firstSupplierCode
                                batchNo = row.batchNo;
                            } else {
                                // 检查当前行的供应商编码是否与第一个相同
                                if (batchNo !== row.batchNo) {
                                    // 如果不相同，显示错误提示并终止循环
                                    tipMsg = '选中的数据汇总单号存在多个！'
                                    return false; // 终止 $.each 循环
                                }
                            }
                        })
                        if (tipMsg !== '') {
                            topWin.layer.alert(tipMsg, {icon: 2});
                            return;
                        }
                        page.clearBatchNo(batchNo) // 选择物质类模板打印
                    }
                }*/
            ],
            onBeforeLoad: function () {
                if (page.printFlag === 0) {
                    $('#btn_clear').linkbutton('disable');
                    $('#btn_print').linkbutton('disable');
                    $('#btn_batch_print').linkbutton('enable');
                    $('#btn_batch_print_sum').linkbutton('enable');
                } else {
                    $('#btn_clear').linkbutton('enable');
                    $('#btn_print').linkbutton('enable');
                    $('#btn_batch_print').linkbutton('disable');
                    $('#btn_batch_print_sum').linkbutton('disable');
                }
            }
        });
    },
    batchPrintOrder: function (rows, batchNo) {
        let ids = '';
        if (rows !== undefined) {
            ids = rows.map(a => a.id).join(',');
        }
        $.ajax({
            type: 'POST',
            url: g.ctx + 'pc/order/purchaseOrder/page/batchPrint',
            data: {
                orderIds: ids,
                range: $("#month").datebox('getValue'),
                batchNo: batchNo === undefined ? "" : batchNo,
                supplierCode: $("#supplierCode").val()
            },
            success: function (data) {
                $('#printDiv').print({
                    globalStyles: false,
                    mediaPrint: false,
                    iframe: true,
                    prepend: data,
                    deferred: $.Deferred().done(function () {
                        $("#tb").datagrid("reload");
                    })
                });
            }
        });
    },
    clearBatchNo: function (batchNo) {
        topWin.layer.confirm('确定要清空汇总单号吗？', {icon: 3, title: '提示'}, function (
            index) {
            $.ajax({
                type: 'POST',
                url: g.ctx + 'pc/order/purchaseOrder/rest/clearBatchNo',
                data: {
                    batchNo: batchNo
                },
                complete: function () {
                    topWin.layer.close(index);
                },
                success: function (data) {
                    topWin.layer.alert("操作成功", {icon: 1}, function (idx) {
                        $("#tb").datagrid("reload")
                        topWin.layer.close(idx);
                    });
                },
                error: function (data) {
                    topWin.layer.alert(JSON.parse(data.responseText).message);
                }
            });

        });

    }
}
$(function () {
    page.initDataGrid(false)
    let options = $("#tb").datagrid("options");
    options.url = g.ctx + 'pc/order/purchaseOrder/rest/batchPrint/list'
    $("#tb").datagrid("load", {printFlag: 0,factoryCode:1000})
    page.initDateBox()
    page.initSelector()
})

//重新创建汇总打印方法
function batchPrintOrderSumPdfNew (rows) {
    let ids = '';
    if (rows !== undefined) {
        ids = rows.map(a => a.id).join(',');
    }
    $.ajax({
        type: 'POST',
        url: g.ctx + 'pc/order/purchaseOrder/rest/batchPrintPdfCreate',
        data: {
            orderIds: ids,
            range: $("#month").datebox('getValue'),
        },
        success: function (data) {
            console.log(data);
            if(data){
                page.submitFlag = 1;
                topWin.layer.alert("生成汇总文件成功已关联至订单");

            } else{
                topWin.layer.alert("生成汇总文件失败");
                return;
            }

        },
        error: function (data) {
            topWin.layer.alert(JSON.parse(data.responseText).message);
            reject(false);
        }
    });
}


function batchPrintOrderSumPdf (rows, batchNo) {
    let ids = '';
    if (rows !== undefined) {
        ids = rows.map(a => a.id).join(',');
    }
    var xhr = new XMLHttpRequest();
    xhr.responseType = "arraybuffer";
    xhr.open("POST", g.ctx + "pc/order/purchaseOrder/rest/batchPrintPdfCreate", true);
    xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
    xhr.onload = function () {
        try {
            let enc = new TextDecoder('utf-8')
            let data = JSON.parse(enc.decode(new Uint8Array(this.response)));
            if (data.message) {
                parent.layer.alert(data.message, {icon: 2, shadeClose: true, title: '温馨提示'});
            }
        } catch (e) {
            var fileName = xhr.getResponseHeader("Content-disposition").replace('attachment;filename=', '');
            console.log(decodeURI(fileName.replace('attachment;filename=', ''))); // 输出文件名
            const blob = new Blob([this.response], {type: "application/pdf"});
            if (blob.size < 1) {
                parent.layer.alert('生成PDF失败，PDF的内容为空！', {
                    icon: 2,
                    shadeClose: true,
                    title: '温馨提示'
                });
                return;
            }
                const aLink = document.createElement('a');
                aLink.style.display = 'none';
                aLink.href = window.URL.createObjectURL(blob);
                aLink.download = decodeURI(fileName);
                document.body.appendChild(aLink);
                aLink.click();
                document.body.removeChild(aLink);
                parent.layer.alert('请在浏览器下载中查看生成的文件', {
                    icon: 1,
                    shadeClose: true,
                    title: '生成PDF文件成功'
                });

        }
    }
    var formData = new FormData()
    formData.append('orderIds',ids);
    formData.append('range',$("#month").datebox('getValue'));
    formData.append('batchNo', batchNo === undefined ? "" : batchNo);
    xhr.send(formData);
}


function searchInfoPrint() {
    // 原有的代码逻辑
    debugger;
    // 监听键盘事件

    $('#tb').datagrid('options').queryParams = searchParams();
    var flag = false;
    $.each($("#searchForm").serializeArray(), function (index, item) {
        console.log(item)
        if(item.name == "supplierCode"){
            if(item.value == "" || item.value == null){
                flag = true;
            }
        }
    });
    if(flag){
        topWin.layer.alert("请填写供应商代码！", {icon: 2});
    }else{
        var monthDate = $("#month").datebox('getValue')
        if (monthDate === undefined ||　monthDate == "") {
            topWin.layer.alert("请选择月份！", {icon: 2});
            return;
        }
        if(moment(monthDate).format("YYYY-MM") >= moment(new Date()).format("YYYY-MM")) {
            topWin.layer.msg("不能大于或等于当前月份，请重新选择月份");
            return;
        }
        $('#tb').datagrid('load');
    }

}

function getSearchParams() {

    var params = {};
    $.each($("#searchForm").serializeArray(), function (index, item) {
        console.log(item)
        if (params[item.name] != undefined) {
            params[item.name] = (params[item.name] + ',' + item.value).trim();
        } else {
            params[item.name] = ('' + item.value).trim();
        }
    });
    return params;
}