public override void PerformOperation()
 {
     if (Order == null)
     {
         throw new InvalidOperationException("Order is not defined to add documents.");
     }
     foreach (var document in SelectedEntities.Where(document => !Order.Documents.Contains(document)))
     {
         Order.Documents.Add(document);
     }
 }
    private void HandleMouseInput()
    {
        if (Input.GetMouseButtonDown(0))
        {
            CancelBuildMode();
            isSelecting        = true;
            mouseStartPosition = Input.mousePosition;
        }

        if (Input.GetMouseButtonUp(0))
        {
            bool isMultiselecting = Input.GetButton("Multiselect");

            if (!isMultiselecting)
            {
                DeselectAll(false);
            }

            if (isSelecting)
            {
                Bounds bounds = GetViewportBounds(mouseStartPosition, Input.mousePosition);
                if (bounds.size.x > 0.01 && bounds.size.y > 0.01)
                {
                    //selection box is large enough, select entities inside
                    IEnumerable <Entity> entitiesToConsider;
                    if (OverallStateManager.Instance.IsOfflineTest)
                    {
                        entitiesToConsider = FindObjectsOfType <Entity>();
                    }
                    else
                    {
                        entitiesToConsider = clientEntityManager.MySquad.Values;
                    }

                    foreach (Entity hitEntity in entitiesToConsider.Where(x => IsWithinBounds(bounds, x.transform.position)))
                    {
                        if (!SelectedEntities.Contains(hitEntity))
                        {
                            SelectEntity(hitEntity);
                        }
                        else if (isMultiselecting)
                        {
                            DeselectEntity(hitEntity, true);
                        }
                    }

                    uiManager.UpdateSelectedEntities(SelectedEntities);
                }
                else
                {
                    //selection box is too small, do point selection
                    Ray        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
                    RaycastHit hit;
                    if (Physics.Raycast(ray, out hit, Mathf.Infinity, LayerManager.Instance.clickableMask))
                    {
                        Entity hitEntity = hit.transform.gameObject.GetComponentInParent <Entity>();
                        if (hitEntity != null && hitEntity.playerId == clientGameManager.MyPlayer.id)
                        {
                            if (!SelectedEntities.Contains(hitEntity))
                            {
                                SelectEntity(hitEntity);
                            }
                            else if (isMultiselecting)
                            {
                                DeselectEntity(hitEntity, true);
                            }
                        }
                    }

                    uiManager.UpdateSelectedEntities(SelectedEntities);
                }
            }

            isSelecting = false;
        }

        if (Input.GetMouseButtonUp(1))
        {
            if (SelectedEntities.Count > 0)
            {
                Ray        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
                RaycastHit hit;

                if (Physics.Raycast(ray, out hit, Mathf.Infinity, LayerManager.Instance.clickableMask))
                {
                    Entity hitEntity = hit.transform.gameObject.GetComponentInParent <Entity>();
                    if (hitEntity != null && hitEntity.teamId != clientGameManager.MyPlayer.teamId)
                    {
                        IssueAttackCommand(SelectedEntities
                                           .Where(x => x.CanAttackTarget(hitEntity))
                                           .Select(x => x.uniqueId).ToList(), hitEntity.uniqueId);
                    }
                    else
                    {
                        IssueMoveCommand(SelectedEntities.Where(x => x.canMove).Select(x => x.uniqueId).ToList(), hit.point);
                    }
                }
            }
        }
    }