package com.sunda.spmswms.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.sunda.spmscommon.ResponseResult;
import com.sunda.spmswms.entity.*;

import java.util.List;

/*
* 用于撤销备件货出、入库记录
* */
public interface ISapBoxNoteWithdraw  extends IService<SapBoxNote> {

    /* 撤销备件入库记录*/


    /*
    * 1. 根据deliveryNoteSap获取入库任务，取得入库任备状态
    * 2. 若已上架，根据deliveryNoteSap找到上架任务，返回上架任务uuid
    *   3. 根据uuid找到上架任务明细，返回箱码，库位对照表
    *   4. 检查储位库存，如果所有箱码都还在原储位，则允许撤销，如果有任备的箱码不能从原上架储位找到，则不允许撤销，返回撤销失败
    *   5. 若已同步到SAP，则调用SAP冲消接口，成功允许继续撤销，失败，返回不允许撤销
    *   6. 对于已上架的入库任务， 生成下架任务单，完成下架任务，扣减储位库存
    * 7. 扣减仓库库存
    * 8. 重置SAP_BOX_NOTE_DTL DOMESTIC_QTY_RECEIVED 为0，DOMESTIC_QTY_RECEIVABLE 为0
    * 9. 重置 SAP_BOX_NOTE, BOX_QTY_RECEIVED为0，ITDM_STATUS重置为0
    * 10. 重置SAP_DELIVERY_NOTE DOCUMENT_DATE,POSTING_DATE,MOBILE_TYPE,USER_ID, PDA_SN,SAP_VOUCHER_NUMBER,SAP_VOUCHER_YEAR设为空
    * */

    /** 检查是否可以冲销*/
    ResponseResult isWithdrawableX(String deliveryNoteSap,String userId,String createDate);

    /** 执行库内数据冲销*/
    ResponseResult withdrawSapBoxNote (String deliveryNoteSap,String userId,String createDate,String newSapVoucherNumber,String mobileType);

    /* 1. 根据deliveryNoteSap获取入库任务，取得入库任备状态 */
    SapDeliveryNote getSapDeliveryNote (String deliveryNoteSap);

    /* 2. 根据deliveryNoteSap找到所有上架任务 */
    List<ShelfOnTask> getShelfOnTask(String deliveryNoteSap);

    /* 3. 根据uuid找到上架任务明细，返回箱码，库位对照表*/
    List<ShelfOnTaskDtl> getShelfOnTaskDtl(String uuid);

    /* 4. 检查储位库存，如果所有箱码都在储位能找到，则允许撤销，如果有任何的箱码不能从储位找到，则不允许撤销，返回撤销失败*/
    ResponseResult checkStorageInventory(String werks, String whsLocationCode,List<SapBoxNote> sapBoxNotes);

    /*检查储位库存，确保所有的箱码在储位库存中不存在，则允许撤销，如果有任何的箱码在储位存在，则不应该再撤销*/
    ResponseResult ensureBoxNoteNotExit(String werks, String whsLocationCode,List<SapBoxNote> sapBoxNotes);


    /* 6. 对于已上架的入库任务， 生成下架任务单，完成下架任务，扣减储位库存*/
    ResponseResult createShelfOnTaskDeduct(ShelfOnTask shelfOnTask, List<ShelfOnTaskDtl> shelfOnTaskDtls,String userId,String createDate);


    /* 7. 扣减仓库库存*/
    ResponseResult deductWhsInventoryInfo(String werks, String whsLocationCode,String boxNote,String userId);

    /* 8. 重置SAP_BOX_NOTE_DTL DOMESTIC_QTY_RECEIVED 为0，DOMESTIC_QTY_RECEIVABLE 为0*/
    ResponseResult updateSapBoxNoteDtl(String boxNote);

    /* 9. 重置 SAP_BOX_NOTE, BOX_QTY_RECEIVED为0，ITDM_STATUS重置为0*/
    ResponseResult updateSapBoxNote(String boxNote);

    /* 10. 重置 SAP_DELIVERY_NOTE
     *  SPMS_STATUS 0,
     *  DOCUMENT_DATE,
     *  POSTING_DATE,
     *  MOBILE_TYPE,
     *  USER_ID,
     *  PDA_SN,
     *  SAP_VOUCHER_NUMBER,
     *  SAP_VOUCHER_YEAR
     *  设为空
     *  */

    ResponseResult updateSapDeliveryNote(String deliveryNoteSap);

}


