예제 #1
0
        private void Invoke(MethodInfo entityAction, LocalPluginContext localContext)
        {
            var listParamValues = new List<object>();

            foreach (var param in entityAction.GetParameters())
            {
                if (typeof(IPluginContext).IsAssignableFrom(param.ParameterType))
                {
                    listParamValues.Add(localContext);
                }
                else if (typeof(IService).IsAssignableFrom(param.ParameterType))
                {
                    var obj = localContext.GetService(param.ParameterType);
                    listParamValues.Add(obj);
                }
            }

            entityAction.Invoke(this, listParamValues.ToArray());
        }
        protected override void ExecuteCrmPlugin(LocalPluginContext localContext)
        {
            if (localContext == null)
            {
                throw new ArgumentNullException("localContext");
            }
            localContext.TracingService.Trace("---------Triggered EventTicketCreate.cs---------");
            IPluginExecutionContext    pluginExecutionContext = localContext.PluginExecutionContext;
            IOrganizationService       organizationService    = localContext.OrganizationService;
            OrganizationServiceContext orgSvcContext          = new OrganizationServiceContext(organizationService);
            Entity queriedEntityRecord = null;
            string messageName         = pluginExecutionContext.MessageName;
            Entity entity           = null;
            Guid   initiatingUserId = pluginExecutionContext.InitiatingUserId;
            Entity entity2          = organizationService.Retrieve("systemuser", initiatingUserId, new ColumnSet("msnfp_configurationid"));

            if (entity2 == null)
            {
                throw new Exception("No user id found. Please ensure the user is valid. Exiting plugin.");
            }
            entity = Utilities.GetConfigurationRecordByUser(pluginExecutionContext, organizationService, localContext.TracingService);
            if (!pluginExecutionContext.InputParameters.Contains("Target"))
            {
                return;
            }
            if (pluginExecutionContext.InputParameters["Target"] is Entity)
            {
                localContext.TracingService.Trace("---------Entering EventTicketCreate.cs Main Function---------");
                Entity entity3 = (Entity)pluginExecutionContext.InputParameters["Target"];
                if (messageName == "Update")
                {
                    queriedEntityRecord = organizationService.Retrieve("msnfp_eventticket", entity3.Id, GetColumnSet());
                }
                if (entity3 != null)
                {
                    if (messageName == "Create")
                    {
                        if (entity3.Contains("msnfp_tableticket") && (bool)entity3["msnfp_tableticket"])
                        {
                            CreateEventTableRecords(entity3, localContext, organizationService, pluginExecutionContext);
                        }
                        if (entity3.Contains("msnfp_quantity") && entity3["msnfp_quantity"] != null)
                        {
                            entity3["msnfp_sum_available"] = (int)entity3["msnfp_quantity"];
                            organizationService.Update(entity3);
                        }
                        AddOrUpdateThisRecordWithAzure(entity3, entity, localContext, organizationService, pluginExecutionContext);
                    }
                    else if (messageName == "Update")
                    {
                        if (entity3.Contains("msnfp_quantity") && entity3["msnfp_quantity"] != null)
                        {
                            UpdateEventTicketsAvailable(queriedEntityRecord, orgSvcContext, organizationService, localContext);
                        }
                        UpdateEventTotals(queriedEntityRecord, orgSvcContext, organizationService, localContext);
                        AddOrUpdateThisRecordWithAzure(queriedEntityRecord, entity, localContext, organizationService, pluginExecutionContext);
                    }
                }
                else
                {
                    localContext.TracingService.Trace("Target record not found. Exiting plugin.");
                }
            }
            if (messageName == "Delete")
            {
                queriedEntityRecord = organizationService.Retrieve("msnfp_eventticket", ((EntityReference)pluginExecutionContext.InputParameters["Target"]).Id, GetColumnSet());
                AddOrUpdateThisRecordWithAzure(queriedEntityRecord, entity, localContext, organizationService, pluginExecutionContext);
            }
            localContext.TracingService.Trace("---------Exiting EventTicketCreate.cs---------");
        }
        private void AddOrUpdateThisRecordWithAzure(Entity queriedEntityRecord, Entity configurationRecord, LocalPluginContext localContext, IOrganizationService service, IPluginExecutionContext context)
        {
            localContext.TracingService.Trace("---------Send the Record to Azure---------");
            string messageName = context.MessageName;
            string text        = "BankRun";
            string text2       = Utilities.GetAzureWebAPIURL(service, context);

            if (text2 != string.Empty)
            {
                localContext.TracingService.Trace("Getting Latest Info for Record: " + queriedEntityRecord["msnfp_bankrunid"].ToString());
                MSNFP_BankRun mSNFP_BankRun = new MSNFP_BankRun();
                mSNFP_BankRun.BankRunId  = (Guid)queriedEntityRecord["msnfp_bankrunid"];
                mSNFP_BankRun.Identifier = (queriedEntityRecord.Contains("msnfp_identifier") ? ((string)queriedEntityRecord["msnfp_identifier"]) : string.Empty);
                localContext.TracingService.Trace("Identifier: " + mSNFP_BankRun.Identifier);
                if (queriedEntityRecord.Contains("msnfp_startdate") && queriedEntityRecord["msnfp_startdate"] != null)
                {
                    mSNFP_BankRun.StartDate = (DateTime)queriedEntityRecord["msnfp_startdate"];
                    localContext.TracingService.Trace("Got msnfp_startdate.");
                }
                else
                {
                    mSNFP_BankRun.StartDate = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_startdate.");
                }
                if (queriedEntityRecord.Contains("msnfp_enddate") && queriedEntityRecord["msnfp_enddate"] != null)
                {
                    mSNFP_BankRun.EndDate = (DateTime)queriedEntityRecord["msnfp_enddate"];
                    localContext.TracingService.Trace("Got msnfp_enddate.");
                }
                else
                {
                    mSNFP_BankRun.EndDate = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_enddate.");
                }
                if (queriedEntityRecord.Contains("msnfp_datetobeprocessed") && queriedEntityRecord["msnfp_datetobeprocessed"] != null)
                {
                    mSNFP_BankRun.DateToBeProcessed = (DateTime)queriedEntityRecord["msnfp_datetobeprocessed"];
                    localContext.TracingService.Trace("Got msnfp_datetobeprocessed.");
                }
                else
                {
                    mSNFP_BankRun.DateToBeProcessed = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_datetobeprocessed.");
                }
                if (queriedEntityRecord.Contains("msnfp_bankrunstatus") && queriedEntityRecord["msnfp_bankrunstatus"] != null)
                {
                    mSNFP_BankRun.BankRunStatus = ((OptionSetValue)queriedEntityRecord["msnfp_bankrunstatus"]).Value;
                    localContext.TracingService.Trace("Got msnfp_bankrunstatus.");
                }
                else
                {
                    mSNFP_BankRun.BankRunStatus = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_bankrunstatus.");
                }
                if (queriedEntityRecord.Contains("msnfp_accounttocreditid") && queriedEntityRecord["msnfp_accounttocreditid"] != null)
                {
                    mSNFP_BankRun.AccountToCreditId = ((EntityReference)queriedEntityRecord["msnfp_accounttocreditid"]).Id;
                    localContext.TracingService.Trace("Got msnfp_accounttocreditid");
                }
                else
                {
                    mSNFP_BankRun.AccountToCreditId = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_accounttocreditid");
                }
                if (queriedEntityRecord.Contains("msnfp_paymentprocessorid") && queriedEntityRecord["msnfp_paymentprocessorid"] != null)
                {
                    mSNFP_BankRun.PaymentProcessorId = ((EntityReference)queriedEntityRecord["msnfp_paymentprocessorid"]).Id;
                    localContext.TracingService.Trace("Got msnfp_paymentprocessorid");
                }
                else
                {
                    mSNFP_BankRun.PaymentProcessorId = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_paymentprocessorid");
                }
                if (queriedEntityRecord.Contains("msnfp_filecreationnumber") && queriedEntityRecord["msnfp_filecreationnumber"] != null)
                {
                    mSNFP_BankRun.FileCreationNumber = (int)queriedEntityRecord["msnfp_filecreationnumber"];
                    localContext.TracingService.Trace("Got msnfp_filecreationnumber");
                }
                else
                {
                    mSNFP_BankRun.FileCreationNumber = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_filecreationnumber");
                }
                if (messageName == "Create")
                {
                    mSNFP_BankRun.CreatedOn = DateTime.UtcNow;
                }
                else if (queriedEntityRecord.Contains("createdon") && queriedEntityRecord["createdon"] != null)
                {
                    mSNFP_BankRun.CreatedOn = (DateTime)queriedEntityRecord["createdon"];
                }
                else
                {
                    mSNFP_BankRun.CreatedOn = null;
                }
                if (messageName == "Delete")
                {
                    mSNFP_BankRun.Deleted     = true;
                    mSNFP_BankRun.DeletedDate = DateTime.UtcNow;
                }
                else
                {
                    mSNFP_BankRun.Deleted     = false;
                    mSNFP_BankRun.DeletedDate = null;
                }
                mSNFP_BankRun.StatusCode = ((OptionSetValue)queriedEntityRecord["statuscode"]).Value;
                mSNFP_BankRun.StateCode  = ((OptionSetValue)queriedEntityRecord["statecode"]).Value;
                localContext.TracingService.Trace("JSON object created");
                if (messageName == "Create")
                {
                    text2 = text2 + text + "/Create" + text;
                }
                else if (messageName == "Update" || messageName == "Delete")
                {
                    text2 = text2 + text + "/Update" + text;
                }
                MemoryStream memoryStream = new MemoryStream();
                DataContractJsonSerializer dataContractJsonSerializer = new DataContractJsonSerializer(typeof(MSNFP_BankRun));
                dataContractJsonSerializer.WriteObject(memoryStream, mSNFP_BankRun);
                byte[] array = memoryStream.ToArray();
                memoryStream.Close();
                string       @string      = Encoding.UTF8.GetString(array, 0, array.Length);
                WebAPIClient webAPIClient = new WebAPIClient();
                webAPIClient.Headers[HttpRequestHeader.ContentType] = "application/json";
                webAPIClient.Headers["Padlock"] = (string)configurationRecord["msnfp_apipadlocktoken"];
                webAPIClient.Encoding           = Encoding.UTF8;
                localContext.TracingService.Trace("---------Preparing JSON---------");
                localContext.TracingService.Trace("Converted to json API URL : " + text2);
                localContext.TracingService.Trace("JSON: " + @string);
                localContext.TracingService.Trace("---------End of Preparing JSON---------");
                localContext.TracingService.Trace("Sending data to Azure.");
                string text3 = webAPIClient.UploadString(text2, @string);
                localContext.TracingService.Trace("Got response.");
                localContext.TracingService.Trace("Response: " + text3);
                Utilities utilities = new Utilities();
                utilities.CheckAPIReturnJSONForErrors(text3, configurationRecord.GetAttributeValue <OptionSetValue>("msnfp_showapierrorresponses"), localContext.TracingService);
            }
            else
            {
                localContext.TracingService.Trace("No API URL or Enable Portal Pages. Exiting workflow.");
            }
        }
예제 #4
0
        protected override void ExecuteCrmPlugin(LocalPluginContext localContext)
        {
            if (localContext == null)
            {
                throw new ArgumentNullException("localContext");
            }
            localContext.TracingService.Trace("---------Triggered EventPreferenceCreate.cs---------");
            IPluginExecutionContext pluginExecutionContext = localContext.PluginExecutionContext;
            IOrganizationService    organizationService    = localContext.OrganizationService;

            if (pluginExecutionContext.Depth > 2)
            {
                localContext.TracingService.Trace("Context.depth > 2. Exiting Plugin.");
                return;
            }
            Entity queriedEntityRecord = null;
            string messageName         = pluginExecutionContext.MessageName;
            Entity entity           = null;
            Guid   initiatingUserId = pluginExecutionContext.InitiatingUserId;
            Entity entity2          = organizationService.Retrieve("systemuser", initiatingUserId, new ColumnSet("msnfp_configurationid"));

            if (entity2 == null)
            {
                throw new Exception("No user id found. Please ensure the user is valid. Exiting plugin.");
            }
            entity = Utilities.GetConfigurationRecordByUser(pluginExecutionContext, organizationService, localContext.TracingService);
            if (!pluginExecutionContext.InputParameters.Contains("Target"))
            {
                return;
            }
            if (pluginExecutionContext.InputParameters["Target"] is Entity)
            {
                localContext.TracingService.Trace("---------Entering EventPreferenceCreate.cs Main Function---------");
                localContext.TracingService.Trace("Message Name: " + messageName);
                Entity entity3 = (Entity)pluginExecutionContext.InputParameters["Target"];
                if (messageName == "Update")
                {
                    queriedEntityRecord = organizationService.Retrieve("msnfp_eventpreference", entity3.Id, GetColumnSet());
                }
                if (entity3 != null)
                {
                    if (messageName == "Create")
                    {
                        AddOrUpdateThisRecordWithAzure(entity3, entity, localContext, organizationService, pluginExecutionContext);
                    }
                    else if (messageName == "Update")
                    {
                        AddOrUpdateThisRecordWithAzure(queriedEntityRecord, entity, localContext, organizationService, pluginExecutionContext);
                    }
                }
                else
                {
                    localContext.TracingService.Trace("Target record not found. Exiting workflow.");
                }
            }
            if (messageName == "Delete")
            {
                queriedEntityRecord = organizationService.Retrieve("msnfp_eventpreference", ((EntityReference)pluginExecutionContext.InputParameters["Target"]).Id, GetColumnSet());
                AddOrUpdateThisRecordWithAzure(queriedEntityRecord, entity, localContext, organizationService, pluginExecutionContext);
            }
            localContext.TracingService.Trace("---------Exiting EventPreferenceCreate.cs---------");
        }
        private void UpdateEventTotals(Entity queriedEntityRecord, OrganizationServiceContext orgSvcContext, IOrganizationService service, LocalPluginContext localContext)
        {
            localContext.TracingService.Trace("---------UpdateEventTotals---------");
            int           num    = 0;
            decimal       value  = default(decimal);
            Entity        entity = service.Retrieve("msnfp_event", ((EntityReference)queriedEntityRecord["msnfp_eventid"]).Id, new ColumnSet("msnfp_eventid", "msnfp_sum_tickets", "msnfp_count_tickets"));
            List <Entity> list   = (from a in orgSvcContext.CreateQuery("msnfp_eventticket")
                                    where ((EntityReference)a["msnfp_eventid"]).Id == ((EntityReference)queriedEntityRecord["msnfp_eventid"]).Id && ((OptionSetValue)a["statecode"]).Value == 0 && ((OptionSetValue)a["statuscode"]).Value != 844060000
                                    select a).ToList();

            if (list.Count > 0)
            {
                foreach (Entity item in list)
                {
                    if (item.Contains("msnfp_sum_sold"))
                    {
                        num += (int)item["msnfp_sum_sold"];
                    }
                    if (item.Contains("msnfp_val_sold"))
                    {
                        value += ((Money)item["msnfp_val_sold"]).Value;
                    }
                }
            }
            entity["msnfp_count_tickets"] = num;
            entity["msnfp_sum_tickets"]   = new Money(value);
            decimal value2 = Utilities.CalculateEventTotalRevenue(entity, service, orgSvcContext, localContext.TracingService);

            entity["msnfp_sum_total"] = new Money(value2);
            service.Update(entity);
            localContext.TracingService.Trace("Event Record Updated");
        }
        protected override void ExecuteCrmPlugin(LocalPluginContext localContext)
        {
            if (localContext == null)
            {
                throw new ArgumentNullException("localContext");
            }
            localContext.TracingService.Trace("---------Triggered PaymentMethodUpdate.cs---------");
            IPluginExecutionContext    pluginExecutionContext     = localContext.PluginExecutionContext;
            IOrganizationService       organizationService        = localContext.OrganizationService;
            OrganizationServiceContext organizationServiceContext = new OrganizationServiceContext(organizationService);
            string empty  = string.Empty;
            Guid   empty2 = Guid.Empty;

            if (!pluginExecutionContext.InputParameters.Contains("Target") || !(pluginExecutionContext.InputParameters["Target"] is Entity))
            {
                return;
            }
            localContext.TracingService.Trace("---------Entering PaymentMethodUpdate.cs Main Function---------");
            Entity entity           = (Entity)pluginExecutionContext.InputParameters["Target"];
            Guid   initiatingUserId = pluginExecutionContext.InitiatingUserId;
            Entity entity2          = organizationService.Retrieve("systemuser", initiatingUserId, new ColumnSet("msnfp_configurationid"));
            Entity entity3          = organizationService.Retrieve("msnfp_paymentmethod", entity.Id, GetColumnSet());

            if (entity3 == null)
            {
                throw new ArgumentNullException("msnfp_paymentmethodid");
            }
            if (entity2 == null)
            {
                throw new Exception("No user id found. Please ensure the user is valid. Exiting plugin.");
            }
            if (entity3.Contains("msnfp_isreusable") && entity3.Contains("msnfp_type") && entity3.Contains("msnfp_billing_line1") && entity3.Contains("msnfp_paymentprocessorid") && entity3.Contains("msnfp_customerid") && entity3.Contains("msnfp_authtoken") && entity3.Contains("msnfp_cclast4"))
            {
                if (!(bool)entity3["msnfp_isreusable"] || ((OptionSetValue)entity3["msnfp_type"]).Value != 844060000 || (string)entity3["msnfp_billing_line1"] == null)
                {
                    localContext.TracingService.Trace("Payment Method is not reusable, has no street 1 or is not a credit card. Exiting plugin.");
                    return;
                }
                Entity paymentProcessorForPaymentMethod = getPaymentProcessorForPaymentMethod(entity3, localContext, organizationService);
                if (paymentProcessorForPaymentMethod != null)
                {
                    localContext.TracingService.Trace("Payment Processor retrieved.");
                    if (paymentProcessorForPaymentMethod.Contains("msnfp_paymentgatewaytype"))
                    {
                        if (((OptionSetValue)paymentProcessorForPaymentMethod["msnfp_paymentgatewaytype"]).Value == 844060000)
                        {
                        }
                        if (((OptionSetValue)paymentProcessorForPaymentMethod["msnfp_paymentgatewaytype"]).Value == 844060001)
                        {
                        }
                        if (((OptionSetValue)paymentProcessorForPaymentMethod["msnfp_paymentgatewaytype"]).Value != 844060002)
                        {
                        }
                    }
                }
                localContext.TracingService.Trace("---------Exiting PaymentMethodUpdate.cs---------");
            }
            else
            {
                localContext.TracingService.Trace("Payment Method is not reusable, has no street 1, is not a credit card or has no payment processor. Exiting plugin.");
            }
        }
        private void SetReceiptIdentifier(Guid receiptID, LocalPluginContext localContext, IOrganizationService service, string messageName)
        {
            localContext.TracingService.Trace("Entering SetReceiptIdentifier().");
            Entity    entity    = null;
            Guid?     guid      = null;
            string    text      = string.Empty;
            string    empty     = string.Empty;
            double    num       = 0.0;
            int       num2      = 0;
            ColumnSet columnSet = new ColumnSet("msnfp_receiptid", "msnfp_identifier", "msnfp_receiptstackid", "msnfp_receiptstatus");
            Entity    entity2   = service.Retrieve("msnfp_receipt", receiptID, columnSet);

            localContext.TracingService.Trace("Found receipt with id: " + receiptID.ToString());
            if (entity2.Contains("msnfp_identifier") && messageName != "Create")
            {
                localContext.TracingService.Trace("Found receipt identifier: " + (string)entity2["msnfp_identifier"]);
                if (entity2["msnfp_identifier"] != null || ((string)entity2["msnfp_identifier"]).Length > 0)
                {
                    localContext.TracingService.Trace("Receipt already has identfier. Exiting SetReceiptIdentifier().");
                    return;
                }
            }
            if (entity2.Contains("msnfp_receiptstackid"))
            {
                guid = entity2.GetAttributeValue <EntityReference>("msnfp_receiptstackid").Id;
                localContext.TracingService.Trace("Found receipt stack.");
            }
            else
            {
                localContext.TracingService.Trace("No receipt stack found.");
            }
            if (guid.HasValue)
            {
                ITracingService tracingService = localContext.TracingService;
                Guid?           guid2          = guid;
                tracingService.Trace("Locking Receipt Stack record Id:" + guid2.ToString());
                Entity entity3 = new Entity("msnfp_receiptstack", guid.Value);
                entity3["msnfp_locked"] = true;
                service.Update(entity3);
                localContext.TracingService.Trace("Receipt Stack record locked");
                entity = service.Retrieve("msnfp_receiptstack", ((EntityReference)entity2["msnfp_receiptstackid"]).Id, new ColumnSet("msnfp_receiptstackid", "msnfp_prefix", "msnfp_currentrange", "msnfp_numberrange"));
                localContext.TracingService.Trace("Obtaining prefix, current range and number range.");
                empty = (entity.Contains("msnfp_prefix") ? ((string)entity["msnfp_prefix"]) : string.Empty);
                num   = (entity.Contains("msnfp_currentrange") ? ((double)entity["msnfp_currentrange"]) : 0.0);
                num2  = (entity.Contains("msnfp_numberrange") ? ((OptionSetValue)entity["msnfp_numberrange"]).Value : 0);
                switch (num2)
                {
                case 844060000:
                    localContext.TracingService.Trace("Number range : 6 digit");
                    text = empty + (num + 1.0).ToString().PadLeft(6, '0');
                    break;

                case 844060001:
                    localContext.TracingService.Trace("Number range : 8 digit");
                    text = empty + (num + 1.0).ToString().PadLeft(8, '0');
                    break;

                case 844060002:
                    localContext.TracingService.Trace("Number range : 10 digit");
                    text = empty + (num + 1.0).ToString().PadLeft(10, '0');
                    break;

                default:
                    localContext.TracingService.Trace("Receipt number range unknown. msnfp_numberrange: " + num2);
                    break;
                }
                localContext.TracingService.Trace("Receipt Number: " + text);
                Entity entity4 = new Entity(entity2.LogicalName, entity2.Id);
                entity4["msnfp_receiptnumber"] = text;
                entity4["msnfp_identifier"]    = text;
                if (messageName == "Create" && !entity2.Contains("msnfp_receiptstatus"))
                {
                    entity4["msnfp_receiptstatus"] = "Issued";
                }
                localContext.TracingService.Trace("Updating Receipt.");
                service.Update(entity4);
                localContext.TracingService.Trace("Receipt Updated");
                localContext.TracingService.Trace("Now update the receipt stacks current number by 1.");
                Entity entity5 = new Entity("msnfp_receiptstack", guid.Value);
                entity5["msnfp_currentrange"] = num + 1.0;
                entity5["msnfp_locked"]       = false;
                service.Update(entity5);
                localContext.TracingService.Trace("Updated Receipt Stack current range to: " + (num + 1.0));
            }
            else
            {
                localContext.TracingService.Trace("No receipt stack found.");
            }
            localContext.TracingService.Trace("Exiting SetReceiptIdentifier().");
        }
예제 #8
0
        protected override void ExecuteCrmPlugin(LocalPluginContext localContext)
        {
            if (localContext == null)
            {
                throw new ArgumentNullException("localContext");
            }
            localContext.TracingService.Trace("---------Triggered PaymentScheduleCreate.cs---------");
            IPluginExecutionContext pluginExecutionContext = localContext.PluginExecutionContext;
            IOrganizationService    organizationService    = localContext.OrganizationService;
            Entity queriedEntityRecord = null;
            string messageName         = pluginExecutionContext.MessageName;
            Entity configurationRecordByMessageName = Utilities.GetConfigurationRecordByMessageName(pluginExecutionContext, organizationService, localContext.TracingService);
            Guid   initiatingUserId = pluginExecutionContext.InitiatingUserId;
            Entity entity           = organizationService.Retrieve("systemuser", initiatingUserId, new ColumnSet("msnfp_configurationid"));

            if (entity == null)
            {
                throw new Exception("No user id found. Please ensure the user is valid. Exiting plugin.");
            }
            if (!pluginExecutionContext.InputParameters.Contains("Target"))
            {
                return;
            }
            if (pluginExecutionContext.InputParameters["Target"] is Entity)
            {
                localContext.TracingService.Trace("---------Entering PaymentScheduleCreate.cs Main Function---------");
                Entity entity2 = (Entity)pluginExecutionContext.InputParameters["Target"];
                if (messageName == "Update")
                {
                    queriedEntityRecord = organizationService.Retrieve("msnfp_paymentschedule", entity2.Id, GetPaymentScheduleColumns());
                }
                if (entity2 != null)
                {
                    try
                    {
                        if (messageName == "Create")
                        {
                            if (!entity2.Contains("msnfp_customerid"))
                            {
                                localContext.TracingService.Trace("Validating donor - start.");
                                queriedEntityRecord = organizationService.Retrieve("msnfp_paymentschedule", entity2.Id, GetPaymentScheduleColumns());
                                AddOrUpdateThisRecordWithAzure(queriedEntityRecord, configurationRecordByMessageName, localContext, organizationService, pluginExecutionContext);
                            }
                            else
                            {
                                AddOrUpdateThisRecordWithAzure(entity2, configurationRecordByMessageName, localContext, organizationService, pluginExecutionContext);
                            }
                        }
                        else if (messageName == "Update")
                        {
                            AddOrUpdateThisRecordWithAzure(queriedEntityRecord, configurationRecordByMessageName, localContext, organizationService, pluginExecutionContext);
                        }
                    }
                    catch (Exception ex)
                    {
                        localContext.TracingService.Trace("An error has occured: " + ex.ToString());
                    }
                }
                else
                {
                    localContext.TracingService.Trace("Target record not found. Exiting workflow.");
                }
            }
            if (messageName == "Delete")
            {
                queriedEntityRecord = organizationService.Retrieve("msnfp_paymentschedule", ((EntityReference)pluginExecutionContext.InputParameters["Target"]).Id, GetPaymentScheduleColumns());
                AddOrUpdateThisRecordWithAzure(queriedEntityRecord, configurationRecordByMessageName, localContext, organizationService, pluginExecutionContext);
            }
            localContext.TracingService.Trace("---------Exiting PaymentScheduleCreate.cs---------");
        }
