From 38b621bc44a13f1c17913dd378f4ea4a2094d1c2 Mon Sep 17 00:00:00 2001 From: msyu Date: Mon, 9 Jun 2025 16:03:38 +0300 Subject: [PATCH] intermediate draft 5 --- agreement.cfm | 28 +- etc/db/spec.sql | 2 + lib/prepare_detail.cfm | 6 +- service.cfm | 671 ----------------------------- specification.cfm | 133 +++++- specification_item.cfm | 8 +- specification_item_del.cfm | 77 ++-- specification_item_version.cfm | 57 ++- specification_item_version_del.cfm | 68 +++ specification_version.cfm | 269 ++++++++++++ svc.cfm | 177 ++++++++ svc_ls.cfm | 133 ++++++ 12 files changed, 889 insertions(+), 740 deletions(-) delete mode 100644 service.cfm create mode 100644 specification_item_version_del.cfm create mode 100644 specification_version.cfm create mode 100644 svc.cfm create mode 100644 svc_ls.cfm diff --git a/agreement.cfm b/agreement.cfm index 0258bd3..d9843e1 100644 --- a/agreement.cfm +++ b/agreement.cfm @@ -111,7 +111,7 @@
Номер версии
- #d.agreement_version# (некорректно, в одном месте версией называется номер, а в другом сущность, и это отразилось в именовании таблиц и полей) + #d.agreement_version# (некорректный нейминг, в одном месте версией называется номер, а в другом сущность, и это отразилось в именовании таблиц и полей)
@@ -215,6 +215,9 @@ + Спецификация + Договор + Контрагент Стабильный ключ строки Услуга Код услуги @@ -222,10 +225,7 @@ Дата с Дата по Кол-во - Цена - Спецификация - Договор - Контрагент + Цена @@ -234,17 +234,23 @@ "edit""view"> - #specification_item_uid# - #svc# + + #specification# + + #contract# #dateFormat(dt_contract,'DD.MM.YYYY')# + #contragent# + + #specification_item_uid# + + + #svc# + #code# #specification_item_version# #dateFormat(dt_from,'DD.MM.YYYY')# #dateFormat(dt_to,'DD.MM.YYYY')# #quantity# - #price# - #specification# - #contract# #dateFormat(dt_contract,'DD.MM.YYYY')# - #contragent# + #price# diff --git a/etc/db/spec.sql b/etc/db/spec.sql index 5ac8d2b..11205ec 100644 --- a/etc/db/spec.sql +++ b/etc/db/spec.sql @@ -104,6 +104,7 @@ insert into specification (specification,contract_id) values ('first spec',1); -- , - , - , , -- , drop table if exists specification_version CASCADE; +/* create table specification_version ( specification_id int ,agreement_version int NOT NULL -- FK agreement @@ -116,6 +117,7 @@ create table specification_version ( ,CONSTRAINT PK_specification_version PRIMARY KEY (specification_id, agreement_version) ); ALTER TABLE specification_version OWNER TO dbo; +*/ -- drop table if exists specification_item CASCADE; diff --git a/lib/prepare_detail.cfm b/lib/prepare_detail.cfm index ef083f5..4e953ba 100644 --- a/lib/prepare_detail.cfm +++ b/lib/prepare_detail.cfm @@ -6,13 +6,13 @@ - + - - + + diff --git a/service.cfm b/service.cfm deleted file mode 100644 index a98350c..0000000 --- a/service.cfm +++ /dev/null @@ -1,671 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - pageInfo=#pageInfo# - id="#d.service_id#" - status=#pageInfo.status# - trackOut="tr" - idAttributesOut="id" -/> - - - select a.abstract_service, m.modifier, m.modifier_id, c.modifier_class, - m.code as modifier_code, a.code, g.area_code, a.manager_id, - a.measure_id, u.measure, u.measure_short, a.precision - ,au.login as creator, au.shortname as creator_shortname, mu.login as updater, mu.shortname as updater_shortname - from service s - left outer join abstract_service a on (s.abstract_service_id=a.abstract_service_id) - left outer join area g on a.area_id=g.area_id - left outer join modifier m on (s.modifier_id=m.modifier_id) - left outer join modifier_class c on (m.modifier_class_id=c.modifier_class_id) - left outer join measure u on (a.measure_id=u.measure_id) - left outer join usr au on (s.creator_id=au.usr_id) - left outer join usr mu on (s.updater_id=mu.usr_id) - where s.service_id= - - - - - select a.modifier_class_id, mc.modifier_class, a.measure_id, a.precision - from abstract_service a - left outer join modifier_class mc on (a.modifier_class_id=mc.modifier_class_id) - where a.abstract_service_id= - - - - - - - - - - - - - - - - Вариант услуги (конкретная услуга) - - #qDecoration.abstract_service# - - - #qDecoration.modifier# - - [#d.service_id#] - - - - - - -
#status.errorMessage#
-
- - - - - - -
- - -
-
Абстрактная услуга
-
- - select abstract_service_id, abstract_service, code - from abstract_service - order by 3,2 - - - /> - - - Единица измерения: #qDecoration.measure# (#qDecoration.measure_short#) - Точность: #qDecoration.precision#(нет) - -
-
- -
-
Характеристика
-
- - select m.modifier_id, m.modifier - from modifier m - join abstract_service a on (m.modifier_class_id=a.modifier_class_id) - where a.abstract_service_id= - order by m.sort, m.code, m.modifier - - - #qAbstractService.modifier_class# - - - - - - (нет) - -
-
- -
-
Код варианта услуги
-
- #request.skuCode(qDecoration.area_code, qDecoration.code, qDecoration.modifier_code)# -
-
- - - - -
-
Единица измерения
-
- - 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 /> - Если флаг установлен, ставка НДС игнорируется -
-
- - -
-
Описание
-
- -
-
- -
-
Коммерческие примечания
-
- -
-
- -
-
Создано
-
- #dateFormat(d.dt_created,'DD.MM.YYYY')# #timeFormat(d.dt_created,'HH:MM')# - #qDecoration.creator# (#qDecoration.creator_shortname#) -       - Изменено - #dateFormat(d.dt_updated,'DD.MM.YYYY')# #timeFormat(d.dt_updated,'HH:MM')# - #qDecoration.updater# (#qDecoration.updater_shortname#) -
-
- -
- -
- - - - - - - - - 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#), цены без НДС - - - - - - - - - - -

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
КомпонентВариант компонентаКодЕд.изм.MinMaxЦена инстЦена фиксЦена payg
- - - - - - - - - - - - - -
- - - - - -
-
-
- #param_class# - - - - - - - - - - #param# - (основной вариант) - - - (не выбран) - - - - - #request.skuCode(qDecoration.area_code,qDecoration.code,qDecoration.modifier_code,param_code)# - - #measure_short##request.roundSafe(min_value,precision)##request.roundSafe(max_value,precision)# - - (#prc_inst_stat#) - - - #prc_inst# - - по запросу - - - - (#inst_cnt#) - - - (prc_fiх_stat) - - - #prc_fix# - - по запросу - - - - - - - - #prc_payg# - - по запросу - - - - - - - -
-
- - - - - - - - - - - - - - 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 @@

