Wyrownanie ostatnich cen na wielu indeksach

begin tran

Text Only
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
declare @source table(documentID uniqueidentifier, itemID uniqueidentifier
, correctedItemPrice decimal(18,2), sysCorrectedItemPrice decimal(18,2))

;with prices as (
    select itemID, isnull(nullif(nullif(d.currency, ''), 'NULL'), 'PLN') currency, correctedItemPrice
    , isnull(cd.documentDate, d.documentDate) documentDate, isnull(cd.accDate, d.accDate) accDate, isnull(cd.modDate, d.modDate) modDate
    , ROW_NUMBER() OVER(PARTITION BY itemID, isnull(nullif(nullif(d.currency, ''), 'NULL'), 'PLN') ORDER BY isnull(cd.documentDate, d.documentDate) DESC, isnull(cd.accDate, d.accDate) DESC, dl.documentOrdinalNumber DESC, d.documentFullNR DESC) rowno
    from document.documentLine dl
    inner join document.document d on d.documentID = dl.documentID
    inner join document.documentType dt on dt.documentType = d.documentType and dt.masterDocumentCategory = 'warehouse' and dt.altersLastPrice = 1
    left join document.document cd on d.initialCorrectedDocumentId = cd.documentID
    where dl.[status] = 1
)
, pricesMaxNoPerDay as (
    select itemID, currency, documentDate, max(rowno) maxrowno from prices group by itemID, currency, documentDate
)
insert into @source
select documentID, itemID, correctedItemPrice, sysCorrectedItemPrice
from (select itemID, isnull(nullif(nullif(d.currency, ''), 'NULL'), 'PLN') currency, correctedItemPrice, sysCorrectedItemPrice, dl.documentID
, isnull(cd.documentDate, d.documentDate) documentDate, isnull(cd.accDate, d.accDate) accDate, isnull(cd.modDate, d.modDate) modDate
, ROW_NUMBER() OVER(PARTITION BY itemID, isnull(nullif(nullif(d.currency, ''), 'NULL'), 'PLN') ORDER BY isnull(cd.documentDate, d.documentDate) DESC, isnull(cd.accDate, d.accDate) DESC, dl.documentOrdinalNumber DESC, d.documentFullNR DESC) rowno
from document.documentLine dl
inner join document.document d on d.documentID = dl.documentID
inner join document.documentType dt on dt.documentType = d.documentType and dt.masterDocumentCategory = 'warehouse' and dt.altersLastPrice = 1
left join document.document cd on d.initialCorrectedDocumentId = cd.documentID
where dl.[status] = 1
and dl.itemID in

(
select lpp.itemID from (
    select * from prices src where src.rowno = 1
) lpp
inner join pricesMaxNoPerDay pmax on pmax.itemID = lpp.itemID and pmax.currency = lpp.currency and lpp.documentDate = pmax.documentDate
inner join prices pfirst on pfirst.itemID = lpp.itemID and pfirst.currency = lpp.currency and pfirst.rowno = pmax.maxrowno
left join prices p2 on p2.itemID = lpp.itemID and p2.currency = lpp.currency and p2.rowno = pmax.maxrowno - 1 and p2.rowno > 1
full join [item].[pricing] pr
on pr.itemID = lpp.itemID and pr.currency = lpp.currency
where isnull(lpp.correctedItemPrice, -1) != isnull(pr.lastPurchasePrice, -1)
and isnull(pfirst.correctedItemPrice, -1) != isnull(pr.lastPurchasePrice, -1)
and (p2.correctedItemPrice is null or isnull(p2.correctedItemPrice, -1) != isnull(pr.lastPurchasePrice, -1))
--and datediff(minute, lpp.modDate, lpp.accDate) < -1
    )
) srcsrc where rowno = 1

select count(*) from @source

declare @itemID uniqueidentifier
declare @documentID uniqueidentifier
declare @sysCorrectedItemPrice decimal(18,2)
declare @correctedItemPrice decimal(18,2)
declare @username varchar(50)

while exists(select 1 from @source) begin
    select top 1 @itemID = itemID
    , @documentID = documentID
    , @sysCorrectedItemPrice = sysCorrectedItemPrice
    , @correctedItemPrice = correctedItemPrice
    from @source

    delete from @source where itemID = @itemID and documentID = @documentID

    select @username = modUsername from wms.item where itemID = @itemID

        exec [document].[documentLine_updateLastPrice]
        -- Add the parameters for the stored procedure here
        @username = @username,
        @documentID = @documentID,
        @itemID = @itemID,
        @sysItemPrice = @sysCorrectedItemPrice,
        @itemPrice  = @correctedItemPrice,
        @sysAdditionalPrice = null

end

rollback tran