Несколько услуг в одном счёте
Несколько услуг в одном счёте
Здравствуйте. Подскажите пожалуйста как реализовать, чтобы при формировании счёта туда заносились все услуги которые есть у клиента? Поясню есть клиент у которого в услугах телефония и выделенный телефонный номер. При формировании счёта генерится две отдельные странички, где телефония и номер отдельно. Хочется видеть это в одном счёте, в одной табличке. Спасибо.
Есть некая инструкция по объединению счетов в рамках всех услуг на данном ЛС. Опробовано(на 5.2.1-009), работает.
Хотел сваять скрипт для автозапуска ночью первого числа, но руки не доходят, да и вручную оно надежнее.
АЛЯРМ: перед экспериментами не забываем бэкапить БД и\или таблицы которые затрагиваются работой данного механизма.
Хотел сваять скрипт для автозапуска ночью первого числа, но руки не доходят, да и вручную оно надежнее.
АЛЯРМ: перед экспериментами не забываем бэкапить БД и\или таблицы которые затрагиваются работой данного механизма.
Код: Выделить всё
1)обрабатываем таблицу invoice entry(проставить диапазоны дат для тех счетов, которые мы будем печатать(первое число месяца))
UPDATE invoice_entry ie LEFT JOIN (
SELECT a.id AS aid ,
i.id AS iid ,
i.invoice_date AS idate
from invoices i left join (
SELECT
min(i.id) as id,
i.ext_num,
min(i.invoice_date) as invoice_date,
i.payment_transaction_id,
i.expire_date,
i.is_payed,
i.is_printed,
i.is_mailed,
i.uid,
i.account_id,
sum(i.arrearage) as arrearage,
max(i.period_start) as period_start,
max(i.period_end) as period_end,
i.balance_on_set,
i.version,
i.ic_status,
i.ic_id,
i.last_sync_date
from invoices i
where i.invoice_date > UNIX_TIMESTAMP('2015-05-01 00:00:00')
and i.invoice_date < UNIX_TIMESTAMP('2015-05-01 00:59:00')
group by
i.ext_num,
i.payment_transaction_id,
i.expire_date,
i.is_payed,
i.is_printed,
i.is_mailed,
i.uid,
i.account_id,
i.balance_on_set,
i.version,
i.ic_status,
i.ic_id,
i.last_sync_date
) a on a.uid = i.uid
and a.account_id = i.account_id
) r ON r.iid = ie.invoice_id SET ie.invoice_id = r.aid WHERE
r.idate > UNIX_TIMESTAMP('2015-05-01 00:00:00')
and r.idate < UNIX_TIMESTAMP('2015-05-01 00:59:00');
2)удаляем пустые счета из таблицы invoices
delete from invoices where id not in (select invoice_id from invoice_entry);
3)делаем временную табличку для табличных частей счетов, копируем в нее нужные нам строчки счетов
Указываем айди текущего основного расчетного периода,и айди 0 для разовых счетов.
CREATE TEMPORARY TABLE invoice_entry_temp
select
min(e.id) as id,
e.name,
e.invoice_id,
e.slink_id,
e.service_type,
e.discount_period_id,
sum(e.qnt) as qnt,
e.base_cost,
sum(e.sum_cost) as sum_cost,
e.tax_amount,
e.version,
count(e.id),
d.type,
d.value
from invoice_entry e
left join invoice_entry_details d on d.entry_id=e.id
group by invoice_id, name, service_type, slink_id, discount_period_id, d.type, d.value, base_cost, e.tax_amount, e.version
HAVING e.discount_period_id IN (0,23);
4)чистим оригинальную таблицу invoice_entry от табличных частей за данный р\период
Указываем айди текущего основного расчетного периода,и айди 0 для разовых счетов.
delete from invoice_entry where discount_period_id IN (0,23);
delete from invoice_entry_details where entry_id not in (select id from invoice_entry);
5)вносим в оригинальную таблицу invoice_entry табличные части из временной таблички
insert into invoice_entry
select
e.id,
e.name,
e.invoice_id,
e.slink_id,
e.service_type,
e.discount_period_id,
e.qnt,
e.base_cost,
e.sum_cost,
e.tax_amount,
e.version
from invoice_entry_temp e;