public void SetStartProcessBody(long chatId, StartProcessBody startProcessBody)
 {
     repo[chatId] = startProcessBody;
 }
 public Task <StartProcessResult> StartProcessAsync(StartProcessBody body, Auth auth)
 {
     return(restClient.ExecuteWithAuth <StartProcessResult>($"/api/rest/Workflow/StartProcessAsync", body, RestSharp.Method.POST, auth));
 }
Ejemplo n.º 3
0
        public override async Task HandleCommandState(long identifier, string chatState, object message, string data)
        {
            var m    = message as Message;
            var auth = authRepository.GetCurrentAuth(identifier);

            switch (chatState)
            {
            case chooseProcess:
            {
                var processId = long.Parse(data);

                var context = await botWebApiService.GetProcessContext(processId);

                processContextRepository.SetCurrentProcessContext(identifier, context, null);

                // Должны были выбрать процесс - это токен
                var body = new StartProcessBody
                {
                    ProcessHeaderId = long.Parse(data),
                    ProcessName     = "FromBot",
                    Context         = new ExpandoObject()
                };
                startProcessRepository.SetStartProcessBody(identifier, body);

                if (context.Count == 0)
                {
                    await AllDone(identifier);

                    break;
                }
                else
                {
                    if (processId == 102)
                    {
                        ((ICollection <KeyValuePair <string, object> >)body.Context).Add(new KeyValuePair <string, object>("Bot", true));
                    }

                    await WriteContext(identifier, m, null);

                    chatRepository.SetState(identifier, this, writeContext);

                    break;
                }

                // Хардкод на 1 процесс
                //if (processId == 102)
                //{
                //    ((ICollection<KeyValuePair<string, object>>)body.Context).Add(new KeyValuePair<string, object>("Bot", true));

                //    await ((ITelegramBotClient)BotService.Client).SendTextMessageAsync(identifier, "Введите дату начала в формате ДД.ММ.ГГГГ ЧЧ:ММ");
                //    chatRepository.SetState(identifier, this, startDate);
                //}
                //else
                //{
                //    await AllDone(identifier);
                //}

                //break;
            }

            case startDate:
            {
                var current = startProcessRepository.GetCurrentStartProcessBody(identifier);
                if (current != null)
                {
                    if (DateTime.TryParse(m.Text, out DateTime date))
                    {
                        ((ICollection <KeyValuePair <string, object> >)current.Context).Add(new KeyValuePair <string, object>("DateStart", date));
                        await((ITelegramBotClient)BotService.Client).SendTextMessageAsync(identifier, "Введите дату окончания в формате ДД.ММ.ГГГГ ЧЧ:ММ");
                        chatRepository.SetState(identifier, this, endDate);
                    }
                    else
                    {
                        await((ITelegramBotClient)BotService.Client).SendTextMessageAsync(identifier, "Дата не распознана, введите корректно");
                    }
                }
                break;
            }

            case endDate:
            {
                var current = startProcessRepository.GetCurrentStartProcessBody(identifier);
                if (current != null)
                {
                    if (DateTime.TryParse(m.Text, out DateTime date))
                    {
                        ((ICollection <KeyValuePair <string, object> >)current.Context).Add(new KeyValuePair <string, object>("DateEnd", date));
                        await((ITelegramBotClient)BotService.Client).SendTextMessageAsync(identifier, "Введите причину отгула");
                        chatRepository.SetState(identifier, this, reason);
                    }
                    else
                    {
                        await((ITelegramBotClient)BotService.Client).SendTextMessageAsync(identifier, "Дата не распознана, введите корректно");
                    }
                }
                break;
            }

            case reason:
            {
                var current = startProcessRepository.GetCurrentStartProcessBody(identifier);
                if (current != null)
                {
                    ((ICollection <KeyValuePair <string, object> >)current.Context).Add(new KeyValuePair <string, object>("Reason", m.Text));

                    chatRepository.SetState(identifier, this, startProcessQuestion);
                    await AllDone(identifier);
                }
                break;
            }

            case startProcessQuestion:
            {
                await AllDone(identifier);

                break;
            }

            case startProcess:
            {
                await StartProcess(identifier, data);

                break;
            }

            case writeContext:
            {
                await WriteContext(identifier, m, m.Text);

                break;
            }

            default:
            {
                chatRepository.ResetState(identifier);
                break;
            }
            }
        }