예제 #9
0
        private void AddOrUpdateThisRecordWithAzure(Entity queriedEntityRecord, Entity configurationRecord, LocalPluginContext localContext, IOrganizationService service, IPluginExecutionContext context)
        {
            localContext.TracingService.Trace("---------Send the Record to Azure---------");
            string messageName = context.MessageName;
            string text        = "PaymentSchedule";
            string text2       = Utilities.GetAzureWebAPIURL(service, context);

            localContext.TracingService.Trace("Got API URL: " + text2);
            if (text2 != string.Empty)
            {
                localContext.TracingService.Trace("Getting Latest Info for Record: " + queriedEntityRecord["msnfp_paymentscheduleid"].ToString());
                MSNFP_PaymentSchedule mSNFP_PaymentSchedule = new MSNFP_PaymentSchedule();
                mSNFP_PaymentSchedule.PaymentScheduleId = (Guid)queriedEntityRecord["msnfp_paymentscheduleid"];
                mSNFP_PaymentSchedule.Name = (queriedEntityRecord.Contains("msnfp_name") ? ((string)queriedEntityRecord["msnfp_name"]) : string.Empty);
                localContext.TracingService.Trace("Title: " + mSNFP_PaymentSchedule.Name);
                if (queriedEntityRecord.Contains("msnfp_amount_receipted") && queriedEntityRecord["msnfp_amount_receipted"] != null)
                {
                    mSNFP_PaymentSchedule.AmountReceipted = ((Money)queriedEntityRecord["msnfp_amount_receipted"]).Value;
                    localContext.TracingService.Trace("Got msnfp_amount_receipted.");
                }
                else
                {
                    mSNFP_PaymentSchedule.AmountReceipted = default(decimal);
                    localContext.TracingService.Trace("Did NOT find msnfp_amount_receipted.");
                }
                if (queriedEntityRecord.Contains("msnfp_amount_membership") && queriedEntityRecord["msnfp_amount_membership"] != null)
                {
                    mSNFP_PaymentSchedule.AmountMembership = ((Money)queriedEntityRecord["msnfp_amount_membership"]).Value;
                    localContext.TracingService.Trace("Got msnfp_amount_membership.");
                }
                else
                {
                    mSNFP_PaymentSchedule.AmountMembership = default(decimal);
                    localContext.TracingService.Trace("Did NOT find msnfp_amount_membership.");
                }
                if (queriedEntityRecord.Contains("msnfp_amount_nonreceiptable") && queriedEntityRecord["msnfp_amount_nonreceiptable"] != null)
                {
                    mSNFP_PaymentSchedule.AmountNonReceiptable = ((Money)queriedEntityRecord["msnfp_amount_nonreceiptable"]).Value;
                    localContext.TracingService.Trace("Got msnfp_amount_nonreceiptable.");
                }
                else
                {
                    mSNFP_PaymentSchedule.AmountNonReceiptable = default(decimal);
                    localContext.TracingService.Trace("Did NOT find msnfp_amount_nonreceiptable.");
                }
                if (queriedEntityRecord.Contains("msnfp_amount_tax") && queriedEntityRecord["msnfp_amount_tax"] != null)
                {
                    mSNFP_PaymentSchedule.AmountTax = ((Money)queriedEntityRecord["msnfp_amount_tax"]).Value;
                    localContext.TracingService.Trace("Got msnfp_amount_tax.");
                }
                else
                {
                    mSNFP_PaymentSchedule.AmountTax = default(decimal);
                    localContext.TracingService.Trace("Did NOT find msnfp_amount_tax.");
                }
                if (queriedEntityRecord.Contains("msnfp_recurringamount") && queriedEntityRecord["msnfp_recurringamount"] != null)
                {
                    mSNFP_PaymentSchedule.RecurringAmount = ((Money)queriedEntityRecord["msnfp_recurringamount"]).Value;
                    localContext.TracingService.Trace("Got msnfp_recurringamount.");
                }
                else
                {
                    mSNFP_PaymentSchedule.RecurringAmount = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_recurringamount.");
                }
                if (queriedEntityRecord.Contains("msnfp_firstpaymentdate") && queriedEntityRecord["msnfp_firstpaymentdate"] != null)
                {
                    mSNFP_PaymentSchedule.FirstPaymentDate = (DateTime)queriedEntityRecord["msnfp_firstpaymentdate"];
                    localContext.TracingService.Trace("Got msnfp_firstpaymentdate.");
                }
                else
                {
                    mSNFP_PaymentSchedule.FirstPaymentDate = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_firstpaymentdate.");
                }
                if (queriedEntityRecord.Contains("msnfp_frequencyinterval") && queriedEntityRecord["msnfp_frequencyinterval"] != null)
                {
                    mSNFP_PaymentSchedule.FrequencyInterval = (int)queriedEntityRecord["msnfp_frequencyinterval"];
                    localContext.TracingService.Trace("Got msnfp_frequencyinterval.");
                }
                else
                {
                    mSNFP_PaymentSchedule.FrequencyInterval = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_frequencyinterval.");
                }
                if (queriedEntityRecord.Contains("msnfp_frequency") && queriedEntityRecord["msnfp_frequency"] != null)
                {
                    mSNFP_PaymentSchedule.Frequency = ((OptionSetValue)queriedEntityRecord["msnfp_frequency"]).Value;
                    localContext.TracingService.Trace("Got msnfp_frequency.");
                }
                else
                {
                    mSNFP_PaymentSchedule.Frequency = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_frequency.");
                }
                if (queriedEntityRecord.Contains("msnfp_nextpaymentdate") && queriedEntityRecord["msnfp_nextpaymentdate"] != null)
                {
                    mSNFP_PaymentSchedule.NextPaymentDate = (DateTime)queriedEntityRecord["msnfp_nextpaymentdate"];
                    localContext.TracingService.Trace("Got msnfp_nextpaymentdate.");
                }
                else
                {
                    mSNFP_PaymentSchedule.NextPaymentDate = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_nextpaymentdate.");
                }
                if (queriedEntityRecord.Contains("msnfp_frequencystartcode") && queriedEntityRecord["msnfp_frequencystartcode"] != null)
                {
                    mSNFP_PaymentSchedule.FrequencyStartCode = ((OptionSetValue)queriedEntityRecord["msnfp_frequencystartcode"]).Value;
                    localContext.TracingService.Trace("Got msnfp_frequencystartcode.");
                }
                else
                {
                    mSNFP_PaymentSchedule.FrequencyStartCode = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_frequencystartcode.");
                }
                if (queriedEntityRecord.Contains("msnfp_cancelationcode") && queriedEntityRecord["msnfp_cancelationcode"] != null)
                {
                    mSNFP_PaymentSchedule.CancelationCode = ((OptionSetValue)queriedEntityRecord["msnfp_cancelationcode"]).Value;
                    localContext.TracingService.Trace("Got msnfp_cancelationcode.");
                }
                else
                {
                    mSNFP_PaymentSchedule.CancelationCode = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_cancelationcode.");
                }
                if (queriedEntityRecord.Contains("msnfp_cancellationnote") && queriedEntityRecord["msnfp_cancellationnote"] != null)
                {
                    mSNFP_PaymentSchedule.CancellationNote = (string)queriedEntityRecord["msnfp_cancellationnote"];
                    localContext.TracingService.Trace("Got msnfp_cancellationnote.");
                }
                else
                {
                    mSNFP_PaymentSchedule.CancellationNote = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_cancellationnote.");
                }
                if (queriedEntityRecord.Contains("msnfp_cancelledon") && queriedEntityRecord["msnfp_cancelledon"] != null)
                {
                    mSNFP_PaymentSchedule.CancelledOn = (DateTime)queriedEntityRecord["msnfp_cancelledon"];
                    localContext.TracingService.Trace("Got msnfp_cancelledon.");
                }
                else
                {
                    mSNFP_PaymentSchedule.CancelledOn = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_cancelledon.");
                }
                if (queriedEntityRecord.Contains("msnfp_endondate") && queriedEntityRecord["msnfp_endondate"] != null)
                {
                    mSNFP_PaymentSchedule.EndonDate = (DateTime)queriedEntityRecord["msnfp_endondate"];
                    localContext.TracingService.Trace("Got msnfp_endondate.");
                }
                else
                {
                    mSNFP_PaymentSchedule.EndonDate = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_endondate.");
                }
                if (queriedEntityRecord.Contains("msnfp_lastpaymentdate") && queriedEntityRecord["msnfp_lastpaymentdate"] != null)
                {
                    mSNFP_PaymentSchedule.LastPaymentDate = (DateTime)queriedEntityRecord["msnfp_lastpaymentdate"];
                    localContext.TracingService.Trace("Got msnfp_lastpaymentdate.");
                }
                else
                {
                    mSNFP_PaymentSchedule.LastPaymentDate = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_lastpaymentdate.");
                }
                if (queriedEntityRecord.Contains("msnfp_scheduletypecode") && queriedEntityRecord["msnfp_scheduletypecode"] != null)
                {
                    mSNFP_PaymentSchedule.ScheduleTypeCode = ((OptionSetValue)queriedEntityRecord["msnfp_scheduletypecode"]).Value;
                    localContext.TracingService.Trace("Got msnfp_scheduletypecode.");
                }
                else
                {
                    mSNFP_PaymentSchedule.ScheduleTypeCode = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_scheduletypecode.");
                }
                if (queriedEntityRecord.Contains("msnfp_anonymity") && queriedEntityRecord["msnfp_anonymity"] != null)
                {
                    mSNFP_PaymentSchedule.Anonymity = ((OptionSetValue)queriedEntityRecord["msnfp_anonymity"]).Value;
                    localContext.TracingService.Trace("Got msnfp_anonymity.");
                }
                else
                {
                    mSNFP_PaymentSchedule.Anonymity = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_anonymity.");
                }
                if (queriedEntityRecord.Contains("msnfp_paymentmethodid") && queriedEntityRecord["msnfp_paymentmethodid"] != null)
                {
                    mSNFP_PaymentSchedule.PaymentMethodId = ((EntityReference)queriedEntityRecord["msnfp_paymentmethodid"]).Id;
                    localContext.TracingService.Trace("Got msnfp_paymentmethodid.");
                }
                else
                {
                    mSNFP_PaymentSchedule.PaymentMethodId = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_paymentmethodid.");
                }
                if (queriedEntityRecord.Contains("msnfp_designationid") && queriedEntityRecord["msnfp_designationid"] != null)
                {
                    mSNFP_PaymentSchedule.DesignationId = ((EntityReference)queriedEntityRecord["msnfp_designationid"]).Id;
                    localContext.TracingService.Trace("Got msnfp_designationid.");
                }
                else
                {
                    mSNFP_PaymentSchedule.DesignationId = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_designationid.");
                }
                if (queriedEntityRecord.Contains("msnfp_appealid") && queriedEntityRecord["msnfp_appealid"] != null)
                {
                    mSNFP_PaymentSchedule.AppealId = ((EntityReference)queriedEntityRecord["msnfp_appealid"]).Id;
                    localContext.TracingService.Trace("Got msnfp_appealid.");
                }
                else
                {
                    mSNFP_PaymentSchedule.AppealId = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_appealid.");
                }
                if (queriedEntityRecord.Contains("msnfp_appraiser") && queriedEntityRecord["msnfp_appraiser"] != null)
                {
                    mSNFP_PaymentSchedule.Appraiser = (string)queriedEntityRecord["msnfp_appraiser"];
                    localContext.TracingService.Trace("Got msnfp_appraiser.");
                }
                else
                {
                    mSNFP_PaymentSchedule.Appraiser = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_appraiser.");
                }
                if (queriedEntityRecord.Contains("msnfp_billing_city") && queriedEntityRecord["msnfp_billing_city"] != null)
                {
                    mSNFP_PaymentSchedule.BillingCity = (string)queriedEntityRecord["msnfp_billing_city"];
                    localContext.TracingService.Trace("Got msnfp_billing_city.");
                }
                else
                {
                    mSNFP_PaymentSchedule.BillingCity = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_billing_city.");
                }
                if (queriedEntityRecord.Contains("msnfp_billing_country") && queriedEntityRecord["msnfp_billing_country"] != null)
                {
                    mSNFP_PaymentSchedule.BillingCountry = (string)queriedEntityRecord["msnfp_billing_country"];
                    localContext.TracingService.Trace("Got msnfp_billing_country.");
                }
                else
                {
                    mSNFP_PaymentSchedule.BillingCountry = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_billing_country.");
                }
                if (queriedEntityRecord.Contains("msnfp_billing_line1") && queriedEntityRecord["msnfp_billing_line1"] != null)
                {
                    mSNFP_PaymentSchedule.BillingLine1 = (string)queriedEntityRecord["msnfp_billing_line1"];
                    localContext.TracingService.Trace("Got msnfp_billing_line1.");
                }
                else
                {
                    mSNFP_PaymentSchedule.BillingLine1 = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_billing_line1.");
                }
                if (queriedEntityRecord.Contains("msnfp_billing_line2") && queriedEntityRecord["msnfp_billing_line2"] != null)
                {
                    mSNFP_PaymentSchedule.BillingLine2 = (string)queriedEntityRecord["msnfp_billing_line2"];
                    localContext.TracingService.Trace("Got msnfp_billing_line2.");
                }
                else
                {
                    mSNFP_PaymentSchedule.BillingLine2 = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_billing_line2.");
                }
                if (queriedEntityRecord.Contains("msnfp_billing_line3") && queriedEntityRecord["msnfp_billing_line3"] != null)
                {
                    mSNFP_PaymentSchedule.BillingLine3 = (string)queriedEntityRecord["msnfp_billing_line3"];
                    localContext.TracingService.Trace("Got msnfp_billing_line3.");
                }
                else
                {
                    mSNFP_PaymentSchedule.BillingLine3 = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_billing_line3.");
                }
                if (queriedEntityRecord.Contains("msnfp_billing_postalcode") && queriedEntityRecord["msnfp_billing_postalcode"] != null)
                {
                    mSNFP_PaymentSchedule.BillingPostalCode = (string)queriedEntityRecord["msnfp_billing_postalcode"];
                    localContext.TracingService.Trace("Got msnfp_billing_postalcode.");
                }
                else
                {
                    mSNFP_PaymentSchedule.BillingPostalCode = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_billing_postalcode.");
                }
                if (queriedEntityRecord.Contains("msnfp_billing_stateorprovince") && queriedEntityRecord["msnfp_billing_stateorprovince"] != null)
                {
                    mSNFP_PaymentSchedule.BillingStateorProvince = (string)queriedEntityRecord["msnfp_billing_stateorprovince"];
                    localContext.TracingService.Trace("Got msnfp_billing_stateorprovince.");
                }
                else
                {
                    mSNFP_PaymentSchedule.BillingStateorProvince = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_billing_stateorprovince.");
                }
                if (queriedEntityRecord.Contains("msnfp_originatingcampaignid") && queriedEntityRecord["msnfp_originatingcampaignid"] != null)
                {
                    mSNFP_PaymentSchedule.OriginatingCampaignId = ((EntityReference)queriedEntityRecord["msnfp_originatingcampaignid"]).Id;
                    localContext.TracingService.Trace("Got msnfp_originatingcampaignid.");
                }
                else
                {
                    mSNFP_PaymentSchedule.OriginatingCampaignId = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_originatingcampaignid.");
                }
                if (queriedEntityRecord.Contains("msnfp_ccbrandcode") && queriedEntityRecord["msnfp_ccbrandcode"] != null)
                {
                    mSNFP_PaymentSchedule.CcBrandCode = ((OptionSetValue)queriedEntityRecord["msnfp_ccbrandcode"]).Value;
                    localContext.TracingService.Trace("Got msnfp_ccbrandcode.");
                }
                else
                {
                    mSNFP_PaymentSchedule.CcBrandCode = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_ccbrandcode.");
                }
                if (queriedEntityRecord.Contains("msnfp_chargeoncreate") && queriedEntityRecord["msnfp_chargeoncreate"] != null)
                {
                    mSNFP_PaymentSchedule.ChargeonCreate = (bool)queriedEntityRecord["msnfp_chargeoncreate"];
                    localContext.TracingService.Trace("Got msnfp_chargeoncreate.");
                }
                else
                {
                    mSNFP_PaymentSchedule.ChargeonCreate = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_chargeoncreate.");
                }
                if (queriedEntityRecord.Contains("msnfp_configurationid") && queriedEntityRecord["msnfp_configurationid"] != null)
                {
                    mSNFP_PaymentSchedule.ConfigurationId = ((EntityReference)queriedEntityRecord["msnfp_configurationid"]).Id;
                    localContext.TracingService.Trace("Got msnfp_configurationid.");
                }
                else
                {
                    mSNFP_PaymentSchedule.ConfigurationId = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_configurationid.");
                }
                if (queriedEntityRecord.Contains("msnfp_constituentid") && queriedEntityRecord["msnfp_constituentid"] != null)
                {
                    mSNFP_PaymentSchedule.ConstituentId = ((EntityReference)queriedEntityRecord["msnfp_constituentid"]).Id;
                    localContext.TracingService.Trace("Got msnfp_constituentid.");
                }
                else
                {
                    mSNFP_PaymentSchedule.ConstituentId = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_constituentid.");
                }
                if (queriedEntityRecord.Contains("msnfp_customerid") && queriedEntityRecord["msnfp_customerid"] != null)
                {
                    mSNFP_PaymentSchedule.CustomerId = ((EntityReference)queriedEntityRecord["msnfp_customerid"]).Id;
                    if (((EntityReference)queriedEntityRecord["msnfp_customerid"]).LogicalName.ToLower() == "contact")
                    {
                        mSNFP_PaymentSchedule.CustomerIdType = 2;
                    }
                    else if (((EntityReference)queriedEntityRecord["msnfp_customerid"]).LogicalName.ToLower() == "account")
                    {
                        mSNFP_PaymentSchedule.CustomerIdType = 1;
                    }
                    localContext.TracingService.Trace("Got msnfp_customerid.");
                }
                else
                {
                    mSNFP_PaymentSchedule.CustomerId     = null;
                    mSNFP_PaymentSchedule.CustomerIdType = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_customerid.");
                }
                if (queriedEntityRecord.Contains("msnfp_bookdate") && queriedEntityRecord["msnfp_bookdate"] != null)
                {
                    mSNFP_PaymentSchedule.BookDate = (DateTime)queriedEntityRecord["msnfp_bookdate"];
                    localContext.TracingService.Trace("Got msnfp_bookdate.");
                }
                else
                {
                    mSNFP_PaymentSchedule.BookDate = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_bookdate.");
                }
                if (queriedEntityRecord.Contains("msnfp_paymentprocessorid") && queriedEntityRecord["msnfp_paymentprocessorid"] != null)
                {
                    mSNFP_PaymentSchedule.PaymentProcessorId = ((EntityReference)queriedEntityRecord["msnfp_paymentprocessorid"]).Id;
                    localContext.TracingService.Trace("Got msnfp_paymentprocessorid");
                }
                else
                {
                    mSNFP_PaymentSchedule.PaymentProcessorId = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_paymentprocessorid");
                }
                if (queriedEntityRecord.Contains("msnfp_ga_deliverycode") && queriedEntityRecord["msnfp_ga_deliverycode"] != null)
                {
                    mSNFP_PaymentSchedule.GaDeliveryCode = ((OptionSetValue)queriedEntityRecord["msnfp_ga_deliverycode"]).Value;
                    localContext.TracingService.Trace("Got msnfp_ga_deliverycode.");
                }
                else
                {
                    mSNFP_PaymentSchedule.GaDeliveryCode = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_ga_deliverycode.");
                }
                if (queriedEntityRecord.Contains("msnfp_depositdate") && queriedEntityRecord["msnfp_depositdate"] != null)
                {
                    mSNFP_PaymentSchedule.DepositDate = (DateTime)queriedEntityRecord["msnfp_depositdate"];
                    localContext.TracingService.Trace("Got msnfp_depositdate.");
                }
                else
                {
                    mSNFP_PaymentSchedule.DepositDate = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_depositdate.");
                }
                if (queriedEntityRecord.Contains("msnfp_emailaddress1") && queriedEntityRecord["msnfp_emailaddress1"] != null)
                {
                    mSNFP_PaymentSchedule.EmailAddress1 = (string)queriedEntityRecord["msnfp_emailaddress1"];
                    localContext.TracingService.Trace("Got msnfp_emailaddress1.");
                }
                else
                {
                    mSNFP_PaymentSchedule.EmailAddress1 = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_emailaddress1.");
                }
                if (queriedEntityRecord.Contains("msnfp_eventid") && queriedEntityRecord["msnfp_eventid"] != null)
                {
                    mSNFP_PaymentSchedule.EventId = ((EntityReference)queriedEntityRecord["msnfp_eventid"]).Id;
                    localContext.TracingService.Trace("Got msnfp_eventid.");
                }
                else
                {
                    mSNFP_PaymentSchedule.EventId = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_eventid.");
                }
                if (queriedEntityRecord.Contains("msnfp_eventpackageid") && queriedEntityRecord["msnfp_eventpackageid"] != null)
                {
                    mSNFP_PaymentSchedule.EventPackageId = ((EntityReference)queriedEntityRecord["msnfp_eventpackageid"]).Id;
                    localContext.TracingService.Trace("Got msnfp_eventpackageid.");
                }
                else
                {
                    mSNFP_PaymentSchedule.EventPackageId = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_eventpackageid.");
                }
                if (queriedEntityRecord.Contains("msnfp_firstname") && queriedEntityRecord["msnfp_firstname"] != null)
                {
                    mSNFP_PaymentSchedule.FirstName = (string)queriedEntityRecord["msnfp_firstname"];
                    localContext.TracingService.Trace("Got msnfp_firstname.");
                }
                else
                {
                    mSNFP_PaymentSchedule.FirstName = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_firstname.");
                }
                if (queriedEntityRecord.Contains("msnfp_giftbatchid") && queriedEntityRecord["msnfp_giftbatchid"] != null)
                {
                    mSNFP_PaymentSchedule.GiftBatchId = ((EntityReference)queriedEntityRecord["msnfp_giftbatchid"]).Id;
                    localContext.TracingService.Trace("Got msnfp_giftbatchid.");
                }
                else
                {
                    mSNFP_PaymentSchedule.GiftBatchId = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_giftbatchid.");
                }
                if (queriedEntityRecord.Contains("msnfp_dataentrysource") && queriedEntityRecord["msnfp_dataentrysource"] != null)
                {
                    mSNFP_PaymentSchedule.DataEntrySource = ((OptionSetValue)queriedEntityRecord["msnfp_dataentrysource"]).Value;
                    localContext.TracingService.Trace("Got msnfp_dataentrysource.");
                }
                else
                {
                    mSNFP_PaymentSchedule.DataEntrySource = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_dataentrysource.");
                }
                if (queriedEntityRecord.Contains("msnfp_paymenttypecode") && queriedEntityRecord["msnfp_paymenttypecode"] != null)
                {
                    mSNFP_PaymentSchedule.PaymentTypeCode = ((OptionSetValue)queriedEntityRecord["msnfp_paymenttypecode"]).Value;
                    localContext.TracingService.Trace("Got msnfp_paymenttypecode.");
                }
                else
                {
                    mSNFP_PaymentSchedule.PaymentTypeCode = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_paymenttypecode.");
                }
                if (queriedEntityRecord.Contains("msnfp_lastname") && queriedEntityRecord["msnfp_lastname"] != null)
                {
                    mSNFP_PaymentSchedule.LastName = (string)queriedEntityRecord["msnfp_lastname"];
                    localContext.TracingService.Trace("Got msnfp_lastname.");
                }
                else
                {
                    mSNFP_PaymentSchedule.LastName = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_lastname.");
                }
                if (queriedEntityRecord.Contains("msnfp_membershipcategoryid") && queriedEntityRecord["msnfp_membershipcategoryid"] != null)
                {
                    mSNFP_PaymentSchedule.MembershipCategoryId = ((EntityReference)queriedEntityRecord["msnfp_membershipcategoryid"]).Id;
                    localContext.TracingService.Trace("Got msnfp_membershipcategoryid.");
                }
                else
                {
                    mSNFP_PaymentSchedule.MembershipCategoryId = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_membershipcategoryid.");
                }
                if (queriedEntityRecord.Contains("msnfp_membershipinstanceid") && queriedEntityRecord["msnfp_membershipinstanceid"] != null)
                {
                    mSNFP_PaymentSchedule.MembershipId = ((EntityReference)queriedEntityRecord["msnfp_membershipinstanceid"]).Id;
                    localContext.TracingService.Trace("Got msnfp_membershipinstanceid.");
                }
                else
                {
                    mSNFP_PaymentSchedule.MembershipId = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_membershipinstanceid.");
                }
                if (queriedEntityRecord.Contains("msnfp_mobilephone") && queriedEntityRecord["msnfp_mobilephone"] != null)
                {
                    mSNFP_PaymentSchedule.MobilePhone = (string)queriedEntityRecord["msnfp_mobilephone"];
                    localContext.TracingService.Trace("Got msnfp_mobilephone.");
                }
                else
                {
                    mSNFP_PaymentSchedule.MobilePhone = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_mobilephone.");
                }
                if (queriedEntityRecord.Contains("msnfp_organizationname") && queriedEntityRecord["msnfp_organizationname"] != null)
                {
                    mSNFP_PaymentSchedule.OrganizationName = (string)queriedEntityRecord["msnfp_organizationname"];
                    localContext.TracingService.Trace("Got msnfp_organizationname.");
                }
                else
                {
                    mSNFP_PaymentSchedule.OrganizationName = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_organizationname.");
                }
                if (queriedEntityRecord.Contains("msnfp_packageid") && queriedEntityRecord["msnfp_packageid"] != null)
                {
                    mSNFP_PaymentSchedule.PackageId = ((EntityReference)queriedEntityRecord["msnfp_packageid"]).Id;
                    localContext.TracingService.Trace("Got msnfp_packageid.");
                }
                else
                {
                    mSNFP_PaymentSchedule.PackageId = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_packageid.");
                }
                if (queriedEntityRecord.Contains("msnfp_taxreceiptid") && queriedEntityRecord["msnfp_taxreceiptid"] != null)
                {
                    mSNFP_PaymentSchedule.TaxReceiptId = ((EntityReference)queriedEntityRecord["msnfp_taxreceiptid"]).Id;
                    localContext.TracingService.Trace("Got msnfp_taxreceiptid.");
                }
                else
                {
                    mSNFP_PaymentSchedule.TaxReceiptId = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_taxreceiptid.");
                }
                if (queriedEntityRecord.Contains("msnfp_receiptpreferencecode") && queriedEntityRecord["msnfp_receiptpreferencecode"] != null)
                {
                    mSNFP_PaymentSchedule.ReceiptPreferenceCode = ((OptionSetValue)queriedEntityRecord["msnfp_receiptpreferencecode"]).Value;
                    localContext.TracingService.Trace("Got msnfp_receiptpreferencecode.");
                }
                else
                {
                    mSNFP_PaymentSchedule.ReceiptPreferenceCode = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_receiptpreferencecode.");
                }
                if (queriedEntityRecord.Contains("msnfp_telephone1") && queriedEntityRecord["msnfp_telephone1"] != null)
                {
                    mSNFP_PaymentSchedule.Telephone1 = (string)queriedEntityRecord["msnfp_telephone1"];
                    localContext.TracingService.Trace("Got msnfp_telephone1.");
                }
                else
                {
                    mSNFP_PaymentSchedule.Telephone1 = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_telephone1.");
                }
                if (queriedEntityRecord.Contains("msnfp_telephone2") && queriedEntityRecord["msnfp_telephone2"] != null)
                {
                    mSNFP_PaymentSchedule.Telephone2 = (string)queriedEntityRecord["msnfp_telephone2"];
                    localContext.TracingService.Trace("Got msnfp_telephone2.");
                }
                else
                {
                    mSNFP_PaymentSchedule.Telephone2 = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_telephone2.");
                }
                if (queriedEntityRecord.Contains("msnfp_dataentryreference") && queriedEntityRecord["msnfp_dataentryreference"] != null)
                {
                    mSNFP_PaymentSchedule.DataEntryReference = (string)queriedEntityRecord["msnfp_dataentryreference"];
                    localContext.TracingService.Trace("Got msnfp_dataentryreference.");
                }
                else
                {
                    mSNFP_PaymentSchedule.DataEntryReference = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_dataentryreference.");
                }
                if (queriedEntityRecord.Contains("msnfp_invoiceidentifier") && queriedEntityRecord["msnfp_invoiceidentifier"] != null)
                {
                    mSNFP_PaymentSchedule.InvoiceIdentifier = (string)queriedEntityRecord["msnfp_invoiceidentifier"];
                    localContext.TracingService.Trace("Got msnfp_invoiceidentifier.");
                }
                else
                {
                    mSNFP_PaymentSchedule.InvoiceIdentifier = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_invoiceidentifier.");
                }
                if (queriedEntityRecord.Contains("msnfp_transactionfraudcode") && queriedEntityRecord["msnfp_transactionfraudcode"] != null)
                {
                    mSNFP_PaymentSchedule.TransactionFraudCode = (string)queriedEntityRecord["msnfp_transactionfraudcode"];
                    localContext.TracingService.Trace("Got msnfp_transactionfraudcode.");
                }
                else
                {
                    mSNFP_PaymentSchedule.TransactionFraudCode = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_transactionfraudcode.");
                }
                if (queriedEntityRecord.Contains("msnfp_transactionidentifier") && queriedEntityRecord["msnfp_transactionidentifier"] != null)
                {
                    mSNFP_PaymentSchedule.TransactionIdentifier = (string)queriedEntityRecord["msnfp_transactionidentifier"];
                    localContext.TracingService.Trace("Got msnfp_transactionidentifier.");
                }
                else
                {
                    mSNFP_PaymentSchedule.TransactionIdentifier = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_transactionidentifier.");
                }
                if (queriedEntityRecord.Contains("msnfp_transactionresult") && queriedEntityRecord["msnfp_transactionresult"] != null)
                {
                    mSNFP_PaymentSchedule.TransactionResult = (string)queriedEntityRecord["msnfp_transactionresult"];
                    localContext.TracingService.Trace("Got msnfp_transactionresult.");
                }
                else
                {
                    mSNFP_PaymentSchedule.TransactionResult = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_transactionresult.");
                }
                if (queriedEntityRecord.Contains("msnfp_tributecode") && queriedEntityRecord["msnfp_tributecode"] != null)
                {
                    mSNFP_PaymentSchedule.TributeCode = ((OptionSetValue)queriedEntityRecord["msnfp_tributecode"]).Value;
                    localContext.TracingService.Trace("Got msnfp_tributecode.");
                }
                else
                {
                    mSNFP_PaymentSchedule.TributeCode = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_tributecode.");
                }
                if (queriedEntityRecord.Contains("msnfp_tributeacknowledgement") && queriedEntityRecord["msnfp_tributeacknowledgement"] != null)
                {
                    mSNFP_PaymentSchedule.TributeAcknowledgement = (string)queriedEntityRecord["msnfp_tributeacknowledgement"];
                    localContext.TracingService.Trace("Got msnfp_tributeacknowledgement.");
                }
                else
                {
                    mSNFP_PaymentSchedule.TributeAcknowledgement = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_tributeacknowledgement.");
                }
                if (queriedEntityRecord.Contains("msnfp_tributeid") && queriedEntityRecord["msnfp_tributeid"] != null)
                {
                    mSNFP_PaymentSchedule.TributeId = ((EntityReference)queriedEntityRecord["msnfp_tributeid"]).Id;
                    localContext.TracingService.Trace("Got msnfp_tributeid.");
                }
                else
                {
                    mSNFP_PaymentSchedule.TributeId = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_tributeid.");
                }
                if (queriedEntityRecord.Contains("msnfp_tributemessage") && queriedEntityRecord["msnfp_tributemessage"] != null)
                {
                    mSNFP_PaymentSchedule.TributeMessage = (string)queriedEntityRecord["msnfp_tributemessage"];
                    localContext.TracingService.Trace("Got msnfp_tributemessage.");
                }
                else
                {
                    mSNFP_PaymentSchedule.TributeMessage = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_tributemessage.");
                }
                if (queriedEntityRecord.Contains("msnfp_transactiondescription") && queriedEntityRecord["msnfp_transactiondescription"] != null)
                {
                    mSNFP_PaymentSchedule.TransactionDescription = (string)queriedEntityRecord["msnfp_transactiondescription"];
                    localContext.TracingService.Trace("Got msnfp_transactiondescription.");
                }
                else
                {
                    mSNFP_PaymentSchedule.TransactionDescription = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_transactiondescription.");
                }
                if (queriedEntityRecord.Contains("transactioncurrencyid") && queriedEntityRecord["transactioncurrencyid"] != null)
                {
                    mSNFP_PaymentSchedule.TransactionCurrencyId = ((EntityReference)queriedEntityRecord["transactioncurrencyid"]).Id;
                    localContext.TracingService.Trace("Got TransactionCurrencyId.");
                }
                else
                {
                    mSNFP_PaymentSchedule.TransactionCurrencyId = null;
                    localContext.TracingService.Trace("Did NOT find TransactionCurrencyId.");
                }
                if (queriedEntityRecord.Contains("statecode") && queriedEntityRecord["statecode"] != null)
                {
                    mSNFP_PaymentSchedule.StateCode = ((OptionSetValue)queriedEntityRecord["statecode"]).Value;
                    localContext.TracingService.Trace("Got StateCode");
                }
                else
                {
                    mSNFP_PaymentSchedule.StateCode = null;
                    localContext.TracingService.Trace("Did NOT find StateCode");
                }
                if (queriedEntityRecord.Contains("statuscode") && queriedEntityRecord["statuscode"] != null)
                {
                    mSNFP_PaymentSchedule.StatusCode = ((OptionSetValue)queriedEntityRecord["statuscode"]).Value;
                    localContext.TracingService.Trace("Got StatusCode");
                }
                else
                {
                    mSNFP_PaymentSchedule.StatusCode = null;
                    localContext.TracingService.Trace("Did NOT find StatusCode");
                }
                if (messageName == "Create")
                {
                    mSNFP_PaymentSchedule.CreatedOn = DateTime.UtcNow;
                }
                else if (queriedEntityRecord.Contains("createdon") && queriedEntityRecord["createdon"] != null)
                {
                    mSNFP_PaymentSchedule.CreatedOn = (DateTime)queriedEntityRecord["createdon"];
                }
                else
                {
                    mSNFP_PaymentSchedule.CreatedOn = null;
                }
                mSNFP_PaymentSchedule.SyncDate = DateTime.UtcNow;
                if (messageName == "Delete")
                {
                    mSNFP_PaymentSchedule.Deleted     = true;
                    mSNFP_PaymentSchedule.DeletedDate = DateTime.UtcNow;
                }
                else
                {
                    mSNFP_PaymentSchedule.Deleted     = false;
                    mSNFP_PaymentSchedule.DeletedDate = null;
                }
                mSNFP_PaymentSchedule.Receipt     = new HashSet <MSNFP_Receipt>();
                mSNFP_PaymentSchedule.Response    = new HashSet <MSNFP_Response>();
                mSNFP_PaymentSchedule.Transaction = new HashSet <MSNFP_Transaction>();
                localContext.TracingService.Trace("JSON object created");
                if (messageName == "Create")
                {
                    text2 = text2 + text + "/Create" + text;
                }
                else if (messageName == "Update" || messageName == "Delete")
                {
                    text2 = text2 + text + "/Update" + text;
                }
                MemoryStream memoryStream = new MemoryStream();
                DataContractJsonSerializer dataContractJsonSerializer = new DataContractJsonSerializer(typeof(MSNFP_PaymentSchedule));
                dataContractJsonSerializer.WriteObject(memoryStream, mSNFP_PaymentSchedule);
                byte[] array = memoryStream.ToArray();
                memoryStream.Close();
                string       @string      = Encoding.UTF8.GetString(array, 0, array.Length);
                WebAPIClient webAPIClient = new WebAPIClient();
                webAPIClient.Headers[HttpRequestHeader.ContentType] = "application/json";
                webAPIClient.Headers["Padlock"] = (string)configurationRecord["msnfp_apipadlocktoken"];
                webAPIClient.Encoding           = Encoding.UTF8;
                localContext.TracingService.Trace("---------Preparing JSON---------");
                localContext.TracingService.Trace("Converted to json API URL : " + text2);
                localContext.TracingService.Trace("JSON: " + @string);
                localContext.TracingService.Trace("---------End of Preparing JSON---------");
                localContext.TracingService.Trace("Sending data to Azure.");
                string str = webAPIClient.UploadString(text2, @string);
                localContext.TracingService.Trace("Got response.");
                localContext.TracingService.Trace("Response: " + str);
            }
            else
            {
                localContext.TracingService.Trace("No API URL or Enable Portal Pages. Exiting workflow.");
            }
        }
