- #d.agreement_version# (некорректно, в одном месте версией называется номер, а в другом сущность, и это отразилось в именовании таблиц и полей)
+ #d.agreement_version# (некорректный нейминг, в одном месте версией называется номер, а в другом сущность, и это отразилось в именовании таблиц и полей)
-
- select measure_id, measure
- from measure
- order by 2
-
-
- />
- для композитных услуг (состоящих из компонентов) указывать штуки. Обычно композитные услуги попадают в спецификацию в количестве 1 шт.
-
-
-
-
-
Точность
-
-
- Количество знаков после запятой, 0 - целое число. Переопределяет точность из абстрактной услуги
-
-
-
-
-
-
-
Ответственный
-
-
- select usr_id, firstname, middlename, lastname
- from usr
- order by 4,2,3
-
-
-
-
-
-
-
- Переопределяет ответственного за абстрактную услугу
-
-
-
-
-
Внутренняя
-
- checked />
- Предоставляется только внутри компании. Не должна попадать в списки, публикуемые наружу. Не предполагается наличия цены. При снятии отметки станет обычной услугой.
-
-
-
-
-
Статус
-
-
- select status_id, status
- from status
- order by 1
-
-
- />
- с
-
-
-
-
-
-
Ставка НДС
-
- %
-
-
-
-
-
НДС не облагается
-
- checked />
- Если флаг установлен, ставка НДС игнорируется
-
-
-
-
-
-
-
-
-
-
-
- select
- sp.service_param_id
- ,ac.param_class_id
- ,ac.abstract_service_param_class_id
- ,ac.is_multiple
- ,sp.param_id
- ,sp.min_value
- ,sp.max_value
- ,p.param
- ,p.code as param_code
- ,p.precision
- ,m.measure
- ,m.measure_short
- ,c.param_class
-
- ,(select count(*) from service_param_price t where t.service_param_id=sp.service_param_id AND t.pricing_model_id=1) as inst_cnt
- ,(select price from service_param_price t where t.service_param_id=sp.service_param_id AND t.pricing_model_id=1 order by service_param_price_id desc limit 1) as prc_inst
- ,(select service_param_price_id from service_param_price t where t.service_param_id=sp.service_param_id AND t.pricing_model_id=1 order by service_param_price_id desc limit 1) as prc_inst_id
- ,(select status from service_param_price t where t.service_param_id=sp.service_param_id AND t.pricing_model_id=1 order by service_param_price_id desc limit 1) as prc_inst_stat
-
- ,(select count(*) from service_param_price t where t.service_param_id=sp.service_param_id AND t.pricing_model_id=2) as fix_cnt
- ,(select price from service_param_price t where t.service_param_id=sp.service_param_id AND t.pricing_model_id=2 order by service_param_price_id desc limit 1) as prc_fix
- ,(select service_param_price_id from service_param_price t where t.service_param_id=sp.service_param_id AND t.pricing_model_id=2 order by service_param_price_id desc limit 1) as prc_fix_id
- ,(select status from service_param_price t where t.service_param_id=sp.service_param_id AND t.pricing_model_id=2 order by service_param_price_id desc limit 1) as prc_fix_stat
-
- ,(select count(*) from service_param_price t where t.service_param_id=sp.service_param_id AND t.pricing_model_id=3) as payg_cnt
- ,(select price from service_param_price t where t.service_param_id=sp.service_param_id AND t.pricing_model_id=3 order by service_param_price_id desc limit 1) as prc_payg
- ,(select service_param_price_id from service_param_price t where t.service_param_id=sp.service_param_id AND t.pricing_model_id=3 order by service_param_price_id desc limit 1) as prc_payg_id
- ,(select status from service_param_price t where t.service_param_id=sp.service_param_id AND t.pricing_model_id=3 order by service_param_price_id desc limit 1) as prc_payg_stat
-
- from abstract_service_param_class ac
- left outer join service_param sp on (ac.abstract_service_param_class_id=sp.abstract_service_param_class_id
- AND sp.service_id=)
- left outer join param_class c on (ac.param_class_id=c.param_class_id)
- left outer join param p on (sp.param_id=p.param_id)
- left outer join measure m on (p.measure_id=m.measure_id)
- where ac.abstract_service_id=
- order by ac.sort, ac.abstract_service_param_class_id, p.sort, p.param
-
-
-
-
-
- Компоненты варианта услуги (#qServiceParam.recordCount#), цены без НДС
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- select
- t.service_price_id
- ,t.service_id
- ,t.pricing_model_id
- ,m.pricing_model
- ,m.pricing_model_short
- ,t.pricing_period
- ,t.rating_period
- ,t.price
-
- ,t.dt_from
- ,t.dt_to
- ,t.status
- ,t.descr
- from service_price t
- left outer join pricing_model m on (t.pricing_model_id=m.pricing_model_id)
- where t.service_id=
- order by 1
-
-
-
-
- Цены услуги без НДС (#qServicePrice.recordCount#)
-
-
-
-
- цена услуги - это то, что остается, если все компоненты обнулить, или их нет (для атомарной услуги). Если компоненты есть, обычно цена услуги не нужна, стоимость складывается из компонентов
-
-
-
-
-
-
-
-
ID
-
Ц-обр.
-
Период цены
-
Период опроса
-
-
Статус
-
С
-
По
-
Цена GPL без НДС
-
-
-
-
-
-
-
-
-
#service_price_id#
-
#pricing_model_short#
-
#pricing_period#
-
#rating_period#
-
-
#status#
-
#dateFormat(dt_from,'DD.MM.YYYY')#
-
#dateFormat(dt_to,'DD.MM.YYYY')#
-
#request.formatPrice(price)#
-
-
-
-
-
-
-
-
-
-
- select f.specification_id, f.specification,
- (select count(*) from specification_item_param sip where sip.specification_item_id=si.specification_item_id) as item_param_cnt
- from specification_item si
- left outer join specification f on (si.specification_id=f.specification_id)
- where si.service_id=
-
-
-
-
Используется спецификациями (#qSpecification.recordCount#)
-
-
-
-
-
-
-
Спецификация
-
Компонентов
-
Сумма, ₽
-
-
-
-
-
-
-
-
- #specification#
-
-
-
- #item_param_cnt#
-
-
-
- under construction
-
-
-
-
-
-
-
- Компоненты доступны после сохранения услуги
-
-
-
-
-
-
diff --git a/specification.cfm b/specification.cfm
index 6e2c364..cb7ac2c 100644
--- a/specification.cfm
+++ b/specification.cfm
@@ -148,16 +148,52 @@
select
i.specification_item_uid
- ,s.svc_id
- ,s.svc
- ,s.code
+ ,svc.svc_id
+ ,svc.svc
+ ,svc.code
+ ,s.specification_id
+ ,s.contract_id
+ ,(select siv.agreement_version from specification_item_version siv
+ join agreement a on (siv.agreement_version=a.agreement_version AND a.contract_id=s.contract_id)
+ where siv.specification_item_uid=i.specification_item_uid AND a.is_actual
+ order by siv.agreement_version desc limit 1) as agreement_version
+ ,(select a.agreement from specification_item_version siv
+ join agreement a on (siv.agreement_version=a.agreement_version AND a.contract_id=s.contract_id)
+ where siv.specification_item_uid=i.specification_item_uid AND a.is_actual
+ order by siv.agreement_version desc limit 1) as agreement
+ ,(select a.dt_agreement from specification_item_version siv
+ join agreement a on (siv.agreement_version=a.agreement_version AND a.contract_id=s.contract_id)
+ where siv.specification_item_uid=i.specification_item_uid AND a.is_actual
+ order by siv.agreement_version desc limit 1) as dt_agreement
+ ,(select siv.specification_item_version from specification_item_version siv
+ join agreement a on (siv.agreement_version=a.agreement_version AND a.contract_id=s.contract_id)
+ where siv.specification_item_uid=i.specification_item_uid AND a.is_actual
+ order by siv.agreement_version desc limit 1) as specification_item
+ ,(select siv.quantity from specification_item_version siv
+ join agreement a on (siv.agreement_version=a.agreement_version AND a.contract_id=s.contract_id)
+ where siv.specification_item_uid=i.specification_item_uid AND a.is_actual
+ order by siv.agreement_version desc limit 1) as quantity
+ ,(select siv.price from specification_item_version siv
+ join agreement a on (siv.agreement_version=a.agreement_version AND a.contract_id=s.contract_id)
+ where siv.specification_item_uid=i.specification_item_uid AND a.is_actual
+ order by siv.agreement_version desc limit 1) as price
+ ,(select siv.dt_from from specification_item_version siv
+ join agreement a on (siv.agreement_version=a.agreement_version AND a.contract_id=s.contract_id)
+ where siv.specification_item_uid=i.specification_item_uid AND a.is_actual
+ order by siv.agreement_version desc limit 1) as dt_from
+ ,(select siv.dt_to from specification_item_version siv
+ join agreement a on (siv.agreement_version=a.agreement_version AND a.contract_id=s.contract_id)
+ where siv.specification_item_uid=i.specification_item_uid AND a.is_actual
+ order by siv.agreement_version desc limit 1) as dt_to
,(select count(*) from specification_item_version siv where siv.specification_item_uid=i.specification_item_uid) as item_version_count
from specification_item i
- left outer join svc s on (i.svc_id=s.svc_id)
+ join specification s on (i.specification_id=s.specification_id)
+ --left outer join ()
+ left outer join svc on (i.svc_id=svc.svc_id)
where i.specification_id=
- order by 1
+ order by 2
@@ -172,7 +208,8 @@
-
+
+ (количество, цена, даты актуальности, версия/соглашение, имя для печати - для последней актуальной версии)
- Здесь отсутствуют версионные поля - цена, количество, название для печати.
- Если бы они были - это получилась бы версия спецификации.
Как сущности версии спецификации нет.
Можно синтезировать версию спецификации на произвольную дату, а можно по версии определенного соглашения (это должно быть возмозно, потому что соглашение меняет каждую строку не более 1 раза
)
Спецификация по версии соглашения не учитывает is_actual этого соглашения, но учитывает предыдущие
*** Собственно, нам нужно для илюстрации версионности как раз синтезировать спецификацию на дату и спецификацию по версии согдашения
+
+
+
+
+
+
+ select
+ a.agreement
+ ,a.dt_agreement
+ ,a.agreement_version
+ ,a.is_actual
+ ,(select count(*) from specification_item si
+ join specification_item_version iv on (si.specification_item_uid=iv.specification_item_uid)
+ where si.specification_id=
+ AND iv.agreement_version=a.agreement_version
+ ) as changed_item_cnt
+ from agreement a
+ where a.contract_id=
+ /*AND exists (
+ select * from specification_item si
+ join specification_item_version iv on (si.specification_item_uid=iv.specification_item_uid)
+ where si.specification_id=s.specification_id
+ AND iv.agreement_version=a.agreement_version
+ )*/
+ order by 2
+
+
+
+
+
+
+
+
+
+
+
+
+ select
+ i.specification_item_uid
+ ,svc.svc_id
+ ,svc.svc
+ ,svc.code
+ ,s.specification_id
+ ,s.contract_id
+
+
+ ,(select siv.agreement_version from specification_item_version siv
+ join agreement a on (siv.agreement_version=a.agreement_version AND a.contract_id=s.contract_id)
+ where siv.specification_item_uid=i.specification_item_uid AND a.is_actual
+ order by siv.agreement_version desc limit 1) as agreement_version
+ ,(select a.agreement from specification_item_version siv
+ join agreement a on (siv.agreement_version=a.agreement_version AND a.contract_id=s.contract_id)
+ where siv.specification_item_uid=i.specification_item_uid AND a.is_actual
+ order by siv.agreement_version desc limit 1) as agreement
+ ,(select a.dt_agreement from specification_item_version siv
+ join agreement a on (siv.agreement_version=a.agreement_version AND a.contract_id=s.contract_id)
+ where siv.specification_item_uid=i.specification_item_uid AND a.is_actual
+ order by siv.agreement_version desc limit 1) as dt_agreement
+ ,(select siv.specification_item_version from specification_item_version siv
+ join agreement a on (siv.agreement_version=a.agreement_version AND a.contract_id=s.contract_id)
+ where siv.specification_item_uid=i.specification_item_uid AND a.is_actual
+ order by siv.agreement_version desc limit 1) as specification_item
+ ,(select siv.quantity from specification_item_version siv
+ join agreement a on (siv.agreement_version=a.agreement_version AND a.contract_id=s.contract_id)
+ where siv.specification_item_uid=i.specification_item_uid AND a.is_actual
+ order by siv.agreement_version desc limit 1) as quantity
+ ,(select siv.price from specification_item_version siv
+ join agreement a on (siv.agreement_version=a.agreement_version AND a.contract_id=s.contract_id)
+ where siv.specification_item_uid=i.specification_item_uid AND a.is_actual
+ order by siv.agreement_version desc limit 1) as price
+ ,(select siv.dt_from from specification_item_version siv
+ join agreement a on (siv.agreement_version=a.agreement_version AND a.contract_id=s.contract_id)
+ where siv.specification_item_uid=i.specification_item_uid AND a.is_actual
+ order by siv.agreement_version desc limit 1) as dt_from
+ ,(select siv.dt_to from specification_item_version siv
+ join agreement a on (siv.agreement_version=a.agreement_version AND a.contract_id=s.contract_id)
+ where siv.specification_item_uid=i.specification_item_uid AND a.is_actual
+ order by siv.agreement_version desc limit 1) as dt_to
+ ,(select count(*) from specification_item_version siv where siv.specification_item_uid=i.specification_item_uid) as item_version_count
+ from specification_item i
+ join specification s on (i.specification_id=s.specification_id)
+ --left outer join ()
+ left outer join svc on (i.svc_id=svc.svc_id)
+ where i.specification_id=
+ order by 2
+
+
+
+