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);
 }
Exemplo n.º 4
0
        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);
 }
Exemplo n.º 9
0
 public bool SendMeetingInvitation(MeetingAttendee attendee, MeetingViewModel meeting, string instanceId)
 {
     throw new System.NotImplementedException();
 }
Exemplo n.º 10
0
        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));
        }
Exemplo n.º 11
0
        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));
        }
Exemplo n.º 12
0
        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)));
        }
Exemplo n.º 13
0
        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)));
        }
Exemplo n.º 14
0
        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);
 }
Exemplo n.º 17
0
 private void Initialize(string code = null, MeetingDTO meeting = null)
 {
     viewModel = DataContext as MeetingViewModel;
     viewModel.CheckNull();
     viewModel.Loading(code, meeting);
 }