public OperationResult Vote(ClientPetitionVote petitionVote, string certificateSerialNumber)
        {
            var vote = new PetitionVote()
            {
                PetitionID  = petitionVote.PetitionID,
                Certificate = new Certificate()
                {
                    SerialNumber = certificateSerialNumber
                },
                SignedData = petitionVote.SignedData,
                SignedHash = petitionVote.Signature
            };

            OperationResult result;

            using (var db = new EDEntities())
            {
                var certificate = db.Certificates.SingleOrDefault(c => c.SerialNumber == vote.Certificate.SerialNumber);
                if (certificate == null)
                {
                    result = OperationResult.Fail(-4, "Certificate is not registered.");
                    return(result);
                }

                vote.CertificateID = certificate.ID;
                vote.PersonID      = certificate.PersonID;
                vote.CreatedDate   = DateTime.Now;

                vote.Petition    = null;
                vote.Certificate = null;
                vote.Person      = null;

                ////var votes = (from p in db.PetitionVotes
                ////			 where p.PetitionID == vote.PetitionID
                ////				&& (p.PersonID == vote.PersonID || p.CertificateID == vote.CertificateID || p.Certificate.SerialNumber == vote.Certificate.SerialNumber)
                ////			 select p);
                //var votes = db.PetitionVotes.Where(p =>
                //	p.PetitionID == vote.PetitionID &&
                //	(p.PersonID == vote.PersonID || p.CertificateID == vote.CertificateID ||
                //	 p.Certificate.SerialNumber == vote.Certificate.SerialNumber));

                //if (votes.Any())
                //{
                //	result = OperationResult.Fail(-5, "You already voted for this petition.");
                //	return result;
                //}

                db.PetitionVotes.Add(vote);
                db.SaveChanges();

                result = OperationResult.Success(1, "Agreement vote has been registered.");
            }

            return(result);
        }
        public OperationResult Vote(ClientPetitionVote petitionVote, string certificateSerialNumber)
        {
            var vote = new PetitionVote()
            {
                PetitionID = petitionVote.PetitionID,
                Certificate = new Certificate() { SerialNumber = certificateSerialNumber },
                SignedData = petitionVote.SignedData,
                SignedHash = petitionVote.Signature
            };

            OperationResult result;

            using (var db = new EDEntities())
            {
                var certificate = db.Certificates.SingleOrDefault(c => c.SerialNumber == vote.Certificate.SerialNumber);
                if (certificate == null)
                {
                    result = OperationResult.Fail(-4, "Certificate is not registered.");
                    return result;
                }

                vote.CertificateID = certificate.ID;
                vote.PersonID = certificate.PersonID;
                vote.CreatedDate = DateTime.Now;

                vote.Petition = null;
                vote.Certificate = null;
                vote.Person = null;

                ////var votes = (from p in db.PetitionVotes
                ////			 where p.PetitionID == vote.PetitionID
                ////				&& (p.PersonID == vote.PersonID || p.CertificateID == vote.CertificateID || p.Certificate.SerialNumber == vote.Certificate.SerialNumber)
                ////			 select p);
                //var votes = db.PetitionVotes.Where(p =>
                //	p.PetitionID == vote.PetitionID &&
                //	(p.PersonID == vote.PersonID || p.CertificateID == vote.CertificateID ||
                //	 p.Certificate.SerialNumber == vote.Certificate.SerialNumber));

                //if (votes.Any())
                //{
                //	result = OperationResult.Fail(-5, "You already voted for this petition.");
                //	return result;
                //}

                db.PetitionVotes.Add(vote);
                db.SaveChanges();

                result = OperationResult.Success(1, "Agreement vote has been registered.");
            }

            return result;
        }