/// <summary> /// If the documentsigningtasks of a specific documentsigning are signed, then generate the pades document(s) /// </summary> /// <param name="docsignRef"></param> /// <param name="regardingRef"></param> /// <param name="saveinsp"></param> /// <param name="service"></param> /// <returns>List of pades url's</returns> private HttpStatusCode CheckOverAllStatus(EntityReference docsignRef, EntityReference regardingRef, bool saveinsp, bool sendcopy, EntityReference senderRef, string orgname, int lcid, IOrganizationService service) { try { var results = new CallBackCrmHandler().GetDocumentSiginingTasks(docsignRef, 1, service); //if all tasks are completed, the return is null if (results.Entities.Count == 0) { ConvertSdoDocument(docsignRef, regardingRef, saveinsp, sendcopy, senderRef, orgname, lcid, service); return(HttpStatusCode.OK); } return(HttpStatusCode.NoContent); } catch (Exception ex) { return(HttpStatusCode.BadRequest); } }
internal async Task <HttpStatusCode> DeactivateTask(string requestId, string taskId, string orgname) { if (string.IsNullOrEmpty((requestId))) { return(HttpStatusCode.BadRequest); } try { var service = new CallBackCrmHandler().ConnectToCRM(orgname); //Connect to the customers CRM if (service == null) { return(HttpStatusCode.NotFound); } new CallBackCrmHandler().DeactivateTask(requestId, taskId, service); return(HttpStatusCode.OK); } catch (Exception ex) { return(HttpStatusCode.BadRequest); } }
/// <summary> /// /// </summary> /// <param name="taskid"></param> /// <param name="orgname"></param> internal async Task <HttpStatusCode> GetDocumentSigning(string requestid, string taskid, string orgname) { if (string.IsNullOrEmpty((requestid))) { return(HttpStatusCode.BadRequest); } try { var service = new CallBackCrmHandler().ConnectToCRM(orgname); //Connect to the customers CRM if (service == null) { return(HttpStatusCode.NotFound); } var documentsigning = new CallBackCrmHandler().GetDocumentSigning(requestid, taskid, service); HandleTasks(documentsigning, orgname, service); return(HttpStatusCode.OK); } catch (Exception ex) { return(HttpStatusCode.BadRequest); } }
/// <summary> /// /// </summary> /// <param name="documentsigning"></param> /// <param name="service"></param> private HttpStatusCode HandleTasks(Entity documentsigning, string orgname, IOrganizationService service) { try { var documentsigningtasks = new CallBackCrmHandler().GetDocumentSiginingTasks( documentsigning.ToEntityReference(), 1, service); //status sent var regardingRef = new Helpers().GetRegarding(documentsigning, service); var sendcopy = (bool)documentsigning["pp_sendcopy"]; var method = (OptionSetValue)documentsigning["pp_signing"]; var saveinsp = (bool)documentsigning["pp_saveindocumentlocation"]; var senderRef = (EntityReference)documentsigning["ownerid"]; var lcid = new CallBackCrmHandler().RetrieveUserUiLanguageCode(service, senderRef.Id); foreach (var documentsigningtask in documentsigningtasks.Entities) { var sdsurl = documentsigningtask.Attributes["pp_sdsurl"].ToString(); var taskid = documentsigningtask.Attributes["pp_name"].ToString(); var subString = sdsurl.Substring(sdsurl.IndexOf('=') + 1); var requestId = subString.Substring(0, subString.IndexOf('&')); var taskinfo = new CallBackSignicatHandler().GetSignicatTaskInfo(requestId, taskid); if (taskinfo == null) { continue; } if (taskinfo.taskstatus == taskstatus.created) { continue; } if (taskinfo.taskstatus == taskstatus.rejected) { new CallBackCrmHandler().ChangeDocumentSigningTaskStatus(documentsigningtask.Id, 778380001, service); } //Rejected if (taskinfo.taskstatus == taskstatus.completed) { foreach (var documentstatus in taskinfo.documentstatus) { var documentsigningRef = (EntityReference)documentsigningtask["pp_documentsigningid"]; var saveonlymerged = (bool)documentsigning["pp_saveonlymerged"]; var name = new Helpers().GetNameFromUrl(documentstatus.originaluri); new CallBackCrmHandler().CreateSignicatResult(documentsigningRef, documentsigningtask.ToEntityReference(), documentstatus.resulturi, name, service); new CallBackCrmHandler().CreateTransaction(orgname, method.Value, senderRef, service); if (!saveonlymerged) { var title = Resources.Resourceeng.singledocument; if (lcid == 1044) { title = Resources.Resourcenb.singledocument; } var padesurl = new CallBackSignicatHandler().CreatePades(null, documentstatus.resulturi); new CallBackCrmHandler().CreateAnnotations(padesurl, name, title, documentsigningRef.Id, documentsigningRef.LogicalName, lcid, service); if (sendcopy) { var customer = (EntityReference)documentsigningtask.Attributes["pp_customerid"]; new CallBackCrmHandler().SendEmail(documentsigning.ToEntityReference(), senderRef, padesurl, name, customer, lcid, service); } } } new CallBackCrmHandler().ChangeDocumentSigningTaskStatus(documentsigningtask.Id, 778380000, service); //Signed } } CheckOverAllStatus(documentsigning.ToEntityReference(), regardingRef, saveinsp, sendcopy, senderRef, orgname, lcid, service); return(HttpStatusCode.OK); } catch (Exception ex) { return(HttpStatusCode.BadRequest); } }
/// <summary> /// Loops throught the signingresults and /// </summary> /// <param name="docsignRef"></param> /// <param name="regardingRef"></param> /// <param name="saveinsp"></param> /// <param name="service"></param> /// <returns>List of pades url's</returns> private void ConvertSdoDocument(EntityReference docsignRef, EntityReference regardingRef, bool saveinsp, bool sendcopy, EntityReference senderRef, string orgname, int lcid, IOrganizationService service) { try { var signingresults = new CallBackCrmHandler().GetAllSigningResults(docsignRef.Id, service); var docList = new List <ResultObject>(); foreach (var item in signingresults.Entities) { string padesurl = null; var resulturl = item.Attributes["pp_resulturl"].ToString(); if (item.Contains("pp_xpadesurl")) { padesurl = item.Attributes["pp_xpadesurl"].ToString(); } var name = item.Attributes["pp_name"].ToString(); var taskRef = (EntityReference)item.Attributes["pp_signicatdocurlid"]; var sdsurl = new CallBackCrmHandler().GetSDSUrlFromTask(taskRef.Id, service); var subString = sdsurl.Substring(sdsurl.IndexOf('=') + 1); var requestid = subString.Substring(0, subString.IndexOf('&')); var obj = new ResultObject { Id = item.Id, name = name, resulturl = resulturl, sdsurl = sdsurl, rquestid = requestid, padesurl = padesurl, taskId = taskRef.Id }; docList.Add(obj); } var groups = docList.GroupBy(x => x.name).OrderBy(x => x.Key); var title = Resources.Resourceeng.singledocument; if (lcid == 1044) { title = Resources.Resourcenb.singledocument; } foreach (var item in groups) { var tempList = item.ToList(); if (tempList.Count < 2) //If one signer and one document { if (tempList[0].padesurl != null) { new CallBackCrmHandler().CreateAnnotations(tempList[0].padesurl, tempList[0].name, title, docsignRef.Id, docsignRef.LogicalName, lcid, service); if (sendcopy) { new CallBackCrmHandler().SendSignedMergedCopy(docsignRef, senderRef, tempList[0].padesurl, tempList[0].name, lcid, service); } } else { new CallBackCrmHandler().CreateAnnotations(tempList[0].resulturl, tempList[0].name, title, docsignRef.Id, docsignRef.LogicalName, lcid, service); if (sendcopy) { new CallBackCrmHandler().SendSignedMergedCopy(docsignRef, senderRef, tempList[0].padesurl, tempList[0].name, lcid, service); } } if (saveinsp && regardingRef != null) { if (tempList[0].padesurl != null) { new CallBackSharePointHandler().SaveInSP(regardingRef, tempList[0].padesurl, tempList[0].name, orgname, lcid, service); } else { new CallBackSharePointHandler().SaveInSP(regardingRef, tempList[0].resulturl, tempList[0].name, orgname, lcid, service); } } continue; } var padesurl = new CallBackSignicatHandler().CreatePades(tempList, null); if (padesurl != null) { var mergedTitle = Resources.Resourceeng.merged; if (lcid == 1044) { mergedTitle = Resources.Resourcenb.merged; } new CallBackCrmHandler().CreateSignicatResult(docsignRef, null, padesurl, mergedTitle + ": " + tempList[0].name, service); new CallBackCrmHandler().CreateAnnotations(padesurl, tempList[0].name, mergedTitle, docsignRef.Id, docsignRef.LogicalName, lcid, service); if (sendcopy) { new CallBackCrmHandler().SendSignedMergedCopy(docsignRef, senderRef, padesurl, tempList[0].name, lcid, service); } if (saveinsp && regardingRef != null) { new CallBackSharePointHandler().SaveInSP(regardingRef, padesurl, tempList[0].name, orgname, lcid, service); } } } //HandlerCRM.DeaktivateSignicatResults(groups, service); } catch (Exception ex) { throw new Exception(ex.Message); } }
/// <summary> /// Saving documents into sharepoint online /// </summary> /// <param name="regardingRef"></param> /// <param name="resulturi"></param> /// <param name="docName"></param> /// <param name="service"></param> internal void SaveInSP(EntityReference regardingRef, string resulturi, string docName, string orgname, int lcid, IOrganizationService service) { try { folderRelativeUrl = ""; SharePointSite = null; var crmconfig = new CallBackCrmHandler().GetCRMConfig(service); var spUsername = crmconfig.SPUser; var spPassword = crmconfig.SPpassword; if (spPassword == null || spPassword == null) { var customerCredentials = new CustomerCredentialsHandler().GetCredentials(orgname); spUsername = customerCredentials.username; spPassword = customerCredentials.password; } var pdfBytes = new CallBackSignicatHandler().ReadAsyncFile(resulturi); var currentSharePointFolderEntity = GetDocumentLocation(regardingRef, "regardingobjectid", service); var sharePointUrl = GetDefaultSPSiteUrlFromCRMSiteCollectionEntity(service); HandleRelativeUrl(currentSharePointFolderEntity, service); var urlSplit = folderRelativeUrl.Split('/').ToList(); var listTitle = urlSplit.First(); var folderName = urlSplit[1]; docName = CleanName(docName); using (ClientContext clientContext = new ClientContext(sharePointUrl)) { SecureString passWord = new SecureString(); foreach (char c in spPassword.ToCharArray()) { passWord.AppendChar(c); } clientContext.Credentials = new SharePointOnlineCredentials(spUsername, passWord); Web web = clientContext.Web; clientContext.Load(web); clientContext.Load(web.Lists); clientContext.ExecuteQuery(); MemoryStream mStream = new MemoryStream(); mStream.Write(pdfBytes.Result.file, 0, pdfBytes.Result.file.Length); FileCreationInformation flciNewFile = new FileCreationInformation(); //using ContentStream property for large files mStream.Seek(0, SeekOrigin.Begin); flciNewFile.ContentStream = mStream; flciNewFile.Url = sharePointUrl + "/" + folderRelativeUrl + docName + ".pdf"; flciNewFile.Overwrite = true; List accountList = GetAccountList(listTitle, web, clientContext, crmconfig, service); if (accountList == null) { return; } var folder = accountList.RootFolder.Folders.GetByUrl(folderName); var uploadFile = folder.Files.Add(flciNewFile); clientContext.Load(uploadFile); clientContext.ExecuteQuery(); } } catch (Exception ex) { return; throw new Exception(ex.Message); } }
internal void SendEmail(EntityReference docsignRef, EntityReference senderRef, string padesurl, string name, EntityReference customer, int lcid, IOrganizationService service) { try { var crmConfig = new CallBackCrmHandler().GetCRMConfig(service); var emailLogoImg = "https://ppsignicatresources.blob.core.windows.net/signicatlinkbutton/SignicatMailLogo.png"; Entity fromParty = new Entity("activityparty"); fromParty["partyid"] = new EntityReference("systemuser", senderRef.Id); Entity toParty = new Entity("activityparty"); toParty["partyid"] = new EntityReference(customer.LogicalName, customer.Id); var listfrom = new List <Entity>() { fromParty }; var listto = new List <Entity>() { toParty }; // Create an e-mail message. Entity email = new Entity("email"); email["to"] = new EntityCollection(listto); email["from"] = new EntityCollection(listfrom); if (lcid == 1044) { email["subject"] = Resources.Resourcenb.emailsubject + ": " + name; } else { email["subject"] = Resources.Resourceeng.emailsubject + ": " + name; } email["directioncode"] = true; email["regardingobjectid"] = new EntityReference(docsignRef.LogicalName, docsignRef.Id); var newText = ""; //newText = "<img src='" + emailLogoImg + "'/><br/><br/>"; if (lcid == 1044) { newText += "Hei,<br/><br/>" + Resources.Resourcenb.emaildescription + ": " + name; newText += "<br/><br/> Med vennlig Hilsen<br/>"; } else { newText += "Hi,<br/><br/>" + Resources.Resourceeng.emaildescription + ": " + name; newText += "<br/><br/> With Regards<br/>"; } newText += crmConfig.SigningUsername; email["description"] = newText; var _emailId = service.Create(email); // Create email attachment var fileobj = new CallBackSignicatHandler().ReadAsyncFile(padesurl); string encodedData = Convert.ToBase64String(fileobj.Result.file); Entity _emailAttachment = new Entity("activitymimeattachment"); _emailAttachment["objectid"] = new EntityReference(email.LogicalName, _emailId); _emailAttachment["objecttypecode"] = email.LogicalName; _emailAttachment["subject"] = name; _emailAttachment["body"] = encodedData; _emailAttachment["filename"] = name + ".pdf"; var _emailAttachmentId = service.Create(_emailAttachment); // Use the SendEmail message to send an e-mail message. SendEmailRequest sendEmailreq = new SendEmailRequest { EmailId = _emailId, TrackingToken = "", IssueSend = true }; SendEmailResponse sendEmailresp = (SendEmailResponse)service.Execute(sendEmailreq); } catch (Exception ex) { throw new Exception(ex.Message); } }