예제 #10
0
        /// <summary>
        ///     Executes the plug-in.
        /// </summary>
        /// <param name="serviceProvider">The service provider.</param>
        /// <remarks>
        ///     For improved performance, Microsoft Dynamics CRM caches plug-in instances.
        ///     The plug-in's Execute method should be written to be stateless as the constructor
        ///     is not called for every invocation of the plug-in. Also, multiple system threads
        ///     could execute the plug-in at the same time. All per invocation state information
        ///     is stored in the context. This means that you should not use global variables in plug-ins.
        /// </remarks>
        public void Execute(IServiceProvider serviceProvider)
        {
            Stopwatch sw = new Stopwatch();

            if (serviceProvider == null)
            {
                throw new ArgumentNullException(nameof(serviceProvider));
            }

            // Construct the Local plug-in context.
            using (var localContext = new LocalPluginContext(serviceProvider))
            {
                localContext.Log($"Entity: {localContext.PrimaryEntityName}, Message: {localContext.MessageName}, Stage: {Enum.ToObject(typeof(Stages), localContext.Stage)}, Mode: {localContext.Mode}");

                localContext.Log($"\r\nClass {ChildClassName}");
                localContext.Log($"\r\nUserId\t\t\t\t{localContext.UserId}\r\nInitiatingUserId\t{localContext.InitiatingUserId}");
                localContext.Log($"\r\nStart : {DateTime.Now:dd/MM/yyyy HH:mm:ss.fff}");
                sw.Restart();

                try
                {
                    // Iterate over all of the expected registered events to ensure that the plugin
                    // has been invoked by an expected event
                    // For any given plug-in event at an instance in time, we would expect at most 1 result to match.
                    var steps =
                        (from a in _newRegisteredEvents
                         where (
                             localContext.IsStage(a.Stage) &&
                             localContext.IsMessage(a.Message) &&
                             (string.IsNullOrWhiteSpace(a.EntityName) ||
                              a.EntityName == localContext.PrimaryEntityName)
                             )
                         select a);

                    var stage = Enum.ToObject(typeof(Stages), localContext.Stage);
                    sw.Restart();
                    localContext.Log("------------------ Input Variables (before) ------------------");
                    localContext.DumpInputParameters();
                    localContext.Log("\r\n------------------ Shared Variables (before) ------------------");
                    localContext.DumpSharedVariables();
                    localContext.Log("\r\n---------------------------------------------------------------");

                    foreach (var step in steps)
                    {
                        sw.Restart();
                        if (step.Message == Messages.Update && step.FilteringAttributes.Any())
                        {
                            var target = localContext.GetInputParameter <Entity>(InputParameters.Target);

                            var useStep = false;

                            foreach (var attributeName in target.Attributes.Select(a => a.Key))
                            {
                                useStep |= step.FilteringAttributes.Contains(attributeName);
                            }

                            if (!useStep)
                            {
                                localContext.Log(
                                    "\r\n{0}.{5} is not fired because filteringAttributes filter is not met.",
                                    ChildClassName,
                                    localContext.PrimaryEntityName,
                                    localContext.MessageName,
                                    stage,
                                    localContext.Mode, step.Method.Name);
                                continue;
                            }
                        }

                        var entityAction = step.Method;

                        localContext.Log($"\r\n\r\n{ChildClassName}.{step.Method.Name} is firing");

                        sw.Restart();

                        localContext.Log($"{ChildClassName}.{step.Method.Name} Start");

                        Invoke(entityAction, localContext);

                        localContext.Log($"{ChildClassName}.{step.Method.Name} End, duration : {sw.Elapsed}");
                    }

                    if (localContext.IsStage(Stages.PreValidation) || localContext.IsStage(Stages.PreOperation))
                    {
                        localContext.Log("\r\n\r\n------------------ Input Variables (after) ------------------");
                        localContext.DumpInputParameters();
                        localContext.Log("\r\n------------------ Shared Variables (after) ------------------");
                        localContext.DumpSharedVariables();
                        localContext.Log("\r\n---------------------------------------------------------------");
                    }
                }
                catch (FaultException <OrganizationServiceFault> e)
                {
                    localContext.Log($"Exception: {e}");

                    // Handle the exception.
                    throw;
                }
                catch (TargetInvocationException e)
                {
                    localContext.Log($"Exception : {e.InnerException}");

                    if (e.InnerException != null)
                    {
                        throw e.InnerException;
                    }
                }
                finally
                {
                    localContext.Log($"Exiting {ChildClassName}.Execute()");

                    localContext.Log($"End : {DateTime.Now:dd/MM/yyyy HH:mm:ss.fff}\r\n");
                }
            }
        }
예제 #11
0
 public void ExecutePluginLogic(IServiceProvider serviceProvider)
 {
     // Use a 'using' statement to dispose of the service context properly
     // To use a specific early bound entity replace the 'Entity' below with the appropriate class type
     using (var localContext = new LocalPluginContext <Entity>(serviceProvider))
     {
         // Todo: Place your logic here for the plugin
         ITracingService tracingService = localContext.TracingService;
         tracingService.Trace("Plugin execution started");
         bool            success       = false;
         string          ResultMessage = "Unknown Error";
         EntityReference leadReference = null;
         if (localContext.PluginExecutionContext.InputParameters.Contains("Target"))
         {
             leadReference = localContext.PluginExecutionContext.InputParameters["Target"] as EntityReference;
         }
         if (leadReference != null)
         {
             try
             {
                 QualifyHelper qualify = new QualifyHelper();
                 tracingService.Trace("Qualifying Lead");
                 string quoteId = qualify.QualifyLead(leadReference, localContext.OrganizationService);
                 if (quoteId != null)
                 {
                     tracingService.Trace("Lead qualified successfully");
                     success = true;
                     localContext.PluginExecutionContext.OutputParameters["Success"]         = success;
                     localContext.PluginExecutionContext.OutputParameters["ResultMessage"]   = "OK";
                     localContext.PluginExecutionContext.OutputParameters["ExecutionResult"] = quoteId;
                     SetStateRequest setStateRequest = new SetStateRequest()
                     {
                         EntityMoniker = new EntityReference
                         {
                             Id          = leadReference.Id,
                             LogicalName = leadReference.LogicalName,
                         },
                         State  = new OptionSetValue(1),
                         Status = new OptionSetValue(3)
                     };
                     localContext.OrganizationService.Execute(setStateRequest);
                     tracingService.Trace("Plugin execution completed successfully");
                 }
                 else
                 {
                     throw new InvalidPluginExecutionException("There was an issue creating the quote");
                 }
             }
             catch (Exception ex)
             {
                 success       = false;
                 ResultMessage = ex.Message;
                 throw new InvalidPluginExecutionException(ex.Message);
             }
         }
         else
         {
             localContext.PluginExecutionContext.OutputParameters["Success"]       = success;
             localContext.PluginExecutionContext.OutputParameters["ResultMessage"] = ResultMessage;
         }
     }
 }
        protected override void ExecuteCrmPlugin(LocalPluginContext localContext)
        {
            if (localContext == null)
            {
                throw new ArgumentNullException("localContext");
            }
            IPluginExecutionContext    pluginExecutionContext     = localContext.PluginExecutionContext;
            IOrganizationService       organizationService        = localContext.OrganizationService;
            OrganizationServiceContext organizationServiceContext = new OrganizationServiceContext(organizationService);
            Utilities utilities = new Utilities();

            localContext.TracingService.Trace("Configuration Create.");
            string messageName = pluginExecutionContext.MessageName;
            Entity entity      = null;
            string empty       = string.Empty;

            if (!pluginExecutionContext.InputParameters.Contains("Target") || (!(pluginExecutionContext.InputParameters["Target"] is Entity) && !(pluginExecutionContext.InputParameters["Target"] is EntityReference)))
            {
                return;
            }
            localContext.TracingService.Trace("Triggered By: " + messageName);
            if (messageName == "Create")
            {
                entity = (Entity)pluginExecutionContext.InputParameters["Target"];
            }
            else if (messageName == "Update" || messageName == "Delete")
            {
                entity = organizationService.Retrieve("msnfp_configuration", pluginExecutionContext.PrimaryEntityId, GetColumnSet());
                localContext.TracingService.Trace("Obtained values");
            }
            if (entity == null || (!(messageName == "Create") && !(messageName == "Update") && !(messageName == "Delete")))
            {
                return;
            }
            localContext.TracingService.Trace("Configuration is Primary entity. Plugin Called On: " + messageName);
            MSNFP_Configuration mSNFP_Configuration = new MSNFP_Configuration();

            mSNFP_Configuration.ConfigurationId = (Guid)entity["msnfp_configurationid"];
            mSNFP_Configuration.Identifier      = (entity.Contains("msnfp_identifier") ? ((string)entity["msnfp_identifier"]) : string.Empty);
            localContext.TracingService.Trace("Obtaining JSON Fields to send to API.");
            mSNFP_Configuration.AzureWebApiUrl        = (entity.Contains("msnfp_azure_webapiurl") ? ((string)entity["msnfp_azure_webapiurl"]) : string.Empty);
            mSNFP_Configuration.AddressAuth1          = (entity.Contains("msnfp_addressauth1") ? ((string)entity["msnfp_addressauth1"]) : string.Empty);
            mSNFP_Configuration.AddressAuth2          = (entity.Contains("msnfp_addressauth2") ? ((string)entity["msnfp_addressauth2"]) : string.Empty);
            mSNFP_Configuration.BankRunPregeneratedBy = ((!entity.Contains("msnfp_bankrun_pregeneratedby")) ? 1 : ((int)entity["msnfp_bankrun_pregeneratedby"]));
            mSNFP_Configuration.CharityTitle          = (entity.Contains("msnfp_charitytitle") ? ((string)entity["msnfp_charitytitle"]) : string.Empty);
            mSNFP_Configuration.ScheMaxRetries        = (entity.Contains("msnfp_sche_maxretries") ? ((int)entity["msnfp_sche_maxretries"]) : 0);
            if (entity.Contains("msnfp_sche_recurrencestart"))
            {
                mSNFP_Configuration.ScheRecurrenceStart = ((OptionSetValue)entity["msnfp_sche_recurrencestart"]).Value;
            }
            else
            {
                mSNFP_Configuration.ScheRecurrenceStart = null;
            }
            mSNFP_Configuration.ScheRetryinterval = ((!entity.Contains("msnfp_sche_retryinterval")) ? 1 : ((int)entity["msnfp_sche_retryinterval"]));
            localContext.TracingService.Trace("Get Entity References.");
            if (entity.Contains("msnfp_teamownerid") && entity["msnfp_teamownerid"] != null)
            {
                mSNFP_Configuration.TeamOwnerId = ((EntityReference)entity["msnfp_teamownerid"]).Id;
            }
            else
            {
                mSNFP_Configuration.TeamOwnerId = null;
            }
            if (entity.Contains("msnfp_paymentprocessorid") && entity["msnfp_paymentprocessorid"] != null)
            {
                mSNFP_Configuration.PaymentProcessorId = ((EntityReference)entity["msnfp_paymentprocessorid"]).Id;
            }
            else
            {
                mSNFP_Configuration.PaymentProcessorId = null;
            }
            if (entity.Contains("msnfp_defaultconfiguration") && entity["msnfp_defaultconfiguration"] != null)
            {
                mSNFP_Configuration.DefaultConfiguration = (bool)entity["msnfp_defaultconfiguration"];
                localContext.TracingService.Trace("Got Default Configuration.");
            }
            else
            {
                mSNFP_Configuration.DefaultConfiguration = null;
                localContext.TracingService.Trace("Did NOT find Default Configuration.");
            }
            if (entity.Contains("statecode") && entity["statecode"] != null)
            {
                mSNFP_Configuration.StateCode = ((OptionSetValue)entity["statecode"]).Value;
                localContext.TracingService.Trace("Got statecode.");
            }
            else
            {
                mSNFP_Configuration.StateCode = null;
                localContext.TracingService.Trace("Did NOT find statecode.");
            }
            if (entity.Contains("statuscode") && entity["statuscode"] != null)
            {
                mSNFP_Configuration.StatusCode = ((OptionSetValue)entity["statuscode"]).Value;
                localContext.TracingService.Trace("Got statuscode.");
            }
            else
            {
                mSNFP_Configuration.StatusCode = null;
                localContext.TracingService.Trace("Did NOT find statuscode.");
            }
            localContext.TracingService.Trace("Set remaining JSON fields to null as they are not used here.");
            if (messageName == "Create")
            {
                mSNFP_Configuration.CreatedOn = DateTime.UtcNow;
            }
            else if (entity.Contains("createdon") && entity["createdon"] != null)
            {
                mSNFP_Configuration.CreatedOn = (DateTime)entity["createdon"];
            }
            else
            {
                mSNFP_Configuration.CreatedOn = null;
            }
            mSNFP_Configuration.SyncDate = DateTime.UtcNow;
            if (messageName == "Delete")
            {
                mSNFP_Configuration.Deleted     = true;
                mSNFP_Configuration.DeletedDate = DateTime.UtcNow;
            }
            else
            {
                mSNFP_Configuration.Deleted     = false;
                mSNFP_Configuration.DeletedDate = null;
            }
            mSNFP_Configuration.PaymentProcessor = null;
            mSNFP_Configuration.Event            = new HashSet <MSNFP_Event>();
            mSNFP_Configuration.EventPackage     = new HashSet <MSNFP_EventPackage>();
            mSNFP_Configuration.PaymentSchedule  = new HashSet <MSNFP_PaymentSchedule>();
            mSNFP_Configuration.ReceiptStack     = new HashSet <MSNFP_ReceiptStack>();
            mSNFP_Configuration.Transaction      = new HashSet <MSNFP_Transaction>();
            localContext.TracingService.Trace("Gathered fields.");
            empty = mSNFP_Configuration.AzureWebApiUrl;
            localContext.TracingService.Trace("API URL: " + empty);
            if (empty.Length > 0)
            {
                localContext.TracingService.Trace("Syncing data to Azure.");
                if (messageName == "Update" || messageName == "Delete")
                {
                    empty += "Configuration/UpdateConfiguration";
                }
                else if (messageName == "Create")
                {
                    empty += "Configuration/CreateConfiguration";
                }
                MemoryStream memoryStream = new MemoryStream();
                DataContractJsonSerializer dataContractJsonSerializer = new DataContractJsonSerializer(typeof(MSNFP_Configuration));
                dataContractJsonSerializer.WriteObject(memoryStream, mSNFP_Configuration);
                byte[] array = memoryStream.ToArray();
                memoryStream.Close();
                string @string = Encoding.UTF8.GetString(array, 0, array.Length);
                localContext.TracingService.Trace("---------Preparing JSON---------");
                localContext.TracingService.Trace("Converted to json API URL : " + empty);
                localContext.TracingService.Trace("JSON: " + @string);
                localContext.TracingService.Trace("---------End of Preparing JSON---------");
                localContext.TracingService.Trace("Sending data to Azure.");
                WebAPIClient webAPIClient = new WebAPIClient();
                webAPIClient.Headers[HttpRequestHeader.ContentType] = "application/json";
                if (entity.Contains("msnfp_apipadlocktoken"))
                {
                    if ((string)entity["msnfp_apipadlocktoken"] == null)
                    {
                        return;
                    }
                    webAPIClient.Headers["Padlock"] = (string)entity["msnfp_apipadlocktoken"];
                    webAPIClient.Encoding           = Encoding.UTF8;
                    string text = webAPIClient.UploadString(empty, @string);
                    localContext.TracingService.Trace("Got response.");
                    localContext.TracingService.Trace("Response: " + text);
                    Utilities utilities2 = new Utilities();
                    utilities2.CheckAPIReturnJSONForErrors(text, entity.GetAttributeValue <OptionSetValue>("msnfp_showapierrorresponses"), localContext.TracingService);
                    EntityCollection entityCollection = organizationService.RetrieveMultiple(new QueryExpression
                    {
                        EntityName = "transactioncurrency",
                        ColumnSet  = new ColumnSet("transactioncurrencyid")
                    });
                    foreach (Entity entity2 in entityCollection.Entities)
                    {
                        OrganizationRequest organizationRequest = new OrganizationRequest("msnfp_ActionSyncCurrency");
                        organizationRequest["Target"] = entity2.ToEntityReference();
                        organizationService.Execute(organizationRequest);
                        localContext.TracingService.Trace($"currency {entity2.Id} updated.");
                    }
                }
                else
                {
                    localContext.TracingService.Trace("No padlock found, did not send data to Azure.");
                }
            }
            else
            {
                localContext.TracingService.Trace("API URL is null or Portal Syncing is turned off. Exiting Plugin.");
            }
        }
