work flow to update the status of the record in mscrm

using AuthorizeNet;
using AuthorizeNet.Api.Contracts.V1;
using Microsoft.Crm.Sdk.Messages;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;
using Microsoft.Xrm.Sdk.Workflow;
using net.authorize.ARB;
using System;
using System.Activities;
using System.IO;
using System.Security.Cryptography;
using System.Text;
using AuthorizeNet.Api.Controllers;
using AuthorizeNet.Api.Contracts.V1;
using AuthorizeNet.Api.Controllers.Bases;

namespace CreditCardTransaction
{
    public class SubscriptionStatus : CodeActivity
    {
        //[Output("Status")]
        //public OutArgument<int> Status { get; set; }
        protected override void Execute(CodeActivityContext executionContext)
        {
            ARBGetSubscriptionStatusResponse subscriptionResponse;
            CustomerGateway customerGateway;
            IWorkflowContext context = executionContext.GetExtension<IWorkflowContext>();
            IOrganizationServiceFactory organizationServiceFactory = executionContext.GetExtension<IOrganizationServiceFactory>();
            IOrganizationService organizationService = organizationServiceFactory.CreateOrganizationService(new Guid?(context.UserId)); //mtccc_creditcardtransaction
            Entity _recurringBilling = organizationService.Retrieve(context.PrimaryEntityName, context.PrimaryEntityId, new ColumnSet(
                  RecurringBillingAttributes.CreditCardDetails
                , RecurringBillingAttributes.SubcriptionId
                , RecurringBillingAttributes.Owner
                , RecurringBillingAttributes.StatusReason
                ));

            if (context.Depth <= 1)
            {
                if (_recurringBilling != null)
                {
                    string apiLogin = "";
                    string apiTransKey = "";
                    decimal num = new decimal(0, 0, 0, false, 2);
                    Guid _ownerId = (_recurringBilling.Attributes.Contains(RecurringBillingAttributes.Owner) ? _recurringBilling.GetAttributeValue<EntityReference>(RecurringBillingAttributes.Owner).Id : Guid.Empty);
                    Guid creditcardid = _recurringBilling.Attributes.Contains(RecurringBillingAttributes.CreditCardDetails) ? _recurringBilling.GetAttributeValue<EntityReference>(RecurringBillingAttributes.CreditCardDetails).Id : Guid.Empty;
                    string creditcardLogicalName = _recurringBilling.Attributes.Contains(RecurringBillingAttributes.CreditCardDetails) ? _recurringBilling.GetAttributeValue<EntityReference>(RecurringBillingAttributes.CreditCardDetails).LogicalName : string.Empty;
                    Entity _creditCard = organizationService.Retrieve(creditcardLogicalName, creditcardid,
                    new ColumnSet(
                 CreditCardAttributes.PAYMENTGATEWAY,
                 CreditCardAttributes.BILLTOFIRSTNAME,
                 CreditCardAttributes.LASTNAME,
                CreditCardAttributes.BILLTOEMAIL,
                CreditCardAttributes.CARDNUMBER,
                CreditCardAttributes.CARDCODE,
                CreditCardAttributes.CARDTYPE,
               CreditCardAttributes.ADDRESS1LINE1,
               CreditCardAttributes.ADDRESS1LINE2,
               CreditCardAttributes.ADDRESS1LINE3,
               CreditCardAttributes.BILLTOCITY,
               CreditCardAttributes.BILLTOSTATE,
               CreditCardAttributes.BILLTOZIP,
               CreditCardAttributes.BILLTOPHONE,
               CreditCardAttributes.ENCRYPTEDTOKEN));
                    if ((_creditCard == null ? false : _creditCard.Attributes.Contains(CreditCardAttributes.PAYMENTGATEWAY)))
                    {
                        Guid _authorizationId = _creditCard.GetAttributeValue<EntityReference>(CreditCardAttributes.PAYMENTGATEWAY).Id;
                        if (_authorizationId != Guid.Empty)
                        {
                            //Entity _authorization = organizationService.Retrieve(AuthorizationAttributes.AUTHORIZATION, _authorizationId, new ColumnSet(true));
                            Entity _authorization = organizationService.Retrieve(AuthorizationAttributes.AUTHORIZATION, _authorizationId, new ColumnSet(
                                   AuthorizationAttributes.EXCEPTIONUSER,
                                    AuthorizationAttributes.APITRANSACTIONKEY
                                    , AuthorizationAttributes.CONNECTIONTYPE
                                    , AuthorizationAttributes.PAYMENTGATEWAY
                                    , AuthorizationAttributes.USERNAME
                                    , AuthorizationAttributes.PASSWORD
                                    , AuthorizationAttributes.SIGNATURE
                                    , AuthorizationAttributes.APILOGIN
                                    ));
                            if ((_authorization == null ? false : _authorization.Contains(AuthorizationAttributes.PAYMENTGATEWAY)))
                            {
                                if (_ownerId != (_authorization.Attributes.Contains(AuthorizationAttributes.EXCEPTIONUSER) ? _authorization.GetAttributeValue<EntityReference>(AuthorizationAttributes.EXCEPTIONUSER).Id : Guid.Empty))
                                {
                                    if (((OptionSetValue)_authorization.Attributes[AuthorizationAttributes.PAYMENTGATEWAY]).Value == 621260000)
                                    {
                                        if ((!_authorization.Contains(AuthorizationAttributes.APILOGIN) ? false : _authorization.Contains(AuthorizationAttributes.APITRANSACTIONKEY)))
                                        {
                                            apiLogin = _authorization.Attributes[AuthorizationAttributes.APILOGIN].ToString();
                                            apiTransKey = _authorization.Attributes[AuthorizationAttributes.APITRANSACTIONKEY].ToString();
                                            customerGateway = ((_authorization.Contains(AuthorizationAttributes.CONNECTIONTYPE) ? !Convert.ToBoolean(_authorization.Attributes[AuthorizationAttributes.CONNECTIONTYPE]) : true) ? new CustomerGateway(apiLogin, apiTransKey) : new CustomerGateway(apiLogin, apiTransKey, ServiceMode.Live));
                                            string subscriptionId = _recurringBilling.Attributes.Contains(RecurringBillingAttributes.SubcriptionId) ? _recurringBilling.GetAttributeValue<string>(RecurringBillingAttributes.SubcriptionId).ToString() : string.Empty;
                                            subscriptionResponse = GetSubscriptionStatus.Run(apiLogin, apiTransKey, subscriptionId);
                                            int status = SubsciptionStatusValue(subscriptionResponse.status.ToString());
                                            //  Status.Set(executionContext, status);
                                            int rbstatus = _recurringBilling.GetAttributeValue<OptionSetValue>(RecurringBillingAttributes.StatusReason).Value;
                                            if (status != 505 && status != rbstatus)
                                            {
                                                SetStateRequest setStateRequest = new SetStateRequest
                                                {
                                                    EntityMoniker = new EntityReference(_recurringBilling.LogicalName, _recurringBilling.Id),
                                                    State = new OptionSetValue(0),
                                                    Status = new OptionSetValue(status),
                                                };
                                                organizationService.Execute(setStateRequest);
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }

        private int SubsciptionStatusValue(string updateStatus)
        {
            int statusCode;
            switch (updateStatus)
            {
                case "active":
                    {
                        statusCode = 1;
                        break;
                    }
                case "canceled":
                    {
                        statusCode = 621260000;//962240000;
                        //do this
                        break;
                    }
                case "expired":
                    {
                        statusCode = 621260001;//962240001;
                        //do this
                        break;
                    }
                case "suspended":
                    {
                        statusCode = 621260002;// 962240002;621,260,002
                        //do this
                        break;
                    }

                case "terminated":
                    {
                        statusCode = 621260003;//962240003;
                        //do this
                        break;
                    }
                default:
                    {
                        statusCode = 505;
                        break;
                    }
            }
            return statusCode;
        }
    }

    public class GetSubscriptionStatus
    {
        public static ARBGetSubscriptionStatusResponse Run(String ApiLoginID, String ApiTransactionKey, string subscriptionId)
        {
            //Console.WriteLine("Get Subscription Status Sample");
            ApiOperationBase<ANetApiRequest, ANetApiResponse>.RunEnvironment = AuthorizeNet.Environment.SANDBOX;
            ApiOperationBase<ANetApiRequest, ANetApiResponse>.MerchantAuthentication = new merchantAuthenticationType()
            {
                name = ApiLoginID,
                ItemElementName = ItemChoiceType.transactionKey,
                Item = ApiTransactionKey,
            };
            //please update the subscriptionId according to your sandbox credentials
            var request = new ARBGetSubscriptionStatusRequest { subscriptionId = subscriptionId };
            var controller = new ARBGetSubscriptionStatusController(request);
            // instantiate the contoller that will call the service         
            controller.Execute();

            ARBGetSubscriptionStatusResponse response = controller.GetApiResponse();                   // get the response from the service (errors contained if any)

            return response;
        }
    }
}

Comments

Popular posts from this blog

Basic Plugin Code in D365 using C#

CURD (Create, Update, Retrieve and Delete) Operation in D365 using Power Shell Script

Meta Data Using WebApiRequest