diff --git a/Application.cfc b/Application.cfc index 80188eb..035bebd 100644 --- a/Application.cfc +++ b/Application.cfc @@ -97,7 +97,7 @@ - + diff --git a/contract.cfm b/contract.cfm index ba53975..fdc3921 100644 --- a/contract.cfm +++ b/contract.cfm @@ -183,13 +183,10 @@ #base_by_uid# #base_by_name# - - +
Мы не показываем тут сделки, поскольку связь со сделкой у договора не прямая и не обязательная. Сделки относятся к контрагенту, а не к договору. Сделка может быть связана с договором через дополнительное соглашение (включая нулевое соглашение, по умолчанию) + + + + + + with + status(status, status_id, probability_pc) as (VALUES + ('Закрыта неуспешно',7,0),('Закрыта успешно',6,100),('Договор подписан',5,100),('Договор на подписании',15,90),('Договор на согласовании',12,70), + ('Тестирование',8,50),('Отправлено ТКП',10,20),('Внутреннее согласование',37,10),('Проработка решения',4,10),('Сбор потребностей',1,0) + ) + select + siv.__id + ,siv.__name + ,siv.user_description + ,siv.discount + ,siv.cnt + ,siv.modifier_code + ,siv.abstractive_service_code + ,siv.is_actual + ,siv.type + ,siv.hash + ,siv.version + ,siv.name_version + ,siv.date_accept + ,siv.__index + ,siv.date_nop + ,siv.date_end + ,siv.is_easy + ,siv.params::text + ,a.__id::text as additional_agreement_uid + ,a.__name as additional_agreement + ,p.price + ,p.cnt as p_cnt + ,p.ed_izm + ,p.code + ,p.discount as p_discount + ,p.__id as p_uid + ,p.name + /*,(select + sum(siv.cnt*(100-COALESCE(siv.discount,0))/100*p.price*p.cnt*(100-COALESCE(p.discount,0))/100) + from elma.service_parametrs p + where p.__id = ANY (siv.params) + AND p."__deletedAt" IS NULL + ) as line_cost + ,(select count(*) + from elma.service_parametrs p + where p.__id = ANY (siv.params) + AND p."__deletedAt" IS NULL + ) as param_cnt*/ + ,s.probability_pc + ,d.__index + ,d.__id as deal_uid + from elma.deals_services siv + join elma.deals d on d.__id=ANY(siv.deal) + join status s on (d.__status_status=s.status_id) + join elma.service_parametrs p ON (p.__id = ANY (siv.params) AND p."__deletedAt" IS NULL) + left outer join elma.additional_agreements a on (a.__id=ANY(siv.additional_agreement)) + where a.contract_uid= + and siv.is_actual + and a.is_actual + order by siv.version::int + + + +