예제 #13
0
        protected override void ExecuteCrmPlugin(LocalPluginContext localContext)
        {
            if (localContext == null)
            {
                throw new ArgumentNullException("localContext");
            }
            localContext.TracingService.Trace("---------Triggered DonationImportCreate.cs ---------");
            IPluginExecutionContext    pluginExecutionContext     = localContext.PluginExecutionContext;
            IOrganizationService       organizationService        = localContext.OrganizationService;
            OrganizationServiceContext organizationServiceContext = new OrganizationServiceContext(organizationService);
            string messageName = pluginExecutionContext.MessageName;

            localContext.TracingService.Trace("messageName: " + messageName);
            Guid   initiatingUserId = pluginExecutionContext.InitiatingUserId;
            Entity entity           = organizationService.Retrieve("systemuser", initiatingUserId, new ColumnSet("msnfp_configurationid"));

            if (entity == null)
            {
                throw new Exception("No user id found. Please ensure the user is valid. Exiting plugin.");
            }
            Entity configurationRecordByMessageName = Utilities.GetConfigurationRecordByMessageName(pluginExecutionContext, organizationService, localContext.TracingService);

            if (!pluginExecutionContext.InputParameters.Contains("Target"))
            {
                return;
            }
            if (pluginExecutionContext.InputParameters["Target"] is Entity)
            {
                localContext.TracingService.Trace("---------Entering DonationImportCreate.cs Main Function---------");
                Entity entity2 = (Entity)pluginExecutionContext.InputParameters["Target"];
                Entity entity3 = (Entity)pluginExecutionContext.InputParameters["Target"];
                if (entity3 != null && entity3.Contains("msnfp_statusupdated") && !entity3.Contains("msnfp_transactionid"))
                {
                    localContext.TracingService.Trace("Contains msnfp_statusupdated.");
                    if (messageName == "Update")
                    {
                        entity3 = pluginExecutionContext.PostEntityImages["postImage"];
                    }
                    if (((OptionSetValue)entity3["msnfp_statusupdated"]).Value == 844060000)
                    {
                        localContext.TracingService.Trace("Checking Import Status..");
                        if (entity3.GetAttributeValue <OptionSetValue>("msnfp_importresult") != null && entity3.GetAttributeValue <OptionSetValue>("msnfp_importresult").Value == 844060001)
                        {
                            organizationService.Update(new Entity(entity3.LogicalName, entity3.Id)
                            {
                                Attributes =
                                {
                                    new KeyValuePair <string, object>("msnfp_statusupdated", new OptionSetValue(844060001))
                                }
                            });
                            return;
                        }
                        localContext.TracingService.Trace("Status Ready - processing donation import.");
                        try
                        {
                            Entity         entity4        = null;
                            Guid           empty          = Guid.Empty;
                            bool           flag           = false;
                            bool           flag2          = false;
                            Entity         entity5        = null;
                            Entity         entity6        = null;
                            string         empty2         = string.Empty;
                            Guid           empty3         = Guid.Empty;
                            Guid           empty4         = Guid.Empty;
                            ColumnSet      columnSet      = null;
                            bool           flag3          = entity3.Contains("msnfp_createdonor") && (bool)entity3["msnfp_createdonor"];
                            string         empty5         = string.Empty;
                            Guid           empty6         = Guid.Empty;
                            OptionSetValue attributeValue = entity3.GetAttributeValue <OptionSetValue>("msnfp_anonymous");
                            bool           flag4          = entity3.Contains("msnfp_donotsendmm") && (bool)entity3["msnfp_donotsendmm"];
                            bool           flag5          = entity3.Contains("msnfp_constituent_donotsendmm") && (bool)entity3["msnfp_constituent_donotsendmm"];
                            if (entity3.Contains("msnfp_teamownerid") && entity3["msnfp_teamownerid"] != null)
                            {
                                empty5 = ((EntityReference)entity3["msnfp_teamownerid"]).LogicalName;
                                empty6 = ((EntityReference)entity3["msnfp_teamownerid"]).Id;
                            }
                            else
                            {
                                empty5 = ((EntityReference)entity3["ownerid"]).LogicalName;
                                empty6 = ((EntityReference)entity3["ownerid"]).Id;
                            }
                            KeyValuePair <string, object> keyValuePair = InitiateHouseholdProcess(organizationService, entity3, entity5?.ToEntityReference());
                            if (keyValuePair.Key != "msnfp_householdid")
                            {
                                localContext.Trace("Added shared variable..");
                                localContext.PluginExecutionContext.SharedVariables.Add("DonationImport", entity3);
                            }
                            else
                            {
                                entity3["msnfp_householdid"] = (EntityReference)keyValuePair.Value;
                            }
                            if (entity3.Contains("msnfp_customerid"))
                            {
                                localContext.TracingService.Trace("Donation Import contains Customer");
                                empty2 = ((EntityReference)entity3["msnfp_customerid"]).LogicalName;
                                empty3 = ((EntityReference)entity3["msnfp_customerid"]).Id;
                                if (empty2 == "account")
                                {
                                    entity5 = organizationService.Retrieve(empty2, empty3, new ColumnSet("accountid", "name"));
                                }
                                else if (empty2 == "contact")
                                {
                                    columnSet = new ColumnSet("contactid", "salutation", "lastname", "fullname", "middlename", "firstname", "birthdate", "emailaddress1", "telephone1", "mobilephone", "gendercode", "address1_line1", "address1_line2", "address1_line3", "address1_city", "address1_stateorprovince", "address1_country", "address1_postalcode");
                                    entity5   = organizationService.Retrieve(empty2, empty3, columnSet);
                                    if (entity3.GetAttributeValue <OptionSetValue>("msnfp_householdrelationship") != null)
                                    {
                                        organizationService.Update(new Entity(entity5.LogicalName, entity5.Id)
                                        {
                                            Attributes =
                                            {
                                                new KeyValuePair <string, object>("msnfp_householdrelationship", entity3.GetAttributeValue <OptionSetValue>("msnfp_householdrelationship"))
                                            }
                                        });
                                    }
                                }
                                localContext.TracingService.Trace("Update Donation Import with Donor.");
                            }
                            else
                            {
                                localContext.TracingService.Trace("Donation Import does not have customer.");
                                string text   = (entity3.Contains("msnfp_organizationname") ? ((string)entity3["msnfp_organizationname"]) : string.Empty);
                                string text2  = (entity3.Contains("msnfp_emailaddress1") ? ((string)entity3["msnfp_emailaddress1"]) : string.Empty);
                                string text3  = (entity3.Contains("msnfp_firstname") ? ((string)entity3["msnfp_firstname"]) : string.Empty);
                                string text4  = (entity3.Contains("msnfp_lastname") ? ((string)entity3["msnfp_lastname"]) : string.Empty);
                                string value  = (entity3.Contains("msnfp_billing_postalcode") ? ((string)entity3["msnfp_billing_postalcode"]) : string.Empty);
                                string value2 = (entity3.Contains("msnfp_billing_city") ? ((string)entity3["msnfp_billing_city"]) : string.Empty);
                                string value3 = (entity3.Contains("msnfp_billing_line1") ? ((string)entity3["msnfp_billing_line1"]) : string.Empty);
                                localContext.TracingService.Trace("Validating Organization Name.");
                                if (!string.IsNullOrEmpty(text))
                                {
                                    localContext.TracingService.Trace("Organization Name: " + text + ".");
                                    ColumnSet       columnSet2      = new ColumnSet("name");
                                    List <Entity>   list            = new List <Entity>();
                                    QueryExpression queryExpression = new QueryExpression("account");
                                    queryExpression.ColumnSet = columnSet2;
                                    queryExpression.Criteria  = new FilterExpression();
                                    queryExpression.Criteria.AddCondition("statecode", ConditionOperator.Equal, 0);
                                    queryExpression.Criteria.FilterOperator = LogicalOperator.And;
                                    FilterExpression filterExpression = queryExpression.Criteria.AddFilter(LogicalOperator.And);
                                    filterExpression.AddCondition("name", ConditionOperator.Equal, text);
                                    list = organizationService.RetrieveMultiple(queryExpression).Entities.ToList();
                                    if (list.Count > 0)
                                    {
                                        localContext.TracingService.Trace("Account found.");
                                        entity4 = list.FirstOrDefault();
                                        entity3["msnfp_customerid"] = new EntityReference("account", entity4.Id);
                                        flag = true;
                                    }
                                    else if (flag3)
                                    {
                                        localContext.TracingService.Trace("No account found, creating new record.");
                                        entity4                    = new Entity("account");
                                        entity4["name"]            = text;
                                        entity4["donotbulkemail"]  = entity3.Contains("msnfp_donotbulkemail") && (bool)entity3["msnfp_donotbulkemail"];
                                        entity4["donotemail"]      = entity3.Contains("msnfp_donotemail") && (bool)entity3["msnfp_donotemail"];
                                        entity4["donotphone"]      = entity3.Contains("msnfp_donotphone") && (bool)entity3["msnfp_donotphone"];
                                        entity4["donotpostalmail"] = entity3.Contains("msnfp_donotpostalmail") && (bool)entity3["msnfp_donotpostalmail"];
                                        if (flag4)
                                        {
                                            entity4["donotbulkpostalmail"] = false;
                                        }
                                        else
                                        {
                                            entity4["donotbulkpostalmail"] = true;
                                        }
                                        entity4["address1_addresstypecode"] = new OptionSetValue(3);
                                        entity4["msnfp_anonymity"]          = attributeValue;
                                        if (entity3.Contains("msnfp_receiptpreferencecode"))
                                        {
                                            entity4["msnfp_receiptpreferencecode"] = (OptionSetValue)entity3["msnfp_receiptpreferencecode"];
                                        }
                                        if (empty5 != string.Empty && empty6 != Guid.Empty)
                                        {
                                            localContext.TracingService.Trace("Assigning Owner");
                                            entity4["ownerid"] = new EntityReference(empty5, empty6);
                                        }
                                        empty = organizationService.Create(entity4);
                                        ExecuteWorkflowRequest executeWorkflowRequest = new ExecuteWorkflowRequest();
                                        executeWorkflowRequest.EntityId   = empty;
                                        executeWorkflowRequest.WorkflowId = Guid.Parse("810C634A-2F4C-45B7-BFCC-C4FAAE315970");
                                        organizationService.Execute(executeWorkflowRequest);
                                        localContext.TracingService.Trace("Account created and giving level calculated..");
                                        localContext.TracingService.Trace("Account created and set as Donor.");
                                        if (empty != Guid.Empty)
                                        {
                                            entity3["msnfp_customerid"] = new EntityReference("account", empty);
                                            flag = true;
                                        }
                                    }
                                }
                                localContext.TracingService.Trace("Account validation completed.");
                                ColumnSet       columnSet3       = new ColumnSet("contactid", "firstname", "lastname", "middlename", "firstname", "birthdate", "emailaddress1", "emailaddress2", "emailaddress3", "telephone1", "mobilephone", "gendercode", "address1_line1", "address1_line2", "address1_line3", "address1_city", "address1_stateorprovince", "address1_country", "address1_postalcode", "msnfp_householdid", "msnfp_householdrelationship");
                                List <Entity>   list2            = new List <Entity>();
                                QueryExpression queryExpression2 = new QueryExpression("contact");
                                queryExpression2.ColumnSet = columnSet3;
                                queryExpression2.Criteria  = new FilterExpression();
                                queryExpression2.Criteria.AddCondition("statecode", ConditionOperator.Equal, 0);
                                queryExpression2.Criteria.FilterOperator = LogicalOperator.And;
                                if (!string.IsNullOrEmpty(text2) && !string.IsNullOrEmpty(text3) && !string.IsNullOrEmpty(text4))
                                {
                                    FilterExpression filterExpression2 = queryExpression2.Criteria.AddFilter(LogicalOperator.Or);
                                    filterExpression2.AddCondition("emailaddress1", ConditionOperator.Equal, text2);
                                    filterExpression2.AddCondition("emailaddress2", ConditionOperator.Equal, text2);
                                    filterExpression2.AddCondition("emailaddress3", ConditionOperator.Equal, text2);
                                    FilterExpression filterExpression3 = queryExpression2.Criteria.AddFilter(LogicalOperator.And);
                                    filterExpression3.AddCondition("firstname", ConditionOperator.BeginsWith, text3.Substring(0, 1));
                                    filterExpression3.AddCondition("lastname", ConditionOperator.BeginsWith, text4);
                                    list2 = organizationService.RetrieveMultiple(queryExpression2).Entities.ToList();
                                }
                                if (list2.Count > 0)
                                {
                                    localContext.TracingService.Trace("customer by email found.");
                                    entity5 = list2.FirstOrDefault();
                                }
                                else
                                {
                                    localContext.TracingService.Trace("No customer found by email.");
                                    list2 = new List <Entity>();
                                    FilterExpression filterExpression4 = new FilterExpression();
                                    if (!string.IsNullOrEmpty(text4) && !string.IsNullOrEmpty(value) && !string.IsNullOrEmpty(value2) && !string.IsNullOrEmpty(text3) && !string.IsNullOrEmpty(value3))
                                    {
                                        filterExpression4.Conditions.Add(new ConditionExpression("lastname", ConditionOperator.Equal, text4));
                                        filterExpression4.Conditions.Add(new ConditionExpression("address1_postalcode", ConditionOperator.Equal, value));
                                        filterExpression4.Conditions.Add(new ConditionExpression("address1_city", ConditionOperator.Equal, value2));
                                        filterExpression4.Conditions.Add(new ConditionExpression("address1_line1", ConditionOperator.Equal, value3));
                                        filterExpression4.Conditions.Add(new ConditionExpression("firstname", ConditionOperator.BeginsWith, text3.Substring(0, 1)));
                                        filterExpression4.Conditions.Add(new ConditionExpression("statecode", ConditionOperator.Equal, 0));
                                        filterExpression4.FilterOperator = LogicalOperator.And;
                                        queryExpression2.Criteria        = filterExpression4;
                                        list2 = organizationService.RetrieveMultiple(queryExpression2).Entities.ToList();
                                    }
                                    if (list2.Count > 0)
                                    {
                                        entity5 = list2.FirstOrDefault();
                                    }
                                    else
                                    {
                                        list2 = new List <Entity>();
                                        FilterExpression filterExpression5 = new FilterExpression();
                                        if (!string.IsNullOrEmpty(text4) && !string.IsNullOrEmpty(value3) && !string.IsNullOrEmpty(value) && !string.IsNullOrEmpty(text3))
                                        {
                                            filterExpression5.Conditions.Add(new ConditionExpression("lastname", ConditionOperator.Equal, text4));
                                            filterExpression5.Conditions.Add(new ConditionExpression("address1_line1", ConditionOperator.Equal, value3));
                                            filterExpression5.Conditions.Add(new ConditionExpression("address1_postalcode", ConditionOperator.Equal, value));
                                            filterExpression5.Conditions.Add(new ConditionExpression("firstname", ConditionOperator.BeginsWith, text3.Substring(0, 1)));
                                            filterExpression5.Conditions.Add(new ConditionExpression("statecode", ConditionOperator.Equal, 0));
                                            filterExpression5.FilterOperator = LogicalOperator.And;
                                            queryExpression2.Criteria        = filterExpression5;
                                            list2 = organizationService.RetrieveMultiple(queryExpression2).Entities.ToList();
                                        }
                                        if (list2.Count > 0)
                                        {
                                            entity5 = list2.FirstOrDefault();
                                        }
                                    }
                                }
                                localContext.Trace($"Shared variable :{localContext.PluginExecutionContext.SharedVariables.Count}");
                                if (entity5 != null)
                                {
                                    localContext.TracingService.Trace("found customer based on search criteria and set to Customer System");
                                    if (flag)
                                    {
                                        entity3["msnfp_constituentid"] = new EntityReference(entity5.LogicalName, entity5.Id);
                                        flag2 = true;
                                    }
                                    else
                                    {
                                        entity3["msnfp_customerid"] = new EntityReference(entity5.LogicalName, entity5.Id);
                                    }
                                    if (entity5.GetAttributeValue <EntityReference>("msnfp_householdid") != null)
                                    {
                                        Entity entity7 = new Entity(entity5.LogicalName, entity5.Id);
                                        if (keyValuePair.Key == "msnfp_householdid")
                                        {
                                            entity7["msnfp_householdid"] = (EntityReference)keyValuePair.Value;
                                        }
                                        if (entity3.GetAttributeValue <OptionSetValue>("msnfp_householdrelationship") != null)
                                        {
                                            entity7["msnfp_householdrelationship"] = entity3.GetAttributeValue <OptionSetValue>("msnfp_householdrelationship");
                                        }
                                        organizationService.Update(entity7);
                                    }
                                }
                                else
                                {
                                    localContext.TracingService.Trace("No record found, going to create Contact");
                                    string value4 = (entity3.Contains("msnfp_firstname") ? ((string)entity3["msnfp_firstname"]) : string.Empty);
                                    string value5 = (entity3.Contains("msnfp_lastname") ? ((string)entity3["msnfp_lastname"]) : string.Empty);
                                    if (entity3.Contains("msnfp_createdonor") && flag3 && !string.IsNullOrEmpty(value4) && !string.IsNullOrEmpty(value5))
                                    {
                                        entity5 = new Entity("contact");
                                        entity5["msnfp_householdrelationship"] = (entity3.Attributes.ContainsKey("msnfp_householdrelationship") ? entity3.GetAttributeValue <OptionSetValue>("msnfp_householdrelationship") : null);
                                        entity5["msnfp_householdid"]           = ((keyValuePair.Key == "msnfp_householdid") ? ((EntityReference)keyValuePair.Value) : null);
                                        entity5["salutation"] = (entity3.Contains("msnfp_salutation") ? ((string)entity3["msnfp_salutation"]) : string.Empty);
                                        entity5["lastname"]   = (entity3.Contains("msnfp_lastname") ? ((string)entity3["msnfp_lastname"]) : string.Empty);
                                        entity5["middlename"] = (entity3.Contains("msnfp_middlename") ? ((string)entity3["msnfp_middlename"]) : string.Empty);
                                        entity5["firstname"]  = (entity3.Contains("msnfp_firstname") ? ((string)entity3["msnfp_firstname"]) : string.Empty);
                                        if (entity3.Contains("msnfp_birthdate"))
                                        {
                                            entity5["birthdate"] = (DateTime)entity3["msnfp_birthdate"];
                                        }
                                        entity5["emailaddress1"]            = (entity3.Contains("msnfp_emailaddress1") ? ((string)entity3["msnfp_emailaddress1"]) : string.Empty);
                                        entity5["telephone1"]               = (entity3.Contains("msnfp_telephone1") ? ((string)entity3["msnfp_telephone1"]) : string.Empty);
                                        entity5["mobilephone"]              = (entity3.Contains("msnfp_mobilephone") ? ((string)entity3["msnfp_mobilephone"]) : string.Empty);
                                        entity5["address1_line1"]           = (entity3.Contains("msnfp_billing_line1") ? ((string)entity3["msnfp_billing_line1"]) : string.Empty);
                                        entity5["address1_line2"]           = (entity3.Contains("msnfp_billing_line2") ? ((string)entity3["msnfp_billing_line2"]) : string.Empty);
                                        entity5["address1_line3"]           = (entity3.Contains("msnfp_billing_line3") ? ((string)entity3["msnfp_billing_line3"]) : string.Empty);
                                        entity5["address1_city"]            = (entity3.Contains("msnfp_billing_city") ? ((string)entity3["msnfp_billing_city"]) : string.Empty);
                                        entity5["address1_stateorprovince"] = (entity3.Contains("msnfp_billing_stateorprovince") ? ((string)entity3["msnfp_billing_stateorprovince"]) : string.Empty);
                                        entity5["address1_country"]         = (entity3.Contains("msnfp_billing_country") ? ((string)entity3["msnfp_billing_country"]) : string.Empty);
                                        entity5["address1_postalcode"]      = (entity3.Contains("msnfp_billing_postalcode") ? ((string)entity3["msnfp_billing_postalcode"]) : string.Empty);
                                        entity5["donotbulkemail"]           = entity3.Contains("msnfp_donotbulkemail") && (bool)entity3["msnfp_donotbulkemail"];
                                        entity5["donotemail"]               = entity3.Contains("msnfp_donotemail") && (bool)entity3["msnfp_donotemail"];
                                        entity5["donotphone"]               = entity3.Contains("msnfp_donotphone") && (bool)entity3["msnfp_donotphone"];
                                        entity5["donotpostalmail"]          = entity3.Contains("msnfp_donotpostalmail") && (bool)entity3["msnfp_donotpostalmail"];
                                        if (flag4)
                                        {
                                            entity5["donotbulkpostalmail"] = false;
                                        }
                                        else
                                        {
                                            entity5["donotbulkpostalmail"] = true;
                                        }
                                        entity5["address1_addresstypecode"] = new OptionSetValue(844060000);
                                        entity5["msnfp_anonymity"]          = attributeValue;
                                        if (entity3.Contains("msnfp_receiptpreferencecode"))
                                        {
                                            entity5["msnfp_receiptpreferencecode"] = (OptionSetValue)entity3["msnfp_receiptpreferencecode"];
                                        }
                                        if (empty5 != string.Empty && empty6 != Guid.Empty)
                                        {
                                            entity5["ownerid"] = new EntityReference(empty5, empty6);
                                        }
                                        Guid guid = organizationService.Create(entity5);
                                        ExecuteWorkflowRequest executeWorkflowRequest2 = new ExecuteWorkflowRequest();
                                        executeWorkflowRequest2.EntityId   = guid;
                                        executeWorkflowRequest2.WorkflowId = Guid.Parse("EAAE076C-DB57-4979-A479-CC17B83CE705");
                                        organizationService.Execute(executeWorkflowRequest2);
                                        localContext.TracingService.Trace("Contact created and giving level calculated..");
                                        localContext.TracingService.Trace("Contact created and set to Donor");
                                        if (flag)
                                        {
                                            entity3["msnfp_constituentid"] = new EntityReference("contact", guid);
                                            flag2 = true;
                                        }
                                        else
                                        {
                                            entity3["msnfp_customerid"] = new EntityReference("contact", guid);
                                        }
                                    }
                                }
                                localContext.TracingService.Trace("Donation Import updated");
                            }
                            if (!entity3.Contains("msnfp_constituentid") && !flag2)
                            {
                                localContext.TracingService.Trace("Donation Import does not have constituent");
                                string          text5            = (entity3.Contains("msnfp_constituent_firstname") ? ((string)entity3["msnfp_constituent_firstname"]) : string.Empty);
                                string          text6            = (entity3.Contains("msnfp_constituent_lastname") ? ((string)entity3["msnfp_constituent_lastname"]) : string.Empty);
                                ColumnSet       columnSet4       = new ColumnSet("contactid", "lastname", "middlename", "firstname", "birthdate", "emailaddress1", "emailaddress2", "emailaddress3", "telephone1", "mobilephone", "address1_line1", "address1_line2", "address1_line3", "address1_city", "address1_stateorprovince", "address1_country", "address1_postalcode");
                                List <Entity>   list3            = new List <Entity>();
                                QueryExpression queryExpression3 = new QueryExpression("contact");
                                queryExpression3.ColumnSet = columnSet4;
                                queryExpression3.Criteria  = new FilterExpression();
                                queryExpression3.Criteria.AddCondition("statecode", ConditionOperator.Equal, 0);
                                if (!string.IsNullOrEmpty(text5) && !string.IsNullOrEmpty(text6))
                                {
                                    FilterExpression filterExpression6 = new FilterExpression();
                                    filterExpression6.AddCondition("firstname", ConditionOperator.Equal, text5);
                                    filterExpression6.AddCondition("lastname", ConditionOperator.Equal, text6);
                                    filterExpression6.FilterOperator = LogicalOperator.And;
                                    queryExpression3.Criteria        = filterExpression6;
                                    list3 = organizationService.RetrieveMultiple(queryExpression3).Entities.ToList();
                                    if (list3.Count > 0)
                                    {
                                        localContext.TracingService.Trace("constituent found by first name and last name.");
                                        entity6 = list3.FirstOrDefault();
                                    }
                                    if (entity6 != null)
                                    {
                                        localContext.TracingService.Trace("found constituent based on search criteria and set to Constituent");
                                        entity3["msnfp_constituentid"] = new EntityReference(entity6.LogicalName, entity6.Id);
                                    }
                                    else
                                    {
                                        localContext.TracingService.Trace("No constituent record found, going to create new Contact");
                                        if (entity3.Contains("msnfp_createconstituent") && (bool)entity3["msnfp_createconstituent"])
                                        {
                                            entity6 = new Entity("contact");
                                            entity6["salutation"]               = (entity3.Contains("msnfp_constituent_salutation") ? ((string)entity3["msnfp_constituent_salutation"]) : string.Empty);
                                            entity6["lastname"]                 = (entity3.Contains("msnfp_constituent_lastname") ? ((string)entity3["msnfp_constituent_lastname"]) : string.Empty);
                                            entity6["middlename"]               = (entity3.Contains("msnfp_constituent_middlename") ? ((string)entity3["msnfp_constituent_middlename"]) : string.Empty);
                                            entity6["firstname"]                = (entity3.Contains("msnfp_constituent_firstname") ? ((string)entity3["msnfp_constituent_firstname"]) : string.Empty);
                                            entity6["emailaddress1"]            = (entity3.Contains("msnfp_constituent_emailaddress1") ? ((string)entity3["msnfp_constituent_emailaddress1"]) : string.Empty);
                                            entity6["telephone1"]               = (entity3.Contains("msnfp_constituent_telephone") ? ((string)entity3["msnfp_constituent_telephone"]) : string.Empty);
                                            entity6["mobilephone"]              = (entity3.Contains("msnfp_constituent_mobilephone") ? ((string)entity3["msnfp_constituent_mobilephone"]) : string.Empty);
                                            entity6["address1_line1"]           = (entity3.Contains("msnfp_constituent_billing_line1") ? ((string)entity3["msnfp_constituent_billing_line1"]) : string.Empty);
                                            entity6["address1_line2"]           = (entity3.Contains("msnfp_constituent_billing_line2") ? ((string)entity3["msnfp_constituent_billing_line2"]) : string.Empty);
                                            entity6["address1_line3"]           = (entity3.Contains("msnfp_constituent_billing_line3") ? ((string)entity3["msnfp_constituent_billing_line3"]) : string.Empty);
                                            entity6["address1_city"]            = (entity3.Contains("msnfp_constituent_billing_city") ? ((string)entity3["msnfp_constituent_billing_city"]) : string.Empty);
                                            entity6["address1_stateorprovince"] = (entity3.Contains("msnfp_constituent_billing_stateorprovince") ? ((string)entity3["msnfp_constituent_billing_stateorprovince"]) : string.Empty);
                                            entity6["address1_country"]         = (entity3.Contains("msnfp_constituent_billing_country") ? ((string)entity3["msnfp_constituent_billing_country"]) : string.Empty);
                                            entity6["address1_postalcode"]      = (entity3.Contains("msnfp_constituent_billing_postalcode") ? ((string)entity3["msnfp_constituent_billing_postalcode"]) : string.Empty);
                                            entity6["donotbulkemail"]           = entity3.Contains("msnfp_constituent_donotbulkemail") && (bool)entity3["msnfp_constituent_donotbulkemail"];
                                            entity6["donotemail"]               = entity3.Contains("msnfp_constituent_donotemail") && (bool)entity3["msnfp_constituent_donotemail"];
                                            entity6["donotphone"]               = entity3.Contains("msnfp_constituent_donotphone") && (bool)entity3["msnfp_constituent_donotphone"];
                                            entity6["donotpostalmail"]          = entity3.Contains("msnfp_constituent_donotpostalmail") && (bool)entity3["msnfp_constituent_donotpostalmail"];
                                            if (flag5)
                                            {
                                                entity6["donotbulkpostalmail"] = false;
                                            }
                                            else
                                            {
                                                entity6["donotbulkpostalmail"] = true;
                                            }
                                            entity6["address1_addresstypecode"] = new OptionSetValue(844060000);
                                            entity6["msnfp_anonymity"]          = attributeValue;
                                            if (entity3.Contains("msnfp_receiptpreferencecode"))
                                            {
                                                entity6["msnfp_receiptpreferencecode"] = (OptionSetValue)entity3["msnfp_receiptpreferencecode"];
                                            }
                                            if (empty5 != string.Empty && empty6 != Guid.Empty)
                                            {
                                                entity6["ownerid"] = new EntityReference(empty5, empty6);
                                            }
                                            Guid id = organizationService.Create(entity6);
                                            localContext.TracingService.Trace("constituent created and set to Constituent");
                                            entity3["msnfp_constituentid"] = new EntityReference("contact", id);
                                        }
                                    }
                                    localContext.TracingService.Trace("Donation Import updated with Constituent");
                                }
                            }
                            Entity entity8 = new Entity("msnfp_transaction");
                            if (entity3.Contains("msnfp_customerid"))
                            {
                                localContext.TracingService.Trace("Donation Import contains customer");
                                string logicalName = ((EntityReference)entity3["msnfp_customerid"]).LogicalName;
                                Guid   id2         = ((EntityReference)entity3["msnfp_customerid"]).Id;
                                entity8["msnfp_customerid"] = new EntityReference(logicalName, id2);
                            }
                            if (entity3.Contains("msnfp_constituentid"))
                            {
                                localContext.TracingService.Trace("Donation Import contains constituent");
                                string logicalName2 = ((EntityReference)entity3["msnfp_constituentid"]).LogicalName;
                                Guid   id3          = ((EntityReference)entity3["msnfp_constituentid"]).Id;
                                entity8["msnfp_relatedconstituentid"] = new EntityReference(logicalName2, id3);
                            }
                            if (entity3.Contains("msnfp_amount_receiptable"))
                            {
                                entity8["msnfp_amount_receipted"] = (Money)entity3["msnfp_amount_receiptable"];
                            }
                            if (entity3.Contains("msnfp_chequewiredate"))
                            {
                                entity8["msnfp_chequewiredate"] = (DateTime)entity3["msnfp_chequewiredate"];
                            }
                            if (entity3.Contains("msnfp_bookdate"))
                            {
                                entity8["msnfp_bookdate"] = (DateTime)entity3["msnfp_bookdate"];
                            }
                            if (entity3.Contains("msnfp_paymenttypecode"))
                            {
                                entity8["msnfp_paymenttypecode"] = (OptionSetValue)entity3["msnfp_paymenttypecode"];
                            }
                            if (entity3.Contains("msnfp_dataentrysource"))
                            {
                                entity8["msnfp_dataentrysource"] = (OptionSetValue)entity3["msnfp_dataentrysource"];
                            }
                            if (entity3.Contains("msnfp_amount_membership"))
                            {
                                entity8["msnfp_amount_membership"] = (Money)entity3["msnfp_amount_membership"];
                            }
                            if (entity3.Contains("msnfp_amount_nonreceiptable"))
                            {
                                entity8["msnfp_amount_nonreceiptable"] = (Money)entity3["msnfp_amount_nonreceiptable"];
                            }
                            if (entity3.Contains("msnfp_amount_tax"))
                            {
                                entity8["msnfp_amount_tax"] = (Money)entity3["msnfp_amount_tax"];
                            }
                            if (entity3.Contains("msnfp_ccbrandcode"))
                            {
                                entity8["msnfp_ccbrandcode"] = (OptionSetValue)entity3["msnfp_ccbrandcode"];
                            }
                            if (entity3.Contains("msnfp_appealid"))
                            {
                                string logicalName3 = ((EntityReference)entity3["msnfp_appealid"]).LogicalName;
                                Guid   id4          = ((EntityReference)entity3["msnfp_appealid"]).Id;
                                entity8["msnfp_appealid"] = new EntityReference(logicalName3, id4);
                            }
                            if (entity3.Contains("msnfp_originatingcampaignid"))
                            {
                                localContext.TracingService.Trace("Donation Import contains campaign");
                                string logicalName4 = ((EntityReference)entity3["msnfp_originatingcampaignid"]).LogicalName;
                                Guid   id5          = ((EntityReference)entity3["msnfp_originatingcampaignid"]).Id;
                                entity8["msnfp_originatingcampaignid"] = new EntityReference(logicalName4, id5);
                            }
                            if (entity3.Contains("msnfp_amount"))
                            {
                                entity8["msnfp_amount"] = (Money)entity3["msnfp_amount"];
                            }
                            if (entity3.Contains("msnfp_packageid"))
                            {
                                localContext.TracingService.Trace("Donation Import contains package");
                                string logicalName5 = ((EntityReference)entity3["msnfp_packageid"]).LogicalName;
                                Guid   id6          = ((EntityReference)entity3["msnfp_packageid"]).Id;
                                entity8["msnfp_packageid"] = new EntityReference(logicalName5, id6);
                            }
                            if (entity3.Contains("msnfp_designationid"))
                            {
                                localContext.TracingService.Trace("Donation Import contains fund");
                                string logicalName6 = ((EntityReference)entity3["msnfp_designationid"]).LogicalName;
                                Guid   id7          = ((EntityReference)entity3["msnfp_designationid"]).Id;
                                entity8["msnfp_designationid"] = new EntityReference(logicalName6, id7);
                            }
                            entity8["msnfp_transactionidentifier"] = (entity3.Contains("msnfp_transactionidentifier") ? ((string)entity3["msnfp_transactionidentifier"]) : string.Empty);
                            entity8["msnfp_dataentryreference"]    = (entity3.Contains("msnfp_dataentryreference") ? ((string)entity3["msnfp_dataentryreference"]) : string.Empty);
                            entity8["msnfp_chequenumber"]          = (entity3.Contains("msnfp_chequenumber") ? ((string)entity3["msnfp_chequenumber"]) : string.Empty);
                            if (entity3.Contains("msnfp_receiveddate"))
                            {
                                entity8["msnfp_depositdate"] = (DateTime)entity3["msnfp_receiveddate"];
                            }
                            entity8["msnfp_firstname"]               = (entity3.Contains("msnfp_firstname") ? ((string)entity3["msnfp_firstname"]) : string.Empty);
                            entity8["msnfp_lastname"]                = (entity3.Contains("msnfp_lastname") ? ((string)entity3["msnfp_lastname"]) : string.Empty);
                            entity8["msnfp_billing_line1"]           = (entity3.Contains("msnfp_billing_line1") ? ((string)entity3["msnfp_billing_line1"]) : string.Empty);
                            entity8["msnfp_billing_line2"]           = (entity3.Contains("msnfp_billing_line2") ? ((string)entity3["msnfp_billing_line2"]) : string.Empty);
                            entity8["msnfp_billing_line3"]           = (entity3.Contains("msnfp_billing_line3") ? ((string)entity3["msnfp_billing_line3"]) : string.Empty);
                            entity8["msnfp_billing_city"]            = (entity3.Contains("msnfp_billing_city") ? ((string)entity3["msnfp_billing_city"]) : string.Empty);
                            entity8["msnfp_billing_stateorprovince"] = (entity3.Contains("msnfp_billing_stateorprovince") ? ((string)entity3["msnfp_billing_stateorprovince"]) : string.Empty);
                            entity8["msnfp_billing_postalcode"]      = (entity3.Contains("msnfp_billing_postalcode") ? ((string)entity3["msnfp_billing_postalcode"]) : string.Empty);
                            entity8["msnfp_billing_country"]         = (entity3.Contains("msnfp_billing_country") ? ((string)entity3["msnfp_billing_country"]) : string.Empty);
                            entity8["msnfp_emailaddress1"]           = (entity3.Contains("msnfp_emailaddress1") ? ((string)entity3["msnfp_emailaddress1"]) : string.Empty);
                            entity8["msnfp_telephone1"]              = (entity3.Contains("msnfp_telephone1") ? ((string)entity3["msnfp_telephone1"]) : string.Empty);
                            entity8["msnfp_anonymous"]               = attributeValue;
                            entity8["msnfp_chargeoncreate"]          = false;
                            if (empty5 != string.Empty && empty6 != Guid.Empty)
                            {
                                entity8["ownerid"] = new EntityReference(empty5, empty6);
                            }
                            entity8["statuscode"]            = new OptionSetValue(844060000);
                            entity8["msnfp_configurationid"] = entity3.GetAttributeValue <EntityReference>("msnfp_configurationid");
                            Guid id8 = organizationService.Create(entity8);
                            entity3["msnfp_transactionid"] = new EntityReference("msnfp_transaction", id8);
                        }
                        catch (Exception ex)
                        {
                            localContext.TracingService.Trace("error : " + ex.Message);
                            entity3["msnfp_statusupdated"] = new OptionSetValue(844060001);
                            localContext.TracingService.Trace("Status code updated to failed");
                        }
                        organizationService.Update(entity3);
                    }
                }
            }
            localContext.TracingService.Trace("---------Exiting DonationImportCreate.cs---------");
        }
        private void UpdateEventSponsorshipsAvailable(Entity queriedEntityRecord, OrganizationServiceContext orgSvcContext, IOrganizationService service, LocalPluginContext localContext)
        {
            Entity        eventSponsorship = service.Retrieve("msnfp_eventsponsorship", queriedEntityRecord.Id, new ColumnSet("msnfp_eventsponsorshipid", "msnfp_sum_available"));
            Entity        entity           = new Entity(eventSponsorship.LogicalName, eventSponsorship.Id);
            List <Entity> source           = (from a in orgSvcContext.CreateQuery("msnfp_sponsorship")
                                              where ((EntityReference)a["msnfp_eventsponsorshipid"]).Id == eventSponsorship.Id && ((OptionSetValue)a["statuscode"]).Value != 844060001
                                              select a).ToList();

            if (queriedEntityRecord.Contains("msnfp_quantity") && queriedEntityRecord["msnfp_quantity"] != null)
            {
                entity["msnfp_sum_available"] = (int)queriedEntityRecord["msnfp_quantity"] - source.Count();
            }
            service.Update(entity);
        }
