1. select
s.Service_Id -- ИД услуги
, s.Name -- Название услуги
from services s
inner join subscr_hist sh on (s.Service_Id = sh.Serv_Id)
inner join customer c on (sh.Customer_Id = c.Customer_Id)
where current_date between sh.Date_From and sh.Date_To
and c.Account_No = '111'
2. Удалить или отключить?
Код отключения услуги
execute procedure Onoff_Service_By_Id(
:Customer_Id -- Ид абонента
, :Serv_Id -- Ид услуги
, :Actservice -- Какой услугой отключаем
, :Date -- Дата отключения, должна быть больше даты подключения
, 1 -- признак того что отключаем
, :Notice -- примечание
, :Units -- 1 или сумма стоимсоть отключения
);
3. Добавление а не включение услуги
execute procedure Add_Subscr_Service(
:Customer_Id -- Ид абонента
, :Serv_Id -- Ид услуги
, :Actservice -- Какой услугой подключаем
, :Date -- Дата подключения
, :Notice -- примечание
, :Units -- 1 или сумма стоимсоть отключения
, null -- договор или null если не нужен
, null -- дата договора или null если не нужен
);
Оплата рассчитывается для каждого типа услуг по разному.
если периодическая услуга рассчитывается пропорционально подключенным дням, т.е. за фактически подключенные дни, то так и абонплата будет только за эти дни.
если алгоритм начисления 0 или полная абонплата если абонент подключен более Х дней, то будет 0 или полная абонплата.
Что мешает проверить начисления на тестовом абоненте?
создайте абонента. "поиграйте" с услугами. удалите абонента.