162 lines
5.9 KiB
Transact-SQL
162 lines
5.9 KiB
Transact-SQL
IF OBJECT_ID(N'dbo.proc_update_pdbill_status', N'P') IS NOT NULL
|
|
DROP PROCEDURE dbo.proc_update_pdbill_status
|
|
GO
|
|
|
|
CREATE PROCEDURE dbo.proc_update_pdbill_status
|
|
@v_stockpd_id VARCHAR(80),
|
|
@v_status INT,
|
|
@v_result INT OUTPUT,
|
|
@v_resultString VARCHAR(500) OUTPUT
|
|
AS
|
|
BEGIN
|
|
SET NOCOUNT ON;
|
|
SET XACT_ABORT ON;
|
|
|
|
DECLARE @target_status NVARCHAR(5) = CONVERT(NVARCHAR(5), @v_status);
|
|
DECLARE @now DATETIME2 = SYSDATETIME();
|
|
|
|
BEGIN TRY
|
|
SET @v_result = 0;
|
|
SET @v_resultString = '';
|
|
|
|
IF @v_stockpd_id IS NULL OR LTRIM(RTRIM(@v_stockpd_id)) = ''
|
|
BEGIN
|
|
SET @v_resultString = N'盘点单号不能为空';
|
|
RETURN;
|
|
END
|
|
|
|
IF @target_status NOT IN (N'2', N'4', N'5')
|
|
BEGIN
|
|
SET @v_resultString = N'不支持的盘点状态';
|
|
RETURN;
|
|
END
|
|
|
|
IF NOT EXISTS (SELECT 1 FROM dbo.pd_stockpd WHERE stockpd_id = @v_stockpd_id)
|
|
BEGIN
|
|
IF @target_status IN (N'4', N'5') AND EXISTS (SELECT 1 FROM dbo.pd_stockpd_finish WHERE stockpd_id = @v_stockpd_id)
|
|
BEGIN
|
|
SET @v_result = 10;
|
|
SET @v_resultString = CASE WHEN @target_status = N'5' THEN N'盘点单据已作废' ELSE N'盘点单据已完成' END;
|
|
RETURN;
|
|
END
|
|
|
|
SET @v_resultString = N'盘点单据不存在';
|
|
RETURN;
|
|
END
|
|
|
|
BEGIN TRANSACTION;
|
|
|
|
IF @target_status = N'2'
|
|
BEGIN
|
|
UPDATE dbo.pd_stockpd
|
|
SET status = N'2',
|
|
start_date = CASE WHEN start_date IS NULL THEN @now ELSE start_date END
|
|
WHERE stockpd_id = @v_stockpd_id;
|
|
|
|
COMMIT TRANSACTION;
|
|
SET @v_result = 10;
|
|
SET @v_resultString = N'审核成功';
|
|
RETURN;
|
|
END
|
|
|
|
IF @target_status = N'5'
|
|
BEGIN
|
|
INSERT INTO dbo.pd_stockpd_finish (
|
|
stockpd_id, pd_type, stock_source, status, create_date, start_date, finish_date,
|
|
erp_bill, warehouse_id, warehouse_name, user_id, user_name, dept_id, dept_name
|
|
)
|
|
SELECT
|
|
p.stockpd_id, p.pd_type, p.stock_source, N'5', p.create_date,
|
|
p.start_date,
|
|
CASE WHEN p.finish_date IS NULL THEN @now ELSE p.finish_date END,
|
|
p.erp_bill, p.warehouse_id, p.warehouse_name, p.user_id, p.user_name, p.dept_id, p.dept_name
|
|
FROM dbo.pd_stockpd p
|
|
WHERE p.stockpd_id = @v_stockpd_id
|
|
AND NOT EXISTS (
|
|
SELECT 1
|
|
FROM dbo.pd_stockpd_finish f
|
|
WHERE f.stockpd_id = p.stockpd_id
|
|
);
|
|
|
|
INSERT INTO dbo.pd_stockpd_detail_finish (
|
|
stockpd_detail_id, stockpd_id, tray_code, product_id, product_name, quantity,
|
|
allot_num, assign_num, remark, stock_id, stock_detail_id, cargo_space_id,
|
|
cargo_space_name, warehouse_id, warehouse_name
|
|
)
|
|
SELECT
|
|
d.stockpd_detail_id, d.stockpd_id, d.tray_code, d.product_id, d.product_name, d.quantity,
|
|
d.allot_num, d.assign_num, d.remark, d.stock_id, d.stock_detail_id, d.cargo_space_id,
|
|
d.cargo_space_name, d.warehouse_id, d.warehouse_name
|
|
FROM dbo.pd_stockpd_detail d
|
|
WHERE d.stockpd_id = @v_stockpd_id
|
|
AND NOT EXISTS (
|
|
SELECT 1
|
|
FROM dbo.pd_stockpd_detail_finish f
|
|
WHERE f.stockpd_detail_id = d.stockpd_detail_id
|
|
);
|
|
|
|
DELETE FROM dbo.pd_stockpd_detail
|
|
WHERE stockpd_id = @v_stockpd_id;
|
|
|
|
DELETE FROM dbo.pd_stockpd
|
|
WHERE stockpd_id = @v_stockpd_id;
|
|
|
|
COMMIT TRANSACTION;
|
|
SET @v_result = 10;
|
|
SET @v_resultString = N'作废成功';
|
|
RETURN;
|
|
END
|
|
|
|
INSERT INTO dbo.pd_stockpd_finish (
|
|
stockpd_id, pd_type, stock_source, status, create_date, start_date, finish_date,
|
|
erp_bill, warehouse_id, warehouse_name, user_id, user_name, dept_id, dept_name
|
|
)
|
|
SELECT
|
|
p.stockpd_id, p.pd_type, p.stock_source, N'4', p.create_date,
|
|
CASE WHEN p.start_date IS NULL THEN @now ELSE p.start_date END,
|
|
CASE WHEN p.finish_date IS NULL THEN @now ELSE p.finish_date END,
|
|
p.erp_bill, p.warehouse_id, p.warehouse_name, p.user_id, p.user_name, p.dept_id, p.dept_name
|
|
FROM dbo.pd_stockpd p
|
|
WHERE p.stockpd_id = @v_stockpd_id
|
|
AND NOT EXISTS (
|
|
SELECT 1
|
|
FROM dbo.pd_stockpd_finish f
|
|
WHERE f.stockpd_id = p.stockpd_id
|
|
);
|
|
|
|
INSERT INTO dbo.pd_stockpd_detail_finish (
|
|
stockpd_detail_id, stockpd_id, tray_code, product_id, product_name, quantity,
|
|
allot_num, assign_num, remark, stock_id, stock_detail_id, cargo_space_id,
|
|
cargo_space_name, warehouse_id, warehouse_name
|
|
)
|
|
SELECT
|
|
d.stockpd_detail_id, d.stockpd_id, d.tray_code, d.product_id, d.product_name, d.quantity,
|
|
d.allot_num, d.assign_num, d.remark, d.stock_id, d.stock_detail_id, d.cargo_space_id,
|
|
d.cargo_space_name, d.warehouse_id, d.warehouse_name
|
|
FROM dbo.pd_stockpd_detail d
|
|
WHERE d.stockpd_id = @v_stockpd_id
|
|
AND NOT EXISTS (
|
|
SELECT 1
|
|
FROM dbo.pd_stockpd_detail_finish f
|
|
WHERE f.stockpd_detail_id = d.stockpd_detail_id
|
|
);
|
|
|
|
DELETE FROM dbo.pd_stockpd_detail
|
|
WHERE stockpd_id = @v_stockpd_id;
|
|
|
|
DELETE FROM dbo.pd_stockpd
|
|
WHERE stockpd_id = @v_stockpd_id;
|
|
|
|
COMMIT TRANSACTION;
|
|
SET @v_result = 10;
|
|
SET @v_resultString = N'完成成功';
|
|
END TRY
|
|
BEGIN CATCH
|
|
IF @@TRANCOUNT > 0
|
|
ROLLBACK TRANSACTION;
|
|
|
|
SET @v_result = 0;
|
|
SET @v_resultString = LEFT(ERROR_MESSAGE(), 500);
|
|
END CATCH
|
|
END
|