| 1 | == **Погледи** |
| 2 | ---- |
| 3 | |
| 4 | == 1) Поглед што дава детален overview за клиент: |
| 5 | **Основни податоци\\ |
| 6 | Вкупни нарачки и сума на потрошено\\ |
| 7 | Број на успешни/неуспешни плаќања\\ |
| 8 | Лојалност (поени од clubcard)\\ |
| 9 | Проверка дали клиентот е верифициран\\ |
| 10 | Дали има регистрирани алергии\\ |
| 11 | Дали има активни рецепти\\** |
| 12 | |
| 13 | {{{ |
| 14 | |
| 15 | CREATE OR REPLACE VIEW synergymed.v_client_full_activity_overview AS |
| 16 | SELECT |
| 17 | u.id AS user_id, |
| 18 | u.first_name || ' ' || u.last_name AS client_name, |
| 19 | u.e_mail, |
| 20 | c.is_verified, |
| 21 | COALESCE(cc.points, 0) AS loyalty_points, |
| 22 | |
| 23 | -- narachki |
| 24 | COUNT(DISTINCT co.id) AS total_orders, |
| 25 | COALESCE(SUM(co.total_price), 0) AS total_spent, |
| 26 | |
| 27 | -- plakjanja |
| 28 | COUNT(DISTINCT p.id) FILTER (WHERE p.status = 'завршено') AS successful_payments, |
| 29 | COUNT(DISTINCT p.id) FILTER (WHERE p.status = 'неуспешно') AS failed_payments, |
| 30 | MAX(p.payment_date) AS last_payment_date, |
| 31 | |
| 32 | -- alergii |
| 33 | CASE |
| 34 | WHEN EXISTS ( |
| 35 | SELECT 1 FROM synergymed.healthprofile hp |
| 36 | JOIN synergymed.allergicreaction_healthprofile_medicine ahm ON ahm.health_profile_id = hp.id |
| 37 | WHERE hp.client_id = c.user_id |
| 38 | ) THEN TRUE ELSE FALSE |
| 39 | END AS has_allergies, |
| 40 | |
| 41 | -- recepti |
| 42 | CASE |
| 43 | WHEN EXISTS ( |
| 44 | SELECT 1 FROM synergymed.prescription pr |
| 45 | WHERE pr.client_id = c.user_id |
| 46 | AND pr.valid_to >= CURRENT_DATE |
| 47 | ) THEN TRUE ELSE FALSE |
| 48 | END AS has_active_prescriptions |
| 49 | |
| 50 | FROM synergymed.client c |
| 51 | JOIN synergymed.users u ON u.id = c.user_id |
| 52 | LEFT JOIN synergymed.clubcard cc ON cc.user_id = c.user_id |
| 53 | LEFT JOIN synergymed.clientorder co ON co.client_id = c.user_id |
| 54 | LEFT JOIN synergymed.payment p ON p.client_id = c.user_id |
| 55 | GROUP BY u.id, client_name, u.e_mail, c.is_verified, cc.points; |
| 56 | |
| 57 | }}} |
| 58 | ---- |
| 59 | == 2) Поглед за движењето на лековите низ целиот supply-chain: |
| 60 | ** |
| 61 | Кој дистрибутер испорачува**\\ |
| 62 | **Од лек и колку**\\ |
| 63 | **На која аптека**\\ |
| 64 | **Статус на нарачката**\\ |
| 65 | **Очекуван датум на пристигнување**\\ |
| 66 | **Последна залиха во магацин**\\ |
| 67 | |
| 68 | {{{ |
| 69 | |
| 70 | CREATE OR REPLACE VIEW synergymed.v_supply_chain_overview AS |
| 71 | SELECT |
| 72 | so.id AS supply_order_id, |
| 73 | d.company_id AS distributor_id, |
| 74 | cd.company_name AS distributor_name, |
| 75 | ph.company_id AS pharmacy_id, |
| 76 | cp.company_name AS pharmacy_name, |
| 77 | bm.id AS branded_medicine_id, |
| 78 | bm.name AS branded_medicine_name, |
| 79 | sobm.quantity AS ordered_quantity, |
| 80 | so.status AS order_status, |
| 81 | so.order_date, |
| 82 | so.expected_arrival_date, |
| 83 | |
| 84 | COALESCE(ibm.quantity, 0) AS last_known_inventory |
| 85 | FROM synergymed.supplyorder so |
| 86 | JOIN synergymed.distributor d ON d.company_id = so.distributor_id |
| 87 | JOIN synergymed.company cd ON cd.id = d.company_id |
| 88 | JOIN synergymed.pharmacy ph ON ph.company_id = so.pharmacy_id |
| 89 | JOIN synergymed.company cp ON cp.id = ph.company_id |
| 90 | JOIN synergymed.supplyorder_brandedmedicine sobm ON sobm.supply_order_id = so.id |
| 91 | JOIN synergymed.brandedmedicine bm ON bm.id = sobm.branded_medicine_id |
| 92 | LEFT JOIN synergymed.inventory i ON i.facility_id IN ( |
| 93 | SELECT f.id FROM synergymed.facility f WHERE f.company_id = ph.company_id |
| 94 | ) |
| 95 | LEFT JOIN synergymed.inventory_brandedmedicine ibm |
| 96 | ON ibm.inventory_id = i.id AND ibm.branded_medicine_id = bm.id; |
| 97 | |
| 98 | |
| 99 | }}} |
| 100 | ---- |
| 101 | == 3) Поглед што ги прикажува залихите на сите лекови во секоја аптека, со датум на последна промена. |
| 102 | {{{ |
| 103 | |
| 104 | CREATE OR REPLACE VIEW synergymed.v_inventory_status AS |
| 105 | SELECT |
| 106 | ph.company_id AS pharmacy_id, |
| 107 | phc.branded_medicine_id, |
| 108 | bm.name AS branded_name, |
| 109 | ibm.quantity, |
| 110 | ibm.last_changed |
| 111 | FROM synergymed.inventory_brandedmedicine ibm |
| 112 | JOIN synergymed.inventory i ON ibm.inventory_id = i.id |
| 113 | JOIN synergymed.facility f ON i.facility_id = f.id |
| 114 | JOIN synergymed.pharmacy ph ON ph.company_id = f.company_id |
| 115 | JOIN synergymed.pharmacy_catalog phc ON phc.pharmacy_id = ph.company_id |
| 116 | JOIN synergymed.brandedmedicine bm ON bm.id = phc.branded_medicine_id; |
| 117 | |
| 118 | }}} |
| 119 | ---- |
| 120 | == 4) Поглед што дава детална историја на нарачки за секој клиент, со информации за статус, цена и датум. |
| 121 | {{{ |
| 122 | |
| 123 | CREATE OR REPLACE VIEW synergymed.v_client_order_history AS |
| 124 | SELECT |
| 125 | co.id AS order_id, |
| 126 | u.first_name || ' ' || u.last_name AS client_name, |
| 127 | co.order_date, |
| 128 | co.expected_arrival_date, |
| 129 | co.status, |
| 130 | co.total_price, |
| 131 | pm.method_name AS payment_method |
| 132 | FROM synergymed.clientorder co |
| 133 | JOIN synergymed.client c ON co.client_id = c.user_id |
| 134 | JOIN synergymed.users u ON c.user_id = u.id |
| 135 | JOIN synergymed.payment p ON co.payment_id = p.id |
| 136 | JOIN synergymed.paymentmethod pm ON p.payment_method_id = pm.id; |
| 137 | |
| 138 | }}} |