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 });
      }
    }