Содержание

SQL-скрипты

Могут пригодиться в особых ситуаций для решения проблем, для которых не предусмотрено кнопок в интерфейсе «админки».

Скрипт, сбрасывающий блокировки получателей рассылок в telegram

Tсли система конкретному гостю трижды не смогла отправить сообщение, то она перестанет пытаться это делать до тех пор, пока гость не проявит какую-то активность в боте.
Чтобы сбросить эту блокировку - можно использовать скрипт:

UPDATE additional_contact
SET telegram_fail_count = 0
WHERE type = 1
  AND is_deleted = 0
  AND telegram_fail_count > 0;

Скрипт, позволяющий посчитать через заказы какого официанта было большее начисление бонусов за период

WITH EmployeeBonuses AS (
    SELECT 
        c.[id] as check_id,
        EmployeeNode.value('@name', 'NVARCHAR(255)') AS EmployeeName,
        EmployeeNode.value('@code', 'NVARCHAR(50)') AS EmployeeCode,
        EmployeeNode.value('@role', 'NVARCHAR(10)') AS EmployeeRole,
        EmployeeNode.value('@id', 'NVARCHAR(100)') AS EmployeeId,
        (SELECT SUM(BonusNode.value('@sum', 'DECIMAL(18,2)'))
         FROM c.xml_native.nodes('/CHECK/CHECKDATA/CHECKBONUSES/BONUS') AS T(BonusNode)
        ) AS CheckBonusSum
    FROM 
        [dbo].[check] c
    CROSS APPLY 
        c.xml_native.nodes('/CHECK/CHECKDATA/CHECKPERSONS/PERSON') AS T(EmployeeNode)
)
SELECT 
    EmployeeName,
    EmployeeCode,
    EmployeeRole,
    SUM(CheckBonusSum) AS TotalBonus,
    COUNT(DISTINCT check_id) AS CheckCount
FROM 
    EmployeeBonuses
WHERE 
    CheckBonusSum IS NOT NULL
GROUP BY 
    EmployeeName, EmployeeCode, EmployeeRole
ORDER BY 
    TotalBonus DESC;