convert_after_postgres.sql
7.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
DO $$
-- Дискриминатор свойства-коллекции адресатов задачи на согласование по регламенту (342199D9-3901-451F-B03A-2255B9DB6377).
declare addresseesDiscriminator uuid = '342199D9-3901-451F-B03A-2255B9DB6377';
-- Дискриминатор свойства-коллекции адресатов задания на согласование руководителем (5DB88398-C7FD-48DF-95BC-F70F00A67ADE).
declare addresseesManagerAsgDiscriminator uuid = '5DB88398-C7FD-48DF-95BC-F70F00A67ADE';
-- Дискриминатор свойства-коллекции адресатов задания на доработку (83fd57d1-e450-48bd-94d1-09926bcd2721).
declare addresseesReworkAsgDiscriminator uuid = '83fd57d1-e450-48bd-94d1-09926bcd2721';
declare addresseesNewId int;
declare tasksToConvertCount int;
declare TAprAddresseesTableLastId int;
declare addresseesManagerAsgNewId int;
declare managerAssignmentsToConvertCount int;
declare aAprManAddresseesTableLastId int;
declare addresseesReworkAsgNewId int;
declare reworkAssignmentsToConvertCount int;
declare aAprRewAddresseesTableLastId int;
begin
--Обновление задачи на согласование по регламенту.
-- Установить свойство "Несколько адресатов" в задаче на согласование по регламенту в False.
update sungero_wf_task
set apprismanyaddr_docflow_sungero = 'false'
where apprismanyaddr_docflow_sungero is null
and discriminator = '100950d0-03d2-44f0-9e31-f9c8dfdf3829';
if exists(select 1 from information_schema.tables where table_name = 'sungero_docflow_tapraddressees')
then
if exists(select * from information_schema.tables where table_name = 'temp_taskstable')
then
drop table temp_taskstable;
end if;
create table temp_taskstable
(
id serial,
taskid int,
addresseeid int
);
-- Используется дискриминатор задачи на согласование по регламенту (100950d0-03d2-44f0-9e31-f9c8dfdf3829).
insert into temp_taskstable (taskid, addresseeid)
select distinct
task.id,
task.addressee_docflow_sungero
from sungero_wf_task as task
left join sungero_docflow_tapraddressees as addr on task.id = addr.task
where task.discriminator = '100950d0-03d2-44f0-9e31-f9c8dfdf3829'
and task.addressee_docflow_sungero is not null
and addr.task is null
order by task.id;
-- Подсчет количества новых элементов.
select count(taskid) into tasksToConvertCount from temp_taskstable;
-- Получение последнего ИД в таблице для свойства-коллекции адресатов задачи на согласование по регламенту.
TAprAddresseesTableLastId := (select lastid
from sungero_system_ids
where tablename = 'sungero_docflow_tapraddressees');
-- Резервирование id в таблице.
addresseesNewId := (select sungero_system_GetNewId('sungero_docflow_tapraddressees', tasksToConvertCount));
insert into sungero_docflow_tapraddressees
(
id,
discriminator,
task,
addressee
)
select
TAprAddresseesTableLastId + t.Id,
addresseesDiscriminator,
t.taskid,
t.addresseeid
from temp_taskstable as t;
drop table temp_taskstable;
end if;
-- Обновление задания на согласование руководителем.
if exists(select 1 from information_schema.tables where table_name = 'sungero_docflow_aaprmanaddr')
then
if exists(select * from information_schema.tables where table_name = 'temp_managerassignmentstable')
then
drop table temp_managerassignmentstable;
end if;
create table temp_managerassignmentstable
(
id serial,
assignmentid int,
addresseeid int
);
-- Используется дискриминатор задания на согласование руководителем (100950d0-03d2-44f0-9e31-f9c8dfdf3829).
insert into temp_managerassignmentstable (assignmentid, addresseeid)
select distinct
asg.id,
asg.addresseeman_docflow_sungero
from sungero_wf_assignment as asg
left join sungero_docflow_aaprmanaddr as addr on asg.id = addr.assignment
where asg.discriminator = '100950d0-03d2-44f0-9e31-f9c8dfdf3829'
and asg.addresseeman_docflow_sungero is not null
and addr.assignment is null
order by asg.id;
-- Подсчет количества новых элементов.
select count(assignmentid) into managerAssignmentsToConvertCount from temp_managerassignmentstable;
-- Получение последнего ИД в таблице для свойства-коллекции адресатов задания на согласование руководителем.
aAprManAddresseesTableLastId := (select lastid
from sungero_system_ids
where tablename = 'sungero_docflow_aaprmanaddr');
-- Резервирование id в таблице.
addresseesManagerAsgNewId := (select sungero_system_GetNewId('sungero_docflow_aaprmanaddr', managerAssignmentsToConvertCount));
insert into sungero_docflow_aaprmanaddr
(
id,
discriminator,
assignment,
addressee
)
select
aAprManAddresseesTableLastId + t.Id,
addresseesManagerAsgDiscriminator,
t.assignmentid,
t.addresseeid
from temp_managerassignmentstable as t;
drop table temp_managerassignmentstable;
end if;
-- Обновление задания на доработку.
if exists(select 1 from information_schema.tables where table_name = 'sungero_docflow_aaprrewadrs')
then
if exists(select * from information_schema.tables where table_name = 'temp_reworkassignmentstable')
then
drop table temp_reworkassignmentstable;
end if;
create table temp_reworkassignmentstable
(
id serial,
assignmentid int,
addresseeid int
);
-- Используется дискриминатор задания на доработку (040862cd-a46f-4366-b068-e659c7acaea6).
insert into temp_reworkassignmentstable (assignmentid, addresseeid)
select distinct
asg.id,
asg.addresseerwk_docflow_sungero
from sungero_wf_assignment as asg
left join sungero_docflow_aaprrewadrs as addr on asg.id = addr.assignment
where asg.discriminator = '040862cd-a46f-4366-b068-e659c7acaea6'
and asg.addresseerwk_docflow_sungero is not null
and addr.assignment is null
order by asg.id;
-- Подсчет количества новых элементов.
select count(assignmentid) into reworkAssignmentsToConvertCount from temp_reworkassignmentstable;
-- Получение последнего ИД в таблице для свойства-коллекции адресатов задания на доработку.
aAprRewAddresseesTableLastId := (select lastid
from sungero_system_ids
where tablename = 'sungero_docflow_aaprrewadrs');
-- Резервирование id в таблице.
addresseesReworkAsgNewId := (select sungero_system_GetNewId('sungero_docflow_aaprrewadrs', reworkAssignmentsToConvertCount));
insert into sungero_docflow_aaprrewadrs
(
id,
discriminator,
assignment,
addressee
)
select
aAprRewAddresseesTableLastId + t.Id,
addresseesReworkAsgDiscriminator,
t.assignmentid,
t.addresseeid
from temp_reworkassignmentstable as t;
drop table temp_reworkassignmentstable;
end if;
end $$;