= Use-case 0008 Implementation - Купување книги = '''Иницирачки актер:''' Купувач '''Други актери:''' Нема == Опис == Најавениот купувач може да избере книга и количина и да изврши купување. Системот ја проверува достапната количина на залиха, ја пресметува вкупната цена, креира нова нарачка, ја евидентира купената книга и плаќањето и ја намалува количината на книгата на залиха. По успешно завршување на купувањето, корисникот добива потврда за нарачката. == Сценарио == 1. Најавениот купувач ја отвора страницата со детали за книгата што сака да ја купи. На страницата се прикажуваат податоците за книгата, цената, изборот на количина и копчето „Купи ја книгата“. [[Image(UseCase0008_1.png, width=800)]] 2. Купувачот ја избира саканата количина. Во прототипот може да се избере количина од 1 до 5 примероци. [[Image(UseCase0008_2.png, width=800)]] 3. По притискање на копчето „Купи ја книгата“, системот прво ја презема цената и моменталната количина на залиха за избраната книга. Се користи следната SQL наредба: {{{ #!sql SELECT cena, kolicina_na_zaliha FROM project.knigi WHERE kniga_id = %s; }}} Системот проверува дали има доволно примероци на залиха за избраната количина. Потоа вкупната цена се пресметува како цена на книгата помножена со избраната количина. 4. Ако има доволно примероци на залиха, системот креира нова нарачка за најавениот корисник. Се користи следната SQL наредба: {{{ #!sql INSERT INTO project.naracki (datum, status, vkupna_cena, korisnik_id) VALUES (CURRENT_TIMESTAMP, %s, %s, %s) RETURNING naracka_id; }}} Статусот на успешно креираната нарачка се поставува на `ZAVRSENA`. 5. Системот ја поврзува избраната книга со креираната нарачка и ја зачувува избраната количина и единечната цена. Се користи следната SQL наредба: {{{ #!sql INSERT INTO project.sodrzi (naracka_id, kniga_id, kolicina, edinechna_cena) VALUES (%s, %s, %s, %s); }}} 6. Системот го евидентира плаќањето за креираната нарачка. Се користи следната SQL наредба: {{{ #!sql INSERT INTO project.plakanja (datum, iznos, nacin_na_plakjanje, status, naracka_id) VALUES (CURRENT_TIMESTAMP, %s, %s, %s, %s); }}} Во прототипот начинот на плаќање е `KARTICKA`, а статусот на успешно плаќање е `USPESNO`. 7. По успешното купување, системот ја намалува количината на книгата на залиха за бројот на купени примероци. Се користи следната SQL наредба: {{{ #!sql UPDATE project.knigi SET kolicina_na_zaliha = kolicina_na_zaliha - %s WHERE kniga_id = %s; }}} 8. Сите промени се потврдуваат во базата на податоци. Доколку се појави грешка во текот на купувањето, промените се поништуваат. По успешно купување, системот го пренасочува корисникот кон страницата со потврда за успешно извршената нарачка. [[Image(UseCase0008_3.png, width=800)]] 9. Корисникот може да ја отвори страницата „Мои нарачки“, каде што се прикажуваат неговите претходни купувања. За прикажување на нарачките на најавениот корисник се користи следната SQL наредба: {{{ #!sql SELECT n.naracka_id, n.datum, n.status, n.vkupna_cena, k.naslov, s.kolicina, s.edinechna_cena FROM project.naracki n JOIN project.sodrzi s ON n.naracka_id = s.naracka_id JOIN project.knigi k ON s.kniga_id = k.kniga_id WHERE n.korisnik_id = %s ORDER BY n.datum DESC; }}} [[Image(UseCase0008_4.png, width=800)]]