Услуги (версии строк спецификации, только актуальные) (#qService.recordCount#)

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
__indexКодuser_descriptionКомпонентыКол-воСкидкаСуммаtypeis_actualhashversionname_versiondate_accept__indexdate_nopdate_endis_easyadditional_agreement
#__index# + #abstractive_service_code#.#modifier_code# + #user_description# + + + + + + + + + + + + + + + +
#code##name##p_cnt##ed_izm##nFmt(price,3)##p_discount#%
+
#cnt##discount#%#nFmt(cost*cnt*(100-(isNumeric(discount)?discount:0))/100)##type##is_actual##hash##version##name_version##date_accept##__index##dateFormat(date_nop,'YYYY-MM-DD')##dateFormat(date_end,'YYYY-MM-DD')##is_easy##additional_agreement#
+ + + \ No newline at end of file diff --git a/contragent.cfm b/contragent.cfm index eb96349..7e26d98 100644 --- a/contragent.cfm +++ b/contragent.cfm @@ -121,11 +121,10 @@ -сюда добавить сделок, договоров и т.д. - + select @@ -398,31 +397,29 @@ ,siv.params::text ,a.__id::text as additional_agreement_uid ,a.__name as additional_agreement - ,(select - sum(siv.cnt*(100-COALESCE(siv.discount,0))/100*p.price*p.cnt*(100-COALESCE(p.discount,0))/100) - from elma.service_parametrs p - where p.__id = ANY (siv.params) - AND p."__deletedAt" IS NULL - ) as line_cost - ,(select count(*) - from elma.service_parametrs p - where p.__id = ANY (siv.params) - AND p."__deletedAt" IS NULL - ) as param_cnt + ,p.price + ,p.cnt as p_cnt + ,p.ed_izm + ,p.code + ,p.discount as p_discount + ,p.__id as p_uid + ,p.name ,s.probability_pc ,d.__index ,d.__id as deal_uid from elma.deals_services siv join elma.deals d on d.__id=ANY(siv.deal) join status s on (d.__status_status=s.status_id) + join elma.service_parametrs p ON (p.__id = ANY (siv.params) AND p."__deletedAt" IS NULL) left outer join elma.additional_agreements a on (a.__id=ANY(siv.additional_agreement)) where d._companies= - and siv.is_actual + AND siv.is_actual + AND a.is_actual order by version::int -

Услуги (версии строк спецификации, только актуальные) (#qService.recordCount#) *** здесь не учтено дублирование строк в новых версиях

+

Услуги (версии строк спецификации, только актуальные)

@@ -431,7 +428,8 @@ __index - user_description + user_description + Компоненты Кол-во Скидка% Сумма @@ -445,20 +443,37 @@ __index date_nop date_end - is_easy - Компонентов - additional_agreement + is_easy + additional_agreement - + #__index# #user_description# - #cnt# - #discount# - #nFmt(line_cost)# + + + + + + + + + + + + + + + + +
#code##name##p_cnt##ed_izm##nFmt(price,3)##p_discount#%
+ + #cnt# + #discount#% + #nFmt(cost*cnt*(100-(isNumeric(discount)?discount:0))/100)# #abstractive_service_code#.#modifier_code# #additional_agreement# @@ -484,5 +498,5 @@
-
+
\ No newline at end of file diff --git a/crm2cloud.cfm b/crm2cloud.cfm new file mode 100644 index 0000000..d7b47de --- /dev/null +++ b/crm2cloud.cfm @@ -0,0 +1,269 @@ + + + + + + + + + + + + + +WITH +status(status, status_id, probability_pc) as (VALUES + ('Закрыта неуспешно',7,0),('Закрыта успешно',6,100),('Договор подписан',5,100),('Договор на подписании',15,90),('Договор на согласовании',12,70), + ('Тестирование',8,50),('Отправлено ТКП',10,20),('Внутреннее согласование',37,10),('Проработка решения',4,10),('Сбор потребностей',1,0) +), +line as ( + SELECT siv.__id as siv_uid, siv.discount, siv.type as line_pricing_model_id + ,siv.hash as line_key, siv.is_actual as siv_is_actual + ,siv.version::numeric as line_version + ,d.__index as deal_index + ,d._companies + ,a.index as agreement_version + ,siv.date_nop::date as dt_from + ,siv.date_end::date as dt_to + ,siv.is_easy as is_simple + ,siv.cnt -- should mutiliply + ,s.probability_pc + ,a.__id as agreement_uid, a.contract_uid, a.is_actual as agreement_is_actual, a.deal_uid + ,d.__name as deal, d.__status_status as deal_status_id + --,c.__name as contract + ,siv.user_description + ,siv.params + --,(SELECT sum(p.price*p.cnt*(100.0-COALESCE(p.discount,0.0))/100.0) FROM elma.service_parametrs p WHERE(p.__id = ANY (siv.params))) as cost + FROM elma.deals_services siv + JOIN elma.deals d on (d.__id = ANY(siv.deal)) + JOIN status s on (d.__status_status=s.status_id) + LEFT OUTER JOIN elma.additional_agreements a on (a.__id = ANY(siv.additional_agreement)) + WHERE siv.is_actual AND siv."__deletedAt" IS NULL AND d."__deletedAt" IS NULL AND a."__deletedAt" IS NULL + AND a.is_actual + AND siv.type IN (2,3) +), +component as ( + SELECT + price*cnt*(100.0-COALESCE(discount,0))/100.0 as cost + ,price + ,cnt + ,code + ,__id + FROM elma.service_parametrs + where "__deletedAt" IS NULL +), +stair as ( -- рабочая лесенка (инстансы строк, имеющие нетривиальную вероятность) + select * FROM ( + SELECT *, + MIN(dt_from) OVER (PARTITION BY line_key ORDER BY deal_index desc) running_min_dt + FROM line --WHERE probability_pc > 0 + ) t + WHERE t.dt_from = t.running_min_dt +), +alloc as (select c."WZ" as wz +, round(sum(c."VM_RAM_Allocated")) as ram +, round(sum(CASE WHEN "VM_is_ON" > 0 THEN c."VM_RAM_Allocated" ELSE 0 END)) as ram_on +, round(sum(c."VM_vCPU_count")) as cpu +, round(sum(CASE WHEN "VM_is_ON" > 0 THEN c."VM_vCPU_count" ELSE 0 END)) as cpu_on +from vmreports.compute c +where ts=(select max(ts) from vmreports.compute) +group by c."WZ" +), +disk_alloc as (select c."WZ" as wz +, round(sum(c."Disk_Allocated")) as disk_alloc +from vmreports.storage c +where ts=(select max(ts) from vmreports.storage) +group by c."WZ" +), +sold_ram as (SELECT +z.id_klienta as WZ, z.__name as client, z.__id as company_uid, round(sum(c.cnt*o.cnt)) as quantity +,count(*) as lines, STRING_AGG(c.code,', ') as codes +/*,o.line_key, o.probability_pc, dt_next, o.deal_uid, o.deal, o.agreement_uid, o.line_pricing_model_id,o.dt_from, o.dt_to*/ +FROM stair o +JOIN elma.companies z on (o._companies=z.__id) +LEFT OUTER JOIN component c on (c.__id = ANY (o.params)) +WHERE c.code LIKE 'iaas.ngc.%.ram-_' +GROUP BY z.id_klienta, z.__id, z.__name +), +sold_cpu as (SELECT +z.id_klienta as WZ, z.__name as client, z.__id as company_uid, round(sum(c.cnt*o.cnt)) as quantity +,count(*) as lines, STRING_AGG(c.code,', ') as codes +/*,o.line_key, o.probability_pc, dt_next, o.deal_uid, o.deal, o.agreement_uid, o.line_pricing_model_id,o.dt_from, o.dt_to*/ +FROM stair o +JOIN elma.companies z on (o._companies=z.__id) +LEFT OUTER JOIN component c on (c.__id = ANY (o.params)) +WHERE c.code LIKE 'iaas.ngc.%.vcpu-_' +GROUP BY z.id_klienta, z.__id, z.__name +), +sold_disk as (SELECT +z.id_klienta as WZ, z.__name as client, z.__id as company_uid, round(sum(c.cnt*o.cnt)) as quantity +,count(*) as lines, STRING_AGG(c.code,', ') as codes +/*,o.line_key, o.probability_pc, dt_next, o.deal_uid, o.deal, o.agreement_uid, o.line_pricing_model_id,o.dt_from, o.dt_to*/ +FROM stair o +JOIN elma.companies z on (o._companies=z.__id) +LEFT OUTER JOIN component c on (c.__id = ANY (o.params)) +WHERE c.code SIMILAR TO 'iaas.ngc.%.(ssd|fstssd|sata)-_' +GROUP BY z.id_klienta, z.__id, z.__name +), +deal_stat as ( +select STRING_AGG(distinct deal_status_id::text,', ') as status_ids +, z.id_klienta as WZ +from line o join elma.companies z on (o._companies=z.__id) +GROUP BY z.id_klienta +) + +select + r.wz as wz_sold, + r.client as client_sold, r.company_uid, + a.wz as wz_alloc, + ds.status_ids, + r.codes as ram_codes, + r.quantity as ram_sold, + a.ram as ram_alloc, + a.ram_on as ram_alloc_on, + c.codes as cpu_codes, + c.quantity as cpu_sold, + a.cpu as cpu_alloc, + a.cpu_on as cpu_alloc_on, + d.quantity as disk_sold, + da.disk_alloc, + d.codes as disk_codes +from sold_ram r +join deal_stat ds on (r.wz=ds.wz) +join sold_cpu c on (r.wz=c.wz) +left join sold_disk d on (r.wz=d.wz) +full join alloc a on (r.wz=a.wz) +left join disk_alloc da on (a.wz=da.wz) + +order by 1,3 + + + + + + + + + + + + + + + Сверка CRM - Cloud + + + + + + + + + + + + +
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
WZ ElmaКлиентWZ CloudСтатусыКоды RAMRAM GB ElmaRAM CloudRAM Cloud ONКоды CPUCPU ElmaCPU CloudCPU Cloud ONКоды ДисковДиски GB ElmaДиски Cloud
#wz_sold##client_sold##wz_alloc##status_ids##ram_codes##ram_sold##ram_alloc##ram_alloc_on##cpu_codes##cpu_sold##cpu_alloc##cpu_alloc_on##disk_codes##disk_sold##disk_alloc#
+ + + + + diff --git a/deal_filter.cfm b/deal_filter.cfm index 6d416c7..96adc74 100644 --- a/deal_filter.cfm +++ b/deal_filter.cfm @@ -14,6 +14,8 @@ + + @@ -125,6 +127,16 @@ $(document).ready(function() { empty="" /> + + +
+
Вероятность
+
+ + < % < + + +
добавить сюда множественный выбор статуса diff --git a/deal_service.cfm b/deal_service.cfm index 2c8b438..84e0b38 100644 --- a/deal_service.cfm +++ b/deal_service.cfm @@ -150,13 +150,13 @@ #nFmt(qParamCost.line_cost)# по строке, с количеством и скидкой (#nFmt(qParamCost.param_cost)# по компонентам) - +
Версии
@@ -389,8 +389,8 @@ #__index# #type# - #code# - #name# + #code# + #name# #cnt# #ed_izm# #price# @@ -434,7 +434,7 @@ left outer join elma.deals d on (d.__id = ANY(siv.deal)) left outer join status on (d.__status_status = status.status_id) where hash= - order by d.__index + order by d.__index desc diff --git a/etc/db/vmrep-03.sql b/etc/db/vmrep-03.sql new file mode 100644 index 0000000..9f1af5b --- /dev/null +++ b/etc/db/vmrep-03.sql @@ -0,0 +1,144 @@ +WITH +status(status, status_id, probability_pc) as (VALUES + ('Закрыта неуспешно',7,0),('Закрыта успешно',6,100),('Договор подписан',5,100),('Договор на подписании',15,90),('Договор на согласовании',12,70), + ('Тестирование',8,50),('Отправлено ТКП',10,20),('Внутреннее согласование',37,10),('Проработка решения',4,10),('Сбор потребностей',1,0) +), +line as ( + SELECT siv.__id as siv_uid, siv.discount, siv.type as line_pricing_model_id + ,siv.hash as line_key, siv.is_actual as siv_is_actual + ,siv.version::numeric as line_version + ,d.__index as deal_index + ,d._companies + ,a.index as agreement_version + ,siv.date_nop::date as dt_from + ,siv.date_end::date as dt_to + ,siv.is_easy as is_simple + ,siv.cnt -- should mutiliply + ,s.probability_pc + ,a.__id as agreement_uid, a.contract_uid, a.is_actual as agreement_is_actual, a.deal_uid + ,d.__name as deal, d.__status_status as deal_status_id + --,c.__name as contract + ,siv.user_description + ,siv.params + --,(SELECT sum(p.price*p.cnt*(100.0-COALESCE(p.discount,0.0))/100.0) FROM elma.service_parametrs p WHERE(p.__id = ANY (siv.params))) as cost + FROM elma.deals_services siv + JOIN elma.deals d on (d.__id = ANY(siv.deal)) + JOIN status s on (d.__status_status=s.status_id) + LEFT OUTER JOIN elma.additional_agreements a on (a.__id = ANY(siv.additional_agreement)) + WHERE siv.is_actual AND siv."__deletedAt" IS NULL AND d."__deletedAt" IS NULL AND a."__deletedAt" IS NULL + AND a.is_actual + AND siv.type IN (2,3) +), +component as ( + SELECT + price*cnt*(100.0-COALESCE(discount,0))/100.0 as cost + ,price + ,cnt + ,code + ,__id + FROM elma.service_parametrs + where "__deletedAt" IS NULL +), +stair as ( -- рабочая лесенка (инстансы строк, имеющие нетривиальную вероятность) + select * FROM ( + SELECT *, + MIN(dt_from) OVER (PARTITION BY line_key ORDER BY deal_index desc) running_min_dt + FROM line --WHERE probability_pc > 0 + ) t + WHERE t.dt_from = t.running_min_dt +), +alloc as (select c."WZ" as wz +, round(sum(c."VM_RAM_Allocated")) as ram +, round(sum(CASE WHEN "VM_is_ON" > 0 THEN c."VM_RAM_Allocated" ELSE 0 END)) as ram_on +, round(sum(c."VM_vCPU_count")) as cpu +, round(sum(CASE WHEN "VM_is_ON" > 0 THEN c."VM_vCPU_count" ELSE 0 END)) as cpu_on +from vmreports.compute c +where ts=(select max(ts) from vmreports.compute) +group by c."WZ" +), +disk_alloc as (select c."WZ" as wz +, round(sum(c."Disk_Allocated")) as disk_alloc +from vmreports.storage c +where ts=(select max(ts) from vmreports.storage) +group by c."WZ" +), +sold_ram as (SELECT +z.id_klienta as WZ, z.__name as client, round(sum(c.cnt*o.cnt)) as quantity +,count(*) as lines, STRING_AGG(c.code,', ') as codes +/*,o.line_key, o.probability_pc, dt_next, o.deal_uid, o.deal, o.agreement_uid, o.line_pricing_model_id,o.dt_from, o.dt_to*/ +FROM stair o +JOIN elma.companies z on (o._companies=z.__id) +LEFT OUTER JOIN component c on (c.__id = ANY (o.params)) +WHERE c.code LIKE 'iaas.ngc.%.ram-_' +GROUP BY z.id_klienta, z.__name +), +sold_cpu as (SELECT +z.id_klienta as WZ, z.__name as client, round(sum(c.cnt*o.cnt)) as quantity +,count(*) as lines, STRING_AGG(c.code,', ') as codes +/*,o.line_key, o.probability_pc, dt_next, o.deal_uid, o.deal, o.agreement_uid, o.line_pricing_model_id,o.dt_from, o.dt_to*/ +FROM stair o +JOIN elma.companies z on (o._companies=z.__id) +LEFT OUTER JOIN component c on (c.__id = ANY (o.params)) +WHERE c.code LIKE 'iaas.ngc.%.vcpu-_' +GROUP BY z.id_klienta, z.__name +), +sold_disk as (SELECT +z.id_klienta as WZ, z.__name as client, round(sum(c.cnt*o.cnt)) as quantity +,count(*) as lines, STRING_AGG(c.code,', ') as codes +/*,o.line_key, o.probability_pc, dt_next, o.deal_uid, o.deal, o.agreement_uid, o.line_pricing_model_id,o.dt_from, o.dt_to*/ +FROM stair o +JOIN elma.companies z on (o._companies=z.__id) +LEFT OUTER JOIN component c on (c.__id = ANY (o.params)) +WHERE c.code SIMILAR TO 'iaas.ngc.%.(ssd|fstssd|sata)-_' +GROUP BY z.id_klienta, z.__name +), +deal_stat as ( +select STRING_AGG(distinct deal_status_id::text,', ') as status_ids +, z.id_klienta as WZ +from line o join elma.companies z on (o._companies=z.__id) +GROUP BY z.id_klienta +) + +select + r.wz as wz_sold, + r.client as client_sold, + a.wz as wz_alloc, + ds.status_ids, + r.codes as ram_codes, + r.quantity as ram_sold, + a.ram as ram_alloc, + a.ram_on as ram_alloc_on, + c.codes as cpu_codes, + c.quantity as cpu_sold, + a.cpu as cpu_alloc, + a.cpu_on as cpu_alloc_on, + d.quantity as disk_sold, + da.disk_alloc, + d.codes as disk_codes +from sold_ram r +join deal_stat ds on (r.wz=ds.wz) +join sold_cpu c on (r.wz=c.wz) +left join sold_disk d on (r.wz=d.wz) +full join alloc a on (r.wz=a.wz) +left join disk_alloc da on (a.wz=da.wz) + + +--where s.quantity=a.ram +order by 1,3 + +--select * from vmreports.compute where "WZ"='WZ01005' +--select * from vmreports.compute where "WZ"='WZ01038' AND + +--select distinct "WZ" from vmreports.compute a where not exists (select * from elma.companies z where lower(trim(a."WZ"))=lower(trim(z.id_klienta))) +--select distinct "WZ" from vmreports.compute a where not exists (select * from elma.companies z where a."WZ"=z.id_klienta) + +--select * from elma.companies where id_klienta='WZ00114' +--select * from vmreports.compute where "WZ"='WZ00114' +--select * from vmreports.compute where "WZ"='WZ00195' + +--select d.* from elma.companies z join elma.deals d on (z.__id=d._companies) where id_klienta='WZ03378' +--select aa.* from elma.additional_agreements aa join elma.aggrements a on (aa.contract_uid=a.__id) join elma.companies z on (a.company_uid=z.__id)where id_klienta='WZ03378' + + + + diff --git a/inc/menu.cfm b/inc/menu.cfm index 5b13946..c3c25fe 100644 --- a/inc/menu.cfm +++ b/inc/menu.cfm @@ -12,16 +12,20 @@ - + + + + - + + diff --git a/index.cfm b/index.cfm index 2dc2895..093a8fd 100644 --- a/index.cfm +++ b/index.cfm @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/layout/page.cfm b/layout/page.cfm index 5b43472..909a111 100644 --- a/layout/page.cfm +++ b/layout/page.cfm @@ -7,7 +7,7 @@ - + @@ -126,7 +126,7 @@ select login, firstname, middlename, lastname from worker where id='#request.usr

- Отчет PAYG + Сверка CRM-Cloud

diff --git a/vm_ls.cfm b/vm_ls.cfm new file mode 100644 index 0000000..0455d41 --- /dev/null +++ b/vm_ls.cfm @@ -0,0 +1,162 @@ + + + + + + + + + + + + + +select "Name", "Object_UUID", "UUID_VM", +"VDC", "Organization_UUID", "Organization", "WZ", "Cluster", "Host", +"Host_Model", "CPU_Model", "Host_CPU_Cores", "Host_CPU_Sockets", "Host_CPU_Speed", "Host_RAM", +"Host_CPU_Used", "Host_CPU_Used_Avg", +"VDC_CPU_Reserv", "VDC_CPU_Speed", +"VM_vCPU_count", "VM_CPU_Used", "VM_CPU_Used_AVG", "VM_CPU_Reserv_GHz", "VM_CPU_Reserv_perc", +"VM_RAM_Allocated", "VM_RAM_Used", +"VM_is_ON" +from vmreports.compute +where ts=(select max(ts) from vmreports.compute) +order by "WZ" + + + + + + + + + + + + + + + + Сверка CRM - Cloud + + + + + + + + + + + + +
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
WZИмяУникальное имяOrganizationVDCVDC CPU ReservVDC CPU Speed GHzClusterHostHost ModelCPU ModelHost CPU CoresHost CPU SocketsHost CPU Speed GHzHost RAM GBHost CPU UsedHost CPU Used_AvgVM vCPU countVM CPU UsedVM CPU Used AVGVM CPU Reserv GHzVM CPU Reserv percVM RAM Allocated GBVM RAM Used GBVM is ON
#WZ##Name##UUID_VM##Organization##VDC##VDC_CPU_Reserv##VDC_CPU_Speed##qVM.Cluster##Host##Host_Model##CPU_Model##Host_CPU_Cores##Host_CPU_Sockets##round(Host_CPU_Speed,3)##Host_RAM##Host_CPU_Used##Host_CPU_Used_Avg##VM_vCPU_count##VM_CPU_Used##VM_CPU_Used_AVG##VM_CPU_Reserv_GHz##VM_CPU_Reserv_GHz##VM_CPU_Reserv_perc##VM_RAM_Allocated##VM_RAM_Used##VM_is_ON#
+ + + + +