1
0
mirror of https://github.com/BlizD/Tasks.git synced 2025-03-19 21:07:53 +02:00

#4, Управление задачами, Уведомления пользователям

This commit is contained in:
Anton Ivanov 2016-09-16 15:36:02 +03:00
parent 37cfb1ada0
commit 62b047e694
5 changed files with 206 additions and 13 deletions

View File

@ -36,39 +36,43 @@
Конецесли;
Конецесли;
ОбновитьИсторию();
МассивСобытийВИстории = ОбновитьИсторию();
ОтправитьУведомлениеНаПочту(МассивСобытийВИстории);
КонецПроцедуры
Процедура ОбновитьИсторию()
Функция ОбновитьИсторию()
МассивСобытийВИстории = Новый Массив();
ДатаСобытия = ТекущаяДата();
пАвтор = Пользователи.ТекущийПользователь();
Если ЭтоНовый() Тогда
ВидСобытия = ПредопределенноеЗначение("Перечисление.узВидыСобытий.ДобавленаЗадача");
Событие = "Добавлена задача";
ДобавитьВИсторию(ДатаСобытия,пАвтор,ВидСобытия,Событие);
Возврат;
ДобавитьВИсторию(ДатаСобытия,пАвтор,ВидСобытия,Событие,МассивСобытийВИстории);
Возврат МассивСобытийВИстории;
Конецесли;
СтарыйИсполнитель = Ссылка.Исполнитель;
Если Исполнитель <> СтарыйИсполнитель Тогда
ВидСобытия = ПредопределенноеЗначение("Перечисление.узВидыСобытий.НовыйИсполнитель");
Событие = "Изменен исполнитель с ["+СтарыйИсполнитель+"] на [" + Исполнитель+"]";
ДобавитьВИсторию(ДатаСобытия,пАвтор,ВидСобытия,Событие);
ДобавитьВИсторию(ДатаСобытия,пАвтор,ВидСобытия,Событие,МассивСобытийВИстории);
Конецесли;
СтарыйСтатус = Ссылка.Статус;
Если Статус <> СтарыйСтатус Тогда
ВидСобытия = ПредопределенноеЗначение("Перечисление.узВидыСобытий.ИзменениеСтатуса");
Событие = "Изменен статус с ["+СтарыйСтатус+"] на [" + Статус+"]";
ДобавитьВИсторию(ДатаСобытия,пАвтор,ВидСобытия,Событие);
ДобавитьВИсторию(ДатаСобытия,пАвтор,ВидСобытия,Событие,МассивСобытийВИстории);
Конецесли;
СтарыеКомментарии = Ссылка.Комментарии;
Если Комментарии.Количество() <> СтарыеКомментарии.Количество() Тогда
ВидСобытия = ПредопределенноеЗначение("Перечисление.узВидыСобытий.ДобавленКомментарий");
Событие = "Добавлен новый комментарий";
ДобавитьВИсторию(ДатаСобытия,пАвтор,ВидСобытия,Событие);
ДобавитьВИсторию(ДатаСобытия,пАвтор,ВидСобытия,Событие,МассивСобытийВИстории);
Конецесли;
СтароеНаименование = СокрЛП(Ссылка.Наименование);
@ -77,20 +81,110 @@
ИЛИ СокрЛП(ТекстСодержания) <> СтароеТекстСодержания Тогда
ВидСобытия = ПредопределенноеЗначение("Перечисление.узВидыСобытий.ИзмененоОписаниеЗадачи");
Событие = "Изменено описание задачи";
ДобавитьВИсторию(ДатаСобытия,пАвтор,ВидСобытия,Событие);
ДобавитьВИсторию(ДатаСобытия,пАвтор,ВидСобытия,Событие,МассивСобытийВИстории);
Конецесли;
История.Сортировать("ДатаСобытия УБЫВ");
КонецПроцедуры
Процедура ДобавитьВИсторию(ДатаСобытия,пАвтор,ВидСобытия,Событие)
Возврат МассивСобытийВИстории;
КонецФункции
Процедура ДобавитьВИсторию(ДатаСобытия,пАвтор,ВидСобытия,Событие,МассивСобытийВИстории)
СтрокаИстория = История.Добавить();
СтрокаИстория.ДатаСобытия = ДатаСобытия;
СтрокаИстория.Автор = пАвтор;
СтрокаИстория.ВидСобытия = ВидСобытия;
СтрокаИстория.Событие = Событие;
МассивСобытийВИстории.Добавить(ВидСобытия);
КонецПроцедуры
Процедура ОтправитьУведомлениеНаПочту(МассивСобытийВИстории)
ТекПользователь = Пользователи.ТекущийПользователь();
Если ТекПользователь = Исполнитель Тогда
Возврат;
Конецесли;
ВсегоСобытий = МассивСобытийВИстории.Количество();
Если ВсегоСобытий = 0 Тогда
Возврат;
Конецесли;
НеобходимоОтправитьУведомление = Ложь;
ТемаПисьмаСобытие = "";
ВидыСобытий_ДобавленаЗадача = ПредопределенноеЗначение("Перечисление.узВидыСобытий.ДобавленаЗадача");
ВидыСобытий_НовыйИсполнитель = ПредопределенноеЗначение("Перечисление.узВидыСобытий.НовыйИсполнитель");
ВидыСобытий_ДобавленКомментарий = ПредопределенноеЗначение("Перечисление.узВидыСобытий.ДобавленКомментарий");
ВидыСобытий_ИзмененоОписаниеЗадачи = ПредопределенноеЗначение("Перечисление.узВидыСобытий.ИзмененоОписаниеЗадачи");
МассивСобытийКоторыеПодлежатОтправки = Новый Массив();
МассивСобытийКоторыеПодлежатОтправки.Добавить(ВидыСобытий_ДобавленаЗадача);
МассивСобытийКоторыеПодлежатОтправки.Добавить(ВидыСобытий_НовыйИсполнитель);
МассивСобытийКоторыеПодлежатОтправки.Добавить(ВидыСобытий_ДобавленКомментарий);
//МассивСобытийКоторыеПодлежатОтправки.Добавить(ВидыСобытий_ИзмененоОписаниеЗадачи);
Если ВсегоСобытий = 1 Тогда
ЭлМассивСобытийВИстории = МассивСобытийВИстории[0];
Если ЭлМассивСобытийВИстории = ВидыСобытий_ДобавленаЗадача Тогда
НеобходимоОтправитьУведомление = Истина;
ТемаПисьмаСобытие = "Вам была назначена задача:";
ИначеЕсли ЭлМассивСобытийВИстории = ВидыСобытий_НовыйИсполнитель Тогда
НеобходимоОтправитьУведомление = Истина;
ТемаПисьмаСобытие = "Вам была назначена задача:";
ИначеЕсли ЭлМассивСобытийВИстории = ВидыСобытий_ДобавленКомментарий Тогда
НеобходимоОтправитьУведомление = Истина;
ТемаПисьмаСобытие = "Добален комментарий по задаче:";
//ИначеЕсли ЭлМассивСобытийВИстории = ВидыСобытий_ИзмененоОписаниеЗадачи Тогда
// НеобходимоОтправитьУведомление = Истина;
// ТемаПисьмаСобытие = "Изменено описание по задаче:";
Конецесли;
Иначе
Если МассивСобытийВИстории.Найти(ВидыСобытий_НовыйИсполнитель) <> Неопределено
ИЛИ МассивСобытийВИстории.Найти(ВидыСобытий_ДобавленаЗадача) <> Неопределено Тогда
НеобходимоОтправитьУведомление = Истина;
ТемаПисьмаСобытие = "Вам была назначена задача:";
Иначе
Для каждого ЭлМассивСобытийВИстории из МассивСобытийВИстории цикл
Если МассивСобытийКоторыеПодлежатОтправки.Найти(ЭлМассивСобытийВИстории) <> Неопределено Тогда
НеобходимоОтправитьУведомление = Истина;
ТемаПисьмаСобытие = "Изменена задача:";
Прервать;
Конецесли;
Конеццикла;
Конецесли;
Конецесли;
Если НеобходимоОтправитьУведомление Тогда
НаименованиеЗадачи = СокрЛП(Наименование);
НомерЗадачи = ""+Код;
ТемаПисьма = "[#"+НомерЗадачи+"] "+ТемаПисьмаСобытие + НаименованиеЗадачи;
ТекстПисьма = "
|Добрый день.
|
|"+ТемаПисьмаСобытие+" "+НаименованиеЗадачи+"
|Номер задачи: #"+НомерЗадачи+"
|";
Если ЗначениеЗаполнено(ТекстСодержания) Тогда
ТекстПисьма = ТекстПисьма + "
|
|Описание задачи:
|"+ТекстСодержания+"
|";
Конецесли;
ДопПараметры = Новый Структура();
ДопПараметры.Вставить("ВажностьЗадачи",Важность);
ДопПараметры.Вставить("ТекстПисьма",ТекстПисьма);
ДопПараметры.Вставить("ТемаПисьма",ТемаПисьма);
ДопПараметры.Вставить("ПользовательКому",Исполнитель);
узОбщийМодульСервер.ОтправитьПисьмо(ДопПараметры);
КонецЕсли;
КонецПроцедуры
Функция ЕстьПодчиненныеЗадачи(Задача,ЗадачаРебенок = Неопределено) Экспорт
пЕстьПодчиненныеЗадачи = Ложь;