예제 #15
0
        protected override void ExecuteCrmPlugin(LocalPluginContext localContext)
        {
            if (localContext == null)
            {
                throw new ArgumentNullException("localContext");
            }
            IPluginExecutionContext    pluginExecutionContext     = localContext.PluginExecutionContext;
            IOrganizationService       organizationService        = localContext.OrganizationService;
            OrganizationServiceContext organizationServiceContext = new OrganizationServiceContext(organizationService);

            localContext.TracingService.Trace("---------Triggered ReceiptUpdate.cs---------");
            if (pluginExecutionContext.Depth > 2)
            {
                localContext.TracingService.Trace("Context.depth > 2. Exiting Plugin.");
                return;
            }
            Utilities utilities = new Utilities();

            localContext.TracingService.Trace("---------Entering ReceiptUpdate.cs Main Function---------");
            ColumnSet columnSet      = new ColumnSet("msnfp_receiptid", "msnfp_generatedorprinted", "msnfp_amount_nonreceiptable", "msnfp_receiptnumber", "msnfp_receiptissuedate", "msnfp_amount_receipted", "msnfp_receiptgeneration", "msnfp_receiptstackid", "msnfp_receiptstatus", "msnfp_replacesreceiptid", "statuscode", "modifiedby", "msnfp_customerid", "msnfp_lastdonationdate");
            Entity    primaryReceipt = organizationService.Retrieve("msnfp_receipt", pluginExecutionContext.PrimaryEntityId, columnSet);

            localContext.TracingService.Trace("Retrieved primary receipt. Id:" + primaryReceipt.Id.ToString() + ", Number" + primaryReceipt.GetAttributeValue <string>("msnfp_receiptnumber"));
            string optionSetValueLabel = Utilities.GetOptionSetValueLabel("msnfp_receipt", "statuscode", ((OptionSetValue)primaryReceipt["statuscode"]).Value, organizationService);
            string text = (primaryReceipt.Contains("msnfp_receiptnumber") ? ((string)primaryReceipt["msnfp_receiptnumber"]) : string.Empty);

            if (primaryReceipt.Contains("statuscode") && ((OptionSetValue)primaryReceipt["statuscode"]).Value == 844060000)
            {
                localContext.TracingService.Trace("Statuscode : Void");
                primaryReceipt["msnfp_receiptstatus"] = "Receipt Voided";
                Entity entity = new Entity("msnfp_receiptlog");
                if (primaryReceipt.Contains("msnfp_receiptstackid"))
                {
                    entity["msnfp_receiptstackid"] = new EntityReference("msnfp_receiptstack", ((EntityReference)primaryReceipt["msnfp_receiptstackid"]).Id);
                }
                primaryReceipt["msnfp_identifier"] = text + " - " + optionSetValueLabel;
                entity["msnfp_receiptnumber"]      = (primaryReceipt.Contains("msnfp_receiptnumber") ? ((string)primaryReceipt["msnfp_receiptnumber"]) : string.Empty);
                entity["msnfp_entryreason"]        = "RECEIPT VOIDED";
                entity["msnfp_entryby"]            = ((EntityReference)primaryReceipt["modifiedby"]).Name;
                if (pluginExecutionContext.Depth < 2)
                {
                    organizationService.Create(entity);
                    localContext.TracingService.Trace("Receipt log created as Void.");
                }
                else
                {
                    localContext.TracingService.Trace("Receipt log not created due to context.depth >= 2.");
                }
            }
            else if (primaryReceipt.Contains("statuscode") && ((OptionSetValue)primaryReceipt["statuscode"]).Value == 844060001)
            {
                localContext.TracingService.Trace("Statuscode : Void (Reissued)");
                Entity        entity2 = new Entity("msnfp_receipt");
                string        text2   = string.Empty;
                string        empty   = string.Empty;
                double        num     = 0.0;
                int           num2    = 0;
                Entity        entity3 = new Entity("msnfp_receiptlog");
                List <Entity> list    = (from g in organizationServiceContext.CreateQuery("msnfp_transaction")
                                         where ((EntityReference)g["msnfp_taxreceiptid"]).Id == primaryReceipt.Id && (((OptionSetValue)g["statuscode"]).Value == 844060000 || ((OptionSetValue)g["statuscode"]).Value == 844060004 || ((OptionSetValue)g["statuscode"]).Value == 1)
                                         select g).ToList();
                localContext.TracingService.Trace(list.Count + " Transactions");
                List <Entity> list2 = (from ev in organizationServiceContext.CreateQuery("msnfp_eventpackage")
                                       where ((EntityReference)ev["msnfp_taxreceiptid"]).Id == primaryReceipt.Id && ((OptionSetValue)ev["statuscode"]).Value == 844060000
                                       select ev).ToList();
                localContext.TracingService.Trace(list2.Count + " Event Packages");
                List <Entity> list3 = (from ps in organizationServiceContext.CreateQuery("msnfp_paymentschedule")
                                       where ((EntityReference)ps["msnfp_taxreceiptid"]).Id == primaryReceipt.Id && (((OptionSetValue)ps["statuscode"]).Value == 844060000 || ((OptionSetValue)ps["statuscode"]).Value == 844060004 || ((OptionSetValue)ps["statuscode"]).Value == 1)
                                       select ps).ToList();
                localContext.TracingService.Trace(list3.Count + " Payment Schedules");
                if (list.Count > 0 || list2.Count > 0)
                {
                    localContext.TracingService.Trace("Got related transactions (" + list.Count + ") for this receipt.");
                    localContext.TracingService.Trace("Got related event packages (" + list2.Count + ") for this receipt.");
                    localContext.TracingService.Trace("Got related payment schedule(s) (" + list3.Count + ") for this receipt.");
                    decimal value   = default(decimal);
                    decimal value2  = default(decimal);
                    decimal d       = default(decimal);
                    decimal d2      = default(decimal);
                    Entity  entity4 = null;
                    if (primaryReceipt.Contains("msnfp_receiptstackid"))
                    {
                        entity4 = organizationService.Retrieve("msnfp_receiptstack", ((EntityReference)primaryReceipt["msnfp_receiptstackid"]).Id, new ColumnSet("msnfp_receiptstackid", "msnfp_prefix", "msnfp_currentrange", "msnfp_numberrange"));
                    }
                    if (entity4 != null)
                    {
                        localContext.TracingService.Trace("Receipt stack available.");
                        entity2["msnfp_receiptstackid"] = new EntityReference("msnfp_receiptstack", entity4.Id);
                        empty = (entity4.Contains("msnfp_prefix") ? ((string)entity4["msnfp_prefix"]) : string.Empty);
                        num   = (entity4.Contains("msnfp_currentrange") ? ((double)entity4["msnfp_currentrange"]) : 0.0);
                        switch (entity4.Contains("msnfp_numberrange") ? ((OptionSetValue)entity4["msnfp_numberrange"]).Value : 0)
                        {
                        case 844060006:
                            localContext.TracingService.Trace("number range : 6 digit");
                            text2 = empty + (num + 1.0).ToString().PadLeft(6, '0');
                            break;

                        case 844060008:
                            localContext.TracingService.Trace("number range : 8 digit");
                            text2 = empty + (num + 1.0).ToString().PadLeft(8, '0');
                            break;

                        case 844060010:
                            localContext.TracingService.Trace("number range : 10 digit");
                            text2 = empty + (num + 1.0).ToString().PadLeft(10, '0');
                            break;
                        }
                        localContext.TracingService.Trace("receiptNumber : " + text2);
                        entity3["msnfp_receiptstackid"] = new EntityReference("msnfp_receiptstack", entity4.Id);
                        double value3 = (primaryReceipt.Contains("msnfp_generatedorprinted") ? ((double)primaryReceipt["msnfp_generatedorprinted"]) : 0.0);
                        entity2["msnfp_generatedorprinted"] = Convert.ToDouble(value3);
                        entity2["msnfp_receiptnumber"]      = text2;
                        entity2["msnfp_identifier"]         = text2;
                        entity2["msnfp_receiptgeneration"]  = new OptionSetValue(844060000);
                        entity2["msnfp_replacesreceiptid"]  = new EntityReference("msnfp_receipt", primaryReceipt.Id);
                        if (list != null && list.Count > 0)
                        {
                            foreach (Entity item in list)
                            {
                                if (item.Contains("msnfp_amount_receipted"))
                                {
                                    value2 += ((Money)item["msnfp_amount_receipted"]).Value;
                                }
                                if (item.Contains("msnfp_amount_membership"))
                                {
                                    d += ((Money)item["msnfp_amount_membership"]).Value;
                                }
                                if (item.Contains("msnfp_amount_nonreceiptable"))
                                {
                                    d2 += ((Money)item["msnfp_amount_nonreceiptable"]).Value;
                                }
                                if (item.Contains("msnfp_amount"))
                                {
                                    value += ((Money)item["msnfp_amount"]).Value;
                                }
                            }
                        }
                        if (list2 != null && list2.Count > 0)
                        {
                            foreach (Entity item2 in list)
                            {
                                if (item2.Contains("msnfp_amount_receipted"))
                                {
                                    value2 += ((Money)item2["msnfp_amount_receipted"]).Value;
                                }
                                if (item2.Contains("msnfp_amount_membership"))
                                {
                                    d += ((Money)item2["msnfp_amount_membership"]).Value;
                                }
                                if (item2.Contains("msnfp_amount_nonreceiptable"))
                                {
                                    d2 += ((Money)item2["msnfp_amount_nonreceiptable"]).Value;
                                }
                                if (item2.Contains("msnfp_amount"))
                                {
                                    value += ((Money)item2["msnfp_amount"]).Value;
                                }
                            }
                        }
                        entity2["msnfp_amount_receipted"]      = new Money(value2);
                        entity2["msnfp_amount_nonreceiptable"] = new Money(d + d2);
                        string str = string.Empty;
                        if (primaryReceipt.Contains("msnfp_receiptissuedate"))
                        {
                            str = ((DateTime)primaryReceipt["msnfp_receiptissuedate"]).ToShortDateString();
                        }
                        entity2["msnfp_receiptstatus"] = "This receipt replaces receipt " + text + " issued on " + str;
                        if (primaryReceipt.Contains("msnfp_lastdonationdate"))
                        {
                            entity2["msnfp_lastdonationdate"] = (DateTime)primaryReceipt["msnfp_lastdonationdate"];
                        }
                        entity2["msnfp_receiptissuedate"] = DateTime.Now;
                        entity2["msnfp_transactioncount"] = list.Count;
                        entity2["msnfp_eventcount"]       = list2.Count;
                        entity2["msnfp_amount"]           = new Money(value);
                        entity2["statuscode"]             = new OptionSetValue(1);
                        if (primaryReceipt.Contains("msnfp_customerid"))
                        {
                            string logicalName = ((EntityReference)primaryReceipt["msnfp_customerid"]).LogicalName;
                            Guid   id          = ((EntityReference)primaryReceipt["msnfp_customerid"]).Id;
                            entity2["msnfp_customerid"] = new EntityReference(logicalName, id);
                        }
                        Guid id2  = organizationService.Create(entity2);
                        bool flag = true;
                        localContext.TracingService.Trace("Receipt created successfully. Update the receipt stacks current number by 1.");
                        entity4["msnfp_currentrange"] = num + 1.0;
                        organizationService.Update(entity4);
                        localContext.TracingService.Trace("Updated Receipt Stack current range to: " + (num + 1.0));
                        localContext.TracingService.Trace("new receipt created");
                        primaryReceipt["msnfp_identifier"]    = text + " - Reissued";
                        primaryReceipt["msnfp_receiptstatus"] = "Void";
                        entity3["msnfp_receiptnumber"]        = (primaryReceipt.Contains("msnfp_receiptnumber") ? ((string)primaryReceipt["msnfp_receiptnumber"]) : string.Empty);
                        entity3["msnfp_entryreason"]          = "RECEIPT REPLACED BY RECEIPT " + text2;
                        entity3["msnfp_entryby"] = ((EntityReference)primaryReceipt["modifiedby"]).Name;
                        organizationService.Create(entity3);
                        localContext.TracingService.Trace("Receipt log created as Void (Reissued).");
                        if (list != null)
                        {
                            foreach (Entity item3 in list)
                            {
                                Entity entity5 = organizationService.Retrieve("msnfp_transaction", item3.Id, new ColumnSet("msnfp_taxreceiptid"));
                                if (entity5 != null)
                                {
                                    entity5["msnfp_taxreceiptid"] = new EntityReference("msnfp_receipt", id2);
                                    organizationService.Update(entity5);
                                    localContext.TracingService.Trace("Updated gift with new receipt.");
                                }
                            }
                        }
                        if (list2 != null)
                        {
                            foreach (Entity item4 in list2)
                            {
                                Entity entity6 = organizationService.Retrieve("msnfp_eventpackage", item4.Id, new ColumnSet("msnfp_taxreceiptid"));
                                if (entity6 != null)
                                {
                                    entity6["msnfp_taxreceiptid"] = new EntityReference("msnfp_receipt", id2);
                                    organizationService.Update(entity6);
                                    localContext.TracingService.Trace("Updated event package with new receipt.");
                                }
                            }
                        }
                        foreach (Entity item5 in list3)
                        {
                            Entity entity7 = organizationService.Retrieve("msnfp_paymentschedule", item5.Id, new ColumnSet("msnfp_taxreceiptid"));
                            if (entity7 != null)
                            {
                                entity7["msnfp_taxreceiptid"] = new EntityReference("msnfp_receipt", id2);
                                organizationService.Update(entity7);
                                localContext.TracingService.Trace("Updated payment schedule with new receipt.");
                            }
                        }
                    }
                }
            }
            else if (primaryReceipt.Contains("statuscode") && ((OptionSetValue)primaryReceipt["statuscode"]).Value == 844060002)
            {
                localContext.TracingService.Trace("statuscode : Void (Payment Failed)");
                primaryReceipt["msnfp_receiptstatus"] = "Receipt Voided";
                Entity entity8 = new Entity("msnfp_receiptlog");
                if (primaryReceipt.Contains("msnfp_receiptstackid"))
                {
                    entity8["msnfp_receiptstackid"] = new EntityReference("msnfp_receiptstack", ((EntityReference)primaryReceipt["msnfp_receiptstackid"]).Id);
                }
                primaryReceipt["msnfp_identifier"] = text + " - " + optionSetValueLabel;
                entity8["msnfp_receiptnumber"]     = (primaryReceipt.Contains("msnfp_receiptnumber") ? ((string)primaryReceipt["msnfp_receiptnumber"]) : string.Empty);
                entity8["msnfp_entryreason"]       = "PAYMENT FAILED RECEIPT VOIDED";
                entity8["msnfp_entryby"]           = ((EntityReference)primaryReceipt["modifiedby"]).Name;
                organizationService.Create(entity8);
                localContext.TracingService.Trace("receipt log created as Void (Payment Failed).");
            }
            organizationService.Update(primaryReceipt);
        }
        private void UpdateEventTicketTotals(Entity queriedEntityRecord, OrganizationServiceContext orgSvcContext, IOrganizationService service, LocalPluginContext localContext)
        {
            localContext.TracingService.Trace("---------UpdateEventTicketTotals---------");
            if (!queriedEntityRecord.Contains("msnfp_eventticketid"))
            {
                return;
            }
            decimal       value       = default(decimal);
            Entity        eventTicket = service.Retrieve("msnfp_eventticket", ((EntityReference)queriedEntityRecord["msnfp_eventticketid"]).Id, new ColumnSet("msnfp_eventticketid", "msnfp_amount", "msnfp_quantity"));
            List <Entity> list        = (from a in orgSvcContext.CreateQuery("msnfp_ticket")
                                         where ((EntityReference)a["msnfp_eventticketid"]).Id == eventTicket.Id && ((OptionSetValue)a["statuscode"]).Value != 844060001
                                         select a).ToList();

            foreach (Entity item in list)
            {
                if (item.Contains("msnfp_amount") && item["msnfp_amount"] != null)
                {
                    value += ((Money)item["msnfp_amount"]).Value;
                }
            }
            eventTicket["msnfp_sum_sold"] = list.Count();
            eventTicket["msnfp_val_sold"] = new Money(value);
            if (eventTicket.Contains("msnfp_quantity") && eventTicket["msnfp_quantity"] != null)
            {
                eventTicket["msnfp_sum_available"] = (int)eventTicket["msnfp_quantity"] - list.Count();
            }
            service.Update(eventTicket);
        }
        private void AddOrUpdateThisRecordWithAzure(Entity queriedEntityRecord, Entity configurationRecord, LocalPluginContext localContext, IOrganizationService service, IPluginExecutionContext context)
        {
            localContext.TracingService.Trace("---------Send the Record to Azure---------");
            string messageName = context.MessageName;
            string text        = "ReceiptStack";
            string text2       = Utilities.GetAzureWebAPIURL(service, context);

            localContext.TracingService.Trace("Got API URL: " + text2);
            if (text2 != string.Empty)
            {
                localContext.TracingService.Trace("Getting Latest Info for Record: " + queriedEntityRecord["msnfp_receiptstackid"].ToString());
                MSNFP_ReceiptStack mSNFP_ReceiptStack = new MSNFP_ReceiptStack();
                mSNFP_ReceiptStack.ReceiptStackId = (Guid)queriedEntityRecord["msnfp_receiptstackid"];
                mSNFP_ReceiptStack.Identifier     = (queriedEntityRecord.Contains("msnfp_identifier") ? ((string)queriedEntityRecord["msnfp_identifier"]) : string.Empty);
                localContext.TracingService.Trace("Title: " + mSNFP_ReceiptStack.Identifier);
                if (queriedEntityRecord.Contains("msnfp_configurationid") && queriedEntityRecord["msnfp_configurationid"] != null)
                {
                    mSNFP_ReceiptStack.ConfigurationId = ((EntityReference)queriedEntityRecord["msnfp_configurationid"]).Id;
                    localContext.TracingService.Trace("Got msnfp_configurationid.");
                }
                else
                {
                    mSNFP_ReceiptStack.ConfigurationId = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_configurationid.");
                }
                if (queriedEntityRecord.Contains("msnfp_currentrange") && queriedEntityRecord["msnfp_currentrange"] != null)
                {
                    mSNFP_ReceiptStack.CurrentRange = (double)queriedEntityRecord["msnfp_currentrange"];
                    localContext.TracingService.Trace("Got msnfp_currentrange.");
                }
                else
                {
                    mSNFP_ReceiptStack.CurrentRange = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_currentrange.");
                }
                if (queriedEntityRecord.Contains("msnfp_numberrange") && queriedEntityRecord["msnfp_numberrange"] != null)
                {
                    mSNFP_ReceiptStack.NumberRange = ((OptionSetValue)queriedEntityRecord["msnfp_numberrange"]).Value;
                    localContext.TracingService.Trace("Got msnfp_numberrange.");
                }
                else
                {
                    mSNFP_ReceiptStack.NumberRange = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_numberrange.");
                }
                if (queriedEntityRecord.Contains("msnfp_prefix") && queriedEntityRecord["msnfp_prefix"] != null)
                {
                    mSNFP_ReceiptStack.Prefix = (string)queriedEntityRecord["msnfp_prefix"];
                    localContext.TracingService.Trace("Got msnfp_prefix.");
                }
                else
                {
                    mSNFP_ReceiptStack.Prefix = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_prefix.");
                }
                if (queriedEntityRecord.Contains("msnfp_receiptyear") && queriedEntityRecord["msnfp_receiptyear"] != null)
                {
                    mSNFP_ReceiptStack.ReceiptYear = ((OptionSetValue)queriedEntityRecord["msnfp_receiptyear"]).Value;
                    localContext.TracingService.Trace("Got msnfp_receiptyear.");
                }
                else
                {
                    mSNFP_ReceiptStack.ReceiptYear = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_receiptyear.");
                }
                if (queriedEntityRecord.Contains("msnfp_startingrange") && queriedEntityRecord["msnfp_startingrange"] != null)
                {
                    mSNFP_ReceiptStack.StartingRange = (double)queriedEntityRecord["msnfp_startingrange"];
                    localContext.TracingService.Trace("Got msnfp_startingrange.");
                }
                else
                {
                    mSNFP_ReceiptStack.StartingRange = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_startingrange.");
                }
                if (queriedEntityRecord.Contains("statecode") && queriedEntityRecord["statecode"] != null)
                {
                    mSNFP_ReceiptStack.StateCode = ((OptionSetValue)queriedEntityRecord["statecode"]).Value;
                    localContext.TracingService.Trace("Got statecode.");
                }
                else
                {
                    mSNFP_ReceiptStack.StateCode = null;
                    localContext.TracingService.Trace("Did NOT find statecode.");
                }
                if (queriedEntityRecord.Contains("statuscode") && queriedEntityRecord["statuscode"] != null)
                {
                    mSNFP_ReceiptStack.StatusCode = ((OptionSetValue)queriedEntityRecord["statuscode"]).Value;
                    localContext.TracingService.Trace("Got statuscode.");
                }
                else
                {
                    mSNFP_ReceiptStack.StatusCode = null;
                    localContext.TracingService.Trace("Did NOT find statuscode.");
                }
                if (messageName == "Create")
                {
                    mSNFP_ReceiptStack.CreatedOn = DateTime.UtcNow;
                }
                else if (queriedEntityRecord.Contains("createdon") && queriedEntityRecord["createdon"] != null)
                {
                    mSNFP_ReceiptStack.CreatedOn = (DateTime)queriedEntityRecord["createdon"];
                }
                else
                {
                    mSNFP_ReceiptStack.CreatedOn = null;
                }
                mSNFP_ReceiptStack.SyncDate = DateTime.UtcNow;
                if (messageName == "Delete")
                {
                    mSNFP_ReceiptStack.Deleted     = true;
                    mSNFP_ReceiptStack.DeletedDate = DateTime.UtcNow;
                }
                else
                {
                    mSNFP_ReceiptStack.Deleted     = false;
                    mSNFP_ReceiptStack.DeletedDate = null;
                }
                mSNFP_ReceiptStack.Configuration = null;
                mSNFP_ReceiptStack.Receipt       = new HashSet <MSNFP_Receipt>();
                mSNFP_ReceiptStack.ReceiptLog    = new HashSet <MSNFP_ReceiptLog>();
                localContext.TracingService.Trace("JSON object created");
                if (messageName == "Create")
                {
                    text2 = text2 + text + "/Create" + text;
                }
                else if (messageName == "Update" || messageName == "Delete")
                {
                    text2 = text2 + text + "/Update" + text;
                }
                MemoryStream memoryStream = new MemoryStream();
                DataContractJsonSerializer dataContractJsonSerializer = new DataContractJsonSerializer(typeof(MSNFP_ReceiptStack));
                dataContractJsonSerializer.WriteObject(memoryStream, mSNFP_ReceiptStack);
                byte[] array = memoryStream.ToArray();
                memoryStream.Close();
                string       @string      = Encoding.UTF8.GetString(array, 0, array.Length);
                WebAPIClient webAPIClient = new WebAPIClient();
                webAPIClient.Headers[HttpRequestHeader.ContentType] = "application/json";
                webAPIClient.Headers["Padlock"] = (string)configurationRecord["msnfp_apipadlocktoken"];
                webAPIClient.Encoding           = Encoding.UTF8;
                localContext.TracingService.Trace("---------Preparing JSON---------");
                localContext.TracingService.Trace("Converted to json API URL : " + text2);
                localContext.TracingService.Trace("JSON: " + @string);
                localContext.TracingService.Trace("---------End of Preparing JSON---------");
                localContext.TracingService.Trace("Sending data to Azure.");
                string text3 = webAPIClient.UploadString(text2, @string);
                localContext.TracingService.Trace("Got response.");
                localContext.TracingService.Trace("Response: " + text3);
                Utilities utilities = new Utilities();
                utilities.CheckAPIReturnJSONForErrors(text3, configurationRecord.GetAttributeValue <OptionSetValue>("msnfp_showapierrorresponses"), localContext.TracingService);
            }
            else
            {
                localContext.TracingService.Trace("No API URL or Enable Portal Pages. Exiting workflow.");
            }
        }
        private void AddOrUpdateThisRecordWithAzure(Entity queriedEntityRecord, Entity configurationRecord, LocalPluginContext localContext, IOrganizationService service, IPluginExecutionContext context)
        {
            localContext.TracingService.Trace("---------Send the Record to Azure---------");
            string messageName = context.MessageName;
            string text        = "MembershipCategory";
            string text2       = Utilities.GetAzureWebAPIURL(service, context);

            localContext.TracingService.Trace("Got API URL: " + text2);
            if (text2 != string.Empty)
            {
                localContext.TracingService.Trace("Getting Latest Info for Record: " + queriedEntityRecord["msnfp_membershipcategoryid"].ToString());
                MSNFP_MembershipCategory mSNFP_MembershipCategory = new MSNFP_MembershipCategory();
                mSNFP_MembershipCategory.MembershipCategoryId = (Guid)queriedEntityRecord["msnfp_membershipcategoryid"];
                mSNFP_MembershipCategory.Name = (queriedEntityRecord.Contains("msnfp_name") ? ((string)queriedEntityRecord["msnfp_name"]) : string.Empty);
                localContext.TracingService.Trace("Title: " + mSNFP_MembershipCategory.Name);
                if (queriedEntityRecord.Contains("msnfp_amount_membership") && queriedEntityRecord["msnfp_amount_membership"] != null)
                {
                    mSNFP_MembershipCategory.AmountMembership = ((Money)queriedEntityRecord["msnfp_amount_membership"]).Value;
                    localContext.TracingService.Trace("Got msnfp_amount_membership.");
                }
                else
                {
                    mSNFP_MembershipCategory.AmountMembership = default(decimal);
                    localContext.TracingService.Trace("Did NOT find msnfp_amount_membership.");
                }
                if (queriedEntityRecord.Contains("msnfp_amount_tax") && queriedEntityRecord["msnfp_amount_tax"] != null)
                {
                    mSNFP_MembershipCategory.AmountTax = ((Money)queriedEntityRecord["msnfp_amount_tax"]).Value;
                    localContext.TracingService.Trace("Got msnfp_amount_tax.");
                }
                else
                {
                    mSNFP_MembershipCategory.AmountTax = default(decimal);
                    localContext.TracingService.Trace("Did NOT find msnfp_amount_tax.");
                }
                if (queriedEntityRecord.Contains("msnfp_amount") && queriedEntityRecord["msnfp_amount"] != null)
                {
                    mSNFP_MembershipCategory.Amount = ((Money)queriedEntityRecord["msnfp_amount"]).Value;
                    localContext.TracingService.Trace("Got msnfp_amount.");
                }
                else
                {
                    mSNFP_MembershipCategory.Amount = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_amount.");
                }
                if (queriedEntityRecord.Contains("msnfp_goodwilldate") && queriedEntityRecord["msnfp_goodwilldate"] != null)
                {
                    mSNFP_MembershipCategory.GoodWillDate = (DateTime)queriedEntityRecord["msnfp_goodwilldate"];
                    localContext.TracingService.Trace("Got msnfp_goodwilldate.");
                }
                else
                {
                    mSNFP_MembershipCategory.GoodWillDate = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_goodwilldate.");
                }
                if (queriedEntityRecord.Contains("msnfp_membershipduration") && queriedEntityRecord["msnfp_membershipduration"] != null)
                {
                    mSNFP_MembershipCategory.MembershipDuration = ((OptionSetValue)queriedEntityRecord["msnfp_membershipduration"]).Value;
                    localContext.TracingService.Trace("Got msnfp_membershipduration.");
                }
                else
                {
                    mSNFP_MembershipCategory.MembershipDuration = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_membershipduration.");
                }
                if (queriedEntityRecord.Contains("msnfp_renewaldate") && queriedEntityRecord["msnfp_renewaldate"] != null)
                {
                    mSNFP_MembershipCategory.RenewalDate = (DateTime)queriedEntityRecord["msnfp_renewaldate"];
                    localContext.TracingService.Trace("Got msnfp_renewaldate.");
                }
                else
                {
                    mSNFP_MembershipCategory.RenewalDate = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_renewaldate.");
                }
                if (queriedEntityRecord.Contains("transactioncurrencyid") && queriedEntityRecord["transactioncurrencyid"] != null)
                {
                    mSNFP_MembershipCategory.TransactionCurrencyId = ((EntityReference)queriedEntityRecord["transactioncurrencyid"]).Id;
                    localContext.TracingService.Trace("Got transactioncurrencyid.");
                }
                else
                {
                    mSNFP_MembershipCategory.TransactionCurrencyId = null;
                    localContext.TracingService.Trace("Did NOT find transactioncurrencyid.");
                }
                if (queriedEntityRecord.Contains("statecode") && queriedEntityRecord["statecode"] != null)
                {
                    mSNFP_MembershipCategory.StateCode = ((OptionSetValue)queriedEntityRecord["statecode"]).Value;
                    localContext.TracingService.Trace("Got statecode.");
                }
                else
                {
                    mSNFP_MembershipCategory.StateCode = null;
                    localContext.TracingService.Trace("Did NOT find statecode.");
                }
                if (queriedEntityRecord.Contains("statuscode") && queriedEntityRecord["statuscode"] != null)
                {
                    mSNFP_MembershipCategory.StatusCode = ((OptionSetValue)queriedEntityRecord["statuscode"]).Value;
                    localContext.TracingService.Trace("Got statuscode.");
                }
                else
                {
                    mSNFP_MembershipCategory.StatusCode = null;
                    localContext.TracingService.Trace("Did NOT find statuscode.");
                }
                if (messageName == "Create")
                {
                    mSNFP_MembershipCategory.CreatedOn = DateTime.UtcNow;
                }
                else if (queriedEntityRecord.Contains("createdon") && queriedEntityRecord["createdon"] != null)
                {
                    mSNFP_MembershipCategory.CreatedOn = (DateTime)queriedEntityRecord["createdon"];
                }
                else
                {
                    mSNFP_MembershipCategory.CreatedOn = null;
                }
                mSNFP_MembershipCategory.SyncDate = DateTime.UtcNow;
                if (messageName == "Delete")
                {
                    mSNFP_MembershipCategory.Deleted     = true;
                    mSNFP_MembershipCategory.DeletedDate = DateTime.UtcNow;
                }
                else
                {
                    mSNFP_MembershipCategory.Deleted     = false;
                    mSNFP_MembershipCategory.DeletedDate = null;
                }
                mSNFP_MembershipCategory.Membership = new HashSet <MSNFP_Membership>();
                localContext.TracingService.Trace("JSON object created");
                if (messageName == "Create")
                {
                    text2 = text2 + text + "/Create" + text;
                }
                else if (messageName == "Update" || messageName == "Delete")
                {
                    text2 = text2 + text + "/Update" + text;
                }
                MemoryStream memoryStream = new MemoryStream();
                DataContractJsonSerializer dataContractJsonSerializer = new DataContractJsonSerializer(typeof(MSNFP_MembershipCategory));
                dataContractJsonSerializer.WriteObject(memoryStream, mSNFP_MembershipCategory);
                byte[] array = memoryStream.ToArray();
                memoryStream.Close();
                string       @string      = Encoding.UTF8.GetString(array, 0, array.Length);
                WebAPIClient webAPIClient = new WebAPIClient();
                webAPIClient.Headers[HttpRequestHeader.ContentType] = "application/json";
                webAPIClient.Headers["Padlock"] = (string)configurationRecord["msnfp_apipadlocktoken"];
                webAPIClient.Encoding           = Encoding.UTF8;
                localContext.TracingService.Trace("---------Preparing JSON---------");
                localContext.TracingService.Trace("Converted to json API URL : " + text2);
                localContext.TracingService.Trace("JSON: " + @string);
                localContext.TracingService.Trace("---------End of Preparing JSON---------");
                localContext.TracingService.Trace("Sending data to Azure.");
                string text3 = webAPIClient.UploadString(text2, @string);
                localContext.TracingService.Trace("Got response.");
                localContext.TracingService.Trace("Response: " + text3);
                Utilities utilities = new Utilities();
                utilities.CheckAPIReturnJSONForErrors(text3, configurationRecord.GetAttributeValue <OptionSetValue>("msnfp_showapierrorresponses"), localContext.TracingService);
            }
            else
            {
                localContext.TracingService.Trace("No API URL or Enable Portal Pages. Exiting plugin.");
            }
        }
 private AvsInfo AssignAVSValidationFieldsFromPaymentMethod(Entity paymentMethod, AvsInfo avsCheck, LocalPluginContext localContext, IOrganizationService service)
 {
     localContext.TracingService.Trace("Entering AssignAVSValidationFieldsFromPaymentMethod().");
     try
     {
         if (!paymentMethod.Contains("msnfp_billing_line1") || !paymentMethod.Contains("msnfp_billing_postalcode"))
         {
             localContext.TracingService.Trace("Customer is missing either msnfp_billing_line1 or msnfp_billing_postalcode fields on their payment method. Exiting plugin.");
             throw new Exception("Customer is missing either msnfp_billing_line1 or msnfp_billing_postalcode fields on their payment method. Exiting plugin.");
         }
         string[] array = ((string)paymentMethod["msnfp_billing_line1"]).Split(' ');
         if (array.Length <= 1)
         {
             localContext.TracingService.Trace("Could not split address for AVS Validation. Please ensure the Street 1 billing address on the payment method is in the form '123 Example Street'. Exiting plugin.");
             throw new ArgumentNullException("msnfp_billing_line1");
         }
         string text = (string)paymentMethod["msnfp_billing_line1"];
         localContext.TracingService.Trace("Unformatted Street Name: " + text);
         text = text.Replace(array[0], "").Trim(' ');
         localContext.TracingService.Trace("Formatted Street Name: " + text);
         localContext.TracingService.Trace("Formatted Street Number: " + array[0]);
         avsCheck.SetAvsStreetNumber(array[0]);
         avsCheck.SetAvsStreetName(text);
         avsCheck.SetAvsZipCode((string)paymentMethod["msnfp_billing_postalcode"]);
         if (paymentMethod.Contains("msnfp_emailaddress1"))
         {
             avsCheck.SetAvsEmail((string)paymentMethod["msnfp_emailaddress1"]);
         }
         avsCheck.SetAvsShipMethod("G");
         if (paymentMethod.Contains("msnfp_telephone1"))
         {
             avsCheck.SetAvsCustPhone((string)paymentMethod["msnfp_telephone1"]);
         }
         localContext.TracingService.Trace("Updated AVS Check variable successfully.");
     }
     catch (Exception ex)
     {
         localContext.TracingService.Trace("AssignAVSValidationFieldsFromPaymentMethod() Error: " + ex.ToString());
         throw new Exception("AssignAVSValidationFieldsFromPaymentMethod() Error: " + ex.ToString());
     }
     return(avsCheck);
 }
        private Guid CreateBrandNewOpportunityStageForOpportunity(Entity opportunityRecord, LocalPluginContext localContext, OrganizationServiceContext orgSvcContext, IOrganizationService service)
        {
            localContext.TracingService.Trace("---------Entering CreateBrandNewOpportunityStageForOpportunity()---------");
            if (opportunityRecord == null)
            {
                localContext.TracingService.Trace("The variable opportunityRecord is null. Cannot create opportunity stage without an associated opportunity. Exiting Plugin.");
                throw new ArgumentNullException("opportunityRecord");
            }
            Entity entity = new Entity("msnfp_opportunitystage");

            string[] array = (opportunityRecord.Contains("stepname") ? ((string)opportunityRecord["stepname"]).Split('-') : new string[0]);
            string   text  = "";

            text = ((array.Length <= 1 && opportunityRecord.Contains("stepname")) ? ((string)opportunityRecord["stepname"]) : ((array.Length != 2) ? "Qualify" : array[1]));
            localContext.TracingService.Trace("Pipeline Step Name: " + text);
            entity["msnfp_stagename"]       = text;
            entity["msnfp_identifier"]      = text + " - " + DateTime.Now.ToShortDateString();
            entity["msnfp_startedon"]       = DateTime.UtcNow;
            entity["msnfp_appointments"]    = 0;
            entity["msnfp_emails"]          = 0;
            entity["msnfp_letters"]         = 0;
            entity["msnfp_phonecalls"]      = 0;
            entity["msnfp_tasks"]           = 0;
            entity["msnfp_totalactivities"] = 0;
            entity["msnfp_opportunityid"]   = new EntityReference("opportunity", opportunityRecord.Id);
            localContext.TracingService.Trace("Creating Opportunity Stage.");
            Guid result = service.Create(entity);

            localContext.TracingService.Trace("Opportunity Stage created with Id: " + result.ToString());
            localContext.TracingService.Trace("---------Exiting CreateBrandNewOpportunityStageForOpportunity()---------");
            return(result);
        }
        private void AddOrUpdateThisRecordWithAzure(Entity queriedEntityRecord, Entity configurationRecord, LocalPluginContext localContext, IOrganizationService service, IPluginExecutionContext context)
        {
            localContext.TracingService.Trace("---------Send the Record to Azure---------");
            string messageName = context.MessageName;
            string text        = "Receipt";
            string text2       = Utilities.GetAzureWebAPIURL(service, context);

            localContext.TracingService.Trace("Got API URL: " + text2);
            if (text2 != string.Empty)
            {
                localContext.TracingService.Trace("Getting Latest Info for Record: " + queriedEntityRecord["msnfp_receiptid"].ToString());
                MSNFP_Receipt mSNFP_Receipt = new MSNFP_Receipt();
                mSNFP_Receipt.ReceiptId  = (Guid)queriedEntityRecord["msnfp_receiptid"];
                mSNFP_Receipt.Identifier = (queriedEntityRecord.Contains("msnfp_identifier") ? ((string)queriedEntityRecord["msnfp_identifier"]) : string.Empty);
                localContext.TracingService.Trace("Title: " + mSNFP_Receipt.Identifier);
                if (queriedEntityRecord.Contains("msnfp_customerid") && queriedEntityRecord["msnfp_customerid"] != null)
                {
                    mSNFP_Receipt.CustomerId = ((EntityReference)queriedEntityRecord["msnfp_customerid"]).Id;
                    if (((EntityReference)queriedEntityRecord["msnfp_customerid"]).LogicalName.ToLower() == "contact")
                    {
                        mSNFP_Receipt.CustomerIdType = 2;
                    }
                    else if (((EntityReference)queriedEntityRecord["msnfp_customerid"]).LogicalName.ToLower() == "account")
                    {
                        mSNFP_Receipt.CustomerIdType = 1;
                    }
                    localContext.TracingService.Trace("Got msnfp_customerid.");
                }
                else
                {
                    mSNFP_Receipt.CustomerId     = null;
                    mSNFP_Receipt.CustomerIdType = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_customerid.");
                }
                if (queriedEntityRecord.Contains("msnfp_expectedtaxcredit") && queriedEntityRecord["msnfp_expectedtaxcredit"] != null)
                {
                    mSNFP_Receipt.ExpectedTaxCredit = ((Money)queriedEntityRecord["msnfp_expectedtaxcredit"]).Value;
                    localContext.TracingService.Trace("Got msnfp_expectedtaxcredit.");
                }
                else
                {
                    mSNFP_Receipt.ExpectedTaxCredit = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_expectedtaxcredit.");
                }
                if (queriedEntityRecord.Contains("msnfp_generatedorprinted") && queriedEntityRecord["msnfp_generatedorprinted"] != null)
                {
                    mSNFP_Receipt.GeneratedorPrinted = (double)queriedEntityRecord["msnfp_generatedorprinted"];
                    localContext.TracingService.Trace("Got msnfp_generatedorprinted.");
                }
                else
                {
                    mSNFP_Receipt.GeneratedorPrinted = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_generatedorprinted.");
                }
                if (queriedEntityRecord.Contains("msnfp_lastdonationdate") && queriedEntityRecord["msnfp_lastdonationdate"] != null)
                {
                    mSNFP_Receipt.LastDonationDate = (DateTime)queriedEntityRecord["msnfp_lastdonationdate"];
                    localContext.TracingService.Trace("Got msnfp_lastdonationdate.");
                }
                else
                {
                    mSNFP_Receipt.LastDonationDate = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_lastdonationdate.");
                }
                if (queriedEntityRecord.Contains("msnfp_amount_nonreceiptable") && queriedEntityRecord["msnfp_amount_nonreceiptable"] != null)
                {
                    mSNFP_Receipt.AmountNonReceiptable = ((Money)queriedEntityRecord["msnfp_amount_nonreceiptable"]).Value;
                    localContext.TracingService.Trace("Got msnfp_amount_nonreceiptable.");
                }
                else
                {
                    mSNFP_Receipt.AmountNonReceiptable = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_amount_nonreceiptable.");
                }
                if (queriedEntityRecord.Contains("msnfp_transactioncount") && queriedEntityRecord["msnfp_transactioncount"] != null)
                {
                    mSNFP_Receipt.TransactionCount = (int)queriedEntityRecord["msnfp_transactioncount"];
                    localContext.TracingService.Trace("Got msnfp_transactioncount.");
                }
                else
                {
                    mSNFP_Receipt.TransactionCount = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_transactioncount.");
                }
                if (queriedEntityRecord.Contains("msnfp_preferredlanguagecode") && queriedEntityRecord["msnfp_preferredlanguagecode"] != null)
                {
                    mSNFP_Receipt.PreferredLanguageCode = ((OptionSetValue)queriedEntityRecord["msnfp_preferredlanguagecode"]).Value;
                    localContext.TracingService.Trace("Got msnfp_preferredlanguagecode.");
                }
                else
                {
                    mSNFP_Receipt.PreferredLanguageCode = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_preferredlanguagecode.");
                }
                if (queriedEntityRecord.Contains("msnfp_receiptnumber") && queriedEntityRecord["msnfp_receiptnumber"] != null)
                {
                    mSNFP_Receipt.ReceiptNumber = (string)queriedEntityRecord["msnfp_receiptnumber"];
                    localContext.TracingService.Trace("Got msnfp_receiptnumber.");
                }
                else
                {
                    mSNFP_Receipt.ReceiptNumber = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_receiptnumber.");
                }
                if (queriedEntityRecord.Contains("msnfp_receiptgeneration") && queriedEntityRecord["msnfp_receiptgeneration"] != null)
                {
                    mSNFP_Receipt.ReceiptGeneration = ((OptionSetValue)queriedEntityRecord["msnfp_receiptgeneration"]).Value;
                    localContext.TracingService.Trace("Got msnfp_receiptgeneration.");
                }
                else
                {
                    mSNFP_Receipt.ReceiptGeneration = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_receiptgeneration.");
                }
                if (queriedEntityRecord.Contains("msnfp_receiptissuedate") && queriedEntityRecord["msnfp_receiptissuedate"] != null)
                {
                    mSNFP_Receipt.ReceiptIssueDate = (DateTime)queriedEntityRecord["msnfp_receiptissuedate"];
                    localContext.TracingService.Trace("Got msnfp_receiptissuedate.");
                }
                else
                {
                    mSNFP_Receipt.ReceiptIssueDate = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_receiptissuedate.");
                }
                if (queriedEntityRecord.Contains("msnfp_receiptstackid") && queriedEntityRecord["msnfp_receiptstackid"] != null)
                {
                    mSNFP_Receipt.ReceiptStackId = ((EntityReference)queriedEntityRecord["msnfp_receiptstackid"]).Id;
                    localContext.TracingService.Trace("Got msnfp_receiptstackid.");
                }
                else
                {
                    mSNFP_Receipt.ReceiptStackId = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_receiptstackid.");
                }
                if (queriedEntityRecord.Contains("msnfp_receiptstatus") && queriedEntityRecord["msnfp_receiptstatus"] != null)
                {
                    mSNFP_Receipt.ReceiptStatus = (string)queriedEntityRecord["msnfp_receiptstatus"];
                    localContext.TracingService.Trace("Got msnfp_receiptstatus.");
                }
                else
                {
                    mSNFP_Receipt.ReceiptStatus = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_receiptstatus.");
                }
                if (queriedEntityRecord.Contains("msnfp_amount_receipted") && queriedEntityRecord["msnfp_amount_receipted"] != null)
                {
                    mSNFP_Receipt.AmountReceipted = ((Money)queriedEntityRecord["msnfp_amount_receipted"]).Value;
                    localContext.TracingService.Trace("Got msnfp_amount_receipted.");
                }
                else
                {
                    mSNFP_Receipt.AmountReceipted = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_amount_receipted.");
                }
                if (queriedEntityRecord.Contains("msnfp_paymentscheduleid") && queriedEntityRecord["msnfp_paymentscheduleid"] != null)
                {
                    mSNFP_Receipt.PaymentScheduleId = ((EntityReference)queriedEntityRecord["msnfp_paymentscheduleid"]).Id;
                    localContext.TracingService.Trace("Got msnfp_paymentscheduleid.");
                }
                else
                {
                    mSNFP_Receipt.PaymentScheduleId = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_paymentscheduleid.");
                }
                if (queriedEntityRecord.Contains("msnfp_replacesreceiptid") && queriedEntityRecord["msnfp_replacesreceiptid"] != null)
                {
                    mSNFP_Receipt.ReplacesReceiptId = ((EntityReference)queriedEntityRecord["msnfp_replacesreceiptid"]).Id;
                    localContext.TracingService.Trace("Got msnfp_replacesreceiptid.");
                }
                else
                {
                    mSNFP_Receipt.ReplacesReceiptId = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_replacesreceiptid.");
                }
                if (queriedEntityRecord.Contains("msnfp_replacesreceiptid") && queriedEntityRecord["msnfp_replacesreceiptid"] != null)
                {
                    mSNFP_Receipt.ReplacesReceiptId = ((EntityReference)queriedEntityRecord["msnfp_replacesreceiptid"]).Id;
                    localContext.TracingService.Trace("Got msnfp_replacesreceiptid.");
                }
                else
                {
                    mSNFP_Receipt.ReplacesReceiptId = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_replacesreceiptid.");
                }
                if (queriedEntityRecord.Contains("msnfp_amount") && queriedEntityRecord["msnfp_amount"] != null)
                {
                    mSNFP_Receipt.Amount = ((Money)queriedEntityRecord["msnfp_amount"]).Value;
                    localContext.TracingService.Trace("Got msnfp_amount.");
                }
                else
                {
                    mSNFP_Receipt.Amount = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_amount.");
                }
                if (queriedEntityRecord.Contains("transactioncurrencyid") && queriedEntityRecord["transactioncurrencyid"] != null)
                {
                    mSNFP_Receipt.TransactionCurrencyId = ((EntityReference)queriedEntityRecord["transactioncurrencyid"]).Id;
                    localContext.TracingService.Trace("Got TransactionCurrencyId.");
                }
                else
                {
                    mSNFP_Receipt.TransactionCurrencyId = null;
                    localContext.TracingService.Trace("Did NOT find TransactionCurrencyId.");
                }
                if (queriedEntityRecord.Contains("msnfp_printed") && queriedEntityRecord["msnfp_printed"] != null)
                {
                    mSNFP_Receipt.Printed = (DateTime)queriedEntityRecord["msnfp_printed"];
                    localContext.TracingService.Trace("Got Printed.");
                }
                else
                {
                    mSNFP_Receipt.Printed = null;
                    localContext.TracingService.Trace("Did NOT find Printed.");
                }
                if (queriedEntityRecord.Contains("msnfp_deliverycode") && queriedEntityRecord["msnfp_deliverycode"] != null)
                {
                    mSNFP_Receipt.DeliveryCode = ((OptionSetValue)queriedEntityRecord["msnfp_deliverycode"]).Value;
                    localContext.TracingService.Trace("Got Delivery.");
                }
                else
                {
                    mSNFP_Receipt.DeliveryCode = null;
                    localContext.TracingService.Trace("Did NOT find Delivery.");
                }
                if (queriedEntityRecord.Contains("msnfp_emaildeliverystatuscode") && queriedEntityRecord["msnfp_emaildeliverystatuscode"] != null)
                {
                    mSNFP_Receipt.EmailDeliveryStatusCode = ((OptionSetValue)queriedEntityRecord["msnfp_emaildeliverystatuscode"]).Value;
                    localContext.TracingService.Trace("Got EmailDeliveryStatus.");
                }
                else
                {
                    mSNFP_Receipt.EmailDeliveryStatusCode = null;
                    localContext.TracingService.Trace("Did NOT find EmailDeliveryStatus.");
                }
                if (queriedEntityRecord.Contains("statecode") && queriedEntityRecord["statecode"] != null)
                {
                    mSNFP_Receipt.StateCode = ((OptionSetValue)queriedEntityRecord["statecode"]).Value;
                    localContext.TracingService.Trace("Got statecode.");
                }
                else
                {
                    mSNFP_Receipt.StateCode = null;
                    localContext.TracingService.Trace("Did NOT find statecode.");
                }
                if (queriedEntityRecord.Contains("statuscode") && queriedEntityRecord["statuscode"] != null)
                {
                    mSNFP_Receipt.StatusCode = ((OptionSetValue)queriedEntityRecord["statuscode"]).Value;
                    localContext.TracingService.Trace("Got statuscode.");
                }
                else
                {
                    mSNFP_Receipt.StatusCode = null;
                    localContext.TracingService.Trace("Did NOT find statuscode.");
                }
                if (messageName == "Create")
                {
                    mSNFP_Receipt.CreatedOn = DateTime.UtcNow;
                }
                else if (queriedEntityRecord.Contains("createdon") && queriedEntityRecord["createdon"] != null)
                {
                    mSNFP_Receipt.CreatedOn = (DateTime)queriedEntityRecord["createdon"];
                }
                else
                {
                    mSNFP_Receipt.CreatedOn = null;
                }
                mSNFP_Receipt.SyncDate = DateTime.UtcNow;
                if (messageName == "Delete")
                {
                    mSNFP_Receipt.Deleted     = true;
                    mSNFP_Receipt.DeletedDate = DateTime.UtcNow;
                }
                else
                {
                    mSNFP_Receipt.Deleted     = false;
                    mSNFP_Receipt.DeletedDate = null;
                }
                mSNFP_Receipt.PaymentSchedule        = null;
                mSNFP_Receipt.ReceiptStack           = null;
                mSNFP_Receipt.ReplacesReceipt        = null;
                mSNFP_Receipt.InverseReplacesReceipt = new HashSet <MSNFP_Receipt>();
                localContext.TracingService.Trace("JSON object created");
                if (messageName == "Create")
                {
                    text2 = text2 + text + "/Create" + text;
                }
                else if (messageName == "Update" || messageName == "Delete")
                {
                    text2 = text2 + text + "/Update" + text;
                }
                MemoryStream memoryStream = new MemoryStream();
                DataContractJsonSerializer dataContractJsonSerializer = new DataContractJsonSerializer(typeof(MSNFP_Receipt));
                dataContractJsonSerializer.WriteObject(memoryStream, mSNFP_Receipt);
                byte[] array = memoryStream.ToArray();
                memoryStream.Close();
                string       @string      = Encoding.UTF8.GetString(array, 0, array.Length);
                WebAPIClient webAPIClient = new WebAPIClient();
                webAPIClient.Headers[HttpRequestHeader.ContentType] = "application/json";
                webAPIClient.Headers["Padlock"] = (string)configurationRecord["msnfp_apipadlocktoken"];
                webAPIClient.Encoding           = Encoding.UTF8;
                localContext.TracingService.Trace("---------Preparing JSON---------");
                localContext.TracingService.Trace("Converted to json API URL : " + text2);
                localContext.TracingService.Trace("JSON: " + @string);
                localContext.TracingService.Trace("---------End of Preparing JSON---------");
                localContext.TracingService.Trace("Sending data to Azure.");
                string str = webAPIClient.UploadString(text2, @string);
                localContext.TracingService.Trace("Got response.");
                localContext.TracingService.Trace("Response: " + str);
            }
            else
            {
                localContext.TracingService.Trace("No API URL or Enable Portal Pages. Exiting workflow.");
            }
        }
        private Guid CreateNextOpportunityStageForOpportunity(Entity opportunityRecord, LocalPluginContext localContext, OrganizationServiceContext orgSvcContext, IOrganizationService service)
        {
            localContext.TracingService.Trace("---------Entering CreateNextOpportunityStageForOpportunity()---------");
            if (opportunityRecord == null)
            {
                localContext.TracingService.Trace("The variable opportunityRecord is null. Cannot create opportunity stage without an associated opportunity. Exiting Plugin.");
                throw new ArgumentNullException("opportunityRecord");
            }
            Entity entity = new Entity("msnfp_opportunitystage");
            Entity latestOpportunityStageForThisOpportunity = GetLatestOpportunityStageForThisOpportunity(opportunityRecord.Id, localContext, orgSvcContext);

            if (latestOpportunityStageForThisOpportunity == null)
            {
                localContext.TracingService.Trace("Error: There is no last opportunity stage but one was attempted to be retrieved. Exiting plugin.");
                throw new ArgumentNullException("lastOpportunityStage");
            }
            localContext.TracingService.Trace("Updating opportunity stage name: " + (string)latestOpportunityStageForThisOpportunity["msnfp_stagename"]);
            string[] array = ((string)opportunityRecord["stepname"]).Split('-');
            string   text  = "";

            text = ((array.Length > 1) ? array[1] : ((string)opportunityRecord["stepname"]));
            localContext.TracingService.Trace("Pipeline Step Name: " + text);
            if (text == (string)latestOpportunityStageForThisOpportunity["msnfp_stagename"])
            {
                localContext.TracingService.Trace("Stage names are both: " + text);
            }
            localContext.TracingService.Trace("Getting Appointments");
            DateTime    started = (latestOpportunityStageForThisOpportunity.Attributes.ContainsKey("msnfp_startedon") ? latestOpportunityStageForThisOpportunity.GetAttributeValue <DateTime>("msnfp_startedon") : DateTime.Now);
            List <Guid> list    = (from s in orgSvcContext.CreateQuery("appointment")
                                   where ((EntityReference)s["regardingobjectid"]).Id == opportunityRecord.Id && (DateTime)s["createdon"] >= started
                                   select s.Id).ToList();

            localContext.TracingService.Trace("Got Appointments: " + list.Count);
            localContext.TracingService.Trace("Getting Emails");
            List <Guid> list2 = (from s in orgSvcContext.CreateQuery("email")
                                 where ((EntityReference)s["regardingobjectid"]).Id == opportunityRecord.Id && (DateTime)s["createdon"] >= started
                                 select s.Id).ToList();

            localContext.TracingService.Trace("Got Emails: " + list2.Count);
            localContext.TracingService.Trace("Getting Letters");
            List <Guid> list3 = (from s in orgSvcContext.CreateQuery("letter")
                                 where ((EntityReference)s["regardingobjectid"]).Id == opportunityRecord.Id && (DateTime)s["createdon"] >= started
                                 select s.Id).ToList();

            localContext.TracingService.Trace("Got Letters: " + list3.Count);
            localContext.TracingService.Trace("Getting Phonecalls");
            List <Guid> list4 = (from s in orgSvcContext.CreateQuery("phonecall")
                                 where ((EntityReference)s["regardingobjectid"]).Id == opportunityRecord.Id && (DateTime)s["createdon"] >= started
                                 select s.Id).ToList();

            localContext.TracingService.Trace("Got Phonecalls: " + list4.Count);
            localContext.TracingService.Trace("Getting Tasks");
            List <Guid> list5 = (from s in orgSvcContext.CreateQuery("task")
                                 where ((EntityReference)s["regardingobjectid"]).Id == opportunityRecord.Id && (DateTime)s["createdon"] >= started
                                 select s.Id).ToList();

            localContext.TracingService.Trace("Got Tasks: " + list5.Count);
            latestOpportunityStageForThisOpportunity["msnfp_finishedon"] = DateTime.UtcNow;
            if (latestOpportunityStageForThisOpportunity.Attributes.ContainsKey("msnfp_startedon"))
            {
                localContext.TracingService.Trace("Days in stage: " + Math.Round((DateTime.Now - (DateTime)latestOpportunityStageForThisOpportunity["msnfp_startedon"]).TotalDays, MidpointRounding.AwayFromZero));
                latestOpportunityStageForThisOpportunity["msnfp_daysinstage"] = (int)Math.Round((DateTime.Now - (DateTime)latestOpportunityStageForThisOpportunity["msnfp_startedon"]).TotalDays, MidpointRounding.AwayFromZero);
            }
            latestOpportunityStageForThisOpportunity["msnfp_appointments"]    = list.Count;
            latestOpportunityStageForThisOpportunity["msnfp_emails"]          = list2.Count;
            latestOpportunityStageForThisOpportunity["msnfp_letters"]         = list3.Count;
            latestOpportunityStageForThisOpportunity["msnfp_phonecalls"]      = list4.Count;
            latestOpportunityStageForThisOpportunity["msnfp_tasks"]           = list5.Count;
            latestOpportunityStageForThisOpportunity["msnfp_totalactivities"] = list.Count + list2.Count + list3.Count + list4.Count + list5.Count;
            localContext.TracingService.Trace("Saving changes to previous stage: " + (string)latestOpportunityStageForThisOpportunity["msnfp_stagename"]);
            orgSvcContext.UpdateObject(latestOpportunityStageForThisOpportunity);
            orgSvcContext.SaveChanges();
            localContext.TracingService.Trace("Update complete. Previous Stage End Date: " + DateTime.Now.ToString());
            localContext.TracingService.Trace("Creating New Opportunity Stage with name: " + text);
            entity["msnfp_stagename"]       = text;
            entity["msnfp_identifier"]      = text + " - " + DateTime.Now.ToShortDateString();
            entity["msnfp_startedon"]       = DateTime.Now;
            entity["msnfp_appointments"]    = 0;
            entity["msnfp_emails"]          = 0;
            entity["msnfp_letters"]         = 0;
            entity["msnfp_phonecalls"]      = 0;
            entity["msnfp_tasks"]           = 0;
            entity["msnfp_totalactivities"] = 0;
            entity["msnfp_opportunityid"]   = new EntityReference("opportunity", opportunityRecord.Id);
            Guid result = service.Create(entity);

            localContext.TracingService.Trace("Opportunity Stage created with Id: " + result.ToString());
            localContext.TracingService.Trace("---------Exiting CreateNextOpportunityStageForOpportunity()---------");
            return(result);
        }
        private void UpdateEventTicketsAvailable(Entity queriedEntityRecord, OrganizationServiceContext orgSvcContext, IOrganizationService service, LocalPluginContext localContext)
        {
            localContext.TracingService.Trace("---------UpdateEventTicketsAvailable---------");
            Entity        eventTicket = service.Retrieve("msnfp_eventticket", queriedEntityRecord.Id, new ColumnSet("msnfp_eventticketid", "msnfp_sum_available"));
            List <Entity> source      = (from a in orgSvcContext.CreateQuery("msnfp_ticket")
                                         where ((EntityReference)a["msnfp_eventticketid"]).Id == eventTicket.Id && ((OptionSetValue)a["statuscode"]).Value != 844060001
                                         select a).ToList();

            if (queriedEntityRecord.Contains("msnfp_quantity") && queriedEntityRecord["msnfp_quantity"] != null)
            {
                eventTicket["msnfp_sum_available"] = (int)queriedEntityRecord["msnfp_quantity"] - source.Count();
            }
            service.Update(eventTicket);
        }
        private void UpdateExistingOpportunityStage(Entity opportunityRecord, LocalPluginContext localContext, OrganizationServiceContext orgSvcContext)
        {
            localContext.TracingService.Trace("---------Entering UpdateExistingOpportunityStage()---------");
            if (opportunityRecord == null)
            {
                localContext.TracingService.Trace("The variable opportunityRecord is null. Cannot update opportunity stage without an associated opportunity. Exiting Plugin.");
                throw new ArgumentNullException("opportunityRecord");
            }
            Entity latestOpportunityStageForThisOpportunity = GetLatestOpportunityStageForThisOpportunity(opportunityRecord.Id, localContext, orgSvcContext);

            if (latestOpportunityStageForThisOpportunity == null)
            {
                localContext.TracingService.Trace("The variable opportunityStage is null. Cannot update the opportunity stage as it is not found. Exiting Plugin.");
                throw new ArgumentNullException("opportunityStage");
            }
            DateTime    started = (latestOpportunityStageForThisOpportunity.Attributes.ContainsKey("msnfp_startedon") ? latestOpportunityStageForThisOpportunity.GetAttributeValue <DateTime>("msnfp_startedon") : DateTime.Now);
            List <Guid> list    = (from s in orgSvcContext.CreateQuery("appointment")
                                   where ((EntityReference)s["regardingobjectid"]).Id == opportunityRecord.Id && (DateTime)s["createdon"] >= started
                                   select s.Id).ToList();

            localContext.TracingService.Trace("Got Appointments: " + list.Count);
            localContext.TracingService.Trace("Getting Emails");
            List <Guid> list2 = (from s in orgSvcContext.CreateQuery("email")
                                 where ((EntityReference)s["regardingobjectid"]).Id == opportunityRecord.Id && (DateTime)s["createdon"] >= started
                                 select s.Id).ToList();

            localContext.TracingService.Trace("Got Emails: " + list2.Count);
            localContext.TracingService.Trace("Getting Letters");
            List <Guid> list3 = (from s in orgSvcContext.CreateQuery("letter")
                                 where ((EntityReference)s["regardingobjectid"]).Id == opportunityRecord.Id && (DateTime)s["createdon"] >= started
                                 select s.Id).ToList();

            localContext.TracingService.Trace("Got Letters: " + list3.Count);
            localContext.TracingService.Trace("Getting Phonecalls");
            List <Guid> list4 = (from s in orgSvcContext.CreateQuery("phonecall")
                                 where ((EntityReference)s["regardingobjectid"]).Id == opportunityRecord.Id && (DateTime)s["createdon"] >= started
                                 select s.Id).ToList();

            localContext.TracingService.Trace("Got Phonecalls: " + list4.Count);
            localContext.TracingService.Trace("Getting Tasks");
            List <Guid> list5 = (from s in orgSvcContext.CreateQuery("task")
                                 where ((EntityReference)s["regardingobjectid"]).Id == opportunityRecord.Id && (DateTime)s["createdon"] >= started
                                 select s.Id).ToList();

            localContext.TracingService.Trace("Got Tasks: " + list5.Count);
            if (latestOpportunityStageForThisOpportunity.Attributes.ContainsKey("msnfp_startedon"))
            {
                localContext.TracingService.Trace("Days in stage: " + Math.Round((DateTime.Now - (DateTime)latestOpportunityStageForThisOpportunity["msnfp_startedon"]).TotalDays, MidpointRounding.AwayFromZero));
                latestOpportunityStageForThisOpportunity["msnfp_daysinstage"] = (int)Math.Round((DateTime.Now - (DateTime)latestOpportunityStageForThisOpportunity["msnfp_startedon"]).TotalDays, MidpointRounding.AwayFromZero);
            }
            latestOpportunityStageForThisOpportunity["msnfp_appointments"]    = list.Count;
            latestOpportunityStageForThisOpportunity["msnfp_emails"]          = list2.Count;
            latestOpportunityStageForThisOpportunity["msnfp_letters"]         = list3.Count;
            latestOpportunityStageForThisOpportunity["msnfp_phonecalls"]      = list4.Count;
            latestOpportunityStageForThisOpportunity["msnfp_tasks"]           = list5.Count;
            latestOpportunityStageForThisOpportunity["msnfp_totalactivities"] = list.Count + list2.Count + list3.Count + list4.Count + list5.Count;
            localContext.TracingService.Trace("Opportunity statecode: " + ((OptionSetValue)opportunityRecord["statecode"]).Value);
            if (((OptionSetValue)opportunityRecord["statecode"]).Value != 0)
            {
                localContext.TracingService.Trace("Setting finish date to now as the opportunity status is inactive.");
                latestOpportunityStageForThisOpportunity["msnfp_finishedon"] = DateTime.UtcNow;
            }
            localContext.TracingService.Trace("Updating Opportunity Stage.");
            orgSvcContext.UpdateObject(latestOpportunityStageForThisOpportunity);
            orgSvcContext.SaveChanges();
            localContext.TracingService.Trace("Updated Opportunity Stage.");
            localContext.TracingService.Trace("---------Exiting UpdateExistingOpportunityStage()---------");
        }
        private void AddOrUpdateThisRecordWithAzure(Entity queriedEntityRecord, Entity configurationRecord, LocalPluginContext localContext, IOrganizationService service, IPluginExecutionContext context)
        {
            localContext.TracingService.Trace("---------Send the Record to Azure---------");
            string messageName = context.MessageName;
            string text        = "EventTicket";
            string text2       = Utilities.GetAzureWebAPIURL(service, context);

            localContext.TracingService.Trace("Got API URL: " + text2);
            if (text2 != string.Empty)
            {
                localContext.TracingService.Trace("Getting Latest Info for Record: " + queriedEntityRecord["msnfp_eventticketid"].ToString());
                MSNFP_EventTicket mSNFP_EventTicket = new MSNFP_EventTicket();
                mSNFP_EventTicket.EvenTicketId = (Guid)queriedEntityRecord["msnfp_eventticketid"];
                if (queriedEntityRecord.Contains("msnfp_amount") && queriedEntityRecord["msnfp_amount"] != null)
                {
                    mSNFP_EventTicket.Amount = ((Money)queriedEntityRecord["msnfp_amount"]).Value;
                    localContext.TracingService.Trace("Got msnfp_amount");
                }
                else
                {
                    mSNFP_EventTicket.Amount = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_amount.");
                }
                if (queriedEntityRecord.Contains("msnfp_amount_receipted") && queriedEntityRecord["msnfp_amount_receipted"] != null)
                {
                    mSNFP_EventTicket.AmountReceipted = ((Money)queriedEntityRecord["msnfp_amount_receipted"]).Value;
                    localContext.TracingService.Trace("Got msnfp_amount_receipted.");
                }
                else
                {
                    mSNFP_EventTicket.AmountReceipted = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_amount_receipted.");
                }
                if (queriedEntityRecord.Contains("msnfp_amount_nonreceiptable") && queriedEntityRecord["msnfp_amount_nonreceiptable"] != null)
                {
                    mSNFP_EventTicket.AmountNonReceiptable = ((Money)queriedEntityRecord["msnfp_amount_nonreceiptable"]).Value;
                    localContext.TracingService.Trace("Got msnfp_amount_nonreceiptable.");
                }
                else
                {
                    mSNFP_EventTicket.AmountNonReceiptable = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_amount_nonreceiptable.");
                }
                if (queriedEntityRecord.Contains("msnfp_amount_tax") && queriedEntityRecord["msnfp_amount_tax"] != null)
                {
                    mSNFP_EventTicket.AmountTax = ((Money)queriedEntityRecord["msnfp_amount_tax"]).Value;
                    localContext.TracingService.Trace("Got msnfp_amount_tax.");
                }
                else
                {
                    mSNFP_EventTicket.AmountTax = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_amount_tax.");
                }
                if (queriedEntityRecord.Contains("msnfp_description") && queriedEntityRecord["msnfp_description"] != null)
                {
                    mSNFP_EventTicket.Description = (string)queriedEntityRecord["msnfp_description"];
                    localContext.TracingService.Trace("Got msnfp_description.");
                }
                else
                {
                    mSNFP_EventTicket.Description = string.Empty;
                    localContext.TracingService.Trace("Did NOT find msnfp_description.");
                }
                if (queriedEntityRecord.Contains("msnfp_eventid") && queriedEntityRecord["msnfp_eventid"] != null)
                {
                    mSNFP_EventTicket.EventId = ((EntityReference)queriedEntityRecord["msnfp_eventid"]).Id;
                    localContext.TracingService.Trace("Got msnfp_eventid.");
                }
                else
                {
                    mSNFP_EventTicket.EventId = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_eventid.");
                }
                if (queriedEntityRecord.Contains("msnfp_maxspots") && queriedEntityRecord["msnfp_maxspots"] != null)
                {
                    mSNFP_EventTicket.MaxSpots = (int)queriedEntityRecord["msnfp_maxspots"];
                    localContext.TracingService.Trace("Got msnfp_maxspots.");
                }
                else
                {
                    mSNFP_EventTicket.MaxSpots = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_maxspots.");
                }
                if (queriedEntityRecord.Contains("msnfp_registrationsperticket") && queriedEntityRecord["msnfp_registrationsperticket"] != null)
                {
                    mSNFP_EventTicket.RegistrationsPerTicket = (int)queriedEntityRecord["msnfp_registrationsperticket"];
                    localContext.TracingService.Trace("Got msnfp_registrationsperticket.");
                }
                else
                {
                    mSNFP_EventTicket.RegistrationsPerTicket = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_registrationsperticket.");
                }
                if (queriedEntityRecord.Contains("msnfp_sum_available") && queriedEntityRecord["msnfp_sum_available"] != null)
                {
                    mSNFP_EventTicket.SumAvailable = (int)queriedEntityRecord["msnfp_sum_available"];
                    localContext.TracingService.Trace("Got msnfp_sum_available.");
                }
                else
                {
                    mSNFP_EventTicket.SumAvailable = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_sum_available.");
                }
                if (queriedEntityRecord.Contains("msnfp_sum_sold") && queriedEntityRecord["msnfp_sum_sold"] != null)
                {
                    mSNFP_EventTicket.SumSold = (int)queriedEntityRecord["msnfp_sum_sold"];
                    localContext.TracingService.Trace("Got msnfp_sum_sold.");
                }
                else
                {
                    mSNFP_EventTicket.SumSold = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_sum_sold.");
                }
                if (queriedEntityRecord.Contains("msnfp_tickets") && queriedEntityRecord["msnfp_tickets"] != null)
                {
                    mSNFP_EventTicket.Tickets = (int)queriedEntityRecord["msnfp_tickets"];
                    localContext.TracingService.Trace("Got msnfp_tickets.");
                }
                else
                {
                    mSNFP_EventTicket.Tickets = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_tickets.");
                }
                if (queriedEntityRecord.Contains("msnfp_identifier") && queriedEntityRecord["msnfp_identifier"] != null)
                {
                    mSNFP_EventTicket.Identifier = (string)queriedEntityRecord["msnfp_identifier"];
                    localContext.TracingService.Trace("Got msnfp_identifier.");
                }
                else
                {
                    mSNFP_EventTicket.Identifier = string.Empty;
                    localContext.TracingService.Trace("Did NOT find msnfp_identifier.");
                }
                if (queriedEntityRecord.Contains("msnfp_val_sold") && queriedEntityRecord["msnfp_val_sold"] != null)
                {
                    mSNFP_EventTicket.ValTickets = ((Money)queriedEntityRecord["msnfp_val_sold"]).Value;
                    localContext.TracingService.Trace("Got msnfp_val_sold.");
                }
                else
                {
                    mSNFP_EventTicket.ValTickets = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_val_sold.");
                }
                if (queriedEntityRecord.Contains("transactioncurrencyid") && queriedEntityRecord["transactioncurrencyid"] != null)
                {
                    mSNFP_EventTicket.TransactionCurrencyId = ((EntityReference)queriedEntityRecord["transactioncurrencyid"]).Id;
                    localContext.TracingService.Trace("Got transactioncurrencyid.");
                }
                else
                {
                    mSNFP_EventTicket.TransactionCurrencyId = null;
                    localContext.TracingService.Trace("Did NOT find transactioncurrencyid.");
                }
                if (queriedEntityRecord.Contains("statecode") && queriedEntityRecord["statecode"] != null)
                {
                    mSNFP_EventTicket.StateCode = ((OptionSetValue)queriedEntityRecord["statecode"]).Value;
                    localContext.TracingService.Trace("Got statecode.");
                }
                else
                {
                    mSNFP_EventTicket.StateCode = null;
                    localContext.TracingService.Trace("Did NOT find statecode.");
                }
                if (queriedEntityRecord.Contains("statuscode") && queriedEntityRecord["statuscode"] != null)
                {
                    mSNFP_EventTicket.StatusCode = ((OptionSetValue)queriedEntityRecord["statuscode"]).Value;
                    localContext.TracingService.Trace("Got statuscode.");
                }
                else
                {
                    mSNFP_EventTicket.StatusCode = null;
                    localContext.TracingService.Trace("Did NOT find statuscode.");
                }
                if (messageName == "Create")
                {
                    mSNFP_EventTicket.CreatedOn = DateTime.UtcNow;
                }
                else if (queriedEntityRecord.Contains("createdon") && queriedEntityRecord["createdon"] != null)
                {
                    mSNFP_EventTicket.CreatedOn = (DateTime)queriedEntityRecord["createdon"];
                }
                else
                {
                    mSNFP_EventTicket.CreatedOn = null;
                }
                mSNFP_EventTicket.SyncDate = DateTime.UtcNow;
                if (messageName == "Delete")
                {
                    mSNFP_EventTicket.Deleted     = true;
                    mSNFP_EventTicket.DeletedDate = DateTime.UtcNow;
                }
                else
                {
                    mSNFP_EventTicket.Deleted     = false;
                    mSNFP_EventTicket.DeletedDate = null;
                }
                localContext.TracingService.Trace("JSON object created");
                if (messageName == "Create")
                {
                    text2 = text2 + text + "/Create" + text;
                }
                else if (messageName == "Update" || messageName == "Delete")
                {
                    text2 = text2 + text + "/Update" + text;
                }
                MemoryStream memoryStream = new MemoryStream();
                DataContractJsonSerializer dataContractJsonSerializer = new DataContractJsonSerializer(typeof(MSNFP_EventTicket));
                dataContractJsonSerializer.WriteObject(memoryStream, mSNFP_EventTicket);
                byte[] array = memoryStream.ToArray();
                memoryStream.Close();
                string       @string      = Encoding.UTF8.GetString(array, 0, array.Length);
                WebAPIClient webAPIClient = new WebAPIClient();
                webAPIClient.Headers[HttpRequestHeader.ContentType] = "application/json";
                webAPIClient.Headers["Padlock"] = (string)configurationRecord["msnfp_apipadlocktoken"];
                webAPIClient.Encoding           = Encoding.UTF8;
                localContext.TracingService.Trace("---------Preparing JSON---------");
                localContext.TracingService.Trace("Converted to json API URL : " + text2);
                localContext.TracingService.Trace("JSON: " + @string);
                localContext.TracingService.Trace("---------End of Preparing JSON---------");
                localContext.TracingService.Trace("Sending data to Azure.");
                string str = webAPIClient.UploadString(text2, @string);
                localContext.TracingService.Trace("Got response.");
                localContext.TracingService.Trace("Response: " + str);
            }
            else
            {
                localContext.TracingService.Trace("No API URL or Enable Portal Pages. Exiting plugin.");
            }
        }
        private Entity GetLatestOpportunityStageForThisOpportunity(Guid opportunityId, LocalPluginContext localContext, OrganizationServiceContext orgSvcContext)
        {
            localContext.TracingService.Trace("---------Entering GetLatestOpportunityStageForThisOpportunity()---------");
            List <Entity> list = (from s in orgSvcContext.CreateQuery("msnfp_opportunitystage")
                                  where ((EntityReference)s["msnfp_opportunityid"]).Id == opportunityId && (DateTime)(DateTime?)s.GetAttributeValue <DateTime>("msnfp_finishedon") == null
                                  select s).ToList();

            localContext.TracingService.Trace("opportunityStages.Count = " + list.Count);
            if (list.Count > 0)
            {
                localContext.TracingService.Trace("Order list by created on");
                list = list.OrderByDescending((Entity s) => s["createdon"]).ToList();
                localContext.TracingService.Trace("Opportunity Stage Id = " + list[0].Id.ToString());
                localContext.TracingService.Trace("Opportunity Stage Stage Name = " + list[0]["msnfp_stagename"].ToString());
                localContext.TracingService.Trace("---------Exiting GetLatestOpportunityStageForThisOpportunity()---------");
                return(list[0]);
            }
            localContext.TracingService.Trace("No opportunity stage found. Exiting function.");
            localContext.TracingService.Trace("---------Exiting GetLatestOpportunityStageForThisOpportunity()---------");
            return(null);
        }
        private void UpdateEventTotalRegistration(Entity queriedEntityRecord, OrganizationServiceContext orgSvcContext, IOrganizationService service, LocalPluginContext localContext)
        {
            localContext.TracingService.Trace("---------Update Event Total Registration---------");
            if (!queriedEntityRecord.Contains("msnfp_eventid"))
            {
                return;
            }
            Entity        eventRecord = service.Retrieve("msnfp_event", ((EntityReference)queriedEntityRecord["msnfp_eventid"]).Id, new ColumnSet("msnfp_eventid", "msnfp_sum_totalregistrations"));
            int           num         = 0;
            List <Entity> list        = (from a in orgSvcContext.CreateQuery("msnfp_eventticket")
                                         where ((EntityReference)a["msnfp_eventid"]).Id == eventRecord.Id && ((OptionSetValue)a["statuscode"]).Value != 844060000
                                         select a).ToList();

            foreach (Entity item in list)
            {
                if (item.Contains("msnfp_sum_totalregistrations") && item["msnfp_sum_totalregistrations"] != null)
                {
                    num += (int)item["msnfp_sum_totalregistrations"];
                }
            }
            eventRecord["msnfp_sum_totalregistrations"] = num;
            service.Update(eventRecord);
        }
        private bool CompareThisStageToLastOpportunityStage(Entity opportunityRecord, LocalPluginContext localContext, OrganizationServiceContext orgSvcContext)
        {
            localContext.TracingService.Trace("---------Entering CompareThisStageToLastOpportunityStage()---------");
            bool          flag = false;
            List <Entity> list = (from s in orgSvcContext.CreateQuery("msnfp_opportunitystage")
                                  where ((EntityReference)s["msnfp_opportunityid"]).Id == opportunityRecord.Id && (DateTime)(DateTime?)s.GetAttributeValue <DateTime>("msnfp_finishedon") == null
                                  select s).ToList();

            localContext.TracingService.Trace("opportunityStages.Count = " + list.Count);
            flag = false;
            if (list.Count > 0)
            {
                string[] array = ((string)opportunityRecord["stepname"]).Split('-');
                string   text  = "";
                text = ((array.Length > 1) ? array[1] : ((string)opportunityRecord["stepname"]));
                localContext.TracingService.Trace("opportunityRecord[stepname] = " + text);
                localContext.TracingService.Trace("opportunityStages[0][msnfp_stagename] = " + list[0]["msnfp_stagename"].ToString());
                localContext.TracingService.Trace("Equal = " + (text == (string)list[0]["msnfp_stagename"]));
                flag = ((!(text == (string)list[0]["msnfp_stagename"])) ? true : false);
            }
            else
            {
                localContext.TracingService.Trace("No opportunity stages exist for this opportunity.");
                flag = true;
            }
            localContext.TracingService.Trace("Different Stage Detected = " + flag);
            localContext.TracingService.Trace("---------Exiting CompareThisStageToLastOpportunityStage()---------");
            return(flag);
        }
