= Креирање на нарачка === Актери ===== Потрошувач ==== Чекор 1 - Најава на системот Корисникот се најавува на системот со внесување на својот email и лозинка. Лозинката во позадина се хешира и таа се проверува во базата. {{{#!sql select user_id as userId, user_name as userName, user_surname as userSurname, user_pass as userPassword, user_email as userEmail, user_mobile as userMobile, user_salt as userSalt, user_active as userActive, user_image as userImage, user_role as userRole, clazz_ from users where user_email = ?1 }}} ==== Чекор 2 - Dashboard Овде на почетната страна корисникот ќе има приказ на своите активни нарачки и активни достави доколку има. ===== Листање на активни нарачки {{{#!sql select * from orders o where o.customer_id=curr_usr_id and o.order_status_id between 2 and 6 }}} Статусите на нарачки со id меѓу 2 и 6 се: ''Pending, Confirmed, Processing, Shipped, Out for Delivery'' ===== Листање на активни достави {{{#!sql select del.del_id as id, del.del_date_created as dateCreated, del.del_date as deliveryDate, del.del_start_km as delStartKm, del.del_end_km as delEndKm, to_char(d.del_start_time, 'HH24:MI:22') as delStartTime, to_char(d.del_end_time, 'HH24:MI:SS') as delEndTime, del.d_status_id as dStatusId, ds.d_status_name as delStatus, v.veh_id as vehId, dr.user_id as driverId, u.user_name as driverName, u.user_image as driverImage from delivery del join orders o on o.del_id=del.del_id join delivery d on o.del_id = d.del_id join delivery_status ds on d.d_status_id=ds.d_status_id join vehicle v on v.veh_id=d.veh_id join driver dr on dr.veh_id=v.veh_id join users u on u.user_id=dr.user_id where o.cust_id=:customer and del.d_status_id <> 4; }}} Статус на достава број 4 е ''Delivered'', односно, тука се листат сите достави на моменталниот корисник кои се со статус различен од ''Delivered''. ==== Чекор 3 - Корисникот клика на копчето `Направи нарачка` По клик на копчето корисникот е пренасочен кон форма каде ја пополнува со посакуваните продукти и нивната количина. Тука нема листање на ништо првично во формата. Тука во моделот се праќаат листи на категории, артикли, произведувачи и единки од секој артикл во магацинот од регионот на корисникот. ===== Вчитување на корисник и магацин на моменталниот корисник {{{#!sql -- Вчитување на корисник: select u.user_id as id, u.user_name as firstName, u.user_surname as lastName, u.user_email as email, u.user_mobile as phone, u.user_image as image, u.city_id as cityId, c.city_name as cityName, r.region_name as regionName, u.user_role as role, clazz_ as clazz_, u.user_active as userActive from users u join city c on u.city_id = c.city_id join region r on c.region_id = r.region_id where user_email = ?1; -- Вчитување на магацин: with reg as ( select r.* from city c1 join region r on c1.region_id = r.region_id where c1.city_id = :city ) select w.wh_id as id, w.wh_adr as address, c.city_id as cityId, c.city_name as cityName, r1.region_id as regionId, r1.region_name as regionName from warehouse w join city c on c.city_id = w.city_id join reg r1 on r1.region_id = c.region_id where c.region_id = r1.region_id }}} ===== Категории во магацинот {{{#!sql select ctg_id as id, ctg_name as name from category }}} ===== Артикли во магацинот {{{#!sql with stock as ( select a.art_id, count(au.unit_id) as quantity from article a join price p on a.art_id = p.art_id join unit_price up on p.price_id = up.price_id join article_unit au on up.unit_id = au.unit_id group by a.art_id ) select a.art_id as id, a.art_name as name, m.man_name as manufacturer, st.quantity as quantity, m.man_id as manufacturerId, p.price as price, c.ctg_name as category, c.ctg_id as categoryId, a.art_weight as weight, a.art_image as image from article a join stock st on st.art_id=a.art_id join manufacturer m on a.man_id = m.man_id join category c on a.ctg_id = c.ctg_id join price p on a.art_id = p.art_id join unit_price up on p.price_id = up.price_id join article_unit au on up.unit_id = au.unit_id join warehouse w on w.wh_id = au.wh_id where w.wh_id = ?1 }}} ===== Произведувачи на артикли во магацинот {{{#!sql select m.man_id as id, m.man_name as name, m.man_adr as address, m.man_mobile as phone, m.man_email as email from manufacturer m }}} ===== Единки од артикли во магацинот {{{#!sql select au.unit_id as id, au.unit_expiration_date as expiryDate, au.unit_serial_number as serialNo, au.unit_batch_number as batchNo, au.unit_manufacture_date as manufactureDate, au.unit_cost_price as costPrice, a.art_id as artId, a.art_name as artName, au.wh_id as whId, r.region_name as whRegion, c.city_name as whCity, au.ord_id as ordId, u.user_email as customerEmail from article_unit au join warehouse wh on au.wh_id = wh.wh_id join city c on wh.city_id = c.city_id join region r on c.region_id = r.region_id join unit_price up on au.unit_id = up.unit_id join price p on up.price_id = p.price_id join article a on p.art_id = a.art_id join orders o on au.ord_id = o.ord_id join customer cust on o.cust_id = cust.user_id join users u on cust.user_id = u.user_id }}} ==== Чекор 4 - Пополнување на форма Тука корисникот може да пристапи на два начини. * Да пребарува низ сите продукти со пишување во поле за пребарување или * Да пребарува по категории, производители со селектирање од листа/drop-down мени. ===== Пребарување по име на продукт со внесување на букви/збор Ова се прави со !JavaScript со тоа што сите продукти се вчитуваат од тој магацин. ===== Пребарување по листање на категории или производители Ова се прави со !JavaScript со тоа што сите категории и производители се вчитуваат. ==== Чекор 5 - Креирање на нарачката во позадина По одбирање на производот, корисникот одбира посакувана количина и одбира дали сака да добие профактура со нарачката, клика на копчето `Креирај ја нарачката`. По ова се креира нарачка во базата. ===== Креирање на нарачка {{{#!sql insert into orders (ord_date, ord_sum, ord_fulfillment_date, ord_comment, o_status_id, cust_id, del_id, pf_id) values (?1,?2,?3,?4,?5,?6,?7,?8) }}} ===== Се добива нарачката од листа на нарачки за корисникот и се додава нејзиниот примарен клуч за секој тип на одбран артикл {{{#!sql -- За секој одбран артикл се добиваат единките артикли во магацинот и на првите select au.unit_id as id, au.unit_expiration_date as expiryDate, au.unit_serial_number as serialNo, au.unit_batch_number as batchNo, au.unit_manufacture_date as manufactureDate, au.unit_cost_price as costPrice, a.art_id as artId, au.wh_id as whId, au.ord_id as ordId from article_unit au join unit_price up on au.unit_id = up.unit_id join price p on up.price_id = p.price_id join article a on p.art_id = a.art_id where au.wh_id = ?2 and a.art_id = ?1 -- Според одбраната количина од тој артикл на толку единки ѝм се додава примарниот клуч на новокреираната нарачка update article_unit set unit_expiration_date = ?2, unit_serial_number = ?3, unit_batch_number = ?4,unit_manufacture_date = ?5,unit_cost_price = ?6,wh_id = ?7,ord_id = ?8 where unit_id=?1 }}} ===== Доколку корисникот одбрал профактура, се креира профактурата и нејзиниот примарен клуч се додава на нарачката. {{{#!sql insert into pro_forma(pf_deadline, pf_date_created, pf_status_id) values (?1,?2,?3) }}}