public UserAnnotationViewModel(ISharedDataService sharedDataService, MeetingViewModel meeting) { Meeting = meeting; AnnotationsModel = sharedDataService.AnnotationsModel; SurfaceSize = new AnnotationSurfaceSize(); var activeToolObs = Meeting.WhenAnyValue(vm => vm.ActiveTool) .Where(t => t != null); var pageChangedObs = activeToolObs .Select(t => t.WhenAnyValue(v => v.CurrentPageNumber, p => new ToolIdAndPageNumber { ToolId = t.ToolId, PageNumber = p }) ) .Switch(); // Only listen to the most recent sequence of property changes (active tool) // Every time the tool changes, select the tool id and current page number var toolChangedObs = activeToolObs .Select(t => new ToolIdAndPageNumber { ToolId = t.ToolId, PageNumber = t.CurrentPageNumber }); // Merge them together - tool changes and current page of the tool _collectionRefreshSub = toolChangedObs .Merge(pageChangedObs) .Subscribe(t => this.RaisePropertyChanged("Annotations")); // whenever the suface size's width or height changes, re-bind the annotations // on the agent's side, this will send stuff over the wire. need to figure out how to solve this. _sizeChangedSub = this.SurfaceSize .WhenAnyValue(p => p.Width, p => p.Height, (w, h) => true) .Subscribe(p => this.RaisePropertyChanged("Annotations")); }
public AgentAnnotationViewModel(ISharedDataService sharedDataService, MeetingViewModel meeting) : base(sharedDataService, meeting) { _annotations = new ReactiveList<AnnotationViewModel>(); var annotationsChangedObs = _annotations .WhenAnyObservable(p => p.Changed) .Select(p => AreThereAnnotationInTheCurrentPage()); var activeToolObs = Meeting.WhenAnyValue(vm => vm.ActiveTool).Where(t => t != null); var pageChangedObs = activeToolObs .Select(t => t.WhenAnyValue(v => v.CurrentPageNumber, p => AreThereAnnotationInTheCurrentPage())) .Switch(); // Only listen to the most recent sequence of property changes (active tool) var toolChangedObs = activeToolObs.Select(t => AreThereAnnotationInTheCurrentPage()); _containsAnnotationsForCurrentPage = toolChangedObs.Merge(pageChangedObs).Merge(annotationsChangedObs) .ToProperty(this, p => p.ContainsAnnotationsForCurrentPage); AnnotationTools = new AnnotationToolViewModel(this); // when the IsEditing flag changes to false, it means an edit has just completed and we can send // the updates annotations to the client _isEditingSub = this.WhenAnyValue(p => p.IsEditing) .Where(p => !p) .Subscribe(_ => UpdateAnnotationModelAnnotations()); }
public ClientAnnotationViewModel(ISharedDataService sharedDataService, MeetingViewModel meeting) : base(sharedDataService, meeting) { // create the client annotations property, a mapped version of the agent's properties based on the screen sizes. _annotationsChangedSub = _clientAnnotations = AnnotationsModel .WhenAnyValue(v => v.Annotations, v => v.Select(p => CreateAnnotationViewModel(p))) .ToProperty(this, v => v.Annotations); }
public virtual JsonResult Meetings_Destroy([DataSourceRequest] DataSourceRequest request, MeetingViewModel meeting) { if (ModelState.IsValid) { meetingService.Delete(meeting, ModelState); } return(Json(new[] { meeting }.ToDataSourceResult(request, ModelState))); }
public virtual JsonResult Grouping_Horizontal_Update([DataSourceRequest] DataSourceRequest request, MeetingViewModel meeting) { if (ModelState.IsValid) { meetingService.Update(meeting, ModelState); } return(Json(new[] { meeting }.ToDataSourceResult(request, ModelState))); }
public virtual JsonResult Meetings_Update([DataSourceRequest] DataSourceRequest request, MeetingViewModel meeting) { if (ModelState.IsValid) { meetingService.Update(meeting, ModelState); } return(Json(new[] { meeting })); }
/// <summary> /// Get success card after meeting creation. /// </summary> /// <param name="meeting">Meeting model containig meeting details which needs to be display to user.</param> /// <param name="timeZone">User local time zone.</param> /// <returns>Adaptive card attachment indicating successful meeting creation.</returns> public static Attachment GetSuccessAttachment(MeetingViewModel meeting, string timeZone) { string greenBar = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAABhCAIAAACRaPz+AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwgAADsIBFShKgAAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4yMfEgaZUAAAAcSURBVDhPY5h4KBAZjfJH+aP8Uf4ofyTyDwUCAAZTG+Jp0gBvAAAAAElFTkSuQmCC"; var startUTCDateTime = DateTime.Parse(meeting.StartDateTime, null, DateTimeStyles.RoundtripKind); var endUTCDateTime = DateTime.Parse(meeting.EndDateTime, null, DateTimeStyles.RoundtripKind); var dateString = string.Format(CultureInfo.CurrentCulture, Strings.DateFormat, "{{DATE(" + startUTCDateTime.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'", CultureInfo.InvariantCulture) + ", SHORT)}}", "{{TIME(" + startUTCDateTime.ToString("yyyy-MM-dd'T'HH:mm:ss'Z'", CultureInfo.InvariantCulture) + ")}}", endUTCDateTime.Subtract(startUTCDateTime).TotalMinutes); var cancelMeetingAction = new AdaptiveSubmitAction { Title = Strings.CancelMeeting, Data = new AdaptiveSubmitActionData { Msteams = new CardAction { Type = ActionTypes.MessageBack, Text = BotCommands.CancelMeeting, Value = JsonConvert.SerializeObject(new MeetingViewModel { MeetingId = meeting.MeetingId, StartDateTime = meeting.StartDateTime, EndDateTime = meeting.EndDateTime, Subject = Strings.MeetingSubject, RoomName = meeting.RoomName, BuildingName = meeting.BuildingName, }), }, }, }; var card = new AdaptiveCard("1.0") { Body = new List <AdaptiveElement> { new AdaptiveColumnSet { Columns = new List <AdaptiveColumn> { new AdaptiveColumn { Width = AdaptiveColumnWidth.Auto, Items = new List <AdaptiveElement> { new AdaptiveImage { Url = new Uri(greenBar), PixelWidth = 4 } } }, new AdaptiveColumn { Width = AdaptiveColumnWidth.Stretch, Items = new List <AdaptiveElement> { new AdaptiveTextBlock { Text = Strings.MeetingBooked, Wrap = true, Size = AdaptiveTextSize.Large, Weight = AdaptiveTextWeight.Bolder }, new AdaptiveTextBlock { Text = meeting.RoomName, Wrap = true, Spacing = AdaptiveSpacing.Small }, new AdaptiveTextBlock { Text = meeting.BuildingName, Wrap = true, Spacing = AdaptiveSpacing.Small }, new AdaptiveTextBlock { Text = dateString, Wrap = true, Spacing = AdaptiveSpacing.Small }, }, }, }, }, }, Actions = new List <AdaptiveAction>(), }; if (meeting.IsFavourite) { card.Actions = new List <AdaptiveAction> { cancelMeetingAction, new AdaptiveOpenUrlAction { Title = Strings.Share, Url = new Uri(meeting.WebLink) }, }; } else { card.Actions = new List <AdaptiveAction> { cancelMeetingAction, new AdaptiveSubmitAction { Title = Strings.AddFavorite, Data = new AdaptiveSubmitActionData { Msteams = new CardAction { Type = ActionTypes.MessageBack, Text = BotCommands.AddFavorite, Value = JsonConvert.SerializeObject(new MeetingViewModel { RoomEmail = meeting.RoomEmail, BuildingName = meeting.BuildingName, RoomName = meeting.RoomName, BuildingEmail = meeting.BuildingEmail, }), }, }, }, new AdaptiveOpenUrlAction { Title = Strings.Share, Url = new Uri(meeting.WebLink) }, }; } var adaptiveCardAttachment = new Attachment() { ContentType = AdaptiveCard.ContentType, Content = card, }; return(adaptiveCardAttachment); }
public void Destroy(MeetingViewModel product) { meetingService.Delete(product); Clients.Others.destroy(product); }
public bool SendMeetingInvitation(MeetingAttendee attendee, MeetingViewModel meeting, string instanceId) { throw new System.NotImplementedException(); }
public async Task <IActionResult> Edit(string id, MeetingViewModel meeting) { if (id != meeting.Id) { return(NotFound()); } var meetingModel = new Meeting(); if (ModelState.IsValid) { try { meetingModel = new Meeting() { Id = id, Title = meeting.Title, DateAndTime = meeting.DateAndTime, IsVirtual = meeting.IsVirtual, ClientId = meeting.ClientId }; var result = _context.Update(meetingModel); await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!MeetingExists(id)) { return(NotFound()); } else { throw; } } var users = Request.Form.ToList(); foreach (var user in users[2].Value.ToList()) { var me = new MeetingsForUser() { UserId = user, MeetingId = meetingModel.Id }; var meetingsForUser = (from mu in _context.MeetingsForUser where mu.MeetingId == id && mu.UserId == user select new MeetingsForUser { Id = mu.Id, MeetingId = mu.MeetingId, UserId = mu.UserId }).ToList(); if (meetingsForUser.Count == 0) { _context.MeetingsForUser.Add(me); _context.SaveChangesAsync(); } } return(RedirectToAction(nameof(Index))); } ViewData["ClientId"] = new SelectList(_context.Clients, "Id", "Name", meeting.ClientId); return(View(meeting)); }
public IActionResult Index(string id = null) { if (Current.Accessor.Token.IsEmpty()) { WebHelper.GetContext().SignOutAsync(); return(Redirect($"~/wap/home/sign?id={id}")); } var model = new MeetingViewModel(); model.ApiUrl = PlugCoreHelper.ApiUrl.Root; model.WebUrl = EngineHelper.Configuration.Settings.GetValue("WebUrl"); model.RequestUrl = string.Format("{0}{1}{2}", model.WebUrl, HttpContext.Request.Path, HttpContext.Request.QueryString); string appId = EngineHelper.Configuration.Settings.GetValue("WeiXinAppId"); string appSecret = EngineHelper.Configuration.Settings.GetValue("WeiXinSecret"); model.WxJs = JSSDKHelper.GetJsSdkUiPackage(appId, appSecret, model.RequestUrl); var input = new MeetingEditInput() { Id = GuidHelper.Get(id) }; ResultModel <MeetingDTO> result = null; try { result = PlugCoreHelper.ApiUrl.Meeting.MeetingGetId.GetResult <MeetingDTO, MeetingEditInput>(input); } catch { WebHelper.GetContext().SignOutAsync(); return(Redirect($"~/wap/home/sign?id={id}")); } if (result.IsNull()) { throw new DbxException(EnumCode.初始失败, "会议信息为空"); } if (result.Code != EnumCode.成功) { throw new DbxException(EnumCode.初始失败); } if (result.Obj.IsNull()) { throw new DbxException(EnumCode.初始失败, "未找到会议"); } model.Meeting = result.Obj; if (!model.Meeting.IsNull() && !model.Meeting.Setting.IsEmpty()) { model.Setting = JsonHelper.Deserialize <MeetingSettingModel>(model.Meeting.Setting); } return(View(model)); }
public virtual JsonResult Meetings_Destroy([DataSourceRequest] DataSourceRequest request, MeetingViewModel meeting) { if (ModelState.IsValid) { var currentOwnerId = _attendeeService.GetAttendeeIdByEmail(email); var meetingOwnerId = _meetingService.GetAll().SingleOrDefault(m => m.MeetingID == meeting.MeetingID).OwnerID; if (currentOwnerId == meetingOwnerId) { _meetingService.Delete(meeting, ModelState); foreach (var attendeeId in meeting.Attendees.ToList()) { var recepient = _attendeeService.GetAttendeeById(attendeeId); var sender = _attendeeService.GetAttendeeByEmail(email); var message = new MimeMessage(); message.From.Add(new MailboxAddress(sender.Name, sender.Email)); message.To.Add(new MailboxAddress(recepient.Name, recepient.Email)); message.Subject = "Meeting Cancelled."; message.Body = new TextPart(TextFormat.Html) { Text = $"Hi {recepient.Name}, " + $"{sender.Name} cancelled the meeting of {new MeetingRooms().GetRooms().SingleOrDefault(m => m.RoomID == meeting.RoomID).RoomName} meeting room." }; using (var client = new SmtpClient()) { client.Connect("smtp.office365.com", 587, false); client.Authenticate(sender.Email, service.Decrypt(sender.Password, sender.Salt)); client.Send(message); client.Disconnect(true); } } } } return(Json(new[] { meeting }.ToDataSourceResult(request, ModelState))); }
public virtual JsonResult Meetings_Create([DataSourceRequest] DataSourceRequest request, MeetingViewModel meeting) { if (ModelState.IsValid) { if (!_meetingService.IsExisted(meeting)) { meeting.OwnerID = _attendeeService.GetAttendeeIdByEmail(email); meeting.StartTimezone = "Asia/Rangoon"; meeting.EndTimezone = "Asia/Rangoon"; _meetingService.Insert(meeting, ModelState); foreach (var attendeeId in meeting.Attendees.ToList()) { var recepient = _attendeeService.GetAttendeeById(attendeeId); var sender = _attendeeService.GetAttendeeByEmail(email); var message = new MimeMessage(); message.From.Add(new MailboxAddress(sender.Name, sender.Email)); message.To.Add(new MailboxAddress(recepient.Name, recepient.Email)); message.Subject = "Meeting Invitation"; message.Body = new TextPart(TextFormat.Html) { Text = $"Hi {recepient.Name}, " + $"{sender.Name} invite you to join meeting at {new MeetingRooms().GetRooms().SingleOrDefault(m => m.RoomID == meeting.RoomID).RoomName} meeting room - {meeting.Start.ToString("dd-MMM-yyyy hh:mm tt")}." }; using (var client = new SmtpClient()) { client.Connect("smtp.office365.com", 587, false); client.Authenticate(sender.Email, service.Decrypt(sender.Password, sender.Salt)); client.Send(message); client.Disconnect(true); } } } } return(Json(new[] { meeting }.ToDataSourceResult(request, ModelState))); }
public async Task <MeetingViewModel> GetMeetingAsync(string language) { var data = new MeetingViewModel(); data.message = new messageModel(); try { var userId = JwtHelper.GetUserIdFromToken(HttpContext); if (String.IsNullOrEmpty(userId)) { throw new Exception("Unauthorized Access"); } using (var context = new StandardcanContext()) { var jsonData = JsonConvert.SerializeObject(new { emp_id = userId, lang = language, type = "1", }); SystemLog systemLog = new SystemLog() { module = "api/Meeting/GetMeeting", data_log = jsonData }; await _systemLogService.InsertSystemLogAsync(systemLog); SqlParameter emp_id = new SqlParameter("emp_id", userId ?? ""); SqlParameter typeToday = new SqlParameter("type", "1"); SqlParameter lang = new SqlParameter("lang", language ?? ""); SqlParameter typeYes = new SqlParameter("type", "2"); var spDataToday = context.SpMbMeeting.FromSqlRaw("sp_mb_meeting @emp_id, @type, @lang", emp_id, typeToday, lang).ToList(); jsonData = JsonConvert.SerializeObject(new { emp_id = userId, lang = language, type = "2", }); systemLog = new SystemLog() { module = "api/Meeting/GetMeeting", data_log = jsonData }; await _systemLogService.InsertSystemLogAsync(systemLog); var spDataYes = context.SpMbMeeting.FromSqlRaw("sp_mb_meeting @emp_id, @type, @lang", emp_id, typeYes, lang).ToList(); data.content = new List <MeetingContentViewModel>(); MeetingContentViewModel viewModel = new MeetingContentViewModel(); viewModel.title = "รายการนัดหมายปัจจุบัน"; viewModel.chlids = new List <MeetingChlidsViewModel>(); foreach (var item in spDataToday) { MeetingChlidsViewModel meetingChlids = new MeetingChlidsViewModel(); meetingChlids.title = item.title; meetingChlids.line1 = item.line1; meetingChlids.line2 = item.line2; meetingChlids.line3 = item.line3; meetingChlids.icon = item.icon; viewModel.chlids.Add(meetingChlids); } data.content.Add(viewModel); viewModel = new MeetingContentViewModel(); viewModel.title = "รายการนัดหมายที่ผ่านมา"; viewModel.chlids = new List <MeetingChlidsViewModel>(); foreach (var item in spDataYes) { MeetingChlidsViewModel meetingChlids = new MeetingChlidsViewModel(); meetingChlids.title = item.title; meetingChlids.line1 = item.line1; meetingChlids.line2 = item.line2; meetingChlids.line3 = item.line3; meetingChlids.icon = item.icon; viewModel.chlids.Add(meetingChlids); } data.content.Add(viewModel); data.message.status = "1"; data.message.msg = "Success"; } } catch (Exception ex) { data.message.status = "2"; data.message.msg = ex.Message; } return(data); }
public virtual JsonResult Date_Grouping_Create([DataSourceRequest] DataSourceRequest request, MeetingViewModel meeting) { if (ModelState.IsValid) { meetingService.Insert(meeting, ModelState); } return(Json(new[] { meeting }.ToDataSourceResult(request, ModelState))); }
public void Update(MeetingViewModel product) { meetingService.Update(product); Clients.Others.update(product); }
private void Initialize(string code = null, MeetingDTO meeting = null) { viewModel = DataContext as MeetingViewModel; viewModel.CheckNull(); viewModel.Loading(code, meeting); }