Changes between Version 3 and Version 4 of DatabaseProgramming


Ignore:
Timestamp:
09/14/26 01:07:49 (12 days ago)
Author:
223235
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • DatabaseProgramming

    v3 v4  
    1 = Functions, Procedures, Triggers
    2 
    3 New wiki links are automatically created when concatenating capitalized words, such that for example the words 'Camel' and 'Case' concatenated form a link to this CamelCase page.
    4 
    5 !CamelCase is the original wiki convention for creating hyperlinks, with the additional requirement that the capital letters are followed by a lower-case letter; hence "AlabamA" and "ABc" will not be links.
    6 
    7 == Customizing the Wiki behavior
    8 
    9 While Trac remains faithful to the original Wiki style, it also provides a number of ways to accommodate users with different preferences:
    10  * To prevent the creation of a link for the CamelCase word, prefix the word with an exclamation mark (`!`): `!CamelCase`.
    11  * By default a CamelCase word with no corresponding Wiki page will be rendered as a gray link followed by a question mark. This is useful for example when the CamelCase style is used to name code artefacts like class names, and a Wiki page is expected to exist to document each class. The behavior can be configured through the [TracIni#wiki-ignore_missing_pages-option "[wiki] ignore_missing_pages"] option in TracIni.
    12  * To automatically insert space characters between the words of a CamelCase link when rendering the link, enable [TracIni#wiki-split_page_names-option "[wiki] split_page_names"] of TracIni.
    13  * To create explicit Wiki links see WikiPageNames.
    14  * To completely disable Wiki formatting in some places, for example when rendering commit log messages, use the [TracIni#changeset-wiki_format_messages-option "[wiki] wiki_format_messages"] option in TracIni.
    15 
    16 See TracIni for more information on the available options.
    17 
    18 == More information on !CamelCase
    19 
    20  * http://c2.com/cgi/wiki?WikiCase
    21  * [https://en.wikipedia.org/wiki/CamelCase CamelCase] on Wikipedia
    22 
    23 ----
    24 See also: WikiPageNames, WikiNewPage, WikiFormatting, TracWiki
     1= Functions, Procedures, Triggers =
     2
     3== Процедури ==
     4
     5Процедурите ги опфаќаат операциите за договори, нарачки, достави, рецензии и лојалност. Припаѓаат на шемата `kbnteam`, се напишани на PL/pgSQL и се повикуваат со `CALL`. Проверките и промените на податоците се извршуваат во рамки на тековната трансакција.
     6
     7=== Договори ===
     8
     9||= Процедура ||= Намена ||= Директно изменети табели ||
     10|| [#pr_activate_or_renew_contract pr_activate_or_renew_contract] || Активирање или обновување договор || `contract` ||
     11
     12=== Нарачки и фактурирање ===
     13
     14||= Процедура ||= Намена ||= Директно изменети табели ||
     15|| [#pr_create_company_order pr_create_company_order] || Создавање компаниска нарачка || `company_order` ||
     16|| [#pr_create_customer_order pr_create_customer_order] || Создавање клиентска нарачка || `customer_order` ||
     17|| [#pr_add_order_item pr_add_order_item] || Додавање јадење или пијалак || `order_meal`, `order_drink`, `customer_order` ||
     18|| [#pr_remove_order_item pr_remove_order_item] || Отстранување јадење или пијалак || `order_meal`, `order_drink`, `customer_order` ||
     19|| [#pr_submit_customer_order pr_submit_customer_order] || Поднесување клиентска нарачка || `customer_order` ||
     20|| [#pr_change_order_status pr_change_order_status] || Промена на статус на нарачка || `customer_order` ||
     21|| [#pr_finalize_company_order pr_finalize_company_order] || Финализирање и фактурирање || `customer_order`, `invoice` ||
     22
     23=== Достави ===
     24
     25||= Процедура ||= Намена ||= Директно изменети табели ||
     26|| [#pr_assign_delivery_to_company_order pr_assign_delivery_to_company_order] || Доделување достава || `delivery`, `company_order` ||
     27|| [#pr_change_delivery_status pr_change_delivery_status] || Промена на статус на достава || `delivery` ||
     28
     29=== Рецензии ===
     30
     31||= Процедура ||= Намена ||= Директно изменети табели ||
     32|| [#pr_create_order_review pr_create_order_review] || Оценување клиентска нарачка || `review`, `order_review` ||
     33|| [#pr_create_delivery_review pr_create_delivery_review] || Оценување достава || `review`, `delivery_review` ||
     34
     35=== Лојалност ===
     36
     37||= Процедура ||= Намена ||= Директно изменети табели ||
     38|| [#pr_refresh_customer_loyalty pr_refresh_customer_loyalty] || Освежување лојалност || `customer_loyalty` ||
     39
     40== Параметри и однесување ==
     41
     42Параметрите без наведена насока се влезни (IN). Параметарот INOUT е истовремено влезен и излезен. Единствено создавањето компаниска нарачка го враќа новиот идентификатор преку INOUT параметар; останатите процедури немаат излезни параметри.
     43
     44[[Anchor(pr_activate_or_renew_contract)]]
     45
     46=== pr_activate_or_renew_contract ===
     47
     48Проверува дали компанијата и ресторанот постојат и дали периодот е валиден. Кога постои активен договор со период што се преклопува или е непосредно соседен, го проширува неговиот период. Ако нема таков договор, создава нов со статус active. Обновувањето се одбива ако проширениот период се преклопува со друг активен договор.
     49
     50||= Параметар ||= Тип ||= Насока ||= Стандардна вредност ||= Опис ||
     51|| `p_company_id` || `INTEGER` || IN || — || Компанија на која се однесува операцијата. ||
     52|| `p_rest_id` || `INTEGER` || IN || — || Ресторан поврзан со договорот. ||
     53|| `p_start_date` || `DATE` || IN || — || Почетен датум на договорот. ||
     54|| `p_end_date` || `DATE` || IN || — || Краен датум на договорот. ||
     55
     56[[Anchor(pr_create_company_order)]]
     57
     58=== pr_create_company_order ===
     59
     60Проверува дали компанијата постои и создава компаниска нарачка без доделена достава. Новиот идентификатор се враќа преку параметарот p_comp_order_id.
     61
     62||= Параметар ||= Тип ||= Насока ||= Стандардна вредност ||= Опис ||
     63|| `p_company_id` || `INTEGER` || IN || — || Компанија на која се однесува операцијата. ||
     64|| `p_comp_order_id` || `INTEGER` || INOUT || `NULL` || Се пополнува со идентификаторот на новата компаниска нарачка. ||
     65
     66[[Anchor(pr_create_customer_order)]]
     67
     68=== pr_create_customer_order ===
     69
     70Проверува дали клиентот и компаниската нарачка постојат и припаѓаат на иста компанија. Не дозволува додавање нарачка кон компаниска нарачка за која веќе има фактура. Создава клиентска нарачка со зададениот статус и почетен износ нула.
     71
     72||= Параметар ||= Тип ||= Насока ||= Стандардна вредност ||= Опис ||
     73|| `p_customer_user_id` || `INTEGER` || IN || — || Идентификатор на клиентот. ||
     74|| `p_comp_order_id` || `INTEGER` || IN || — || Идентификатор на компаниската нарачка. ||
     75|| `p_o_status_id` || `INTEGER` || IN || — || Почетен статус на клиентската нарачка. ||
     76
     77[[Anchor(pr_add_order_item)]]
     78
     79=== pr_add_order_item ===
     80
     81Го прифаќа типот meal или drink и проверува дали производот постои. За ресторанот на производот е потребен активен договор со компанијата на клиентот на датумот на нарачката. Не дозволува повторно додавање на истиот производ, измена на нарачка со статус completed, cancelled или refunded, ниту измена по фактурирање. По додавањето повторно го пресметува вкупниот износ.
     82
     83||= Параметар ||= Тип ||= Насока ||= Стандардна вредност ||= Опис ||
     84|| `p_order_id` || `INTEGER` || IN || — || Идентификатор на клиентската нарачка. ||
     85|| `p_item_type` || `VARCHAR(10)` || IN || — || Тип на производ: meal или drink. ||
     86|| `p_item_id` || `INTEGER` || IN || — || Идентификатор на јадењето или пијалакот. ||
     87
     88[[Anchor(pr_remove_order_item)]]
     89
     90=== pr_remove_order_item ===
     91
     92Го отстранува зададениот производ од нарачката и повторно го пресметува износот. Одбива отстранување производ што не е дел од нарачката. Не дозволува измени при статус completed, cancelled или refunded, ниту по фактурирање.
     93
     94||= Параметар ||= Тип ||= Насока ||= Стандардна вредност ||= Опис ||
     95|| `p_order_id` || `INTEGER` || IN || — || Идентификатор на клиентската нарачка. ||
     96|| `p_item_type` || `VARCHAR(10)` || IN || — || Тип на производ: meal или drink. ||
     97|| `p_item_id` || `INTEGER` || IN || — || Идентификатор на јадењето или пијалакот. ||
     98
     99[[Anchor(pr_submit_customer_order)]]
     100
     101=== pr_submit_customer_order ===
     102
     103Проверува дали нарачката содржи барем едно јадење или пијалак и дали за секој вклучен ресторан постои активен договор на датумот на нарачката. Не дозволува поднесување при статус completed, cancelled или refunded, ниту по фактурирање. Го пресметува износот и го поставува статусот на pending.
     104
     105||= Параметар ||= Тип ||= Насока ||= Стандардна вредност ||= Опис ||
     106|| `p_order_id` || `INTEGER` || IN || — || Идентификатор на клиентската нарачка. ||
     107
     108[[Anchor(pr_change_order_status)]]
     109
     110=== pr_change_order_status ===
     111
     112Проверува дали нарачката и новиот статус постојат и дали преминот е дозволен. За completed бара барем еден производ и активни договори со вклучените ресторани на датумот на нарачката, а потоа го пресметува износот. По фактурирање дозволува само премин од completed во refunded. При премин во completed, cancelled или refunded ја повикува процедурата за освежување на лојалноста. Повторно задавање на тековниот статус не предизвикува промена.
     113
     114||= Параметар ||= Тип ||= Насока ||= Стандардна вредност ||= Опис ||
     115|| `p_order_id` || `INTEGER` || IN || — || Идентификатор на клиентската нарачка. ||
     116|| `p_new_status_id` || `INTEGER` || IN || — || Идентификатор на новиот статус. ||
     117
     118[[Anchor(pr_finalize_company_order)]]
     119
     120=== pr_finalize_company_order ===
     121
     122Бара компаниската нарачка да постои, да нема фактура и да содржи клиентски нарачки. Сите клиентски нарачки мора да бидат completed и да содржат барем еден производ. Повторно ги пресметува нивните износи и создава една фактура за компаниската нарачка. Не бара доставата да има статус delivered.
     123
     124||= Параметар ||= Тип ||= Насока ||= Стандардна вредност ||= Опис ||
     125|| `p_comp_order_id` || `INTEGER` || IN || — || Идентификатор на компаниската нарачка. ||
     126
     127[[Anchor(pr_assign_delivery_to_company_order)]]
     128
     129=== pr_assign_delivery_to_company_order ===
     130
     131За компаниска нарачка без достава создава нова достава и ја поврзува со нарачката. Проверува дали доставувачот постои и дали неговиот ресторан има активен договор со компанијата на датумот на доставата. Датумот, статусот и забелешките се запишуваат во новата достава.
     132
     133||= Параметар ||= Тип ||= Насока ||= Стандардна вредност ||= Опис ||
     134|| `p_comp_order_id` || `INTEGER` || IN || — || Идентификатор на компаниската нарачка. ||
     135|| `p_driver_user_id` || `INTEGER` || IN || — || Идентификатор на доставувачот. ||
     136|| `p_d_status_id` || `INTEGER` || IN || — || Почетен статус на доставата. ||
     137|| `p_delivery_date` || `DATE` || IN || `CURRENT_DATE` || Датум на доставата. ||
     138|| `p_delivery_notes` || `VARCHAR(255)` || IN || `NULL` || Забелешки за доставата. ||
     139
     140[[Anchor(pr_change_delivery_status)]]
     141
     142=== pr_change_delivery_status ===
     143
     144Проверува дали доставата и новиот статус постојат и дали преминот е дозволен. Статусите assigned, picked up, on the way, delivered и delayed бараат назначен доставувач. За delivered дополнително бара доставата да биде поврзана со компаниска нарачка. Повторно задавање на тековниот статус не предизвикува промена.
     145
     146||= Параметар ||= Тип ||= Насока ||= Стандардна вредност ||= Опис ||
     147|| `p_delivery_id` || `INTEGER` || IN || — || Идентификатор на доставата. ||
     148|| `p_new_status_id` || `INTEGER` || IN || — || Идентификатор на новиот статус. ||
     149
     150[[Anchor(pr_create_order_review)]]
     151
     152=== pr_create_order_review ===
     153
     154Бара завршена нарачка со статус completed, поврзана со зададениот клиент, и проверува дали веќе постои рецензија за неа. Запишува општа оценка и коментар, како и посебни оценки за храната и ресторанот. Оценките се во опсег од 1 до 5.
     155
     156||= Параметар ||= Тип ||= Насока ||= Стандардна вредност ||= Опис ||
     157|| `p_order_id` || `INTEGER` || IN || — || Идентификатор на клиентската нарачка. ||
     158|| `p_customer_user_id` || `INTEGER` || IN || — || Идентификатор на клиентот. ||
     159|| `p_review_rating` || `INTEGER` || IN || — || Општа оценка од 1 до 5. ||
     160|| `p_review_comment` || `VARCHAR(255)` || IN || — || Коментар за рецензијата. ||
     161|| `p_food_rating` || `INTEGER` || IN || — || Оценка за храната од 1 до 5. ||
     162|| `p_restaurant_rating` || `INTEGER` || IN || — || Оценка за ресторанот од 1 до 5. ||
     163
     164[[Anchor(pr_create_delivery_review)]]
     165
     166=== pr_create_delivery_review ===
     167
     168Бара достава со статус delivered и клиент што има нарачка поврзана со таа достава. Не дозволува втора рецензија за истата достава, независно од клиентот. Запишува општа оценка и коментар, како и оценки за доставувачот и брзината, во опсег од 1 до 5.
     169
     170||= Параметар ||= Тип ||= Насока ||= Стандардна вредност ||= Опис ||
     171|| `p_delivery_id` || `INTEGER` || IN || — || Идентификатор на доставата. ||
     172|| `p_customer_user_id` || `INTEGER` || IN || — || Идентификатор на клиентот. ||
     173|| `p_review_rating` || `INTEGER` || IN || — || Општа оценка од 1 до 5. ||
     174|| `p_review_comment` || `VARCHAR(255)` || IN || — || Коментар за рецензијата. ||
     175|| `p_courier_rating` || `INTEGER` || IN || — || Оценка за доставувачот од 1 до 5. ||
     176|| `p_speed_rating` || `INTEGER` || IN || — || Оценка за брзината од 1 до 5. ||
     177
     178[[Anchor(pr_refresh_customer_loyalty)]]
     179
     180=== pr_refresh_customer_loyalty ===
     181
     182Ги пресметува поените на клиентот и избира ниво чиј опсег ги содржи поените. При повеќе совпаѓања го избира нивото со најголем долен праг; ако нема совпаѓање, го избира нивото со најмал долен праг. Го користи статусот на лојалност со најмал идентификатор. Создава членство или ги ажурира поените, нивото и статусот на постојното членство.
     183
     184||= Параметар ||= Тип ||= Насока ||= Стандардна вредност ||= Опис ||
     185|| `p_customer_user_id` || `INTEGER` || IN || — || Идентификатор на клиентот. ||
     186
     187== Дозволени промени на статус ==
     188
     189=== Клиентска нарачка ===
     190
     191||= Тековен статус ||= Дозволени следни статуси ||
     192|| `pending` || `on-hold`, `backorder`, `completed`, `cancelled` ||
     193|| `on-hold` || `pending`, `backorder`, `completed`, `cancelled` ||
     194|| `backorder` || `pending`, `on-hold`, `completed`, `cancelled` ||
     195|| `completed` || `refunded` ||
     196|| `cancelled`, `refunded` || Нема премин во друг статус. ||
     197
     198Овие премини се однесуваат на [#pr_change_order_status pr_change_order_status]. За нарачка во фактурирана компаниска нарачка е дозволен само преминот completed → refunded. Создавањето нарачка го користи зададениот почетен статус, а поднесувањето ја поставува на pending според сопствените проверки.
     199
     200=== Достава ===
     201
     202||= Тековен статус ||= Дозволени следни статуси ||
     203|| `pending` || `assigned`, `cancelled` ||
     204|| `assigned` || `picked up`, `delayed`, `failed`, `cancelled` ||
     205|| `picked up` || `on the way`, `delayed`, `failed`, `cancelled` ||
     206|| `on the way` || `delivered`, `delayed`, `failed` ||
     207|| `delayed` || `assigned`, `picked up`, `on the way`, `delivered`, `failed`, `cancelled` ||
     208|| `delivered`, `failed`, `cancelled` || Нема премин во друг статус. ||
     209
     210Овие премини се однесуваат на [#pr_change_delivery_status pr_change_delivery_status]. При создавање достава се користи зададениот почетен статус. Во двете процедури за промена на статус, називите се споредуваат без разлика на големината на буквите и повторување на тековниот статус завршува без измена.
     211
     212== Поврзаност меѓу операциите ==
     213
     214Компаниската нарачка ги обединува клиентските нарачки на една компанија. Во клиентските нарачки се додаваат производи, се проверуваат договорите и се пресметуваат износите. Завршените нарачки можат да се оценуваат, а компаниската нарачка се финализира со создавање фактура. Доставата има сопствен тек на статуси и може да се оценува откако ќе биде доставена.
     215
     216=== Помошни пресметки и проверки ===
     217
     218||= Функција ||= Улога ||
     219|| `fn_has_active_contract` || Проверува дали за компанијата и ресторанот постои договор со статус active што го опфаќа зададениот датум. ||
     220|| `fn_calculate_order_total` || Ги собира тековните цени на јадењата и пијалоците во нарачката. ||
     221|| `fn_calculate_customer_loyalty_points` || Го заокружува надолу збирот на износите на нарачките на клиентот, при што нарачките со статус cancelled придонесуваат со нула. Останатите статуси, вклучително refunded, се вклучени во тековната пресметка. ||
     222
     223Процедурата [#pr_change_order_status pr_change_order_status] ја повикува [#pr_refresh_customer_loyalty pr_refresh_customer_loyalty] при промена во completed, cancelled или refunded. Освежувањето бара постојни нивоа и статуси на лојалност.