| | 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 | }}} |