Changes between Version 1 and Version 2 of AdvancedReports


Ignore:
Timestamp:
09/30/21 14:32:33 (3 years ago)
Author:
153081
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • AdvancedReports

    v1 v2  
    55=== Поглед за наоѓање на најдобри клиенти
    66{{{#!sql
    7 create view  najdobri_klienti as
    8 select
    9 k.id_klient ,k.korisnicko_ime ,k.prezime
    10 from klienti as k
    11 inner join naracka as n on k.id_klient =n.id_klient
    12 where n.vkupna_cena in
    13 (select max(n.vkupna_cena)
    14 from naracka as n
    15 inner join klienti as k on n.id_klient =k.id_klient) ;
     7CREATE OR REPLACE VIEW public.najdobri_klienti
     8AS SELECT k.id_klient,
     9    k.korisnicko_ime,
     10    k.prezime,
     11    sum(n.vkupna_cena) AS vkupna_cena
     12   FROM klienti k
     13     JOIN naracka n ON k.id_klient = n.id_klient
     14  WHERE n.vkupna_cena IS NOT NULL
     15  GROUP BY k.id_klient, k.korisnicko_ime, k.prezime, n.vkupna_cena, n.datum_isporacana
     16 HAVING n.datum_isporacana < now()
     17  ORDER BY (sum(n.vkupna_cena)) DESC
     18 LIMIT 5;
    1619}}}
     20
     21Овој поглед му овозможува на директорот да има јасна слика за кој се клиентите кој носат
     22најголем профит во фирмата, односно клиенти кои имаат потрошено највеќе пари.
     23За например потоа да може да им понуди попуст или награда како најдобри клиенти.
    1724
    1825=== Поглед за наоѓање на најдобри работници
    1926{{{#!sql
    20 create view  najdobri_vraboteni_po_naracka as
    21 select
    22 n .naslov ,v.ime ,v.prezime ,max(enid.br_na_zavrseni_delovi)
    23 from  naracka as n
    24 inner join evidencija_na_naracki as enn on n.id_naracka =enn .id_naracka
    25 inner join evidencija_naracki_izraboteni_delovi as enid on enn.id_evidencija =enid.id_evidencija
    26 inner join delovi as d on enid.id_del =d.id_del
    27 inner join delovi_izraboteni_od_mashina as diom on d.id_del =diom .id_del
    28 inner join mashini as m on diom .id_mashina =m.id_mashina
    29 inner join vraboteni_vo_proizvodstvo_raboti_na_mashina as vprrm on m.id_mashina =vprrm .id_mashina
    30 inner join vraboteni_vo_proizvodstvo as vvp on vprrm .id_vraboten =vvp .id_vraboten
    31 inner join vraboteni as v on vvp.id_vraboten =v.id_vraboten
    32 group by 1,2,3;
     27-- public.najdobri_vraboteni_po_naracka source
     28
     29CREATE OR REPLACE VIEW najdobri_vraboteni_po_naracka
     30AS SELECT n.id_naracka,
     31    n.naslov,
     32    v.ime,
     33    v.prezime,
     34    max(enid.br_na_zavrseni_delovi) AS max
     35   FROM naracka n
     36     JOIN evidencija_na_naracki enn ON n.id_naracka = enn.id_naracka
     37     JOIN evidencija_naracki_izraboteni_delovi enid ON enn.id_evidencija = enid.id_evidencija
     38     JOIN delovi d ON enid.id_del = d.id_del
     39     JOIN delovi_izraboteni_od_mashina diom ON d.id_del = diom.id_del
     40     JOIN mashini m ON diom.id_mashina = m.id_mashina
     41     JOIN vraboteni_vo_proizvodstvo_raboti_na_mashina vprrm ON m.id_mashina = vprrm.id_mashina
     42     JOIN vraboteni_vo_proizvodstvo vvp ON vprrm.id_vraboten = vvp.id_vraboten
     43     JOIN vraboteni v ON vvp.id_vraboten = v.id_vraboten
     44  GROUP BY n.id_naracka, n.naslov, v.ime, v.prezime;
    3345}}}
     46
     47Овој поглед е исто така наменет за директоро да може да му помогне да види кој вработен има изработено највеќе делови од посебната нарачната.
     48За понатамошни накачување на плата, промовирање и слично
     49
     50== Тригери и функции
     51
     52=== Тригер за пресметување на цена на нарачка кога ќе се додаде нов продукт
     53
     54{{{#!sql
     55create trigger trig_insert after
     56insert
     57    on
     58   naracka_se_sostoi_od_mebel for each row execute procedure naracka_vkupna_cena();
     59}}}
     60
     61=== Процедура за соодветниот тригер
     62
     63
     64{{{#!sql
     65CREATE OR REPLACE FUNCTION naracka_vkupna_cena()
     66 RETURNS trigger
     67 LANGUAGE plpgsql
     68AS $function$
     69        DECLARE
     70                total double precision;
     71                initial double precision;
     72        BEGIN
     73        select
     74        case when
     75        n.vkupna_cena is null then 0
     76        else n.vkupna_cena end into initial
     77    from naracka as n
     78    where n.id_naracka=new.id_naracka;
     79        select m.cena into total from mebel as m
     80        where m.id_mebel = new.id_mebel;
     81        update naracka set vkupna_cena = initial + new.kolicina*total
     82        where naracka .id_naracka = new.id_naracka;
     83        return new;
     84        end;
     85$function$
     86;
     87}}}
     88
     89
     90
     91=== Тригер за пресметување на цена на нарачка кога ќе се одземе продукт од нарачката
     92
     93{{{#!sql
     94create trigger trig_delete after
     95delete
     96    on
     97   naracka_se_sostoi_od_mebel for each row execute procedure delete_vkupna_cena();
     98}}}
     99
     100=== Процедура за соодветниот тригер
     101{{{#!sql
     102CREATE OR REPLACE FUNCTION public.delete_vkupna_cena()
     103 RETURNS trigger
     104 LANGUAGE plpgsql
     105AS $function$
     106        DECLARE
     107                total double precision;
     108                initial double precision;
     109        BEGIN
     110        select
     111        case when
     112        n.vkupna_cena is null then 0
     113        else n.vkupna_cena end into initial
     114    from naracka as n
     115    where n.id_naracka=old.id_naracka;
     116        select m.cena into total from mebel as m
     117        where m.id_mebel = old.id_mebel;
     118        update naracka set vkupna_cena = initial - old.kolicina*total
     119        where naracka .id_naracka = old.id_naracka;
     120        return new;
     121        end;
     122$function$
     123;
     124}}}
     125
     126=== Тригер за пресметување на цена на нарачка кога ќе се додадат дополнителни делови за нарачка
     127
     128{{{#!sql
     129create trigger trig_insert after
     130insert
     131    on
     132    dopolniteli_delovi_za_naracka for each row execute procedure naracka_vkupna_cena_delovi();
     133}}}
     134
     135=== Функција која се повикува после активирање на тригерот
     136
     137{{{#!sql
     138CREATE OR REPLACE FUNCTION public.naracka_vkupna_cena_delovi()
     139 RETURNS trigger
     140 LANGUAGE plpgsql
     141AS $function$
     142        DECLARE
     143                total double precision;
     144                initial double precision;
     145                quantity integer;
     146        BEGIN
     147        select
     148        case when
     149        n.vkupna_cena is null then 0
     150        else n.vkupna_cena end into initial
     151    from naracka as n
     152    where n.id_naracka=new.id_naracka;
     153        select d.cena into total from delovi as d
     154        where d.id_del = new.id_del;
     155        update naracka set vkupna_cena = initial + new.kolicina*total
     156        where naracka .id_naracka = new.id_naracka;
     157        return new;
     158        end;
     159$function$
     160;
     161}}}