/// <summary>
        ///
        /// </summary>
        /// <param name="documentsigningRef"></param>
        /// <param name="documentsigningtaskRef"></param>
        /// <param name="resulturl"></param>
        /// <param name="name"></param>
        /// <param name="service"></param>
        internal Entity CreateSignicatResult(EntityReference documentsigningRef, EntityReference documentsigningtaskRef,
                                             string resulturl, string name, IOrganizationService service)
        {
            try
            {
                var padesUrl = new CallBackSignicatHandler().CreatePades(null, resulturl);

                var entity = new Entity("pp_signicatresulturl");
                entity["pp_resulturl"] = resulturl;
                if (padesUrl != null)
                {
                    entity["pp_xpadesurl"] = padesUrl;
                }
                entity["pp_name"]           = name;
                entity["pp_documentsignid"] = documentsigningRef;
                if (documentsigningtaskRef != null)
                {
                    entity["pp_signicatdocurlid"] = documentsigningtaskRef;
                }
                var entityid = service.Create(entity);
                entity.Id = entityid;

                return(entity);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="encodedData"></param>
        /// <param name="name"></param>
        /// <param name="entityid"></param>
        /// <param name="entityname"></param>
        /// <param name="service"></param>
        internal HttpStatusCode CreateAnnotations(string signicatUrl, string name, string subject, Guid entityid,
                                                  string entityname, int lcid, IOrganizationService service)
        {
            try
            {
                var    fileobj     = new CallBackSignicatHandler().ReadAsyncFile(signicatUrl);
                string encodedData = Convert.ToBase64String(fileobj.Result.file);

                Random rnd   = new Random();
                int    docnr = rnd.Next(100, 500);

                Entity Annotation = new Entity("annotation");
                Annotation.Attributes["objectid"]       = new EntityReference(entityname, entityid);
                Annotation.Attributes["objecttypecode"] = entityname;
                if (lcid == 1044)
                {
                    Annotation.Attributes["subject"] = "Signert: " + subject;
                }
                else
                {
                    Annotation.Attributes["subject"] = "Signed: " + subject;
                }
                Annotation.Attributes["documentbody"] = encodedData;
                Annotation.Attributes["mimetype"]     = @"application/pdf";

                if (lcid == 1044)
                {
                    Annotation.Attributes["notetext"] = Resources.Resourcenb.notetext;
                }
                else
                {
                    Annotation.Attributes["notetext"] = Resources.Resourceeng.notetext;
                }
                Annotation.Attributes["filename"] = name + ".pdf";

                service.Create(Annotation);
                return(HttpStatusCode.OK);
            }
            catch (Exception ex)
            {
                return(HttpStatusCode.BadRequest);
            }
        }
Пример #3
0
        /// <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);
            }
        }
Пример #4
0
        /// <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);
            }
        }