USE [YL_MESDB]
GO

ALTER PROCEDURE [dbo].[装配中心任务看板_发货状态查询]
    @生产订单 nvarchar(4000) = N'0',
    @销售订单 nvarchar(4000) = N'0',
    @物料名称 nvarchar(4000) = N'0',
    @物料编码 nvarchar(4000) = N'0',
    @要求发货日期 datetime = NULL,
    @齐套 nvarchar(20) = N'',
    @发料状态 nvarchar(20) = N''
AS
BEGIN
    SET NOCOUNT ON;

    SELECT
        a.TaskAID,
        a.[订单编号],
        a.[合同号],
        a.[订单类型],
        a.[订单状态],
        a.[物料编号],
        a.[物料描述],
        a.[计划数量],
        a.[计量单位],
        a.[下达日期],
        a.[计划开始],
        a.[计划完成],
        a.[项目代码],
        a.[重量],
        a.[占用情况],
        a.[加急状态],
        a.[排产状态],
        a.[同步时间],
        a.[任务状态],
        a.[标准工艺],
        a.[生产工艺],
        a.[齐套],
        a.[自制件属性],
        a.[周转单打印次数],
        a.[单据状态],
        a.[发料状态],
        a.[拣配状态],
        a.[计划号],
        a.[加急数量],
        a.[发货状态],
        a.[要求发货日期],
        a.[加急总数],
        a.[入库数量],
        b.操作人,
        c.交货数量
    FROM [YL_MESDB].[dbo].[View_生产订单_MES] a
    LEFT JOIN [dbo].[YL_加工中心_操作记录表] b ON a.TaskAID = b.TaskAID
    LEFT JOIN SAP.SBO_YL.dbo.UBT_ODRF_ODLNMES c ON a.订单编号 = c.生产单号
    WHERE ISNULL(a.发货状态, N'') = N'1'
      AND ISNULL(a.任务状态, 0) < 4
      AND a.自制件属性 LIKE N'%装配%'
      AND (@生产订单 = N'0' OR CONVERT(nvarchar(100), a.订单编号) LIKE N'%' + @生产订单 + N'%')
      AND (@销售订单 = N'0' OR ISNULL(a.合同号, N'') LIKE N'%' + @销售订单 + N'%')
      AND (@物料名称 = N'0' OR ISNULL(a.物料描述, N'') LIKE N'%' + @物料名称 + N'%')
      AND (@物料编码 = N'0' OR ISNULL(a.物料编号, N'') LIKE N'%' + @物料编码 + N'%')
      AND (@要求发货日期 IS NULL OR CONVERT(date, a.要求发货日期) = CONVERT(date, @要求发货日期))
      AND (
            ISNULL(@齐套, N'') = N''
            OR (@齐套 = N'是' AND ISNULL(a.齐套, 0) = 1)
            OR (@齐套 = N'否' AND ISNULL(a.齐套, 0) <> 1)
          )
      AND (
            ISNULL(@发料状态, N'') = N''
            OR (@发料状态 = N'发料齐套' AND (a.发料状态 = N'发料齐套' OR ISNULL(a.发料状态, N'') = N'1'))
            OR (@发料状态 = N'发料缺件' AND (a.发料状态 = N'发料缺件' OR ISNULL(a.发料状态, N'') = N'2'))
            OR (@发料状态 = N'未发料' AND ISNULL(a.发料状态, N'') NOT IN (N'1', N'2', N'发料齐套', N'发料缺件'))
          )
    ORDER BY a.要求发货日期;
END
GO