- + + (количество, цена, даты актуальности, версия/соглашение, имя для печати - для последней актуальной версии) @@ -181,6 +218,14 @@ + + + + + + + + @@ -193,21 +238,89 @@ - + + + + + + + + +
Услуга Код услуги Версий Тек. соглашениеТек. версияДата сДата поКоличествоЦенаИмя для печати
#specification_item_uid# #svc# #code##item_version_count##item_version_count##agreement# #dateFormat(dt_agreement,'DD.MM.YYYY')##agreement_version##dateFormat(dt_from,'DD.MM.YYYY')##dateFormat(dt_to,'DD.MM.YYYY')##quantity##price##specification_item# - +
- Здесь отсутствуют версионные поля - цена, количество, название для печати. - Если бы они были - это получилась бы версия спецификации. Как сущности версии спецификации нет. Можно синтезировать версию спецификации на произвольную дату, а можно по версии определенного соглашения (это должно быть возмозно, потому что соглашение меняет каждую строку не более 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 + + + +

+ Версии (#qVersion.recordCount#) + +

+
+ + + + + + + + + + + + + + + + + + + +
СоглашениеДата соглашенияВерсияСтрок изменено
+ + #agreement##dateFormat(dt_agreement,'DD.MM.YYYY')##agreement_version##changed_item_cnt#
diff --git a/specification_item.cfm b/specification_item.cfm index 47b76f3..50589a0 100644 --- a/specification_item.cfm +++ b/specification_item.cfm @@ -177,7 +177,7 @@

- Версии (#qSpecificationItemVersion.recordCount#) (история инстанса) + Версии строки (#qSpecificationItemVersion.recordCount#) (история инстанса) @@ -195,7 +195,7 @@ Версия N Соглашение Дата соглашения - Действует + Согл. действ. Дата с Дата по Услуга (для печати) @@ -214,10 +214,10 @@ #agreement_version# #agreement# #dateFormat(dt_agreement,'DD.MM.YYYY')# - + #dateFormat(dt_from, 'DD.MM.YYYY')# #dateFormat(dt_to, 'DD.MM.YYYY')# - #specification_item_version# + #specification_item_version# #quantity# #price# diff --git a/specification_item_del.cfm b/specification_item_del.cfm index 3b07e21..1c43457 100644 --- a/specification_item_del.cfm +++ b/specification_item_del.cfm @@ -5,52 +5,75 @@ - + - - specification_item_param_id - c.param_class - coalesce(p.param, p1.param) as param - sip.quantity + + siv.specification_item_uid + siv.agreement_version + + d.contract + d.dt_contract + a.agreement + a.dt_agreement + siv.agreement_version + siv.quantity + siv.price + siv.specification_item_version - specification_item_param sip - left outer join service_param sp on (sip.service_param_id=sp.service_param_id) - left outer join param p on sp.param_id=p.param_id - left outer join param_class c on p.param_class_id=c.param_class_id - left outer join param p1 on sp.param_id=p1.param_id + specification_item_version siv + left outer join specification_item si on (siv.specification_item_uid=si.specification_item_uid) + left outer join specification s on (si.specification_id=s.specification_id) + left outer join contract d on (s.contract_id=d.contract_id) + left outer join contragent k on (d.contragent_id=k.contragent_id) + left outer join agreement a on (siv.agreement_version=a.agreement_version AND s.contract_id=a.contract_id) - specification_item_id - 1 - - - + + siv.specification_item_uid + + + siv.agreement_version + + + - +/> + + pageInfo=#pageInfo# + id="" + queryString="#request.thisPage#?specification_item_uid=#specification_item_uid#" + defaultBackUrl="specification.cfm?specification_id=#d.specification_item_id#" + status=#pageInfo.status# + trackOut="tr" + idAttributesOut="id" +/> ---> select - si.specification_item, - n.specification + si.specification_item_uid + ,s.specification + ,svc.svc from specification_item si - join specification n on (si.specification_id=n.specification_id) - where si.specification_item_id= + left outer join specification s on (si.specification_id=s.specification_id) + left outer join svc on (si.svc_id=svc.svc_id) + where si.specification_item_uid= @@ -62,8 +85,8 @@ Удаление строки спецификации #qDecoration.specification# - #qDecoration.specification_item# - [#specification_item_id#] + #qDecoration.svc# + [#specification_item_uid#] diff --git a/specification_item_version.cfm b/specification_item_version.cfm index c790230..9a0d15e 100644 --- a/specification_item_version.cfm +++ b/specification_item_version.cfm @@ -15,8 +15,21 @@ - - + + + + + + + @@ -142,8 +155,12 @@ #qSpecificationItem.contragent# + + #d.specification_item_uid# + + - [#d.specification_item_uid#] #qSpecificationItem.svc# + #qSpecificationItem.svc# [#qSpecificationItem.svc_id#] @@ -164,6 +181,28 @@ class="" /> (версия-номер соглашения) + + + + #d.agreement_version# + + + + + + + + + + + + + на макете мы пока собираем цепочки дат руками + + + + + @@ -171,18 +210,8 @@ - - - - - - - - - - - + diff --git a/specification_item_version_del.cfm b/specification_item_version_del.cfm new file mode 100644 index 0000000..bcf469a --- /dev/null +++ b/specification_item_version_del.cfm @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + select + si.specification_item_uid + ,s.specification + ,svc.svc + from specification_item si + left outer join specification s on (si.specification_id=s.specification_id) + left outer join svc on (si.svc_id=svc.svc_id) + where si.specification_item_uid= + + + + + + + Удаление версии строки спецификации + #qDecoration.specification# + #qDecoration.svc# + [#specification_item_uid#] + [#agreement_version#] + + + +   + + + + +#markup# + + \ No newline at end of file diff --git a/specification_version.cfm b/specification_version.cfm new file mode 100644 index 0000000..43a1b2a --- /dev/null +++ b/specification_version.cfm @@ -0,0 +1,269 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + pageInfo=#pageInfo# + id="#d.specification_id#" + status=#pageInfo.status# + trackOut="tr" + idAttributesOut="id" +/> + + + + select + a.login as creator, a.shortname as creator_shortname, m.login as updater, m.shortname as updater_shortname + from #pageInfo.entity# e + left outer join usr a on (e.creator_id=a.usr_id) + left outer join usr m on (e.updater_id=m.usr_id) + where e.#pageInfo.key#= + + + + select d.contract_id, d.contract, d.dt_contract, c.contragent_id, c.contragent + from contract d + left outer join contragent c on (d.contragent_id=c.contragent_id) + where d.contract_id= + + + select a.agreement, a.agreement_version, a.dt_agreement + from agreement a + where a.contract_id= + AND a.agreement_version= + + + + + + Версия [#agreement_version#] + спецификации + + #d.specification# + [#d.specification_id#] + + + + + + + + + + +

#status.errorMessage#
+ + + + + + + +
+ + +
+
Спецификация (номер)
+
+ #d.specification# +
+
+ +
+
Договор
+
+ #qContract.contragent# #qContract.contract# #dateFormat(qContract.dt_contract,'DD.MM.YYYY')# + + + +
+
+ + + +
+
Описание
+
+ #d.descr# +
+
+ +
+
Создано
+
+ #dateFormat(d.dt_created,'DD.MM.YYYY')# #timeFormat(d.dt_created,'HH:MM')# + #qDecoration.creator# (#qDecoration.creator_shortname#) +       + Изменено + #dateFormat(d.dt_updated,'DD.MM.YYYY')# #timeFormat(d.dt_updated,'HH:MM')# + #qDecoration.updater# (#qDecoration.updater_shortname#) +
+
+ +
+ +
+ + + + + + + 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 + + + +

+ Строки спецификации (#qItem.recordCount#) + + + + + + +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Ключ строкиУслугаКод услугиВерсий Тек. соглашениеТек. версияДата сДата поКоличествоЦенаИмя для печати
+ + #specification_item_uid##svc##code##item_version_count##agreement# #dateFormat(dt_agreement,'DD.MM.YYYY')##agreement_version##dateFormat(dt_from,'DD.MM.YYYY')##dateFormat(dt_to,'DD.MM.YYYY')##quantity##price##specification_item# + +
+ +
+ + + diff --git a/svc.cfm b/svc.cfm new file mode 100644 index 0000000..393bc15 --- /dev/null +++ b/svc.cfm @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + pageInfo=#pageInfo# + id="#d.svc_id#" + status=#pageInfo.status# + trackOut="tr" + idAttributesOut="id" +/> + + + + select + a.login as creator, a.shortname as creator_shortname, m.login as updater, m.shortname as updater_shortname + from svc g + left outer join usr a on (g.creator_id=a.usr_id) + left outer join usr m on (g.updater_id=m.usr_id) + where g.svc_id= + + + + + + + Сервис + + #d.svc# + [#d.svc_id#] + + + + + + + + + + + + +
+ + +
+
ID
+
+ +
+
+ +
+
Наименование *
+
+ +
+
+ +
+
Сокращение *
+
+ + используется для формирования имени экземпляра +
+
+ +
+
Имя для оркестратора *
+
+ +
+
+ +
+
Код
+
+ код по каталогу (сопоставление модификатора с параметрами - открытый вопрос) +
+
+ +
+
Версия
+
+ +
+
+ +
+
Production Ready
+
+ checked/> +
+
+ +
+
Сортировка
+
порядок вывода в форме, целое число, рекомендуется через 10
+
+ +
+
Описание
+
+ +
+
+ +
+
Руководство
+
+ +
+
+ +
+
Создано
+
+ #dateFormat(d.dt_created,'YYYY-MM-DD')# #timeFormat(d.dt_created,'HH:MM')# + #qDecoration.creator# (#qDecoration.creator_shortname#) +       + Изменено + #dateFormat(d.dt_updated,'YYYY-MM-DD')# #timeFormat(d.dt_updated,'HH:MM')# + #qDecoration.updater# (#qDecoration.updater_shortname#) +
+
+ +
+ +
+ + + + + + \ No newline at end of file diff --git a/svc_ls.cfm b/svc_ls.cfm new file mode 100644 index 0000000..bcb1077 --- /dev/null +++ b/svc_ls.cfm @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + select + + s.svc_id + s.svc + s.svc_short + s.orchestrator_name + s.code + s.is_production_ready + s.descr + s.version + s.sort + (select count(*) from specification_item i where i.svc_id=s.svc_id) as spec_cnt + + from svc s + where 1=1 + order by + + + + + + + + + + +select count(*) as cnt from svc where 1=1 + + + + + + + + + + + + Сервисы + + + + + + + + + + + + + + + + + + + + + + + + + + + + + title="редактировать" class="edit"title="просмотр" class="view"> + + + + + + + + + + + + #svc# + + + + + + + + + + + + + + + + + + + + + + + #gridFooter# + + +