예제 #29
0
        /// <summary>
        ///     Executes the plug-in.
        /// </summary>
        /// <param name="serviceProvider">The service provider.</param>
        /// <remarks>
        ///     For improved performance, Microsoft Dynamics CRM caches plug-in instances.
        ///     The plug-in's Execute method should be written to be stateless as the constructor
        ///     is not called for every invocation of the plug-in. Also, multiple system threads
        ///     could execute the plug-in at the same time. All per invocation state information
        ///     is stored in the context. This means that you should not use global variables in plug-ins.
        /// </remarks>
        public void Execute(IServiceProvider serviceProvider)
        {
            if (serviceProvider == null)
            {
                throw new ArgumentNullException("serviceProvider");
            }

            // Construct the Local plug-in context.
            var localContext = new LocalPluginContext(serviceProvider);

            localContext.Log(string.Format("Entered {0}.Execute()", ChildClassName));

            try
            {
                // Iterate over all of the expected registered events to ensure that the plugin
                // has been invoked by an expected event
                // For any given plug-in event at an instance in time, we would expect at most 1 result to match.
                var steps =
                    (from a in _newRegisteredEvents
                     where (
                               localContext.IsStage(a.Stage) &&
                               localContext.IsMessage(a.Message) &&
                               (string.IsNullOrWhiteSpace(a.EntityName) ||
                                a.EntityName == localContext.PrimaryEntityName)
                           )
                     select a);

                foreach (var step in steps)
                {
                    if ((step.Message == Messages.Update || step.Message == Messages.Create) && step.FilteringAttributes.Any())
                    {
                        var target = localContext.GetInputParameter<Entity>(InputParameters.Target);

                        var useStep = false;

                        foreach (var attributeName in target.Attributes.Select(a => a.Key))
                        {
                            useStep |= step.FilteringAttributes.Contains(attributeName);
                        }

                        if (!useStep)
                        {
                            localContext.Log(string.Format(string.Format(
                                "{0}.{5} is not fired for Entity: {1}, Message: {2}, Stage: {3}, Mode: {4}, FilteringAttributes filter is not met.",
                                ChildClassName,
                                localContext.PrimaryEntityName,
                                localContext.MessageName,
                                localContext.Stage,
                                localContext.Mode, step.Method.Name)));
                            continue;
                        }
                    }

                    var entityAction = step.Method;

                    localContext.Log(string.Format(
                        "{0} is firing for Entity: {1}, Message: {2}, Stage: {3}, Mode: {4}",
                        ChildClassName,
                        localContext.PrimaryEntityName,
                        localContext.MessageName,
                        localContext.Stage,
                        localContext.Mode));

                    localContext.DumpInputParameters();
                    localContext.DumpSharedVariables();

                    localContext.Log(entityAction.Name, "Start");

                    Invoke(entityAction, localContext);

                    localContext.Log(entityAction.Name, "End");
                }
            }
            catch (FaultException<OrganizationServiceFault> e)
            {
                localContext.Log(string.Format("Exception: {0}", e));

                // Handle the exception.
                throw;
            }
            catch (TargetInvocationException e)
            {
                localContext.Log(string.Format("Exception : {0}", e.InnerException));

                throw e.InnerException;
            }
            finally
            {
                localContext.Log(string.Format("Exiting {0}.Execute()", ChildClassName));
            }
        }
