1
0
mirror of https://github.com/BlizD/Tasks.git synced 2025-03-29 21:46:54 +02:00

#179 Подключить вопросы-ответы к уведомлению

Добавил еще событие "Изменен вопрос".
Добавил отправку наблюдателям по задаче.
This commit is contained in:
Anton Ivanov 2020-07-19 10:56:59 +03:00
parent 22f0e4b45a
commit 2346e30c48
6 changed files with 232 additions and 95 deletions

View File

@ -2,6 +2,8 @@
* Вставить инфу что теперь проект проверяется Sonar
* Вставить инфу, что отработанны ошибки найденные по Sonar теперь ошибок равно 0
![Sonar0Issues](https://user-images.githubusercontent.com/10989306/87221808-8ea62880-c377-11ea-8238-79b39f3433df.png)
* Обновить в файле настроек сонара новую версию релиза sonar.projectVersion=1.0.5.001
Вставка картинки из буфера
@ -24,9 +26,10 @@ Wiki изменения:
| Вид события| Отправка исполнителю| Отправка наблюдателям | Отправка старому исполнителю| Отправка заказчику| Автор вопроса| Кто может решить вопрос|
| ------------- |:-------------:| :-------------:|:-------------:|:-------------:|:-------------:|:-------------:|
| Добавлен вопрос| V | X |X|X|V|V|
| Изменен ответ| V | X |X|X|V|V|
| Вопрос закрыт| V | X |X|X|V|V|
| Добавлен вопрос| V | V |X|X|V|V|
| Изменен вопрос| V | V |X|X|V|V|
| Изменен ответ| V | V |X|X|V|V|
| Вопрос закрыт| V | V |X|X|V|V|
**Выпущена версия 1.0.5.001 (Обновление от 02.05.2020)**

View File

@ -38,6 +38,11 @@
СтрокаТЗСобытия.ВидСобытия = ПредопределенноеЗначение("Перечисление.узВидыСобытий.ИзмененОтвет");
КонецЕсли;
Если ИзмененВопрос() Тогда
СтрокаТЗСобытия = ТЗСобытия.Добавить();
СтрокаТЗСобытия.ВидСобытия = ПредопределенноеЗначение("Перечисление.узВидыСобытий.ИзмененВопрос");
КонецЕсли;
Возврат ТЗСобытия;
КонецФункции
@ -51,6 +56,16 @@
Возврат пИзмененОтвет;
КонецФункции
Функция ИзмененВопрос()
пИзмененВопрос = Ложь;
Если Ссылка.Вопрос <> Вопрос Тогда
пИзмененВопрос = Истина;
КонецЕсли;
Возврат пИзмененВопрос;
КонецФункции
Процедура ПриЗаписи(Отказ)
Если ОбменДанными.Загрузка Тогда
@ -104,12 +119,21 @@
ДопПараметры.Вставить("ВажностьЗадачи",ПараметрыПисьма.ВажностьЗадачи);
ТекПользователь = Пользователи.ТекущийПользователь();
Исполнитель = Задача.Исполнитель;
Исполнитель = ПредопределенноеЗначение("Справочник.Пользователи.ПустаяСсылка");
МассивНаблюдателей = Новый Массив();
Если ЗначениеЗаполнено(Задача) Тогда
МассивНаблюдателей = РегистрыСведений.узНаблюдателиЗаЗадачами.ПолучитьМассивНаблюдателей(Задача);
Исполнитель = Задача.Исполнитель;
КонецЕсли;
МассивПользователейКомуПредварительный = Новый Массив();
МассивПользователейКомуПредварительный.Добавить(Автор);
МассивПользователейКомуПредварительный.Добавить(Исполнитель);
МассивПользователейКомуПредварительный.Добавить(КтоМожетОтветить);
Для каждого пНаблюдатель из МассивНаблюдателей Цикл
МассивПользователейКомуПредварительный.Добавить(пНаблюдатель);
КонецЦикла;
МассивПользователейКому = Новый Массив();
@ -149,10 +173,13 @@
ПараметрыПисьма.Вставить("ВажностьЗадачи",ВажностьЗадачи);
ЗаполненаЗадача = Ложь;
НомерЗадачи = "";
ПредставлениеЗадачи = "";
Если ЗначениеЗаполнено(Задача) Тогда
ЗаполненаЗадача = Истина;
ВажностьЗадачи = Задача.Важность;
НомерЗадачи = ""+Формат(Задача.Код,"ЧГ=0");
ПредставлениеЗадачи = "#" + НомерЗадачи + " " + Задача.Наименование;
КонецЕсли;
ТемаПисьма = "Изменения по вопросу";
@ -169,9 +196,9 @@
Если ЗаполненаЗадача Тогда
ТемаПисьма = "Новый вопрос к задаче #" + НомерЗадачи;
ТемаПисьма = "Новый вопрос к задаче " + ПредставлениеЗадачи;
ТекстПисьма = "К задаче #" + НомерЗадачи + " " + Автор + " задал вопрос " + КтоМожетОтветить;
ТекстПисьма = "К задаче " + ПредставлениеЗадачи + " " + Автор + " задал вопрос " + КтоМожетОтветить;
ДобавитьВТекстПисьмаВопрос(ТекстПисьма);
КонецЕсли
@ -186,13 +213,31 @@
Если ЗаполненаЗадача Тогда
ТемаПисьма = "Изменен ответ по вопросу к задаче #" + НомерЗадачи;
ТемаПисьма = "Изменен ответ по вопросу к задаче " + ПредставлениеЗадачи;
ТекстПисьма = "Изменен ответ по вопросу к задаче #" + НомерЗадачи;
ТекстПисьма = "Изменен ответ по вопросу к задаче " + ПредставлениеЗадачи;
ДобавитьВТекстПисьмаВопрос(ТекстПисьма);
ДобавитьВТекстПисьмаОтвет(ТекстПисьма);
КонецЕсли
КонецЕсли
ИначеЕсли ВидСобытия = Перечисления.узВидыСобытий.ИзмененВопрос Тогда
ТемаПисьма = "Изменен вопрос ";
ТекстПисьма = "Изменен вопрос ";
ДобавитьВТекстПисьмаВопрос(ТекстПисьма);
ДобавитьВТекстПисьмаОтвет(ТекстПисьма);
Если ЗаполненаЗадача Тогда
ТемаПисьма = "Изменен вопрос к задаче " + ПредставлениеЗадачи;
ТекстПисьма = "Изменен вопрос к задаче " + ПредставлениеЗадачи;
ДобавитьВТекстПисьмаВопрос(ТекстПисьма);
ДобавитьВТекстПисьмаОтвет(ТекстПисьма);
КонецЕсли
ИначеЕсли ВидСобытия = Перечисления.узВидыСобытий.ЗакрытВопрос Тогда
@ -204,8 +249,8 @@
Если ЗаполненаЗадача Тогда
ТемаПисьма = "Вопрос закрыт к задаче #" + НомерЗадачи;
ТекстПисьма = "Вопрос закрыт к задаче #" + НомерЗадачи;
ТемаПисьма = "Вопрос закрыт к задаче " + ПредставлениеЗадачи;
ТекстПисьма = "Вопрос закрыт к задаче " + ПредставлениеЗадачи;
ДобавитьВТекстПисьмаВопрос(ТекстПисьма);
ДобавитьВТекстПисьмаОтвет(ТекстПисьма);

View File

@ -693,95 +693,98 @@
КонецФункции
Функция ПолучитьМассивНаблюдателей()
пЗадача = Ссылка;
МассивНаблюдателей = Новый Массив();
Возврат РегистрыСведений.узНаблюдателиЗаЗадачами.ПолучитьМассивНаблюдателей(Ссылка);
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| узНаблюдателиЗаЗадачами.Пользователь
|ИЗ
| РегистрСведений.узНаблюдателиЗаЗадачами КАК узНаблюдателиЗаЗадачами
|ГДЕ
| узНаблюдателиЗаЗадачами.Задача = &Задача
| И узНаблюдателиЗаЗадачами.Пользователь.узНеОтправлятьУведомленияНаПочту = ЛОЖЬ
| И узНаблюдателиЗаЗадачами.Пользователь <> &Исполнитель";
//+ #190 SZ 16.03.2020
// Убираем из запроса проверку на Текущего пользователя.
// Проверку сделаем в обработке результата запроса
//пЗадача = Ссылка;
//
// | И узНаблюдателиЗаЗадачами.Пользователь <> &ТекущийПользователь
//МассивНаблюдателей = Новый Массив();
//
//- #190 SZ 16.03.2020
ТекущийПользователь = Пользователи.ТекущийПользователь();
//+ #190 SZ 16.03.2020
// Убираем из запроса проверку на Текущего пользователя.
//Запрос = Новый Запрос;
//Запрос.Текст =
//"ВЫБРАТЬ
//| узНаблюдателиЗаЗадачами.Пользователь
//|ИЗ
//| РегистрСведений.узНаблюдателиЗаЗадачами КАК узНаблюдателиЗаЗадачами
//|ГДЕ
//| узНаблюдателиЗаЗадачами.Задача = &Задача
//| И узНаблюдателиЗаЗадачами.Пользователь.узНеОтправлятьУведомленияНаПочту = ЛОЖЬ
//| И узНаблюдателиЗаЗадачами.Пользователь <> &Исполнитель";
//
//Запрос.УстановитьПараметр("ТекущийПользователь", ТекущийПользователь);
//
// Проверку сделаем в обработке результата запроса
//- #190 SZ 16.03.2020
Запрос.УстановитьПараметр("Исполнитель", Исполнитель);
Запрос.УстановитьПараметр("Задача", пЗадача);
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
МассивНаблюдателей.Добавить(Выборка.Пользователь);
КонецЦикла;
Конецесли;
Для каждого СтрокаНаблюдатели из Статус.Наблюдатели цикл
Если МассивНаблюдателей.Найти(СтрокаНаблюдатели.Пользователь) <> Неопределено Тогда
Продолжить;
Конецесли;
//+ #190 SZ 16.03.2020
//Если СтрокаНаблюдатели.Пользователь = Пользователи.ТекущийПользователь() Тогда
// Продолжить;
//Конецесли;
Если СтрокаНаблюдатели.Пользователь = ТекущийПользователь
И НЕ СтрокаНаблюдатели.Пользователь.узОтправлятьУведомленияОДействияхПользователяЕмуНаПочту Тогда
Продолжить;
Конецесли;
//- #190 SZ 16.03.2020
//Павлюков - отсеем ненужных наблюдателей, у которых явно задано, за кем наблюдать
Если Не СтрокаНаблюдатели.Контрагент.Пустая()
И Не пЗадача.Контрагент.Пустая()
И Не СтрокаНаблюдатели.Контрагент = пЗадача.Контрагент Тогда
Продолжить;
КонецЕсли;
МассивНаблюдателей.Добавить(СтрокаНаблюдатели.Пользователь);
Конеццикла;
пНаблюдателиЗаОснЗадачей = пЗадача.ОсновнаяЗадача.НаблюдателиЗаОсновнойЗадачей;
Для каждого СтрокапНаблюдателиЗаОснЗадачей из пНаблюдателиЗаОснЗадачей цикл
пНаблюдатель = СтрокапНаблюдателиЗаОснЗадачей.Пользователь;
Если МассивНаблюдателей.Найти(пНаблюдатель) <> Неопределено Тогда
Продолжить;
Конецесли;
//+ #190 SZ 16.03.2020
//Если пНаблюдатель = Пользователи.ТекущийПользователь() Тогда
// Продолжить;
//Конецесли;
Если пНаблюдатель = ТекущийПользователь
И НЕ пНаблюдатель.узОтправлятьУведомленияОДействияхПользователяЕмуНаПочту Тогда
Продолжить;
Конецесли;
//- #190 SZ 16.03.2020
МассивНаблюдателей.Добавить(пНаблюдатель);
Конеццикла;
Возврат МассивНаблюдателей;
////+ #190 SZ 16.03.2020
//// Убираем из запроса проверку на Текущего пользователя.
//// Проверку сделаем в обработке результата запроса
////
//// | И узНаблюдателиЗаЗадачами.Пользователь <> &ТекущийПользователь
////
////- #190 SZ 16.03.2020
//
//
//ТекущийПользователь = Пользователи.ТекущийПользователь();
////+ #190 SZ 16.03.2020
//// Убираем из запроса проверку на Текущего пользователя.
////
////Запрос.УстановитьПараметр("ТекущийПользователь", ТекущийПользователь);
////
//// Проверку сделаем в обработке результата запроса
////- #190 SZ 16.03.2020
//
//Запрос.УстановитьПараметр("Исполнитель", Исполнитель);
//Запрос.УстановитьПараметр("Задача", пЗадача);
//
//РезультатЗапроса = Запрос.Выполнить();
//Если НЕ РезультатЗапроса.Пустой() Тогда
// Выборка = РезультатЗапроса.Выбрать();
// Пока Выборка.Следующий() Цикл
// МассивНаблюдателей.Добавить(Выборка.Пользователь);
// КонецЦикла;
//Конецесли;
//
//Для каждого СтрокаНаблюдатели из Статус.Наблюдатели цикл
// Если МассивНаблюдателей.Найти(СтрокаНаблюдатели.Пользователь) <> Неопределено Тогда
// Продолжить;
// Конецесли;
//
// //+ #190 SZ 16.03.2020
// //Если СтрокаНаблюдатели.Пользователь = Пользователи.ТекущийПользователь() Тогда
// // Продолжить;
// //Конецесли;
// Если СтрокаНаблюдатели.Пользователь = ТекущийПользователь
// И НЕ СтрокаНаблюдатели.Пользователь.узОтправлятьУведомленияОДействияхПользователяЕмуНаПочту Тогда
// Продолжить;
// Конецесли;
// //- #190 SZ 16.03.2020
//
// //Павлюков - отсеем ненужных наблюдателей, у которых явно задано, за кем наблюдать
// Если Не СтрокаНаблюдатели.Контрагент.Пустая()
// И Не пЗадача.Контрагент.Пустая()
// И Не СтрокаНаблюдатели.Контрагент = пЗадача.Контрагент Тогда
// Продолжить;
// КонецЕсли;
// МассивНаблюдателей.Добавить(СтрокаНаблюдатели.Пользователь);
//Конеццикла;
//
//пНаблюдателиЗаОснЗадачей = пЗадача.ОсновнаяЗадача.НаблюдателиЗаОсновнойЗадачей;
//Для каждого СтрокапНаблюдателиЗаОснЗадачей из пНаблюдателиЗаОснЗадачей цикл
// пНаблюдатель = СтрокапНаблюдателиЗаОснЗадачей.Пользователь;
// Если МассивНаблюдателей.Найти(пНаблюдатель) <> Неопределено Тогда
// Продолжить;
// Конецесли;
// //+ #190 SZ 16.03.2020
// //Если пНаблюдатель = Пользователи.ТекущийПользователь() Тогда
// // Продолжить;
// //Конецесли;
// Если пНаблюдатель = ТекущийПользователь
// И НЕ пНаблюдатель.узОтправлятьУведомленияОДействияхПользователяЕмуНаПочту Тогда
// Продолжить;
// Конецесли;
// //- #190 SZ 16.03.2020
//
// МассивНаблюдателей.Добавить(пНаблюдатель);
//Конеццикла;
//
//Возврат МассивНаблюдателей;
КонецФункции
Функция ПолучитьТемаПисьмаСобытие(ДопПараметры,СобытияВИстории)

View File

@ -298,6 +298,22 @@
<Comment/>
</Properties>
</EnumValue>
<EnumValue uuid="5a3fab7e-5452-4a8e-8b30-9d531fa9839b">
<Properties>
<Name>ИзмененВопрос</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Изменен вопрос</v8:content>
</v8:item>
<v8:item>
<v8:lang>en</v8:lang>
<v8:content>Add question</v8:content>
</v8:item>
</Synonym>
<Comment/>
</Properties>
</EnumValue>
</ChildObjects>
</Enum>
</MetaDataObject>

View File

@ -133,11 +133,13 @@
ВидыСобытий_ДобавленВопрос = ПредопределенноеЗначение("Перечисление.узВидыСобытий.ДобавленВопрос");
ВидыСобытий_ЗакрытВопрос = ПредопределенноеЗначение("Перечисление.узВидыСобытий.ЗакрытВопрос");
ВидыСобытий_ИзмененОтвет = ПредопределенноеЗначение("Перечисление.узВидыСобытий.ИзмененОтвет");
ВидыСобытий_ИзмененВопрос = ПредопределенноеЗначение("Перечисление.узВидыСобытий.ИзмененВопрос");
МассивВидовСобытияДляРегистрацииАктивности = Новый Массив();
МассивВидовСобытияДляРегистрацииАктивности.Добавить(ВидыСобытий_ДобавленВопрос);
МассивВидовСобытияДляРегистрацииАктивности.Добавить(ВидыСобытий_ЗакрытВопрос);
МассивВидовСобытияДляРегистрацииАктивности.Добавить(ВидыСобытий_ИзмененОтвет);
МассивВидовСобытияДляРегистрацииАктивности.Добавить(ВидыСобытий_ИзмененВопрос);
Для каждого СтрокаТЗСобытия из ТЗСобытия цикл
пВидСобытия = СтрокаТЗСобытия.ВидСобытия;

View File

@ -69,4 +69,72 @@
Функция ЕстьЛиСлежениеЗаЗадачейУТекущегоПользователя(Задача) Экспорт
Возврат ЕстьЛиСлежениеЗаЗадачейУПользователя(Задача, Пользователи.ТекущийПользователь());
КонецФункции
КонецФункции
Функция ПолучитьМассивНаблюдателей(Задача) Экспорт
МассивНаблюдателей = Новый Массив();
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| узНаблюдателиЗаЗадачами.Пользователь
|ИЗ
| РегистрСведений.узНаблюдателиЗаЗадачами КАК узНаблюдателиЗаЗадачами
|ГДЕ
| узНаблюдателиЗаЗадачами.Задача = &Задача
| И узНаблюдателиЗаЗадачами.Пользователь.узНеОтправлятьУведомленияНаПочту = ЛОЖЬ
| И узНаблюдателиЗаЗадачами.Пользователь <> &Исполнитель";
ТекущийПользователь = Пользователи.ТекущийПользователь();
Запрос.УстановитьПараметр("Исполнитель", Задача.Исполнитель);
Запрос.УстановитьПараметр("Задача", Задача);
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
МассивНаблюдателей.Добавить(Выборка.Пользователь);
КонецЦикла;
КонецЕсли;
ТЧСтатусНаблюдатели = Задача.Статус.Наблюдатели;
Для каждого СтрокаНаблюдатели из ТЧСтатусНаблюдатели цикл
Если МассивНаблюдателей.Найти(СтрокаНаблюдатели.Пользователь) <> Неопределено Тогда
Продолжить;
КонецЕсли;
Если СтрокаНаблюдатели.Пользователь = ТекущийПользователь
И НЕ СтрокаНаблюдатели.Пользователь.узОтправлятьУведомленияОДействияхПользователяЕмуНаПочту Тогда
Продолжить;
КонецЕсли;
Если НЕ СтрокаНаблюдатели.Контрагент.Пустая()
И НЕ Задача.Контрагент.Пустая()
И НЕ СтрокаНаблюдатели.Контрагент = Задача.Контрагент Тогда
Продолжить;
КонецЕсли;
МассивНаблюдателей.Добавить(СтрокаНаблюдатели.Пользователь);
КонецЦикла;
пНаблюдателиЗаОснЗадачей = Задача.ОсновнаяЗадача.НаблюдателиЗаОсновнойЗадачей;
Для каждого СтрокапНаблюдателиЗаОснЗадачей из пНаблюдателиЗаОснЗадачей цикл
пНаблюдатель = СтрокапНаблюдателиЗаОснЗадачей.Пользователь;
Если МассивНаблюдателей.Найти(пНаблюдатель) <> Неопределено Тогда
Продолжить;
КонецЕсли;
Если пНаблюдатель = ТекущийПользователь
И НЕ пНаблюдатель.узОтправлятьУведомленияОДействияхПользователяЕмуНаПочту Тогда
Продолжить;
КонецЕсли;
МассивНаблюдателей.Добавить(пНаблюдатель);
КонецЦикла;
Возврат МассивНаблюдателей;
КонецФункции