View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.1">
<CommonModule uuid="0bc2d419-32bf-452b-984a-6432543713e3">
<Properties>
<Name>узОбщийМодульСервер</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Уз общий модуль сервер</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Global>false</Global>
<ClientManagedApplication>false</ClientManagedApplication>
<Server>true</Server>
<ExternalConnection>true</ExternalConnection>
<ClientOrdinaryApplication>false</ClientOrdinaryApplication>
<ServerCall>true</ServerCall>
<Privileged>false</Privileged>
<ReturnValuesReuse>DontUse</ReturnValuesReuse>
</Properties>
</CommonModule>
</MetaDataObject>

View File

@ -0,0 +1,75 @@

Процедура ОтправитьПисьмо(ДопПараметры) Экспорт
ВажностьЗадачи = ДопПараметры.ВажностьЗадачи;
ТекстПисьма = ДопПараметры.ТекстПисьма;
ТемаПисьма = ДопПараметры.ТемаПисьма;
ПользовательКому = ДопПараметры.ПользовательКому;
МассивПользователей = Новый Массив();
МассивПользователей.Добавить(ПользовательКому);
МассивАдресовЭлектроннойПочты = ПолучитьМассивАдресовЭлектроннойПочты(МассивПользователей);
Если МассивАдресовЭлектроннойПочты.Количество() = 0 Тогда
Сообщить("Ошибка! при отправке письма не удалось получить адреса электронной почты для ["+ПользовательКому+"]");
Возврат;
Конецесли;
ТекПользователь = Пользователи.ТекущийПользователь();
ДокОбъект = Документы.ЭлектронноеПисьмоИсходящее.СоздатьДокумент();
ДокОбъект.Дата = ТекущаяДата();
ДокОбъект.Автор = ТекПользователь;
ДокОбъект.Важность = Перечисления.ВариантыВажностиВзаимодействия[""+ВажностьЗадачи];
ДокОбъект.Кодировка = "UTF-8";
ДокОбъект.Ответственный = ТекПользователь;
ДокОбъект.ОтправительПредставление = "1с: Управление задачами";
ДокОбъект.СтатусПисьма = ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Исходящее");
ДокОбъект.Текст = ТекстПисьма;
ДокОбъект.Тема = ТемаПисьма;
ДокОбъект.ТипТекста = ПредопределенноеЗначение("Перечисление.ТипыТекстовЭлектронныхПисем.ПростойТекст");
ДокОбъект.УчетнаяЗапись = ПредопределенноеЗначение("Справочник.УчетныеЗаписиЭлектроннойПочты.СистемнаяУчетнаяЗаписьЭлектроннойПочты");
ДокОбъект.УдалятьПослеОтправки = Истина;
//ДокОбъект.ДатаКогдаОтправить = ;
Для каждого ЭлМассивАдресовЭлектроннойПочты из МассивАдресовЭлектроннойПочты цикл
СтрокаПолучателиПисьма = ДокОбъект.ПолучателиПисьма.Добавить();
СтрокаПолучателиПисьма.Адрес = ЭлМассивАдресовЭлектроннойПочты;
СтрокаПолучателиПисьма.Представление = ""+ПользовательКому+" <"+ЭлМассивАдресовЭлектроннойПочты+">";
СтрокаПолучателиПисьма.Контакт = ПользовательКому;
Конеццикла;
ДокОбъект.СформироватьПредставленияКонтактов();
ДокОбъект.Записать();
КонецПроцедуры
Функция ПолучитьМассивАдресовЭлектроннойПочты(МассивПользователей)
МассивАдресовЭлектроннойПочты = Новый Массив();
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПользователиКонтактнаяИнформация.Ссылка,
| ПользователиКонтактнаяИнформация.Тип,
| ПользователиКонтактнаяИнформация.Вид,
| ПользователиКонтактнаяИнформация.АдресЭП
|ИЗ
| Справочник.Пользователи.КонтактнаяИнформация КАК ПользователиКонтактнаяИнформация
|ГДЕ
| ПользователиКонтактнаяИнформация.Ссылка В(&МассивПользователей)
| И ПользователиКонтактнаяИнформация.Тип = &Тип
| И ПользователиКонтактнаяИнформация.Вид = &Вид
|";
Запрос.УстановитьПараметр("Вид", ПредопределенноеЗначение("Справочник.ВидыКонтактнойИнформации.EmailПользователя"));
Запрос.УстановитьПараметр("МассивПользователей", МассивПользователей);
Запрос.УстановитьПараметр("Тип", ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты"));
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
МассивАдресовЭлектроннойПочты.Добавить(Выборка.АдресЭП);
КонецЦикла;
Возврат МассивАдресовЭлектроннойПочты;
КонецФункции

View File

@ -770,6 +770,7 @@
<CommonModule>ФайловыеФункцииСлужебныйКлиентСервер</CommonModule>
<CommonModule>ФайловыеФункцииСлужебныйПовтИсп</CommonModule>
<CommonModule>ФизическиеЛицаКлиентСервер</CommonModule>
<CommonModule>узОбщийМодульСервер</CommonModule>
<ExchangePlan>ОбновлениеИнформационнойБазы</ExchangePlan>
<XDTOPackage>ApplicationExtensionsManifest_1_0_0_1</XDTOPackage>
<XDTOPackage>ApplicationExtensionsPermissions_1_0_0_1</XDTOPackage>

View File

@ -2982,9 +2982,9 @@
<d3p1:fixedVariantMeasure>Day</d3p1:fixedVariantMeasure>
<d3p1:fixedVariantInterval>1</d3p1:fixedVariantInterval>
<d3p1:autoFullInterval>true</d3p1:autoFullInterval>
<d3p1:fullIntervalBegin>2016-09-16T12:00:00</d3p1:fullIntervalBegin>
<d3p1:fullIntervalEnd>2016-09-25T12:59:59</d3p1:fullIntervalEnd>
<d3p1:visualBegin>2016-09-16T12:00:00</d3p1:visualBegin>
<d3p1:fullIntervalBegin>2016-09-16T15:00:00</d3p1:fullIntervalBegin>
<d3p1:fullIntervalEnd>2016-09-25T15:59:59</d3p1:fullIntervalEnd>
<d3p1:visualBegin>2016-09-16T15:00:00</d3p1:visualBegin>
<d3p1:intervalDrawType>Gradient</d3p1:intervalDrawType>
<d3p1:noneVariantChars>3</d3p1:noneVariantChars>
<d3p1:noneVariantMeasure>Day</d3p1:noneVariantMeasure>