예제 #30
0
        protected override void ExecuteCrmPlugin(LocalPluginContext localContext)
        {
            if (localContext == null)
            {
                throw new ArgumentNullException("localContext");
            }
            localContext.TracingService.Trace("---------Triggered TributeOrMemoryUpdate.cs---------");
            IPluginExecutionContext    pluginExecutionContext     = localContext.PluginExecutionContext;
            IOrganizationService       organizationService        = localContext.OrganizationService;
            OrganizationServiceContext organizationServiceContext = new OrganizationServiceContext(organizationService);

            if (pluginExecutionContext.Depth > 1)
            {
                localContext.TracingService.Trace("Context.depth > 1 => Exiting Plugin. context.Depth: " + pluginExecutionContext.Depth);
                return;
            }
            string messageName = pluginExecutionContext.MessageName;
            Entity configurationRecordByUser = Utilities.GetConfigurationRecordByUser(pluginExecutionContext, organizationService, localContext.TracingService);
            Entity entity = null;

            if (!pluginExecutionContext.InputParameters.Contains("Target") || !(pluginExecutionContext.InputParameters["Target"] is Entity))
            {
                return;
            }
            entity = (Entity)pluginExecutionContext.InputParameters["Target"];
            if (entity == null)
            {
                throw new InvalidPluginExecutionException("'Target' is null. Exiting plugin.");
            }
            if (entity.GetAttributeValue <EntityReference>("msnfp_duplicatetributeid") == null)
            {
                return;
            }
            EntityReference  attributeValue   = entity.GetAttributeValue <EntityReference>("msnfp_duplicatetributeid");
            QueryByAttribute queryByAttribute = new QueryByAttribute("msnfp_transaction");

            queryByAttribute.AddAttributeValue("msnfp_tributeid", attributeValue.Id);
            queryByAttribute.ColumnSet = new ColumnSet("msnfp_transactionid");
            EntityCollection entityCollection = organizationService.RetrieveMultiple(queryByAttribute);

            if (entityCollection != null && entityCollection.Entities != null)
            {
                localContext.TracingService.Trace("Found " + entityCollection.Entities.Count + " Transactions for Duplicate Tribute.");
                foreach (Entity entity4 in entityCollection.Entities)
                {
                    localContext.TracingService.Trace("Updating Transaction:" + entity4.Id.ToString());
                    entity4["msnfp_tributeid"] = new EntityReference(entity.LogicalName, entity.Id);
                    organizationService.Update(entity4);
                    localContext.TracingService.Trace("Transaction Updated.");
                }
            }
            Entity entity2 = new Entity(attributeValue.LogicalName, attributeValue.Id);

            entity2["statecode"]  = new OptionSetValue(1);
            entity2["statuscode"] = new OptionSetValue(2);
            organizationService.Update(entity2);
            Entity entity3 = new Entity(entity.LogicalName, entity.Id);

            entity3["msnfp_duplicatetributeid"] = null;
            organizationService.Update(entity3);
            localContext.TracingService.Trace("Cleared Duplicate Field");
        }
        private void AddOrUpdateThisRecordWithAzure(Entity queriedEntityRecord, Entity configurationRecord, LocalPluginContext localContext, IOrganizationService service, IPluginExecutionContext context)
        {
            localContext.TracingService.Trace("---------Send the Record to Azure---------");
            string messageName = context.MessageName;
            string text        = "Response";
            string text2       = Utilities.GetAzureWebAPIURL(service, context);

            localContext.TracingService.Trace("Got API URL: " + text2);
            if (text2 != string.Empty)
            {
                localContext.TracingService.Trace("Getting Latest Info for Record: " + queriedEntityRecord["msnfp_responseid"].ToString());
                MSNFP_Response mSNFP_Response = new MSNFP_Response();
                mSNFP_Response.ResponseId = (Guid)queriedEntityRecord["msnfp_responseid"];
                if (queriedEntityRecord.Contains("msnfp_transactionid") && queriedEntityRecord["msnfp_transactionid"] != null)
                {
                    mSNFP_Response.TransactionId = ((EntityReference)queriedEntityRecord["msnfp_transactionid"]).Id;
                    localContext.TracingService.Trace("Got msnfp_transactionid.");
                }
                else
                {
                    mSNFP_Response.TransactionId = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_transactionid.");
                }
                if (queriedEntityRecord.Contains("msnfp_response") && queriedEntityRecord["msnfp_response"] != null)
                {
                    mSNFP_Response.Result = (string)queriedEntityRecord["msnfp_response"];
                    localContext.TracingService.Trace("Got msnfp_response.");
                }
                else
                {
                    localContext.TracingService.Trace("Did NOT find msnfp_response.");
                }
                if (queriedEntityRecord.Contains("msnfp_identifier") && queriedEntityRecord["msnfp_identifier"] != null)
                {
                    mSNFP_Response.Identifier = (string)queriedEntityRecord["msnfp_identifier"];
                    localContext.TracingService.Trace("Got msnfp_identifier.");
                }
                else
                {
                    mSNFP_Response.Identifier = null;
                    localContext.TracingService.Trace("Did NOT find msnfp_identifier.");
                }
                if (queriedEntityRecord.Contains("statecode") && queriedEntityRecord["statecode"] != null)
                {
                    mSNFP_Response.StateCode = ((OptionSetValue)queriedEntityRecord["statecode"]).Value;
                    localContext.TracingService.Trace("Got statecode.");
                }
                else
                {
                    mSNFP_Response.StateCode = null;
                    localContext.TracingService.Trace("Did NOT find statecode.");
                }
                if (queriedEntityRecord.Contains("statuscode") && queriedEntityRecord["statuscode"] != null)
                {
                    mSNFP_Response.StatusCode = ((OptionSetValue)queriedEntityRecord["statuscode"]).Value;
                    localContext.TracingService.Trace("Got statuscode.");
                }
                else
                {
                    mSNFP_Response.StatusCode = null;
                    localContext.TracingService.Trace("Did NOT find statuscode.");
                }
                if (messageName == "Create")
                {
                    mSNFP_Response.CreatedOn = DateTime.UtcNow;
                }
                else if (queriedEntityRecord.Contains("createdon") && queriedEntityRecord["createdon"] != null)
                {
                    mSNFP_Response.CreatedOn = (DateTime)queriedEntityRecord["createdon"];
                }
                else
                {
                    mSNFP_Response.CreatedOn = null;
                }
                mSNFP_Response.SyncDate = DateTime.UtcNow;
                if (messageName == "Delete")
                {
                    mSNFP_Response.Deleted     = true;
                    mSNFP_Response.DeletedDate = DateTime.UtcNow;
                    localContext.TracingService.Trace("Setting Deleted Date to:" + mSNFP_Response.DeletedDate.ToString());
                }
                else
                {
                    mSNFP_Response.Deleted     = false;
                    mSNFP_Response.DeletedDate = null;
                }
                localContext.TracingService.Trace("JSON object created");
                if (messageName == "Create")
                {
                    text2 = text2 + text + "/Create" + text;
                }
                else if (messageName == "Update" || messageName == "Delete")
                {
                    text2 = text2 + text + "/Update" + text;
                }
                MemoryStream memoryStream = new MemoryStream();
                DataContractJsonSerializer dataContractJsonSerializer = new DataContractJsonSerializer(typeof(MSNFP_Response));
                localContext.TracingService.Trace("Attempt to create JSON via serialization.");
                dataContractJsonSerializer.WriteObject(memoryStream, mSNFP_Response);
                byte[] array = memoryStream.ToArray();
                memoryStream.Close();
                string       @string      = Encoding.UTF8.GetString(array, 0, array.Length);
                WebAPIClient webAPIClient = new WebAPIClient();
                webAPIClient.Headers[HttpRequestHeader.ContentType] = "application/json";
                webAPIClient.Headers["Padlock"] = (string)configurationRecord["msnfp_apipadlocktoken"];
                webAPIClient.Encoding           = Encoding.UTF8;
                localContext.TracingService.Trace("---------Preparing JSON---------");
                localContext.TracingService.Trace("Converted to json API URL : " + text2);
                localContext.TracingService.Trace("JSON: " + @string);
                localContext.TracingService.Trace("---------End of Preparing JSON---------");
                localContext.TracingService.Trace("Sending data to Azure.");
                string str = webAPIClient.UploadString(text2, @string);
                localContext.TracingService.Trace("Got response.");
                localContext.TracingService.Trace("Response: " + str);
            }
            else
            {
                localContext.TracingService.Trace("No API URL or Enable Portal Pages. Exiting workflow.");
            }
        }
        private void UpdateReceiptAmountForThisTransaction(Guid receiptRecordID, LocalPluginContext localContext, IOrganizationService service, IPluginExecutionContext context)
        {
            localContext.TracingService.Trace("Entering UpdateReceiptAmountForThisTransaction()");
            OrganizationServiceContext organizationServiceContext = new OrganizationServiceContext(service);
            ColumnSet columnSet = new ColumnSet("msnfp_receiptid", "createdon", "msnfp_customerid", "msnfp_expectedtaxcredit", "msnfp_generatedorprinted", "msnfp_lastdonationdate", "msnfp_amount_nonreceiptable", "msnfp_transactioncount", "msnfp_preferredlanguagecode", "msnfp_receiptnumber", "msnfp_receiptgeneration", "msnfp_receiptissuedate", "msnfp_receiptstackid", "msnfp_receiptstatus", "msnfp_amount_receipted", "msnfp_paymentscheduleid", "msnfp_replacesreceiptid", "msnfp_identifier", "msnfp_amount");
            Entity    entity    = service.Retrieve("msnfp_receipt", receiptRecordID, columnSet);

            localContext.TracingService.Trace("Old msnfp_amount_receipted: " + ((Money)entity["msnfp_amount_receipted"]).Value);
            entity["msnfp_amount_receipted"] = new Money(0m);
            localContext.TracingService.Trace("Old msnfp_amount_nonreceiptable: " + ((Money)entity["msnfp_amount_nonreceiptable"]).Value);
            entity["msnfp_amount_nonreceiptable"] = new Money(0m);
            localContext.TracingService.Trace("Old msnfp_amount: " + ((Money)entity["msnfp_amount"]).Value);
            entity["msnfp_amount"]           = new Money(0m);
            entity["msnfp_transactioncount"] = 0;
            List <Entity> list = (from t in organizationServiceContext.CreateQuery("msnfp_transaction")
                                  where ((EntityReference)t["msnfp_taxreceiptid"]).Id == receiptRecordID
                                  select t).ToList();

            foreach (Entity item in list)
            {
                decimal num  = default(decimal);
                decimal num2 = default(decimal);
                decimal num3 = default(decimal);
                decimal num4 = default(decimal);
                localContext.TracingService.Trace("------------------");
                localContext.TracingService.Trace("Processing Transaction ID: " + ((Guid)item["msnfp_transactionid"]).ToString());
                num  = (item.Contains("msnfp_amount") ? ((Money)item["msnfp_amount"]).Value : 0m);
                num2 = (item.Contains("msnfp_amount_receipted") ? ((Money)item["msnfp_amount_receipted"]).Value : 0m);
                num3 = (item.Contains("msnfp_amount_membership") ? ((Money)item["msnfp_amount_membership"]).Value : 0m);
                num4 = (item.Contains("msnfp_amount_nonreceiptable") ? ((Money)item["msnfp_amount_nonreceiptable"]).Value : 0m);
                localContext.TracingService.Trace("Got membership amount and non-receiptable amount.");
                localContext.TracingService.Trace("Amount Receipted " + num2 + " Membership Amount: " + num3 + " Non-receiptable : " + num4);
                localContext.TracingService.Trace("Old msnfp_amount_receipted: " + ((Money)entity["msnfp_amount_receipted"]).Value);
                entity["msnfp_amount_receipted"] = new Money(((Money)entity["msnfp_amount_receipted"]).Value + new Money(num2).Value);
                localContext.TracingService.Trace("New msnfp_amount_receipted: " + ((Money)entity["msnfp_amount_receipted"]).Value);
                localContext.TracingService.Trace("Old msnfp_amount_nonreceiptable: " + ((Money)entity["msnfp_amount_nonreceiptable"]).Value);
                entity["msnfp_amount_nonreceiptable"] = new Money(((Money)entity["msnfp_amount_nonreceiptable"]).Value + new Money(num3 + num4).Value);
                localContext.TracingService.Trace("New msnfp_amount_nonreceiptable: " + ((Money)entity["msnfp_amount_nonreceiptable"]).Value);
                localContext.TracingService.Trace("Old msnfp_amount: " + ((Money)entity["msnfp_amount"]).Value);
                entity["msnfp_amount"] = new Money(((Money)entity["msnfp_amount"]).Value + new Money(num).Value);
                localContext.TracingService.Trace("New msnfp_amount: " + ((Money)entity["msnfp_amount"]).Value);
                entity["msnfp_generatedorprinted"] = Convert.ToDouble(1);
                entity["msnfp_receiptgeneration"]  = new OptionSetValue(844060000);
                entity["msnfp_receiptissuedate"]   = DateTime.Now;
                localContext.TracingService.Trace("Getting transaction count.");
                localContext.TracingService.Trace("Old msnfp_transactioncount: " + (int)entity["msnfp_transactioncount"]);
                entity["msnfp_transactioncount"] = (int)entity["msnfp_transactioncount"] + 1;
                localContext.TracingService.Trace("New msnfp_transactioncount: " + (int)entity["msnfp_transactioncount"]);
                if (item.Contains("transactioncurrencyid"))
                {
                    entity["transactioncurrencyid"] = new EntityReference("transactioncurrency", ((EntityReference)item["transactioncurrencyid"]).Id);
                }
                if (item.Contains("msnfp_customerid"))
                {
                    string logicalName = ((EntityReference)item["msnfp_customerid"]).LogicalName;
                    Guid   id          = ((EntityReference)item["msnfp_customerid"]).Id;
                    entity["msnfp_customerid"] = new EntityReference(logicalName, id);
                }
                string logicalName2 = ((EntityReference)item["ownerid"]).LogicalName;
                Guid   id2          = ((EntityReference)item["ownerid"]).Id;
                entity["ownerid"]    = new EntityReference(logicalName2, id2);
                entity["statuscode"] = new OptionSetValue(1);
                if (item.Contains("msnfp_taxreceiptid"))
                {
                    localContext.TracingService.Trace("Replace old receipt with this one.");
                    if (item.Contains("msnfp_previousreceiptid"))
                    {
                        localContext.TracingService.Trace("Old Previous Receipt ID: " + ((EntityReference)item["msnfp_previousreceiptid"]).Id.ToString());
                    }
                    item["msnfp_previousreceiptid"] = new EntityReference("msnfp_receipt", ((EntityReference)item["msnfp_taxreceiptid"]).Id);
                    localContext.TracingService.Trace("Updated Previous Receipt ID: " + ((EntityReference)item["msnfp_previousreceiptid"]).Id.ToString());
                    localContext.TracingService.Trace("Saving Transaction.");
                    if (!organizationServiceContext.IsAttached(item))
                    {
                        organizationServiceContext.Attach(item);
                    }
                    organizationServiceContext.UpdateObject(item);
                    organizationServiceContext.SaveChanges();
                    localContext.TracingService.Trace("Transaction Updated.");
                }
                localContext.TracingService.Trace("------------------");
            }
            localContext.TracingService.Trace("Saving Receipt.");
            service.Update(entity);
            localContext.TracingService.Trace("Receipt updated.");
            localContext.TracingService.Trace("Exiting UpdateReceiptAmountForThisTransaction()");
        }