Advertisement
Guest User

Untitled

a guest
Jul 18th, 2019
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 34.41 KB | None | 0 0
  1. USE [MRCDMS]
  2. GO
  3. /****** Object: StoredProcedure [dbo].[sp_DMS_RPT_InventoryRealtime] Script Date: 7/19/2019 9:34:21 AM ******/
  4. SET ANSI_NULLS ON
  5. GO
  6. SET QUOTED_IDENTIFIER ON
  7. GO
  8. ALTER PROCEDURE [dbo].[sp_DMS_RPT_InventoryRealtime]
  9. @CompanyID INT = NULL,
  10. @DistributorID INT = NULL,
  11. @LoginID VARCHAR(50) = NULL,
  12. @Role VARCHAR(50) = NULL,
  13. @FromDate DATETIME,
  14. @ToDate DATETIME
  15. AS
  16. BEGIN
  17. SET NOCOUNT ON;
  18. SET FMTONLY OFF;
  19. SET NO_BROWSETABLE OFF;
  20.  
  21. DECLARE @_CompanyID INT = NULLIF(@CompanyID, 0);
  22. DECLARE @_DistributorID INT = NULLIF(@DistributorID, 0);
  23. DECLARE @_LoginID VARCHAR(50) = @LoginID;
  24. DECLARE @_Role VARCHAR(50) = NULLIF(LTRIM(RTRIM(@Role)), '');
  25. DECLARE @_TerritoryType CHAR(1);
  26. DECLARE @_CurrentDate DATETIME = GETDATE();
  27. DECLARE @_FromDate DATETIME = NULLIF(@FromDate, @_CurrentDate);
  28. DECLARE @_ToDate DATETIME = NULLIF(@ToDate, @_CurrentDate);
  29. DECLARE @_FirstDayOfMonth DATETIME = CONVERT(VARCHAR(4), YEAR(@ToDate))
  30. + '/' + CONVERT(VARCHAR(2), MONTH(@ToDate)) + '/1';
  31. DECLARE @_3MonthAgo DATETIME = DATEADD(mm, -3, @_FirstDayOfMonth);
  32. DECLARE @_OpenQtyDate DATETIME = DATEADD(dd, -1, @_FromDate);
  33.  
  34. SELECT *
  35. INTO #tmpDistributorID
  36. FROM dbo.fn_DMS_ConvertIDListToTable(@_DistributorID);
  37.  
  38. CREATE TABLE #tmp
  39. (
  40. CompanyID INT ,
  41. DistributorID INT ,
  42. DistributorLocationID INT ,
  43. SalesOrgID INT ,
  44. SalesOrg_0_ValueID INT ,
  45. SalesOrg_0_ValueCD VARCHAR(15) ,
  46. SalesOrg_0_ValueName NVARCHAR(50) ,
  47. SalesForce_0_Name NVARCHAR(50) ,
  48. SalesOrg_1_ValueID INT ,
  49. SalesOrg_1_ValueCD VARCHAR(15) ,
  50. SalesOrg_1_ValueName NVARCHAR(50) ,
  51. SalesForce_1_Name NVARCHAR(50) ,
  52. SalesOrg_2_ValueID INT ,
  53. SalesOrg_2_ValueCD VARCHAR(15) ,
  54. SalesOrg_2_ValueName NVARCHAR(50) ,
  55. SalesForce_2_Name NVARCHAR(50) ,
  56. SalesOrg_3_ValueID INT ,
  57. SalesOrg_3_ValueCD VARCHAR(15) ,
  58. SalesOrg_3_ValueName NVARCHAR(50) ,
  59. SalesForce_3_Name NVARCHAR(50) ,
  60. SalesOrg_4_ValueID INT ,
  61. SalesOrg_4_ValueCD VARCHAR(15) ,
  62. SalesOrg_4_ValueName NVARCHAR(50) ,
  63. SalesForce_4_Name NVARCHAR(50) ,
  64. SalesOrg_5_ValueID INT ,
  65. SalesOrg_5_ValueCD VARCHAR(15) ,
  66. SalesOrg_5_ValueName NVARCHAR(50) ,
  67. SalesForce_5_Name NVARCHAR(50) ,
  68. SalesOrg_6_ValueID INT ,
  69. SalesOrg_6_ValueCD VARCHAR(15) ,
  70. SalesOrg_6_ValueName NVARCHAR(50) ,
  71. SalesForce_6_Name NVARCHAR(50) ,
  72. SalesOrg_7_ValueID INT ,
  73. SalesOrg_7_ValueCD VARCHAR(15) ,
  74. SalesOrg_7_ValueName NVARCHAR(50) ,
  75. SalesForce_7_Name NVARCHAR(50) ,
  76. SalesOrg_8_ValueID INT ,
  77. SalesOrg_8_ValueCD VARCHAR(15) ,
  78. SalesOrg_8_ValueName NVARCHAR(50) ,
  79. SalesForce_8_Name NVARCHAR(50) ,
  80. SalesOrg_9_ValueID INT ,
  81. SalesOrg_9_ValueCD VARCHAR(15) ,
  82. SalesOrg_9_ValueName NVARCHAR(50) ,
  83. SalesForce_9_Name NVARCHAR(50) ,
  84. ParentID INT ,
  85. ParentLevel INT
  86. );
  87.  
  88. SELECT CompanyID ,
  89. SiteID
  90. INTO #tmpSiteAccess
  91. FROM dbo.DMSViewSiteByUser
  92. WHERE CompanyID = @_CompanyID
  93. AND Username = @_LoginID;
  94.  
  95. ---- Lấy thông tin permission theo user đăng nhập
  96. SELECT *
  97. INTO #tmpPermission
  98. FROM dbo.fn_DMS_GetSFPermission(@_CompanyID, @_DistributorID,
  99. @_LoginID);
  100.  
  101. ---- Lấy working position của user đăng nhập
  102. ---- Đấy là báo cáo NPP nên nếu territory type khác SS thì set kiểu view 1 NPP
  103. SELECT @_TerritoryType = ( SELECT TOP 1
  104. TerritoryType
  105. FROM #tmpPermission
  106. );
  107. IF @_TerritoryType != 'D'
  108. OR @_TerritoryType IS NULL
  109. SET @_TerritoryType = 'X';
  110.  
  111. ---- Group by các dữ liệu permission
  112. SELECT DistributorID
  113. INTO #tmpPrmDistributor
  114. FROM #tmpPermission
  115. GROUP BY DistributorID;
  116.  
  117. ---- Lấy thông tin NPP với cây sales org tương ứng
  118. INSERT INTO #tmp
  119. EXEC dbo.sp_DMS_MDM_GetDistributorWithSalesOrg @_CompanyID;
  120.  
  121. SELECT d.CompanyID ,
  122. d.DistributorID ,
  123. d.DistributorCD ,
  124. d.DistributorName ,
  125. Province = d.ProvinceName ,
  126. District = d.DistrictName ,
  127. Channel = dl.Attribute0Descr ,
  128. t.SalesOrgID ,
  129. t.SalesOrg_0_ValueName ,
  130. SalesForce_0_Name = sf0.Descr ,
  131. t.SalesOrg_1_ValueName ,
  132. SalesForce_1_Name = sf1.Descr ,
  133. t.SalesOrg_2_ValueName ,
  134. SalesForce_2_Name = sf2.Descr ,
  135. t.SalesOrg_3_ValueName ,
  136. SalesForce_3_Name = sf3.Descr ,
  137. t.SalesOrg_4_ValueName ,
  138. SalesForce_4_Name = sf4.Descr ,
  139. t.SalesOrg_5_ValueName ,
  140. SalesForce_5_Name = sf5.Descr ,
  141. t.SalesOrg_6_ValueName ,
  142. SalesForce_6_Name = sf6.Descr ,
  143. t.SalesOrg_7_ValueName ,
  144. SalesForce_7_Name = sf7.Descr ,
  145. t.SalesOrg_8_ValueName ,
  146. SalesForce_8_Name = sf8.Descr ,
  147. t.SalesOrg_9_ValueName ,
  148. SalesForce_9_Name = sf9.Descr
  149. INTO #tmpDistributor
  150. FROM #tmp t
  151. JOIN dbo.DMSViewDistributorLocation dl WITH ( NOLOCK ) ON dl.CompanyID = t.CompanyID
  152. AND dl.DistributorID = t.DistributorID
  153. AND dl.LocationID = t.DistributorLocationID
  154. JOIN dbo.DMSViewDistributor d WITH ( NOLOCK ) ON d.CompanyID = t.CompanyID
  155. AND d.DistributorID = t.DistributorID
  156. LEFT JOIN dbo.DMSSFAssignment sfa0 WITH ( NOLOCK ) ON sfa0.CompanyID = t.CompanyID
  157. AND sfa0.SalesOrgID = t.SalesOrg_0_ValueID
  158. AND sfa0.IsBaseAssignment = 1
  159. LEFT JOIN dbo.DMSSalesForce sf0 WITH ( NOLOCK ) ON sf0.CompanyID = sfa0.CompanyID
  160. AND sf0.EmployeeID = sfa0.EmployeeID
  161. LEFT JOIN dbo.DMSSFAssignment sfa1 WITH ( NOLOCK ) ON sfa1.CompanyID = t.CompanyID
  162. AND sfa1.SalesOrgID = t.SalesOrg_1_ValueID
  163. AND sfa1.IsBaseAssignment = 1
  164. LEFT JOIN dbo.DMSSalesForce sf1 WITH ( NOLOCK ) ON sf1.CompanyID = sfa1.CompanyID
  165. AND sf1.EmployeeID = sfa1.EmployeeID
  166. LEFT JOIN dbo.DMSSFAssignment sfa2 WITH ( NOLOCK ) ON sfa2.CompanyID = t.CompanyID
  167. AND sfa2.SalesOrgID = t.SalesOrg_2_ValueID
  168. AND sfa2.IsBaseAssignment = 1
  169. LEFT JOIN dbo.DMSSalesForce sf2 WITH ( NOLOCK ) ON sf2.CompanyID = sfa2.CompanyID
  170. AND sf2.EmployeeID = sfa2.EmployeeID
  171. LEFT JOIN dbo.DMSSFAssignment sfa3 WITH ( NOLOCK ) ON sfa3.CompanyID = t.CompanyID
  172. AND sfa3.SalesOrgID = t.SalesOrg_3_ValueID
  173. AND sfa3.IsBaseAssignment = 1
  174. LEFT JOIN dbo.DMSSalesForce sf3 WITH ( NOLOCK ) ON sf3.CompanyID = sfa3.CompanyID
  175. AND sf3.EmployeeID = sfa3.EmployeeID
  176. LEFT JOIN dbo.DMSSFAssignment sfa4 WITH ( NOLOCK ) ON sfa4.CompanyID = t.CompanyID
  177. AND sfa4.SalesOrgID = t.SalesOrg_4_ValueID
  178. AND sfa4.IsBaseAssignment = 1
  179. LEFT JOIN dbo.DMSSalesForce sf4 WITH ( NOLOCK ) ON sf4.CompanyID = sfa4.CompanyID
  180. AND sf4.EmployeeID = sfa4.EmployeeID
  181. LEFT JOIN dbo.DMSSFAssignment sfa5 WITH ( NOLOCK ) ON sfa5.CompanyID = t.CompanyID
  182. AND sfa5.SalesOrgID = t.SalesOrg_5_ValueID
  183. AND sfa5.IsBaseAssignment = 1
  184. LEFT JOIN dbo.DMSSalesForce sf5 WITH ( NOLOCK ) ON sf5.CompanyID = sfa5.CompanyID
  185. AND sf5.EmployeeID = sfa5.EmployeeID
  186. LEFT JOIN dbo.DMSSFAssignment sfa6 WITH ( NOLOCK ) ON sfa6.CompanyID = t.CompanyID
  187. AND sfa6.SalesOrgID = t.SalesOrg_6_ValueID
  188. AND sfa6.IsBaseAssignment = 1
  189. LEFT JOIN dbo.DMSSalesForce sf6 WITH ( NOLOCK ) ON sf6.CompanyID = sfa6.CompanyID
  190. AND sf6.EmployeeID = sfa6.EmployeeID
  191. LEFT JOIN dbo.DMSSFAssignment sfa7 WITH ( NOLOCK ) ON sfa7.CompanyID = t.CompanyID
  192. AND sfa7.SalesOrgID = t.SalesOrg_7_ValueID
  193. AND sfa7.IsBaseAssignment = 1
  194. LEFT JOIN dbo.DMSSalesForce sf7 WITH ( NOLOCK ) ON sf7.CompanyID = sfa7.CompanyID
  195. AND sf7.EmployeeID = sfa7.EmployeeID
  196. LEFT JOIN dbo.DMSSFAssignment sfa8 WITH ( NOLOCK ) ON sfa8.CompanyID = t.CompanyID
  197. AND sfa8.SalesOrgID = t.SalesOrg_8_ValueID
  198. AND sfa8.IsBaseAssignment = 1
  199. LEFT JOIN dbo.DMSSalesForce sf8 WITH ( NOLOCK ) ON sf8.CompanyID = sfa8.CompanyID
  200. AND sf8.EmployeeID = sfa8.EmployeeID
  201. LEFT JOIN dbo.DMSSFAssignment sfa9 WITH ( NOLOCK ) ON sfa9.CompanyID = t.CompanyID
  202. AND sfa9.SalesOrgID = t.SalesOrg_9_ValueID
  203. AND sfa9.IsBaseAssignment = 1
  204. LEFT JOIN dbo.DMSSalesForce sf9 WITH ( NOLOCK ) ON sf9.CompanyID = sfa9.CompanyID
  205. AND sf9.EmployeeID = sfa9.EmployeeID;
  206.  
  207. -- Lấy tồn kho trước ngày xem báo cáo
  208. CREATE TABLE #tmpClosingStock
  209. (
  210. BaselineDate DATETIME ,
  211. MonthID CHAR(6) ,
  212. CompanyID INT ,
  213. DistributorID INT ,
  214. InventoryID INT ,
  215. IsFree BIT ,
  216. SiteID INT ,
  217. LocationID INT ,
  218. LotSerialNbr VARCHAR(50) ,
  219. ExpiredDate DATETIME ,
  220. OpenQty DECIMAL(18, 2) ,
  221. InQty DECIMAL(18, 2) ,
  222. OutQty DECIMAL(18, 2) ,
  223. CloseQty DECIMAL(18, 2)
  224. );
  225. INSERT INTO #tmpClosingStock
  226. EXEC dbo.sp_DMS_InventoryStockMonthly @_CompanyID,
  227. '2018-01-01', @_OpenQtyDate, NULL;
  228.  
  229. SELECT BaselineDate ,
  230. MonthID ,
  231. CompanyID ,
  232. DistributorID ,
  233. InventoryID ,
  234. SiteID ,
  235. LocationID ,
  236. LotSerialNbr ,
  237. OpenQty = SUM(OpenQty) ,
  238. InQty = SUM(InQty) ,
  239. OutQty = SUM(OutQty) ,
  240. CloseQty = SUM(CloseQty)
  241. INTO #TotalClosing
  242. FROM #tmpClosingStock
  243. GROUP BY BaselineDate ,
  244. MonthID ,
  245. CompanyID ,
  246. DistributorID ,
  247. InventoryID ,
  248. SiteID ,
  249. LocationID ,
  250. LotSerialNbr
  251.  
  252. ---- Lấy dữ liệu rawdata
  253. SELECT inr.CompanyID ,
  254. DistributorID = inr.BranchID ,
  255. TranDate = COALESCE(soo.OrderDate, por.ReceiptDate,
  256. intr.TranDate) ,
  257. ints.InventoryID ,
  258. ints.LotSerialNbr ,
  259. ints.SiteID ,
  260. ints.LocationID ,
  261. InQty = CASE
  262. WHEN (ints.TranType = 'RCP' AND inr.OrigModule = 'PO') ---- Nhập mua
  263. OR (ints.TranType = 'RCP' AND inr.OrigModule = 'IN') ---- Nhập khác
  264. OR (ints.TranType = 'TRX' AND ints.InvtMult = 1) ---- Chuyển kho - nhập
  265. OR (ints.TranType = 'ADJ' AND ints.InvtMult = 1) ---- Điều chỉnh tăng kho
  266. OR (ints.TranType = 'RET' ) ---- Nhập trả
  267. OR (ints.TranType = 'CRM' AND sol.IsFree = 0) ---- Nhập khách hàng trả
  268. OR (ints.TranType = 'CRM' AND sol.IsFree = 1) ---- Nhập khách hàng trả KM
  269. THEN ints.BaseQty
  270. WHEN (ints.TranType = 'III' AND por.ReceiptNbr IS NOT NULL) ---- Xuất trả ncc
  271. THEN ints.BaseQty * -1
  272. ELSE 0
  273. END,
  274. OutQty = CASE
  275. WHEN (ints.TranType = 'III' AND por.ReceiptNbr IS NULL) ---- Xuất khác
  276. OR (ints.TranType = 'TRX' AND ints.InvtMult = -1) ---- Chuyển kho - xuất
  277. OR (ints.TranType = 'ADJ' AND ints.InvtMult = -1) ---- Điều chỉnh giảm kho
  278. OR (ints.TranType = 'DRM' ) ---- Xuất debit
  279. OR (ints.TranType = 'INV' AND sol.IsFree = 0) ---- Xuất bán
  280. OR (ints.TranType = 'INV' AND sol.IsFree = 1) ---- Xuất khuyến mãi
  281. OR (ints.TranType = 'INV' AND sol.IsFree = 1 AND sol.UsrIncentiveID IS NOT NULL) ---- Xuất trả thưởng
  282. THEN ints.BaseQty
  283. ELSE 0
  284. END ,
  285. CloseQty = NULL
  286. INTO #tmpRawData
  287. FROM INRegister inr WITH ( NOLOCK )
  288. JOIN INTran intr WITH ( NOLOCK ) ON intr.CompanyID = inr.CompanyID
  289. AND intr.RefNbr = inr.RefNbr
  290. AND intr.DocType = inr.DocType
  291. JOIN INTranSplit ints WITH ( NOLOCK ) ON ints.CompanyID = intr.CompanyID
  292. AND ints.RefNbr = intr.RefNbr
  293. AND ints.DocType = intr.DocType
  294. AND ints.LineNbr = intr.LineNbr
  295. LEFT JOIN SOOrder soo WITH ( NOLOCK ) ON soo.CompanyID = intr.CompanyID
  296. AND soo.OrderNbr = intr.SOOrderNbr
  297. AND soo.OrderType = intr.SOOrderType
  298. LEFT JOIN SOLine sol WITH ( NOLOCK ) ON sol.CompanyID = intr.CompanyID
  299. AND sol.OrderNbr = intr.SOOrderNbr
  300. AND sol.OrderType = intr.SOOrderType
  301. AND sol.LineNbr = intr.SOOrderLineNbr
  302. LEFT JOIN POReceipt por WITH ( NOLOCK ) ON por.CompanyID = intr.CompanyID
  303. AND por.ReceiptNbr = intr.POReceiptNbr
  304. LEFT JOIN POReceiptLine porl WITH ( NOLOCK ) ON porl.CompanyID = intr.CompanyID
  305. AND porl.ReceiptNbr = intr.POReceiptNbr
  306. AND porl.LineNbr = intr.POReceiptLineNbr
  307. WHERE inr.CompanyID = @_CompanyID
  308. AND inr.Released = 1
  309. AND COALESCE(soo.OrderDate, inr.TranDate) BETWEEN @_FromDate
  310. AND @_ToDate
  311. AND ( inr.BranchID IN ( SELECT DistributorID
  312. FROM #tmpPermission )
  313. );
  314. SELECT CompanyID ,
  315. DistributorID ,
  316. TranDate ,
  317. InventoryID ,
  318. LotSerialNbr ,
  319. SiteID ,
  320. LocationID ,
  321. InQty = SUM(InQty) ,
  322. OutQty = SUM(OutQty) ,
  323. CloseQty = NULL
  324. INTO #TotalRawData
  325. FROM #tmpRawData
  326. GROUP BY CompanyID ,
  327. DistributorID ,
  328. TranDate ,
  329. InventoryID ,
  330. LotSerialNbr ,
  331. SiteID ,
  332. LocationID;
  333. -- Insert tồn kho của từng ngày
  334. CREATE TABLE #tmpInventoryWithLot
  335. (
  336. CompanyID INT ,
  337. DistributorID INT,
  338. InventoryID INT ,
  339. SiteID INT ,
  340. LocationID INT ,
  341. LotSerialNbr VARCHAR(50) ,
  342. ExpireDate DATETIME ,
  343. TranDate DATETIME ,
  344. CloseQty DECIMAL(18, 2)
  345. );
  346.  
  347. DECLARE @_From DATETIME = CONVERT(DATETIME, @_FromDate, 120);
  348. WHILE @_From <= @_ToDate
  349. BEGIN
  350. SELECT *
  351. INTO #TotalRawDataTemp
  352. FROM #TotalRawData rd
  353. WHERE CONVERT(DATETIME, rd.TranDate, 120) = @_From;
  354.  
  355. INSERT INTO #tmpInventoryWithLot
  356. ( CompanyID ,
  357. DistributorID ,
  358. InventoryID ,
  359. SiteID ,
  360. LocationID ,
  361. LotSerialNbr ,
  362. ExpireDate ,
  363. TranDate ,
  364. CloseQty
  365. )
  366. SELECT CompanyID = COALESCE(cs.CompanyID,
  367. rd.CompanyID) ,
  368. DistributorID = COALESCE(cs.DistributorID,
  369. rd.DistributorID),
  370. InventoryID = COALESCE(cs.InventoryID,
  371. rd.InventoryID) ,
  372. SiteID = COALESCE(cs.SiteID, rd.SiteID) ,
  373. LocationID = COALESCE(cs.LocationID,
  374. rd.LocationID) ,
  375. LotSerialNbr = COALESCE(cs.LotSerialNbr,
  376. rd.LotSerialNbr) ,
  377. ExpireDate = NULL ,
  378. TranDate = COALESCE(CONVERT(DATETIME, rd.TranDate, 120), CONVERT(DATETIME, @_From, 120)) ,
  379. CloseQty = ISNULL(CASE WHEN SUM(cs.CloseQty) IS NULL
  380. THEN SUM(ISNULL(rd.InQty,
  381. 0))
  382. - SUM(ISNULL(rd.OutQty,
  383. 0))
  384. ELSE SUM(ISNULL(cs.CloseQty,
  385. 0))
  386. + SUM(ISNULL(rd.InQty,
  387. 0))
  388. - SUM(ISNULL(rd.OutQty,
  389. 0))
  390. END, 0)
  391. FROM #TotalClosing cs
  392. FULL JOIN #TotalRawDataTemp rd ON rd.CompanyID = cs.CompanyID
  393. AND rd.DistributorID = cs.DistributorID
  394. AND rd.InventoryID = cs.InventoryID
  395. AND rd.SiteID = cs.SiteID
  396. AND rd.LocationID = cs.LocationID
  397. GROUP BY COALESCE(cs.CompanyID, rd.CompanyID) ,
  398. COALESCE(cs.DistributorID,rd.DistributorID) ,
  399. COALESCE(cs.InventoryID, rd.InventoryID) ,
  400. COALESCE(cs.SiteID, rd.SiteID) ,
  401. COALESCE(cs.LocationID, rd.LocationID) ,
  402. COALESCE(cs.LotSerialNbr, rd.LotSerialNbr) ,
  403. COALESCE(CONVERT(DATETIME, rd.TranDate, 120), CONVERT(DATETIME, @_From, 120));
  404.  
  405. DELETE FROM #TotalClosing;
  406.  
  407. SELECT *
  408. INTO #TotalClosingTmp
  409. FROM #tmpInventoryWithLot rd
  410. WHERE CONVERT(DATETIME, rd.TranDate, 120) = @_From;
  411.  
  412. INSERT INTO #TotalClosing
  413. ( BaselineDate ,
  414. MonthID ,
  415. CompanyID ,
  416. DistributorID ,
  417. InventoryID ,
  418. SiteID ,
  419. LocationID ,
  420. LotSerialNbr ,
  421. CloseQty
  422. )
  423. SELECT NULL ,
  424. NULL ,
  425. CompanyID ,
  426. DistributorID ,
  427. InventoryID ,
  428. SiteID ,
  429. LocationID ,
  430. LotSerialNbr ,
  431. CloseQty = SUM(ISNULL(CloseQty, 0))
  432. FROM #TotalClosingTmp
  433. GROUP BY CompanyID ,
  434. DistributorID ,
  435. InventoryID ,
  436. SiteID ,
  437. LocationID ,
  438. LotSerialNbr;
  439. DROP TABLE #TotalClosingTmp
  440. DROP TABLE #TotalRawDataTemp;
  441. SET @_From = DATEADD(dd, 1, @_From);
  442. END;
  443. ---------------------------------------
  444. SELECT CompanyID ,
  445. DistributorID ,
  446. LocationID ,
  447. InventoryID ,
  448. AVG(SumOutQtyOf3MonthAgo) AvgOutQtyOf3MonthAgo
  449. INTO #tmpOutOf6MonthAgo
  450. FROM ( SELECT bs.CompanyID ,
  451. bs.DistributorID ,
  452. dl.LocationID ,
  453. InventoryID ,
  454. OrderDate ,
  455. ( SUM(Revenue1) + SUM(Revenue2) + SUM(Revenue3) ) SumOutQtyOf3MonthAgo
  456. FROM MRCBaseline..DMSBLSales bs
  457. JOIN MRCBaseline..DMSBLDistributorLocation dl ON bs.BLDistributorLocationID = dl.ID
  458. AND bs.CompanyID = dl.CompanyID
  459. WHERE OrderDate >= @_3MonthAgo
  460. AND OrderDate < @_FirstDayOfMonth
  461. AND bs.CompanyID = @CompanyID
  462. AND ( Revenue1 <> 0
  463. OR Revenue2 <> 0
  464. OR Revenue3 <> 0
  465. )
  466. GROUP BY bs.CompanyID ,
  467. bs.DistributorID ,
  468. dl.LocationID ,
  469. InventoryID ,
  470. OrderDate
  471. ) r
  472. GROUP BY CompanyID ,
  473. DistributorID ,
  474. LocationID ,
  475. InventoryID;
  476.  
  477. ---------------------------------------
  478. SELECT iwl.CompanyID ,
  479. DistributorID = site.BranchID ,
  480. DistributorLocationID = NULL ,
  481. iwl.InventoryID ,
  482. site.SiteCD ,
  483. SiteName = site.Descr ,
  484. loc.LocationCD ,
  485. LocationName = loc.Descr ,
  486. LotSerialNbr = ISNULL(iwl.LotSerialNbr, '') ,
  487. ExpiredMonth = CONVERT(VARCHAR(20), YEAR(iwl.ExpireDate))
  488. + '/' + RIGHT('0' + CONVERT(VARCHAR(20), MONTH(iwl.ExpireDate)),
  489. 2) ,
  490. iwl.ExpireDate ,
  491. TranDate = iwl.TranDate ,
  492. Quantity = iwl.CloseQty ,
  493. Amount = sp.SalesPrice/ ISNULL(u.UnitRate, 1) * NULLIF(iwl.CloseQty, 0) ,
  494. SalesPrice = CONVERT(DECIMAL, sp.SalesPrice / ISNULL(u.UnitRate, 1)) ,
  495. AvgAmountOf3MonthAgo = ago.AvgOutQtyOf3MonthAgo ,
  496. Amount_PPR = ppr.Price/ ISNULL(u.UnitRate, 1) * NULLIF(iwl.CloseQty, 0) ,
  497. SalesPrice_PPR = CONVERT(DECIMAL, ppr.Price / ISNULL(u.UnitRate, 1)) ,
  498. UOM_PPR = ppr.UOM
  499. INTO #tmpResult
  500. FROM #tmpInventoryWithLot iwl
  501. JOIN dbo.INLocation loc WITH ( NOLOCK ) ON loc.CompanyID = iwl.CompanyID
  502. AND loc.SiteID = iwl.SiteID
  503. AND loc.LocationID = iwl.LocationID
  504. JOIN dbo.INSite site WITH ( NOLOCK ) ON site.CompanyID = loc.CompanyID
  505. AND site.SiteID = loc.SiteID
  506. LEFT JOIN dbo.ARSalesPrice sp WITH ( NOLOCK ) ON sp.CompanyID = iwl.CompanyID
  507. AND sp.InventoryID = iwl.InventoryID
  508. AND ( sp.EffectiveDate <= @_CurrentDate
  509. AND ( sp.ExpirationDate > @_CurrentDate
  510. OR sp.ExpirationDate IS NULL
  511. )
  512. )
  513. LEFT JOIN dbo.DMSPrimaryPrice ppr WITH ( NOLOCK ) ON ppr.CompanyID = iwl.CompanyID
  514. AND ppr.InventoryID = iwl.InventoryID
  515. AND ppr.DistributorID = iwl.DistributorID
  516. LEFT JOIN dbo.INUnit u ON u.CompanyID = sp.CompanyID
  517. AND u.InventoryID = sp.InventoryID
  518. AND u.FromUnit = sp.UOM
  519. LEFT JOIN #tmpOutOf6MonthAgo ago ON ago.CompanyID = iwl.CompanyID
  520. AND ago.InventoryID = iwl.InventoryID
  521. AND ago.DistributorID = iwl.DistributorID
  522. --AND ago.LocationID = iwl.LocationID
  523. --AND ago.SiteID = iwl.SiteID
  524. WHERE site.BranchID in (SELECT DistributorID
  525. FROM #tmpPermission)
  526. and iwl.CompanyID = @_CompanyID
  527.  
  528. SELECT d.DistributorID ,
  529. d.DistributorCD ,
  530. d.DistributorName ,
  531. d.ProvinceName Province ,
  532. d.DistrictName District ,
  533. tmpD.Channel ,
  534. tmpD.SalesOrgID ,
  535. tmpD.SalesOrg_0_ValueName ,
  536. tmpD.SalesOrg_1_ValueName ,
  537. tmpD.SalesOrg_2_ValueName ,
  538. tmpD.SalesOrg_3_ValueName ,
  539. tmpD.SalesOrg_4_ValueName ,
  540. tmpD.SalesOrg_5_ValueName ,
  541. tmpD.SalesOrg_6_ValueName ,
  542. tmpD.SalesOrg_7_ValueName ,
  543. tmpD.SalesOrg_8_ValueName ,
  544. tmpD.SalesOrg_9_ValueName ,
  545. -- tmpD.SalesForce_0_Name ,
  546. -- tmpD.SalesForce_1_Name ,
  547. -- tmpD.SalesForce_2_Name
  548. ----, tmpD.SalesForce_3_Name
  549. -- ,
  550. -- tmpD.SalesForce_4_Name ,
  551. -- tmpD.SalesForce_5_Name ,
  552. -- tmpD.SalesForce_6_Name ,
  553. -- tmpD.SalesForce_7_Name ,
  554. -- tmpD.SalesForce_8_Name ,
  555. -- tmpD.SalesForce_9_Name ,
  556. REPLACE(REPLACE(REPLACE(tmpD.SalesForce_0_Name, CHAR(13), ''), CHAR(10), ''),',',' ') as SalesForce_0_Name,
  557. REPLACE(REPLACE(REPLACE(tmpD.SalesForce_1_Name, CHAR(13), ''), CHAR(10), ''),',',' ') as SalesForce_1_Name,
  558. REPLACE(REPLACE(REPLACE(tmpD.SalesForce_2_Name, CHAR(13), ''), CHAR(10), ''),',',' ') as SalesForce_2_Name,
  559. --REPLACE(REPLACE(REPLACE(tmpD.SalesForce_3_Name, CHAR(13), ''), CHAR(10), ''),',',' ') as SalesForce_3_Name,
  560. REPLACE(REPLACE(REPLACE(tmpD.SalesForce_4_Name, CHAR(13), ''), CHAR(10), ''),',',' ') as SalesForce_4_Name,
  561. REPLACE(REPLACE(REPLACE(tmpD.SalesForce_5_Name, CHAR(13), ''), CHAR(10), ''),',',' ') as SalesForce_5_Name,
  562. REPLACE(REPLACE(REPLACE(tmpD.SalesForce_6_Name, CHAR(13), ''), CHAR(10), ''),',',' ') as SalesForce_6_Name,
  563. REPLACE(REPLACE(REPLACE(tmpD.SalesForce_7_Name, CHAR(13), ''), CHAR(10), ''),',',' ') as SalesForce_7_Name,
  564. REPLACE(REPLACE(REPLACE(tmpD.SalesForce_8_Name, CHAR(13), ''), CHAR(10), ''),',',' ') as SalesForce_8_Name,
  565. REPLACE(REPLACE(REPLACE(tmpD.SalesForce_0_Name, CHAR(13), ''), CHAR(10), ''),',',' ') as SalesForce_0_Name,
  566. --NamPT add
  567. item.InventoryCD ,
  568. item.InventoryName ,
  569. item.InventoryShortName ,
  570. InventoryAbbreviationName = item.InventoryAbbrName ,
  571. item.Hierachy0CD ,
  572. item.Hierachy0Descr ,
  573. item.Hierachy1CD ,
  574. item.Hierachy1Descr ,
  575. item.Hierachy2CD ,
  576. item.Hierachy2Descr ,
  577. item.Hierachy3CD ,
  578. item.Hierachy3Descr ,
  579. item.Hierachy4CD ,
  580. item.Hierachy4Descr ,
  581. item.Hierachy5CD ,
  582. item.Hierachy5Descr ,
  583. item.Hierachy6CD ,
  584. item.Hierachy6Descr ,
  585. item.Hierachy7CD ,
  586. item.Hierachy7Descr ,
  587. item.Hierachy8CD ,
  588. item.Hierachy8Descr ,
  589. item.Hierachy9CD ,
  590. item.Hierachy9Descr ,
  591. INAttribute0Descr = item.Attribute0Descr ,
  592. INAttribute1Descr = item.Attribute1Descr ,
  593. INAttribute2Descr = item.Attribute2Descr ,
  594. INAttribute3Descr = item.Attribute3Descr ,
  595. INAttribute4Descr = item.Attribute4Descr ,
  596. INAttribute5Descr = item.Attribute5Descr ,
  597. INAttribute6Descr = item.Attribute6Descr ,
  598. INAttribute7Descr = item.Attribute7Descr ,
  599. INAttribute8Descr = item.Attribute8Descr ,
  600. INAttribute9Descr = item.Attribute9Descr ,
  601. item.BaseUnit ,
  602. r.SiteCD ,
  603. r.SiteName ,
  604. r.LocationCD ,
  605. r.LocationName ,
  606. REPLACE(REPLACE(REPLACE( r.LocationName , CHAR(13), ''), CHAR(10), ''),',',' ') as LocationName,
  607. r.LotSerialNbr ,
  608. r.ExpiredMonth ,
  609. r.ExpireDate ,
  610. r.Quantity ,
  611. r.TranDate Date ,
  612. Amount = CASE WHEN ISNULL(r.Amount, 0.000000) = 0.000000 AND item.BaseUnit = r.UOM_PPR AND ISNULL(r.Amount_PPR, 0) > 0 THEN ISNULL(r.Amount_PPR, 0) ELSE ISNULL(r.Amount, 0) END ,
  613. SalesPrice = CASE WHEN ISNULL(r.SalesPrice, 0.000000) = 0.000000 AND item.BaseUnit = r.UOM_PPR AND ISNULL(r.SalesPrice_PPR, 0) > 0 THEN ISNULL(r.SalesPrice_PPR, 0) ELSE ISNULL(r.SalesPrice, 0) END ,
  614. AvgStockValue = AVG(CASE WHEN ISNULL(r.Amount, 0.000000) = 0.000000 AND item.BaseUnit = r.UOM_PPR AND ISNULL(r.Amount_PPR, 0) > 0 THEN ISNULL(r.Amount_PPR, 0) ELSE ISNULL(r.Amount, 0) END) OVER ( PARTITION BY r.CompanyID,
  615. r.DistributorID,
  616. r.LocationCD,
  617. r.InventoryID ) ,
  618. AvgSecondaryByMonth = r.AvgAmountOf3MonthAgo ,
  619. InventoryDays = CASE WHEN r.AvgAmountOf3MonthAgo IS NULL
  620. OR r.AvgAmountOf3MonthAgo = 0 THEN 0
  621. ELSE ROUND(AVG(CASE WHEN ISNULL(r.Amount, 0.000000) = 0.000000 AND item.BaseUnit = r.UOM_PPR AND ISNULL(r.Amount_PPR, 0) > 0 THEN ISNULL(r.Amount_PPR, 0) ELSE ISNULL(r.Amount, 0) END) OVER ( PARTITION BY r.CompanyID,
  622. r.DistributorID,
  623. r.LocationCD,
  624. r.InventoryID )
  625. / AvgAmountOf3MonthAgo, 0)
  626. END
  627. FROM #tmpResult r
  628. JOIN dbo.DMSViewInventoryItem item WITH ( NOLOCK ) ON item.CompanyID = r.CompanyID
  629. AND item.InventoryID = r.InventoryID
  630. AND ( item.ItemStatus != 'IN'
  631. OR r.Quantity > 0
  632. )
  633. LEFT JOIN dbo.INUnit iu ON iu.CompanyID = item.CompanyID
  634. AND iu.InventoryID = item.InventoryID
  635. AND iu.FromUnit = item.PurchaseUnit
  636. AND iu.ToUnit = item.BaseUnit
  637. AND iu.UnitMultDiv = 'M'
  638. JOIN dbo.DMSViewDistributor d ON d.CompanyID = r.CompanyID
  639. AND d.DistributorID = r.DistributorID
  640. JOIN #tmpDistributor tmpD ON tmpD.CompanyID = r.CompanyID
  641. AND tmpD.DistributorID = r.DistributorID;
  642. drop table #tmpResult
  643. drop table #tmpRawData
  644. END;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement