// GET: Api
    public async Task<ActionResult> CompanyAsync(Guid id, bool settings = false)
    {
      var cookies = new CookieManager(HttpContext);
      if(cookies.GetUser() != null)
      {
        PerfectView.PerfectViewSoapClient client = new PerfectView.PerfectViewSoapClient();
        try
        {
          if(settings)
          {
            var settingsResponse = await client.RelationGetFieldsAsync(Settings.Credentials, PerfectView.BaseRelationType.Organisation);
            var getvalue = CompanyResultBuilder.BuildSettingsGetValue(settingsResponse);
            var @enum = CompanyResultBuilder.BuildSettingsEnum(settingsResponse);
          }

          var response = await client.RelationGetAsync(Settings.Credentials, id, true, false);
          var parents = await client.RelationGetParentRelationshipsAsync(Settings.Credentials, id, true);
          var childs = await client.RelationGetChildRelationshipsAsync(Settings.Credentials, id, true);

          return Json(CompanyResultBuilder.Build(response, parents, childs), JsonRequestBehavior.AllowGet);
        }
        catch(Exception exc)
        {
        }
      }
      return Json(null, JsonRequestBehavior.AllowGet);
    }
    // GET: Test
    public async Task<ActionResult> Index()
    {
      PerfectView.PerfectViewSoapClient client = new PerfectView.PerfectViewSoapClient();

      // Get all workflows:
      //var response = await client.WorkflowGetAllAsync(Settings.Credentials);
      // Support:
      // {
      //   "ExtensionData" : { },
      //"Id" : "75749a1e-b784-45aa-8fbb-2d39c51bd3e7",
      //"Name" : "Support",
      //"EntityTypeId" : "0f23fe82-8d93-4f18-af4e-f1342d5a634e"
      //   }

      // Get all queues / wachtrijen
      //var response = await client.WorkflowGetQueuesAsync(Settings.Credentials, Guid.Parse("75749a1e-b784-45aa-8fbb-2d39c51bd3e7"));
      //   "Queues" : [{
      //		"ExtensionData" : {},
      //		"Id" : "c3e70c63-b67f-40a7-9145-26b6a1cace87",
      //		"Name" : "Support - Herplannen"
      //	}, {
      //		"ExtensionData" : {},
      //		"Id" : "7ae54fc0-6025-4fc6-9be4-76e22c59b236",
      //		"Name" : "Support - Te Factureren"
      //	}
      //],

      //var response = await client.ActivitySearchByFieldAsync(Settings.Credentials, Guid.Parse("0f23fe82-8d93-4f18-af4e-f1342d5a634e"), new PerfectView.PvFieldValueData[0], 0, 50, true, false);
      //var response = await client.ActivityGetAsync(Settings.Credentials, Guid.Parse("fda51699-eb08-466d-b9c3-b8e370b96a8e"), true, false);
      //var response = await client.ActivityGetFieldsAsync(Settings.Credentials, Guid.Parse("75749a1e-b784-45aa-8fbb-2d39c51bd3e7"));
      //var response = await client.WorkflowStepGetAllAsync(Settings.Credentials, Guid.Parse("75749a1e-b784-45aa-8fbb-2d39c51bd3e7"));
      //var response = await client.EnumerationGetItemsAsync(Settings.Credentials, "urgenties supports");
      return Json("", JsonRequestBehavior.AllowGet);
    }
 public async Task<ActionResult> ProductsAsync(string query)
 {
   var cookies = new CookieManager(HttpContext);
   PerfectView.PerfectViewSoapClient client = new PerfectView.PerfectViewSoapClient();
   if(query.Length > 2 && cookies.GetUser() != null)
   {
     try
     {
       var response = await client.ProductGetAllAsync(Settings.Credentials);
       return Json(ProductSearchResultBuilder.Build(response, query), JsonRequestBehavior.AllowGet);
     }
     catch(Exception exc)
     {
     }
   }
   return Json(new CompanySearchResult[0], JsonRequestBehavior.AllowGet);
 }
 // GET: Api
 public async Task<ActionResult> CompaniesAsync(string query)
 {
   var cookies = new CookieManager(HttpContext);
   
   PerfectView.PerfectViewSoapClient client = new PerfectView.PerfectViewSoapClient();
   if(query.Length > 2 && cookies.GetUser() != null)
   {
     try
     {
       var response = await client.RelationSearchByName_V2Async(Settings.Credentials, 1, 10, query, true, false);
       return Json(CompanySearchResultBuilder.Build(response), JsonRequestBehavior.AllowGet);
     }
     catch(Exception exc)
     {
     }
   }
   return Json(new CompanySearchResult[0], JsonRequestBehavior.AllowGet);
 }
    private async Task<ActionResult> SaveInternal(string from_name, string from_email, WorkOrder order)
    {
      var cookies = new CookieManager(HttpContext);
      if(cookies.GetUser() == null)
      {
        return RedirectToAction("Index", "Index", new { goed = true });
      }

      PerfectView.PerfectViewSoapClient client = new PerfectView.PerfectViewSoapClient();
      try
      {
        var response = await client.ActivityCreateAsync(Settings.Credentials, new PerfectView.PvActivitySettingsData
        {
          WorkflowId = Settings.SupportWorkflowId,
          WorkflowStepId = Settings.NieuwWorkFlowStepId,
          ParentRelationshipId = Guid.Parse(order.BedrijfsId),
          ChildRelationshipId = !string.IsNullOrEmpty(order.ContactpersoonId) ? Guid.Parse(order.ContactpersoonId) : (Guid?)null,

        }, new PerfectView.PvActivityFollowUpData
        {
          Start = ParseDateTime(order.Momenten.FirstOrDefault(), m => m.Datum, m => m.Begintijd),
          End = ParseDateTime(order.Momenten.FirstOrDefault(), m => m.Datum, m => m.Eindtijd)
        }, new PerfectView.PvFieldValueData[] {
          ActivityRequestBuilder.Build(ActivityFields.Onderwerp, GetOnderwerp(from_name, order.Opdracht) ),
          ActivityRequestBuilder.Build(ActivityFields.Omschrijving, order.Opdracht),
          ActivityRequestBuilder.Build(ActivityFields.Oplossing, BuildOplossing(order)),
        }, null);

        if(response.Body.ActivityCreateResult.Activity == null)
        {
          throw new Exception(response.Body.ActivityCreateResult.ErrorInformation);
        }
        var activityId = response.Body.ActivityCreateResult.Activity.Id;
        await client.ActivityFlowAsync(Settings.Credentials, activityId, Guid.Empty, Guid.Empty, Guid.Parse(order.Wachtrij));

        var sigToImg = new SignatureToImage()
        {
          BackgroundColor = Color.White,
          PenColor = Color.FromArgb(20, 83, 148),
          CanvasWidth = 290,
          CanvasHeight = 330,
          PenWidth = 2,
          FontSize = 24,
          FontName = "Journal",
        };

        using(var signatureImage = sigToImg.SigJsonToImage(order.output))
        using(System.IO.MemoryStream stream = new System.IO.MemoryStream())
        {
          signatureImage.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
          byte[] imageBytes = stream.ToArray();
          string imageBase64String = Convert.ToBase64String(imageBytes);
          await client.ActivityAddAttachmentAsync(Settings.Credentials, activityId, "handtekening.png", imageBase64String);

          var htmlBytes = System.Text.Encoding.UTF8.GetBytes(ActivityRequestBuilder.BuildHtml(order, imageBase64String));
          string htmlBase64String = Convert.ToBase64String(htmlBytes);
          await client.ActivityAddAttachmentAsync(Settings.Credentials, activityId, "werkbon.html", htmlBase64String);
        }

        return RedirectToAction("Index", "Index", new { goed = true });
      }
      catch(Exception exc)
      {
        return RedirectToAction("Index", "Index", new { goed = false, error = exc.Message });
      }
    }