Advertisement
Guest User

Untitled

a guest
Jul 26th, 2017
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 33.69 KB | None | 0 0
  1. USE [Adayroi_TMS]
  2. GO
  3. /****** Object: StoredProcedure [dbo].[APIClient_PO_UpdatePOStatusID_V01] Script Date: 7/27/2017 11:23:33 AM ******/
  4. SET ANSI_NULLS ON
  5. GO
  6. SET QUOTED_IDENTIFIER ON
  7. GO
  8.  
  9. -- =============================================
  10. -- Entity Name: APIClient_PO_UpdatePOStatusID_V01
  11. -- Author: Hoàng Anh Thủy
  12. -- Create date: 14/12/2014 09:44:33
  13. -- Description: Lấy chi tiết của 1 pickup
  14. -- =============================================
  15. ALTER PROCEDURE [dbo].[APIClient_PO_UpdatePOStatusID_V01]
  16. (
  17. @ListPoIds NVARCHAR(MAX),
  18. @StatusId INT,
  19. @IsOk bit = 1,
  20. @ListSoDetailSerials NVARCHAR(MAX),
  21. @userId int,
  22. @sessionkey varchar(255)
  23. )
  24. AS
  25. BEGIN
  26. DECLARE @result BIT
  27. DECLARE @Msg NVARCHAR(MAX)
  28. DECLARE @PROC_NAME VARCHAR(250) = OBJECT_NAME(@@PROCID)
  29. BEGIN TRY
  30. EXEC [dbo].[CHECK_SESSION_AND_PERMISSION] @userId, @sessionkey, @PROC_NAME
  31.  
  32. DECLARE @iDoc INT
  33. DECLARE @iDocImei INT;
  34. EXEC sp_xml_preparedocument @iDoc out, @ListPoIds
  35. EXEC sp_xml_preparedocument @iDocImei out, @ListSoDetailSerials;
  36.  
  37. DECLARE @SodetailTable TABLE (
  38. SoDetailId bigint,
  39. PoId bigint,
  40. SoDetailStatus int,
  41. PoStatus int,
  42. PuId int,
  43. ReasonId int,
  44. ReasonName nvarchar(250),
  45. DeliveryFlowId int,
  46. SOId bigint,
  47. Amount int,
  48. SellPrice decimal(18,4),
  49. SODetailStatusID int,
  50. ClientSoId bigint,
  51. MerchantDatePickupFrom varchar(20),
  52. MerchantDatePickupTo varchar(20),
  53. IsUsedVinId bit,
  54. SourceClientId int,
  55. MTID int,
  56. IsVinIdCard bit,
  57. ProductItemId int,
  58. HybrisProductItemId varchar(30),
  59. SAPReservationNumber nvarchar(100),
  60. SAPPONumberInterim nvarchar(100),
  61. SAPReservationLineItem nvarchar(200)
  62. PRIMARY KEY (SoDetailId, PoId, PuId)
  63. )
  64.  
  65. INSERT INTO @SodetailTable
  66. SELECT sd.SODetailID
  67. , po.PoId
  68. , CASE WHEN S.StatusId = 3 AND po.DeliveryFlowId = 2 AND ISNULL(s2.IsDeliveryPiC, 0) = 0 THEN 7
  69. WHEN S.StatusId = 3 AND po.DeliveryFlowId = 2 AND ISNULL(s2.IsDeliveryPiC, 0) = 1 THEN 18
  70. WHEN S.StatusId = 5 THEN 16 ELSE S.StatusId END
  71. , CASE WHEN S.StatusId = 3 AND po.DeliveryFlowId = 2 THEN 4 ELSE S.StatusId END
  72. , S.PuId
  73. , S.ReasonId
  74. , S.ReasonName
  75. , po.DeliveryFlowId
  76. , sd.SOId
  77. , sd.Amount
  78. , sd.SellPrice
  79. , sd.SODetailStatusID
  80. , sd.ClientSoId
  81. , S.MerchantDatePickupFrom
  82. , S.MerchantDatePickupTo
  83. , ISNULL(po.IsUsedVinId, 0)
  84. , s2.SourceClientId
  85. , po.MTID
  86. , sd.IsVinIdCard
  87. , cp.ProductItemId
  88. , cp.HybrisProductItemId
  89. , sd.SAPReservationNumber
  90. , sd.SAPPONumberInterim
  91. , sd.SAPReservationLineItem
  92. FROM OPENXML(@iDoc, '/ArrayOfPoConfirmPost/PoConfirmPost', 8) WITH
  93. (
  94. PoId BIGINT 'PoId',
  95. StatusId int 'StatusId',
  96. ReasonId int 'ReasonId',
  97. PuId int 'PuId',
  98. ReasonName nvarchar(250) 'ReasonName',
  99. MerchantDatePickupFrom varchar(20) 'MerchantDatePickupFrom',
  100. MerchantDatePickupTo varchar(20) 'MerchantDatePickupTo'
  101. ) AS S
  102. INNER JOIN dbo.PurchaseOrder po WITH (NOLOCK) ON po.PoId = S.PoId
  103. INNER JOIN dbo.SO_Detail sd WITH (NOLOCK) ON sd.ClientPoId = po.ClientPoId
  104. INNER JOIN dbo.SO s2 WITH (NOLOCK) ON s2.SOID = sd.SOId
  105. INNER JOIN dbo.ClientProduct cp WITH (NOLOCK) ON cp.ClientProductId = sd.ClientProductId
  106. WHERE sd.Visible = 1 AND S.StatusId <> 2
  107.  
  108. /*------------------------------*/
  109. -- Thong tin phi PO
  110. DECLARE @PoFeeInfo TABLE (
  111. ClientSoId bigint,
  112. ClientPoId bigint,
  113. ProductItemId int,
  114. Fee decimal(18,0)
  115. )
  116.  
  117. INSERT INTO @PoFeeInfo
  118. SELECT DISTINCT
  119. sdit.ClientSoId,
  120. sdit.PoId,
  121. pofm.ProductItemId,
  122. pofm.Fee
  123. FROM @SodetailTable sdit
  124. INNER JOIN dbo.PurchaseOrder_Fee_Map pofm WITH (NOLOCK) ON sdit.PoId = pofm.ClientPoId
  125. WHERE sdit.SourceClientId = 1 AND pofm.IsActiveFee = 1 AND pofm.Visible = 1 AND pofm.Status = 1
  126. /*------------------------------*/
  127.  
  128. /* Sap Po ------------------------------------------------*/
  129. DECLARE @SapPo TABLE (
  130. PoId bigint
  131. )
  132.  
  133. INSERT INTO @SapPo
  134. SELECT DISTINCT st.PoId
  135. FROM @SodetailTable st
  136. WHERE st.PoStatus IN (3,4) AND st.SourceClientId = 2 AND st.MTID IN (2,3,4,5)
  137. GROUP BY st.PoId
  138. /* -------------------------------------------------------- */
  139.  
  140. /* Input SoDetail Serial----------------------------------- */
  141. DECLARE @SoDetailSerial TABLE (
  142. SoDetailId bigint,
  143. ImeiSerial VARCHAR(250),
  144. IsVinIdCard bit
  145. )
  146.  
  147. INSERT INTO @SoDetailSerial
  148. SELECT S.SoDetailId,
  149. S.ImeiSerial,
  150. st.IsVinIdCard
  151. FROM OPENXML(@iDocImei, '/ArrayOfImeiProductBulkyGoods/ImeiProductBulkyGoods',8)
  152. WITH(
  153. SoDetailId BIGINT 'SoDetailId',
  154. ImeiSerial VARCHAR(250) 'ImeiSerial'
  155. ) S
  156. INNER JOIN @SodetailTable st ON st.SoDetailId = S.SoDetailId
  157.  
  158. EXEC sp_xml_removedocument @idoc;
  159. EXEC sp_xml_removedocument @iDocImei;
  160. /* -------------------------------------------------------- */
  161.  
  162. IF EXISTS (SELECT 1 FROM @SodetailTable AS S
  163. INNER JOIN PickUpDetail pud WITH (NOLOCK) ON pud.PoId = S.PoId AND pud.PuId = S.PuId
  164. WHERE pud.PuDetailStatus = 1 OR S.SODetailStatusID <> 2)
  165. BEGIN
  166. SELECT 0 AS IsSuccess, N'Có PO đã được cập nhật! Xin hãy làm mới dữ liệu!' AS MessageError
  167. RETURN
  168. END
  169.  
  170. DECLARE @UserStationId INT = 0
  171. SELECT @UserStationId = uu.SID FROM dbo.UM_Users uu WITH (NOLOCK) WHERE uu.UserId = @userId
  172.  
  173. DECLARE @UserCodId INT = 0
  174. SELECT @UserCodId = pu.CodId FROM @SodetailTable st INNER JOIN dbo.PickUp pu WITH (NOLOCK) ON pu.PuId = st.PuId
  175. END TRY
  176. BEGIN CATCH
  177. SELECT 0 AS IsSuccess, N'Có lỗi phát sinh trong quá trình xử lý dữ liệu đầu vào!' AS MessageError
  178. RETURN
  179. END CATCH
  180.  
  181. DECLARE @RetryCounter INT
  182. SET @RetryCounter = 1
  183. RETRY: -- Label RETRY
  184.  
  185. BEGIN TRAN T
  186. BEGIN TRY
  187. UPDATE LockTablePO SET COUNT=1 WHERE ID=1
  188. UPDATE LockTableSoDetail SET COUNT=1 WHERE ID = 1
  189.  
  190. DECLARE @DeliveryTable TABLE (DeliverySlipsId int, StatusId int)
  191. DECLARE @DeliveryTableCash TABLE (DeliverySlipsId int)
  192.  
  193. IF EXISTS (SELECT 1 FROM @SoDetailSerial sds)
  194. BEGIN
  195. -- Insert into [dbo].[SO_Detail_Serial]
  196. INSERT INTO [dbo].[SO_Detail_Serial]
  197. ([SODetailID]
  198. ,[SerialNumber]
  199. ,[ExpireDate]
  200. ,[CreatedDate]
  201. ,[CreatedBy]
  202. ,[StatusId])
  203. SELECT s.SoDetailId, s.ImeiSerial, NULL, GETDATE(), @userId , CASE WHEN st.DeliveryFlowId = 2 THEN 59 ELSE 67 END
  204. FROM @SoDetailSerial s
  205. INNER JOIN @SodetailTable st ON st.SoDetailId = s.SoDetailId
  206. END
  207.  
  208. --Update lại trạng thái cho PickUp
  209. UPDATE [dbo].[PickUp]
  210. SET [PuStatus] = 6, [FinishDate] = GETDATE()
  211. FROM dbo.PickUp pu
  212. INNER JOIN (SELECT DISTINCT st.PuId FROM @SodetailTable st) AS S ON S.PuId = pu.PuId
  213. WHERE pu.PuStatus = 5 AND
  214. NOT EXISTS(SELECT 1
  215. FROM [dbo].[PurchaseOrder] PO INNER JOIN [dbo].[PickUpDetail] PD ON PO.PoId = PD.[PoId]
  216. WHERE PD.[PuId] = pu.PuId AND PO.POStatusId = 2 AND ISNULL(PD.PuDetailStatus, 0) = 0
  217. AND NOT EXISTS(SELECT 1 FROM @SodetailTable st1 WHERE st1.PuId = PD.PuId AND st1.PoId = PD.PoId))
  218.  
  219. UPDATE dbo.PickUpDetail
  220. SET
  221. dbo.PickUpDetail.IsComplete = CASE WHEN S.PoStatus IN (3, 4) THEN 1 ELSE 0 END, -- bit
  222. dbo.PickUpDetail.IsAgain = CASE WHEN S.PoStatus = 1 THEN 1 ELSE 0 END, -- bit
  223. dbo.PickUpDetail.IsCancel = CASE WHEN S.PoStatus = 5 THEN 1 ELSE 0 END, -- bit
  224. dbo.PickUpDetail.ReasonId = S.ReasonId, -- int
  225. dbo.PickUpDetail.ReasonDescription = S.ReasonName,
  226. dbo.PickUpDetail.ModifyDate = GETDATE(), -- datetime
  227. dbo.PickUpDetail.ModifyBy = @userId, -- int
  228. dbo.PickUpDetail.PuDetailStatus = 1
  229. FROM dbo.PickUpDetail pud INNER JOIN (SELECT DISTINCT st.PoId, st.PuId, st.PoStatus, st.ReasonId, st.ReasonName FROM @SodetailTable st) AS S ON pud.PoId = S.PoId AND pud.PuId = S.PuId
  230.  
  231. -- Them log SpecialNotes
  232. DECLARE @UserName nvarchar(150)
  233. SELECT @UserName = FullName FROM dbo.UM_Users uu WHERE uu.UserId = @userId
  234. INSERT INTO dbo.SpecialNotes
  235. (
  236. --Id - this column value is auto-generated
  237. dbo.SpecialNotes.CreatedBy,
  238. dbo.SpecialNotes.FullName,
  239. dbo.SpecialNotes.DepartmentName,
  240. dbo.SpecialNotes.CreatedDate,
  241. dbo.SpecialNotes.Note,
  242. dbo.SpecialNotes.ClientSoId,
  243. dbo.SpecialNotes.SoId
  244. )
  245. SELECT DISTINCT
  246. @userId,
  247. @UserName,
  248. 'TMS',
  249. GETDATE(),
  250. CONCAT(N'PO ', st.PoId, N' hẹn lại: ', st.ReasonName), -- , FORMAT(st.SourceClientId, N'00'),
  251. st.ClientSoId,
  252. st.SOId
  253. FROM @SodetailTable st
  254. WHERE st.PoStatus = 1
  255. ------------------------
  256.  
  257. UPDATE P SET POStatusId = S.PoStatus,
  258. CompleteDatetime = CASE WHEN S.PoStatus > 2 THEN GETDATE() ELSE NULL END,
  259. UID_COD = CASE WHEN S.PoStatus = 1 THEN NULL ELSE UID_COD END,
  260. MerchantPickupDateFrom = CASE WHEN S.PoStatus = 1 THEN CONVERT(Datetime, S.MerchantDatePickupFrom, 120) ELSE P.MerchantPickupDateFrom END,
  261. MerchantPickupDateTo = CASE WHEN S.PoStatus = 1 THEN CONVERT(Datetime, S.MerchantDatePickupTo, 120) ELSE P.MerchantPickupDateTo END
  262. FROM PurchaseOrder P INNER JOIN @SodetailTable AS S ON P.PoId = S.PoId
  263.  
  264. UPDATE [dbo].[PurchaseOrder_Detail]
  265. SET [PODetailStatusID] = S.PoStatus,
  266. [ReasonID] = (CASE WHEN S.PoStatus = 5 THEN S.ReasonId ELSE NULL END),
  267. [Note] = CASE WHEN S.PoStatus = 1 THEN S.ReasonName ELSE PD.Note END
  268. FROM [PurchaseOrder_Detail] PD INNER JOIN @SodetailTable AS S ON PD.PoId = S.PoId
  269.  
  270. -- Insert into Log_Information action type SoDetail
  271. INSERT INTO [dbo].[Log_Information]
  272. ([ObjectTypeId]
  273. ,[ObjectId]
  274. ,[ActionId]
  275. ,[LogDetails]
  276. ,[CreatedBy]
  277. ,[CreatedDate]
  278. ,[UID_AssignTo]
  279. ,[OldStatusId]
  280. ,[NewStatusId]
  281. ,StationId)
  282. SELECT 3, S.SoDetailId, 3, NULL, @userId, GETDATE(), @UserCodId, 2, S.SoDetailStatus, @UserStationId
  283. FROM @SodetailTable S
  284.  
  285. -- Insert into Log_Information action type PurchaseOrder
  286. INSERT INTO [dbo].[Log_Information]( [ObjectTypeId],
  287. [ObjectId],
  288. [ActionId],
  289. [LogDetails],
  290. [CreatedBy],
  291. [CreatedDate],
  292. [UID_AssignTo],
  293. [OldStatusId],
  294. [NewStatusId],
  295. StationId )
  296. SELECT DISTINCT 2, S.PoId, 3, NULL, @userId, GETDATE(), @UserCodId, 2, S.PoStatus, @UserStationId
  297. FROM @SodetailTable S
  298.  
  299. -- Update trạng thái SoDetail
  300. UPDATE [dbo].[SO_Detail] SET
  301. [SODetailStatusID] = S.SoDetailStatus,
  302. ReasonID = (CASE WHEN S.PoStatus = 5 THEN S.ReasonId ELSE NULL END),
  303. [ReasonCanceledOrther] = CASE WHEN S.PoStatus = 5 AND r.ReasonName LIKE N'Lý do khác' THEN S.ReasonName ELSE N'' END,
  304. SoDetailStatusLastUpdateTime = GETDATE()
  305. FROM SO_Detail SD INNER JOIN @SodetailTable AS S ON S.SoDetailId = SD.SODetailID
  306. LEFT JOIN dbo.Reason r ON r.ReasonId = S.ReasonId
  307.  
  308. -- Update DeliveryDetail visible = 0 cho PO huy
  309. UPDATE dbo.DE_DeliverySlipsDetails
  310. SET dbo.DE_DeliverySlipsDetails.Visible = 0
  311. FROM dbo.DE_DeliverySlipsDetails ddsd
  312. INNER JOIN @SodetailTable AS S ON S.SoDetailId = ddsd.SoDetailId
  313. WHERE ddsd.Visible = 1 AND S.DeliveryFlowId = 2 AND (S.PoStatus = 5 OR S.PoStatus = 1)
  314.  
  315. -- Delivery need to Update status
  316. IF EXISTS(SELECT 1 FROM @SodetailTable S
  317. WHERE S.PoStatus IN (1, 5) AND S.DeliveryFlowId = 2
  318. )
  319. BEGIN
  320. INSERT INTO @DeliveryTable
  321. SELECT c.DeliverySlipsId,
  322. CASE WHEN EXISTS (
  323. SELECT 1 FROM dbo.DE_DeliverySlipsDetails ddsd1 WITH (NOLOCK)
  324. WHERE ddsd1.DeliverySlipsId = c.DeliverySlipsId AND ddsd1.Visible = 1 AND (ISNULL(ddsd1.IsAgain, 0) = 1 OR ISNULL(ddsd1.IsCanceled, 0) = 1))
  325. THEN 28
  326. ELSE 29 END
  327. FROM (SELECT DISTINCT MAX(ddsd.DeliverySlipsId) AS DeliverySlipsId--po.PoId, SD.SOId
  328. FROM @SodetailTable S
  329. INNER JOIN dbo.Packing_Detail pd WITH (NOLOCK) ON pd.SoDetailId = S.SODetailID
  330. INNER JOIN dbo.DE_DeliverySlipsDetails ddsd WITH (NOLOCK) ON ddsd.PackingDetailId = pd.PackingDetailId
  331. WHERE S.PoStatus IN (1, 5) AND S.DeliveryFlowId = 2
  332. GROUP BY S.SODetailID) c
  333. WHERE NOT EXISTS (
  334. SELECT 1
  335. FROM dbo.DE_DeliverySlipsDetails ddsd WITH (NOLOCK)
  336. INNER JOIN dbo.SO_Detail sd WITH (NOLOCK) ON sd.SODetailID = ddsd.SoDetailId
  337. WHERE ddsd.DeliverySlipsId = c.DeliverySlipsId AND sd.Visible = 1 AND ddsd.Visible = 1 AND ISNULL(ddsd.Status, 0) IN (0, 28))
  338.  
  339. INSERT INTO @DeliveryTableCash
  340. SELECT dt.DeliverySlipsId
  341. FROM @DeliveryTable dt
  342. WHERE EXISTS (
  343. SELECT 1
  344. FROM DE_DeliverySlipsDetails DESD WITH (NOLOCK)
  345. INNER JOIN dbo.SO_Detail sd WITH (NOLOCK) ON (sd.ParentSoDetailId = DESD.SoDetailId or sd.SoDetailId = DESD.SoDetailId)
  346. WHERE
  347. sd.SODetailStatusID = 13 AND
  348. sd.Visible = 1 AND
  349. DESD.IsCompleted = 1 AND
  350. DESD.DeliverySlipsId = dt.DeliverySlipsId)
  351. END
  352.  
  353. INSERT INTO dbo.PurchaseOrder_MerchantDate
  354. (
  355. --Id - this column value is auto-generated
  356. dbo.PurchaseOrder_MerchantDate.PoId,
  357. dbo.PurchaseOrder_MerchantDate.DateFrom,
  358. dbo.PurchaseOrder_MerchantDate.DateTo,
  359. dbo.PurchaseOrder_MerchantDate.ReasonName,
  360. dbo.PurchaseOrder_MerchantDate.UserCreate,
  361. dbo.PurchaseOrder_MerchantDate.ImportSource
  362. )
  363. SELECT DISTINCT
  364. st.PoId,
  365. CONVERT(Datetime, st.MerchantDatePickupFrom, 120),
  366. CONVERT(Datetime, st.MerchantDatePickupTo, 120),
  367. N'TMS' + st.ReasonName,
  368. @userId,
  369. N'Logistics'
  370. FROM @SodetailTable st
  371. WHERE st.PoStatus = 1
  372.  
  373. INSERT INTO dbo.SAP_LogDateImportPoid
  374. (
  375. dbo.SAP_LogDateImportPoid.POID,
  376. dbo.SAP_LogDateImportPoid.ImportDate,
  377. dbo.SAP_LogDateImportPoid.CreatedDate
  378. )
  379. SELECT DISTINCT S.PoId, GETDATE(), GETDATE()
  380. FROM @SodetailTable AS S WHERE S.PoStatus = 4 AND S.DeliveryFlowId = 2
  381.  
  382. DECLARE @tbl as SAP_TableGoodsReceivePO
  383. INSERT INTO @tbl
  384. SELECT
  385. sp.PoId
  386. , 315 AS ifcode
  387. FROM @SapPo sp
  388. EXEC [APIClient_SAP_CreateGoodsReceiptDO_InsertLogToSync_Sale_V01] @tbl
  389. /*---------------------------------------------------------------------------------------------------------------*/
  390.  
  391. /* ------------------ Hybris status sync ------------------------------------------------------------------*/
  392. DECLARE @StatusUpdateInserted TABLE (
  393. Log_UpdateDeliveryId bigint,
  394. ClientSoId bigint,
  395. ClientPoId bigint
  396. )
  397.  
  398. INSERT INTO dbo.Log_UpdateDeliveryStatus
  399. (
  400. --Log_UpdateDeliveryId - this column value is auto-generated
  401. dbo.Log_UpdateDeliveryStatus.SourceClientId,
  402. dbo.Log_UpdateDeliveryStatus.ClientSoId,
  403. dbo.Log_UpdateDeliveryStatus.ClientPoId,
  404. dbo.Log_UpdateDeliveryStatus.CreatedBy,
  405. dbo.Log_UpdateDeliveryStatus.CreatedDatetime,
  406. dbo.Log_UpdateDeliveryStatus.Visible,
  407. dbo.Log_UpdateDeliveryStatus.RetryCount
  408. )
  409. OUTPUT INSERTED.Log_UpdateDeliveryId, INSERTED.ClientSoId, INSERTED.ClientPoId INTO @StatusUpdateInserted
  410. SELECT DISTINCT st.SourceClientId,
  411. st.ClientSoId,
  412. st.PoId,
  413. @userId,
  414. GETDATE(),
  415. 1,
  416. 0
  417. FROM @SodetailTable st
  418. WHERE st.SourceClientId = 2 AND st.SoDetailStatus <> 1
  419.  
  420. INSERT INTO dbo.Log_UpdateDeliveryStatus_Detail
  421. (
  422. --Log_UpdateDeliveryDetailId - this column value is auto-generated
  423. dbo.Log_UpdateDeliveryStatus_Detail.Log_UpdateDeliveryId,
  424. dbo.Log_UpdateDeliveryStatus_Detail.So_DetailID,
  425. dbo.Log_UpdateDeliveryStatus_Detail.OldStatus,
  426. dbo.Log_UpdateDeliveryStatus_Detail.CurrentStatus,
  427. dbo.Log_UpdateDeliveryStatus_Detail.Amount,
  428. dbo.Log_UpdateDeliveryStatus_Detail.SellPrice,
  429. dbo.Log_UpdateDeliveryStatus_Detail.HybrisProductItemId,
  430. dbo.Log_UpdateDeliveryStatus_Detail.SAPReservationNumber,
  431. dbo.Log_UpdateDeliveryStatus_Detail.SAPPONumberInterim,
  432. dbo.Log_UpdateDeliveryStatus_Detail.SAPReservationLineItem
  433. )
  434. SELECT DISTINCT sui.Log_UpdateDeliveryId,
  435. st.SoDetailId,
  436. 64,
  437. CASE WHEN st.SoDetailStatus = 1 THEN 8
  438. WHEN st.SoDetailStatus = 16 THEN 16777216
  439. ELSE 128 END,
  440. st.Amount,
  441. st.SellPrice,
  442. st.HybrisProductItemId,
  443. st.SAPReservationNumber,
  444. st.SAPPONumberInterim,
  445. st.SAPReservationLineItem
  446. FROM @SodetailTable st INNER JOIN @StatusUpdateInserted sui ON st.ClientSoId = sui.ClientSoId AND st.PoId = sui.ClientPoId
  447.  
  448. INSERT INTO dbo.Log_UpdateDeliveryStatus_Serial
  449. (
  450. --Log_UpdateStatusSerialId - this column value is auto-generated
  451. dbo.Log_UpdateDeliveryStatus_Serial.Log_UpdateDeliveryDetailId,
  452. dbo.Log_UpdateDeliveryStatus_Serial.SerialNumber
  453. )
  454. SELECT ludsd.Log_UpdateDeliveryDetailId,
  455. sds.ImeiSerial
  456. FROM dbo.Log_UpdateDeliveryStatus_Detail ludsd
  457. INNER JOIN @SoDetailSerial sds ON sds.SoDetailId = ludsd.So_DetailID
  458. INNER JOIN @StatusUpdateInserted sui ON sui.Log_UpdateDeliveryId = ludsd.Log_UpdateDeliveryId
  459. WHERE sds.IsVinIdCard = 0
  460. GROUP BY ludsd.Log_UpdateDeliveryDetailId, sds.ImeiSerial
  461. /*---------------------------------------------------------------------------------------------------------*/
  462.  
  463. /* ------------------ OMS status sync 64 -> 128 ------------------------------------------------------------------*/
  464. DECLARE @TblOms AS Oms_UpdateSoDetailStatus
  465.  
  466. INSERT INTO @TblOms -- Product Item
  467. (
  468. SOID,
  469. PO,
  470. ProductItemId,
  471. Amount,
  472. CurrentStatus,
  473. DeliveryReasonId,
  474. DeliveryNote,
  475. OldStatus,
  476. PriceCustomer,
  477. SAPReservationNumber,
  478. SAPReservationLineItem,
  479. SAPPONumberInterim,
  480. Serials
  481. )
  482. SELECT
  483. st.ClientSoId,
  484. st.PoId,
  485. st.ProductItemId,
  486. st.Amount,
  487. CASE WHEN st.PoStatus = 1 THEN 8 ELSE 128 END,
  488. 0,
  489. '',
  490. 64,
  491. st.SellPrice,
  492. st.SAPReservationNumber,
  493. st.SAPReservationLineItem,
  494. st.SAPPONumberInterim,
  495. (
  496. SELECT sds.ImeiSerial AS string
  497. FROM @SoDetailSerial sds
  498. WHERE sds.SoDetailId = st.SoDetailId AND sds.IsVinIdCard = 0
  499. FOR XML PATH ('')
  500. )
  501. FROM @SodetailTable st
  502. WHERE st.SourceClientId = 1 AND st.PoStatus <> 5
  503. GROUP BY st.ClientSoId,
  504. st.PoId,
  505. st.ProductItemId,
  506. st.Amount,
  507. st.SellPrice,
  508. st.SAPReservationNumber,
  509. st.SAPReservationLineItem,
  510. st.SAPPONumberInterim,
  511. st.SoDetailId,
  512. st.PoStatus
  513.  
  514. INSERT INTO @TblOms -- Po Fee
  515. (
  516. SOID,
  517. PO,
  518. ProductItemId,
  519. Amount,
  520. CurrentStatus,
  521. DeliveryReasonId,
  522. DeliveryNote,
  523. OldStatus,
  524. PriceCustomer,
  525. SAPReservationNumber,
  526. SAPReservationLineItem,
  527. SAPPONumberInterim,
  528. Serials
  529. )
  530. SELECT DISTINCT
  531. pfi.ClientSoId,
  532. pfi.ClientPoId,
  533. pfi.ProductItemId,
  534. 1,
  535. CASE WHEN st.PoStatus = 1 THEN 8 ELSE 128 END,
  536. 0,
  537. '',
  538. 64,
  539. pfi.Fee,
  540. NULL,
  541. NULL,
  542. NULL,
  543. ''
  544. FROM @PoFeeInfo pfi
  545. INNER JOIN @SodetailTable st ON pfi.ClientPoId = st.PoId
  546. WHERE st.SourceClientId = 1 AND st.PoStatus <> 5
  547.  
  548. EXEC dbo.APIClient_OMS_CreateLogUpdateSoDetails_V01 @CurrentUser = @userId, @SessionKey = @sessionkey, @TblInput = @TblOms
  549.  
  550. -- Huy PO
  551. DECLARE @TblOmsCancelPo as OMS_CancelPo
  552.  
  553. INSERT INTO @TblOmsCancelPo
  554. (
  555. ClientSoId,
  556. PoId,
  557. DeliveryReasonId,
  558. DeliveryNote,
  559. UserId,
  560. CreateRpo
  561. )
  562. SELECT DISTINCT
  563. st.ClientSoId,
  564. st.PoId,
  565. st.ReasonId,
  566. st.ReasonName,
  567. @userId,
  568. 0
  569. FROM @SodetailTable st
  570. WHERE st.SourceClientId = 1 AND st.PoStatus = 5
  571.  
  572. EXEC dbo.APIClient_OMS_CreateLogCancelPo_V01 @CurrentUser = 12345, @SessionKey = '12345', @TblInput = @TblOmsCancelPo
  573. /*---------------------------------------------------------------------------------------------------------*/
  574.  
  575. /* ------------------ Vinpro status sync ------------------------------------------------------------------*/
  576. INSERT INTO dbo.Vinpro_Sync_Status
  577. (
  578. --SyncId - this column value is auto-generated
  579. dbo.Vinpro_Sync_Status.OrderNo,
  580. dbo.Vinpro_Sync_Status.ItemNo,
  581. dbo.Vinpro_Sync_Status.Quantity,
  582. dbo.Vinpro_Sync_Status.Status,
  583. dbo.Vinpro_Sync_Status.TMSCode,
  584. dbo.Vinpro_Sync_Status.CreatedDate,
  585. dbo.Vinpro_Sync_Status.IsSynced,
  586. dbo.Vinpro_Sync_Status.RetryCount,
  587. dbo.Vinpro_Sync_Status.CreatedBy
  588. )
  589. SELECT DISTINCT
  590. st.ClientSoId,
  591. st.HybrisProductItemId,
  592. st.Amount,
  593. 0,
  594. st.SoDetailId,
  595. GETDATE(),
  596. 0,
  597. 0,
  598. @userId
  599. FROM @SodetailTable st
  600. WHERE st.SourceClientId = 3 AND st.SoDetailStatus = 16
  601. /*---------------------------------------------------------------------------------------------------------*/
  602.  
  603. /* Nhập kho cho các sản phẩm hoàn thành */
  604. IF(EXISTS(SELECT 1 FROM @SodetailTable AS S WHERE S.PoStatus = 4 AND S.DeliveryFlowId = 2))
  605. BEGIN
  606. -- Tạo phiếu nhập kho
  607. DECLARE @warehouseSlipId bigint = 0
  608. DECLARE @warehouseSlipIdX bigint = 0
  609. DECLARE @stationWHId int = 0
  610. DECLARE @codId int = 0
  611. DECLARE @stationId int = 0
  612.  
  613. SELECT @stationId = P.SID_Tally, @codId = P.UID_COD FROM PurchaseOrder P INNER JOIN (SELECT DISTINCT st.PoId, st.PoStatus, st.DeliveryFlowId FROM @SodetailTable st) AS S ON P.PoId = S.PoId
  614. WHERE S.PoStatus = 4 AND S.DeliveryFlowId = 2
  615.  
  616. SELECT @stationWHId = COALESCE([StationWHId],0) FROM [Station_WHType]
  617. WHERE [SID]= @stationId AND [SWHTID] = 1
  618.  
  619. INSERT INTO [WH_WarehouseSlips]([UserIdRecipient], [UserIdDelivery], [StationWHId], [ActionTypeId], [DestinationStationId], [IsCompleted], [DateCompleted], [CompletedBy] )
  620. SELECT @userId, @codId, @stationWHId, 1, null, 1, GETDATE() , @userId
  621. SET @warehouseSlipId = @@IDENTITY
  622. -- Xóa chi tiết phiếu nhập kho
  623. --DELETE FROM [dbo].[WH_WarehouseSlip_Details] WHERE [WarehouseSlipId] = @warehouseSlipId
  624. -- Tạo chi tiết của phiếu nhập kho
  625. INSERT INTO [WH_WarehouseSlip_Details] ([WarehouseSlipId], [SoDetailId], [Quantity], [QuantityReceived])
  626. SELECT @warehouseSlipId, S.SoDetailId, S.Amount, S.Amount
  627. FROM @SodetailTable S
  628. WHERE S.PoStatus = 4 AND S.DeliveryFlowId = 2
  629. --Ghi log
  630. INSERT INTO [WH_DeliverySlip_Logs] ([DeliverySlipsId], [WarehouseSlipId], [CreatedBy])
  631. SELECT ddsd.DeliverySlipsId, @warehouseSlipId, @userId
  632. FROM
  633. SO_Detail SD INNER JOIN @SodetailTable S ON S.SoDetailId = SD.SODetailID
  634. INNER JOIN dbo.DE_DeliverySlipsDetails ddsd ON ddsd.SoDetailId = SD.SODetailID
  635. WHERE S.PoStatus = 4 AND S.DeliveryFlowId = 2
  636. GROUP BY DeliverySlipsId
  637.  
  638. INSERT INTO dbo.WH_ImportSource
  639. (
  640. --WhImportSourceId - this column value is auto-generated
  641. dbo.WH_ImportSource.ImportSourceId,
  642. dbo.WH_ImportSource.WhSlipId,
  643. dbo.WH_ImportSource.DateCreated,
  644. dbo.WH_ImportSource.WhImportSourceTypeId
  645. )
  646. SELECT S.PuId, @warehouseSlipId, GETDATE(), 1
  647. FROM
  648. @SodetailTable S
  649. WHERE S.PoStatus = 4 AND S.DeliveryFlowId = 2
  650. GROUP BY S.PuId
  651.  
  652. INSERT INTO [WH_PO_Inbound_Map] ([PoId], [WarehouseSlipsId], [DateCreated])
  653. SELECT DISTINCT S.PoId, @warehouseSlipId, GETDATE()
  654. FROM
  655. @SodetailTable S
  656. WHERE S.PoStatus = 4 AND S.DeliveryFlowId = 2
  657. END
  658.  
  659.  
  660. /*BEGIN ========== Cap nhat lai tien da tra cho cac PO huy - hen lai - Chi cho hang giao thang ========================*/
  661. IF EXISTS(SELECT 1 FROM @SodetailTable S
  662. WHERE S.PoStatus IN (1, 5) AND S.DeliveryFlowId = 2
  663. )
  664. BEGIN
  665. DECLARE @RollBackSO TABLE
  666. (
  667. PackingId bigint,
  668. SoId bigint,
  669. TotalPaid decimal(18,4),
  670. TotalPaidVinId decimal(18,4),
  671. TotalMoney decimal(18,4),
  672. TotalMoneyComplete decimal(18,4),
  673. TotalFee decimal(18,4),
  674. DeliveryFee decimal(18,4),
  675. IsRollBackFee bit,
  676. TotalPaidRollBack decimal(18,4),
  677. TotalPaidVinIdRollBack decimal(18,4),
  678. TotalPoFeeRollBack decimal(18,4),
  679. TotalPoFee decimal(18,4),
  680. IsUsedVinId bit
  681. PRIMARY KEY (PackingId, SoId))
  682.  
  683. INSERT INTO @RollBackSO
  684. SELECT p.PackingID,
  685. s.SOId,
  686. p.TotalPaid,
  687. ISNULL(p.TotalVinIdMoney, 0),
  688. p.TotalMoney - (SELECT SUM(S.Amount * S.SellPrice)
  689. FROM dbo.Packing_Detail pd1
  690. INNER JOIN @SodetailTable S ON S.SoDetailId = pd1.SoDetailId
  691. WHERE pd1.PackingID = p.PackingID AND S.PoStatus IN (1, 5) AND S.DeliveryFlowId = 2),
  692. 0,
  693. 0,
  694. p.DeliveryFee,
  695. CASE WHEN EXISTS(SELECT 1
  696. FROM dbo.Packing_Detail pd2
  697. INNER JOIN dbo.SO_Detail sd ON sd.SODetailID = pd2.SoDetailId
  698. INNER JOIN dbo.DE_DeliverySlipsDetails ddsd ON ddsd.PackingDetailId = pd2.PackingDetailId
  699. WHERE sd.SODetailStatusID < 16 AND sd.SODetailStatusID > 1 AND pd2.PackingID = p.PackingID AND ddsd.Visible = 1)
  700. THEN 0 ELSE 1 END,
  701. 0,
  702. 0,
  703. ISNULL((SELECT SUM(pdsf.Fee)
  704. FROM (SELECT DISTINCT S.PoId FROM @SodetailTable S WHERE S.PoStatus IN (1, 5) AND S.DeliveryFlowId = 2) st
  705. INNER JOIN dbo.Packing_DeliverySlips_Fee pdsf ON st.PoId = pdsf.ClientPoId
  706. WHERE pdsf.PackingID = p.PackingID
  707. GROUP BY pdsf.PackingId), 0),
  708. ISNULL(p.TotalPoFee, 0),
  709. ps.IsUsedVinId
  710. FROM (SELECT DISTINCT pst.PackingID, pst.IsUsedVinId FROM (SELECT DISTINCT MAX(pd.PackingID) AS PackingID, S.SODetailID, S.IsUsedVinId--po.PoId, SD.SOId
  711. FROM @SodetailTable S
  712. INNER JOIN dbo.Packing_Detail pd WITH (NOLOCK) ON pd.SoDetailId = S.SODetailID
  713. WHERE S.PoStatus IN (1, 5) AND S.DeliveryFlowId = 2
  714. GROUP BY S.SODetailID, S.IsUsedVinId) pst) ps
  715. INNER JOIN dbo.Packing p WITH (NOLOCK) ON p.PackingID = ps.PackingID
  716. INNER JOIN dbo.SO s WITH (NOLOCK) ON s.ClientSoId = p.ClientSoId
  717.  
  718. UPDATE @RollBackSO
  719. SET TotalMoneyComplete = CASE WHEN TotalMoney > 0 THEN TotalMoney + DeliveryFee + TotalPoFee - TotalPoFeeRollBack ELSE 0 END,
  720. TotalFee = CASE WHEN TotalMoney > 0 THEN DeliveryFee + TotalPoFee - TotalPoFeeRollBack ELSE 0 END
  721.  
  722. UPDATE @RollBackSO
  723. SET TotalPaidRollBack = CASE WHEN IsUsedVinId = 0 AND TotalPaidVinId < TotalFee AND TotalPaid > TotalMoneyComplete - TotalPaidVinId THEN TotalPaid + TotalPaidVinId - TotalMoneyComplete
  724. WHEN IsUsedVinId = 0 AND TotalPaidVinId >= TotalFee AND TotalPaid > TotalMoneyComplete - TotalFee THEN TotalPaid + TotalFee - TotalMoneyComplete
  725. WHEN IsUsedVinId = 1 AND TotalPaidVinId >= TotalMoneyComplete THEN TotalPaid
  726. WHEN IsUsedVinId = 1 AND TotalPaidVinId < TotalMoneyComplete AND TotalPaid + TotalPaidVinId >= TotalMoneyComplete THEN TotalPaid + TotalPaidVinId - TotalMoneyComplete
  727. ELSE 0 END,
  728. TotalPaidVinIdRollBack = CASE WHEN IsUsedVinId = 0 AND TotalPaidVinId >= TotalFee THEN TotalPaidVinId - TotalFee
  729. WHEN IsUsedVinId = 1 AND TotalPaidVinId >= TotalMoneyComplete THEN TotalPaidVinId - TotalMoneyComplete
  730. ELSE 0 END
  731.  
  732. UPDATE dbo.SO
  733. SET dbo.SO.TotalPaidUsed = dbo.SO.TotalPaidUsed - pst.TotalPaidRollBack,
  734. dbo.SO.TotalPaidRemaining = dbo.SO.TotalPaidRemaining + pst.TotalPaidRollBack,
  735. dbo.SO.TotalPaidVinIdUsed = dbo.SO.TotalPaidVinIdUsed - pst.TotalPaidVinIdRollBack,
  736. dbo.SO.TotalPaidVinIdRemaining = dbo.SO.TotalPaidVinIdRemaining + pst.TotalPaidVinIdRollBack,
  737. dbo.SO.IsPaidFee = CASE WHEN pst.IsPaidFee > 0 THEN 0 ELSE dbo.SO.IsPaidFee END
  738. FROM (SELECT
  739. rb.SoId,
  740. SUM(rb.TotalPaidRollBack) AS TotalPaidRollBack,
  741. SUM(rb.TotalPaidVinIdRollBack) AS TotalPaidVinIdRollBack,
  742. SUM(CASE WHEN rb.IsRollBackFee = 1 AND rb.DeliveryFee > 0 THEN 1 ELSE 0 END) AS IsPaidFee
  743. FROM @RollBackSO rb
  744. WHERE (rb.TotalPaidRollBack + rb.TotalPaidVinIdRollBack > 0 OR rb.DeliveryFee > 0)
  745. OR (rb.TotalMoneyComplete = 0 AND rb.DeliveryFee > 0)
  746. GROUP BY rb.SoId) pst
  747. WHERE dbo.SO.SOID = pst.SoId
  748.  
  749. UPDATE dbo.Packing
  750. SET dbo.Packing.TotalPaid = dbo.Packing.TotalPaid - rbs.TotalPaidRollBack,
  751. dbo.Packing.TotalVinIdMoney = dbo.Packing.TotalVinIdMoney - rbs.TotalPaidVinIdRollBack,
  752. dbo.Packing.TotalMoney = rbs.TotalMoney,
  753. dbo.Packing.TotalPoFee = dbo.Packing.TotalPoFee - rbs.TotalPoFeeRollBack
  754. FROM @RollBackSO rbs
  755. WHERE dbo.Packing.PackingID = rbs.PackingId
  756.  
  757. UPDATE dbo.Packing_DeliverySlips_Fee
  758. SET
  759. dbo.Packing_DeliverySlips_Fee.Status = 2,
  760. dbo.Packing_DeliverySlips_Fee.UpdateBy = @userId, -- int
  761. dbo.Packing_DeliverySlips_Fee.UpdateDate = GETDATE()
  762. FROM dbo.Packing_DeliverySlips_Fee pdsf
  763. INNER JOIN @SodetailTable st ON st.PoId = pdsf.ClientPoId
  764. INNER JOIN @RollBackSO rso ON rso.PackingId = pdsf.PackingId
  765. WHERE st.PoStatus IN (1, 5) AND st.DeliveryFlowId = 2
  766.  
  767. /*-- Cập nhật trạng thái của phiếu PGH(DE_DeliverySlip) là: 29 cho hàng giao thẳng không nhập trạm */
  768. UPDATE
  769. DE_DeliverySlips
  770. SET
  771. [StatusId] = dt.StatusId,
  772. [DateModified] = GETDATE(),
  773. [ModifiedBy] = @userId,
  774. [IsConfirmed] = 1
  775. FROM @DeliveryTable dt
  776. WHERE dbo.DE_DeliverySlips.DeliverySlipsId = dt.DeliverySlipsId
  777.  
  778. DECLARE @LogInsertCash TABLE (CashId int, DeliverySlipsId int)
  779.  
  780. INSERT INTO CA_CashDelivery([UserIdDelivery],[Visible],[IsCompleted],[DateCompleted],[CreatedBy],[TotalMoney], [DeliverySlipsId])
  781. OUTPUT INSERTED.CashId, INSERTED.DeliverySlipsId INTO @LogInsertCash(CashId, DeliverySlipsId)
  782. SELECT dds.CodId, 1, 0, GETDATE(), @userId, 0, dds.DeliverySlipsId
  783. FROM @DeliveryTableCash dtc INNER JOIN dbo.DE_DeliverySlips dds ON dds.DeliverySlipsId = dtc.DeliverySlipsId
  784.  
  785. --INSERT CA_CashDeliveryDetails------------------------------------------------------------------------------------------------------->
  786. INSERT INTO CA_CashDeliveryDetails([CashId],[SoDetailId],[Quantity])
  787. SELECT
  788. lic.CashId, sd.SoDetailId , ddsd.QuantityCompleted
  789. FROM @LogInsertCash lic
  790. INNER JOIN DE_DeliverySlipsDetails ddsd ON ddsd.DeliverySlipsId = lic.DeliverySlipsId
  791. INNER JOIN dbo.SO_Detail sd ON (sd.ParentSoDetailId = ddsd.SoDetailId or sd.SoDetailId = ddsd.SoDetailId)
  792. WHERE
  793. sd.SODetailStatusID = 13 AND
  794. sd.Visible = 1 AND
  795. ddsd.IsCompleted = 1
  796.  
  797. --INSERT CA_CashDeliverySlip_Logs------------------------------------------------------------------------------------------------------->
  798. INSERT INTO CA_CashDeliverySlip_Logs([CashId],[DeliverySlipsId],[CreatedBy])
  799. SELECT lic.CashId, lic.DeliverySlipsId, @userId
  800. FROM @LogInsertCash lic
  801.  
  802. END
  803. /*END ============ Cap nhat lai tien da tra cho cac PO huy ========================*/
  804.  
  805. ---------- Update SMS logtoPic ----------------------------
  806. DECLARE @SoDetailFull TABLE (
  807. ClientSoId bigint,
  808. SoDetailId bigint,
  809. StatusId int,
  810. SID_Current int,
  811. SidPic int
  812. )
  813.  
  814. DECLARE @SoFull TABLE (
  815. ClientSoId bigint,
  816. SidPic int
  817. )
  818.  
  819. INSERT INTO @SoDetailFull
  820. SELECT
  821. sd.ClientSoId,
  822. sd.SODetailID,
  823. sd.SODetailStatusID,
  824. sd.SID_CurrentStation,
  825. d.SID
  826. FROM dbo.SO_Detail sd WITH (NOLOCK)
  827. INNER JOIN (SELECT DISTINCT s.ClientSoId, s2.SID
  828. FROM @SodetailTable st
  829. INNER JOIN dbo.SO s WITH (NOLOCK) ON s.ClientSoId = st.ClientSoId
  830. INNER JOIN dbo.Stations s2 WITH (NOLOCK) ON s.DeliveryCityId = s2.CityID AND s.DeliveryDistId = s2.DistID AND s.DeliveryWardId = s2.WardID AND s.DeliveryStreetId = s2.StreetID AND s.DeliveryHouseN0 = s2.HouseN0
  831. WHERE st.PoStatus = 5 AND ISNULL(s.IsDeliveryPiC, 0) = 1) AS d ON d.ClientSoId = sd.ClientSoId
  832.  
  833. INSERT INTO @SoFull
  834. SELECT DISTINCT sdf.ClientSoId, sdf.SidPic
  835. FROM @SoDetailFull sdf
  836. WHERE sdf.SID_Current = sdf.SidPic
  837. AND sdf.StatusId = 7
  838. AND NOT EXISTS (
  839. SELECT 1 FROM @SoDetailFull sdf2
  840. WHERE sdf2.ClientSoId = sdf.ClientSoId
  841. AND (sdf2.StatusId NOT IN (7,13,14,15,16) OR sdf2.SID_Current <> sdf.SidPic))
  842.  
  843. IF EXISTS(SELECT 1 FROM @SoFull sf)
  844. BEGIN
  845. -- INSERT TO CS SMS
  846. BEGIN TRY
  847. INSERT INTO dbo.Log_PickupPointToCs
  848. (
  849. dbo.Log_PickupPointToCs.SoId,
  850. dbo.Log_PickupPointToCs.ClientSoId,
  851. dbo.Log_PickupPointToCs.CustomerName,
  852. dbo.Log_PickupPointToCs.CustomerId,
  853. dbo.Log_PickupPointToCs.StreetName,
  854. dbo.Log_PickupPointToCs.StreetId,
  855. dbo.Log_PickupPointToCs.DistrictName,
  856. dbo.Log_PickupPointToCs.DistrictId,
  857. dbo.Log_PickupPointToCs.CityName,
  858. dbo.Log_PickupPointToCs.CityId,
  859. dbo.Log_PickupPointToCs.WardId,
  860. dbo.Log_PickupPointToCs.WardName,
  861. dbo.Log_PickupPointToCs.PromiseDate,
  862. dbo.Log_PickupPointToCs.UserId,
  863. dbo.Log_PickupPointToCs.UserName,
  864. dbo.Log_PickupPointToCs.CreateDate,
  865. dbo.Log_PickupPointToCs.IsComplete,
  866. dbo.Log_PickupPointToCs.NumCount
  867. )
  868. SELECT DISTINCT
  869. s.SOID,
  870. s.ClientSoId,
  871. s.CustomerName,
  872. s.CustomerId,
  873. [as].StreetName,
  874. s.DeliveryStreetId,
  875. ad.DistrictName,
  876. s.DeliveryDistId,
  877. ac.CityName,
  878. s.DeliveryCityId,
  879. s.DeliveryWardId,
  880. aw.WardName,
  881. GETDATE(),
  882. @userId,
  883. (SELECT uu.FullName FROM dbo.UM_Users uu WITH (NOLOCK) WHERE uu.UserId = @userId),
  884. GETDATE(),
  885. 0,
  886. 0
  887. FROM dbo.SO s WITH (NOLOCK)
  888. INNER JOIN @SoFull sf ON sf.ClientSoId = s.ClientSoId
  889. LEFT JOIN dbo.AD_Street [as] WITH (NOLOCK) ON [as].StreetId = s.DeliveryStreetId
  890. LEFT JOIN dbo.AD_District ad WITH (NOLOCK) ON ad.DistrictId = s.DeliveryDistId
  891. LEFT JOIN dbo.AD_City ac WITH (NOLOCK) ON ac.CityId = s.DeliveryCityId
  892. LEFT JOIN dbo.AD_Ward aw WITH (NOLOCK) ON aw.WardId = s.DeliveryWardId
  893.  
  894. END TRY
  895. BEGIN CATCH /**/ END CATCH
  896. END
  897. -----------------------------------------------------------
  898.  
  899. SET @Result = 1;
  900. SELECT @result AS IsSuccess, '' AS MessageError
  901. COMMIT TRAN T
  902. END TRY
  903. BEGIN CATCH
  904. ROLLBACK TRAN T
  905. SET @result=0;
  906. SET @Msg = ERROR_MESSAGE();
  907.  
  908. IF ERROR_NUMBER() = 1205 -- Deadlock Error Number
  909. BEGIN
  910. SET @RetryCounter = @RetryCounter + 1 -- Increment Retry Counter By one
  911. IF (@RetryCounter >=1) -- Check whether Retry Counter reached to 3
  912. BEGIN
  913. SET @Msg = N'Hệ thống xử lý phát sinh lỗi! Xin hãy thử lại sau vài giây!';
  914. END
  915. ELSE
  916. BEGIN
  917. WAITFOR DELAY '00:00:00.05' -- Wait for 5 ms
  918. GOTO RETRY -- Go to Label RETRY
  919. END
  920. END
  921.  
  922. SELECT @result AS IsSuccess, @Msg AS MessageError
  923. END CATCH
  924.  
  925. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement