Beheer van verschillende aankoopprijzen in functie van het depot

0000002331     -      15-11-2021

Nieuwe functionaliteiten van "Tools > Kortingen" meegenomen in versie 8.5 laat toe om eenvoudig aankoopprijzen te beheren in functie van het gebruikte depot. Het voorbeeld dat hier gegeven wordt is voor 2 depots. Om geen artikelen te moeten dupliceren om een korting per depot te geven in "Tools > Kortingen > Leveranciers", moeten we de volgende 2 velden toevoegen in de tabel STOCK. Deze 2 velden van het type float: S_DPA1 en S_DPA2.

alter table STOCK add S_DPA1 float not null default 0
alter table STOCK add S_DPA2 float not null default 0
Deze 2 velden worden vervolgens toegevoegd in de artikelfiche, respectievelijk onder de vorm van "Aankoopprijs depot 1" en "Aankoopprijs depot 2".

 

De 2 volgende triggers zijn toegevoegd in de tabel STOCK. Ze zorgen voor het aanmaken, wijzigen en verwijderen van de desbetreffende records in de tabel BAREMESA.


create trigger TR_STOCK_INS_UPD_DPA
on STOCK
FOR INSERT, UPDATE not for replication
AS
BEGIN
    if update(s_dpa1)
    begin
        declare @id_depot1 char(10)
        set @id_depot1 = '0000000001'
        update baremesA set prix=inserted.s_dpa1 from inserted
            where (baremesA.id_pied='0000000001') and(baremesA.ar_ref = inserted.s_id) and(baremesA.id_depot = @id_depot1)

        insert into baremesA (id_pied, id, debut, fin, ar_ref, prix, id_depot)
            select '0000000001',right(newid(), 10),'01/01/1900','01/01/2099',inserted.s_id,inserted.s_dpa1,@id_depot1
             from inserted
            where not exists(select * from baremesA inner join inserted on (baremesA.ar_ref=inserted.s_id) where(baremesA.id_pied = '0000000001') and(baremesA.id_depot = @id_depot1))
    end
    if update(s_dpa2)

    begin
        declare @id_depot2 char(10)

        set @id_depot2 = '49D2A4ECEB'
        update baremesA set prix=inserted.s_dpa2 from inserted
            where (baremesA.id_pied='0000000001') and(baremesA.ar_ref = inserted.s_id) and(baremesA.id_depot = @id_depot2)

        insert into baremesA (id_pied, id, debut, fin, ar_ref, prix, id_depot)
            select '0000000001',right(newid(), 10),'01/01/1900','01/01/2099',inserted.s_id,inserted.s_dpa2,@id_depot2
             from inserted
            where not exists(select * from baremesA inner join inserted on (baremesA.ar_ref=inserted.s_id) where(baremesA.id_pied = '0000000001') and(baremesA.id_depot = @id_depot2))
    end
END

create trigger TR_STOCK_DEL_DPA
on STOCK
FOR DELETE not for replication
AS
BEGIN
    delete baremesA from deleted where (baremesA.id_pied='0000000001') and (baremesA.ar_ref=deleted.s_id)
END

Merk op dat deze triggers verwijzen naar de voet baremesA, dat 0000000001 is. Daarom moeten we dus een lijn toevoegen in "Tools > Kortingen > Leveranciers" en ervoor zorgen dat deze lijn ALTIJD op de eerste positie staat. Het is aangeraden om dit handmatig te wijzigen in de kortingen, omdat het volledig geautomatiseerd is door triggers.

Deze triggers zijn opgebouwd voor 2 depots, waarvan de id's '0000000001' en '49D2A4ECEB' zijn. (Aan te passen)