Ejemplo n.º 1
0
        /// <summary>
        /// Change <c>Quote</c> status to <c>Won</c>.
        /// Please note that this action is required in order to convert a <c>Quote</c> into a <c>SalesOrder</c> with <see cref="ConvertToSalesOrder(Guid, string[])"/> method.
        /// <para>
        /// For more information look at https://msdn.microsoft.com/en-us/library/microsoft.crm.sdk.messages.winquoterequest(v=crm.7).aspx
        /// </para>
        /// </summary>
        /// <param name="id"><c>Quote</c> Id</param>
        /// <param name="status"><see cref="QuoteWonStatusCode"/> status code</param>
        /// <param name="customStatusCode">If you're using your custom statuscodes set this, otherwise you can set "0 (zero)" or null</param>
        /// <param name="quotecloseSubject"><c>QuoteClose</c> subject</param>
        /// <param name="quotecloseDescription"><c>QuoteClose</c> description</param>
        /// <param name="quotecloseActualEnd"><c>QuoteClose</c> actual end date</param>
        /// <returns><see cref="WinQuoteResponse"/></returns>
        public WinQuoteResponse Win(Guid id, QuoteWonStatusCode status, int customStatusCode = 0, string quotecloseSubject = "", string quotecloseDescription = "", DateTime?quotecloseActualEnd = null)
        {
            ExceptionThrow.IfGuidEmpty(id, "id");

            int statusCode = (int)status;

            if (status == QuoteWonStatusCode.CustomStatusCode)
            {
                ExceptionThrow.IfNegative(customStatusCode, "customStatusCode");
                statusCode = customStatusCode;
            }

            if (string.IsNullOrEmpty(quotecloseSubject))
            {
                var quoteEntity = this.Get(id, "quotenumber");
                quotecloseSubject = string.Format("Quote Close (Won) - {0}", quoteEntity.GetAttributeValue <string>("quotenumber"));
            }

            WinQuoteRequest request = new WinQuoteRequest()
            {
                QuoteClose = PrepareQuoteCloseEntity(id, quotecloseSubject, quotecloseDescription, quotecloseActualEnd),
                Status     = new OptionSetValue(statusCode)
            };

            return((WinQuoteResponse)this.OrganizationService.Execute(request));
        }
        /// <summary>
        /// <c>Win</c> an opportunity.
        /// <para>
        /// For more information look at https://msdn.microsoft.com/en-us/library/microsoft.crm.sdk.messages.winopportunityrequest(v=crm.7).aspx
        /// </para>
        /// </summary>
        /// <param name="id"><c>Opportunity</c> Id</param>
        /// <param name="status"><see cref="OpportunityWonStatusCode"/> status code</param>
        /// <param name="customStatusCode">If you're using your custom statuscodes set this, otherwise you can set "0 (zero)" or null</param>
        /// <param name="opportunitycloseSubject"><c>OpportunityClose</c> subjec</param>
        /// <param name="opportunitycloseDescription"><c>OpportunityClose</c> description</param>
        /// <param name="opportunitycloseActualEnd"><c>OpportunityClose</c> actual end date. Default value is <c>DateTime.UtcNow</c> or <c>DateTime.Now</c> depend on <c>useUtc</c> parameter on constructor</param>
        /// <param name="useOpportunityTotalAmountValue">Set <c>true</c>, if you want to use <c>Opportunity</c>'s current <c>Total Amount</c> value, otherwise if you want new value set <c>false</c> and set value of <c>opportunitycloseActualRevenue</c> parameter</param>
        /// <param name="opportunitycloseActualRevenue"><c>OpportunityClose</c> actual revenue.</param>
        /// <returns><see cref="WinOpportunityResponse"/></returns>
        public WinOpportunityResponse Win(Guid id, OpportunityWonStatusCode status, int customStatusCode = 0, string opportunitycloseSubject = "", string opportunitycloseDescription = "", DateTime?opportunitycloseActualEnd = null, bool useOpportunityTotalAmountValue = false, decimal opportunitycloseActualRevenue = 0)
        {
            ExceptionThrow.IfGuidEmpty(id, "id");

            int statusCode = (int)status;

            opportunitycloseSubject = !string.IsNullOrEmpty(opportunitycloseSubject) ? opportunitycloseSubject.Trim() : "Opportunity Close - Won";

            if (status == OpportunityWonStatusCode.CustomStatusCode)
            {
                ExceptionThrow.IfNegative(customStatusCode, "customStatusCode");
                statusCode = customStatusCode;
            }

            if (useOpportunityTotalAmountValue)
            {
                opportunitycloseActualRevenue = GetTotalAmount(id);
            }

            WinOpportunityRequest request = new WinOpportunityRequest()
            {
                OpportunityClose = PrepareOpportunityCloseEntity(id, opportunitycloseSubject, opportunitycloseDescription, null, opportunitycloseActualEnd, opportunitycloseActualRevenue),
                Status           = new OptionSetValue(statusCode)
            };

            return((WinOpportunityResponse)this.OrganizationService.Execute(request));
        }
        /// <summary>
        /// Create a <c>Campaign Activity</c>.
        /// </summary>
        /// <param name="campaignId"><c>Campaign</c> Id</param>
        /// <param name="subject">Subject</param>
        /// <param name="description">Description</param>
        /// <param name="typeCode"><see cref="CampaignActivityTypeCode"/> type code</param>
        /// <param name="channelCode"><see cref="CampaignActivityChannelTypeCode"/> channel code</param>
        /// <param name="customTypeCode">If you're using your custom typecode set this, otherwise you can set "0 (zero)" or null</param>
        /// <param name="customChannelCode">If you're using your custom channel code set this, otherwise you can set "0 (zero)" or null</param>
        /// <returns>
        /// Created record Id (<see cref="Guid"/>)
        /// </returns>
        public Guid Create(Guid campaignId, string subject, string description, CampaignActivityTypeCode typeCode, CampaignActivityChannelTypeCode channelCode, int customTypeCode = 0, int customChannelCode = 0)
        {
            ExceptionThrow.IfGuidEmpty(campaignId, "campaignId");
            ExceptionThrow.IfNullOrEmpty(subject, "subject");

            int activityTypeCode    = (int)typeCode;
            int activityChannelCode = (int)channelCode;

            if (typeCode == CampaignActivityTypeCode.CustomTypeCode)
            {
                ExceptionThrow.IfNegative(customTypeCode, "customTypeCode");
                activityTypeCode = customTypeCode;
            }

            if (channelCode == CampaignActivityChannelTypeCode.CustomChannelTypeCode)
            {
                ExceptionThrow.IfNegative(customChannelCode, "customChannelCode");
                activityChannelCode = customChannelCode;
            }

            Entity entity = new Entity(this.EntityName);

            entity["regardingobjectid"] = new EntityReference("campaign", campaignId);
            entity["subject"]           = subject;
            entity["typecode"]          = new OptionSetValue(activityTypeCode);
            entity["channeltypecode"]   = new OptionSetValue(activityChannelCode);
            entity["description"]       = description;

            return(this.OrganizationService.Create(entity));
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Retrieve <c>members</c> from <c>List (marketing list)</c>.
        /// <para>
        /// Please note that if your <c>list</c> is <c>dynamic</c> it must has "Fullname" (for <c>Contact</c>, <c>Lead</c>) or "Name" (for <c>Account</c>) attribute in its query.
        /// Otherwise <see cref="ListMemberItemDetail.Name"/> will be <see cref="string.Empty"/>.
        /// </para>
        /// </summary>
        /// <param name="listId">Marketing List Id</param>
        /// <param name="itemPerPage">
        /// Record count per page. If marketling list has more than value, method works in loop.
        /// It's default value <c>5000</c> and recommended range is between <c>500</c> - <c>5000</c> for better performance.
        /// </param>
        /// <returns>
        /// <see cref="ListMemberResult"/> for data.
        /// </returns>
        public ListMemberResult GetMemberList(Guid listId, int itemPerPage = 5000)
        {
            ExceptionThrow.IfGuidEmpty(listId, "listId");
            ExceptionThrow.IfNegative(itemPerPage, "itemPerPage");
            ExceptionThrow.IfEquals(itemPerPage, "itemPerPage", 0);

            ListMemberResult result = new ListMemberResult();

            var list = this.OrganizationService.Retrieve(this.EntityName, listId, new ColumnSet("type", "membertype", "query"));

            if (list != null)
            {
                ListTypeCode       listType   = (ListTypeCode)Convert.ToInt32(list.GetAttributeValue <bool>("type"));
                ListMemberTypeCode membertype = (ListMemberTypeCode)list.GetAttributeValue <int>("membertype");
                string             query      = list.GetAttributeValue <string>("query");

                switch (listType)
                {
                case ListTypeCode.Static:
                    result = PopulateStaticList(listId, membertype, itemPerPage);
                    break;

                case ListTypeCode.Dynamic:
                    result = PopulateDynamicList(query, membertype, itemPerPage);
                    break;
                }
            }

            return(result);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Successfuly <c>close (resolve)</c> an incident.
        /// <para>
        /// For more information look at https://msdn.microsoft.com/en-us/library/microsoft.crm.sdk.messages.closeincidentrequest(v=crm.8).aspx
        /// </para>
        /// </summary>
        /// <param name="id"><c>Incident</c> Id</param>
        /// <param name="status"><see cref="IncidentResolvedStatusCode"/> status code</param>
        /// <param name="customStatusCode">If you're using your custom statuscodes set this, otherwise you can set "0 (zero)" or null</param>
        /// <param name="subject"><c>Incident Resolution</c> subject</param>
        /// <param name="description"><c>Incident Resolution</c> description</param>
        /// <param name="resolveDate"><c>Incident Resolution</c> acual end date</param>
        /// <returns>
        /// <see cref="CloseIncidentResponse"/>
        /// </returns>
        public CloseIncidentResponse Resolve(Guid id, IncidentResolvedStatusCode status, int customStatusCode = 0, string subject = "Resolved Incident", string description = "", DateTime?resolveDate = null)
        {
            ExceptionThrow.IfGuidEmpty(id, "id");

            int statusCode = (int)status;

            if (status == IncidentResolvedStatusCode.CustomStatusCode)
            {
                ExceptionThrow.IfNegative(customStatusCode, "customStatusCode");
                statusCode = customStatusCode;
            }

            Entity incidentResolution = new Entity("incidentresolution");

            incidentResolution["incidentid"]  = new EntityReference(this.EntityName, id);
            incidentResolution["subject"]     = subject;
            incidentResolution["description"] = description;

            if (resolveDate.HasValue && resolveDate.Value != DateTime.MinValue)
            {
                incidentResolution["actualend"] = resolveDate.Value;
            }

            CloseIncidentRequest request = new CloseIncidentRequest()
            {
                IncidentResolution = incidentResolution,
                Status             = new OptionSetValue(statusCode)
            };

            return((CloseIncidentResponse)this.OrganizationService.Execute(request));
        }
Ejemplo n.º 6
0
        /// <summary>
        /// <c>Cancel</c> the <c>SalesOrder</c>.
        /// <para>
        /// For more information look at https://msdn.microsoft.com/en-us/library/microsoft.crm.sdk.messages.cancelsalesorderrequest(v=crm.8).aspx
        /// </para>
        /// </summary>
        /// <param name="id"><c>SalesOrder</c> Id</param>
        /// <param name="status"><see cref="SalesOrderCanceledStatusCode"/> status code</param>
        /// <param name="customStatusCode">If you're using your custom statuscodes set this, otherwise you can set "0 (zero)" or null</param>
        /// <param name="ordercloseSubject"><c>OrderClose</c> subject</param>
        /// <param name="ordercloseDescription"><c>OrderClose</c> description</param>
        /// <param name="ordercloseActualEnd"><c>OrderClose</c> actual end date</param>
        /// <returns>
        /// <see cref="CancelSalesOrderResponse"/>
        /// </returns>
        public CancelSalesOrderResponse Cancel(Guid id, SalesOrderCanceledStatusCode status, int customStatusCode = 0, string ordercloseSubject = "", string ordercloseDescription = "", DateTime?ordercloseActualEnd = null)
        {
            ExceptionThrow.IfGuidEmpty(id, "id");

            int statusCode = (int)status;

            if (status == SalesOrderCanceledStatusCode.CustomStatusCode)
            {
                ExceptionThrow.IfNegative(customStatusCode, "customStatusCode");
                statusCode = customStatusCode;
            }

            if (string.IsNullOrEmpty(ordercloseSubject))
            {
                var salesorderEntity = this.Get(id, "ordernumber");
                ordercloseSubject = string.Format("Salesorder Close (Cancel) - {0}", salesorderEntity.GetAttributeValue <string>("ordernumber"));
            }

            CancelSalesOrderRequest request = new CancelSalesOrderRequest()
            {
                OrderClose = PrepareOrderCloseEntity(id, ordercloseSubject, ordercloseDescription, ordercloseActualEnd),
                Status     = new OptionSetValue(statusCode)
            };

            return((CancelSalesOrderResponse)this.OrganizationService.Execute(request));
        }
        /// <summary>
        /// Create an attachment from byte array.
        /// <para>
        /// For more information look at https://msdn.microsoft.com/en-us/library/gg328344(v=crm.7).aspx
        /// </para>
        /// </summary>
        /// <param name="emailId"><c>Email Activity</c> Id</param>
        /// <param name="content">File content</param>
        /// <param name="fileName">This will be attachment name</param>
        /// <returns>
        /// Created record Id (<see cref="System.Guid"/>)
        /// </returns>
        public Guid Attach(Guid emailId, byte[] content, string fileName)
        {
            ExceptionThrow.IfGuidEmpty(emailId, "emailId");
            ExceptionThrow.IfNull(content, "content");
            ExceptionThrow.IfNegative(content.Length, "content");
            ExceptionThrow.IfNullOrEmpty(fileName, "fileName");

            var entity = PrepareAttachmentData(emailId, content, fileName);

            return(this.OrganizationService.Create(entity));
        }
        /// <summary>
        /// Add a <c>Quote product</c> to <c>Quote</c> with manual product information.
        /// </summary>
        /// <param name="quoteId"><c>Quote</c> Id</param>
        /// <param name="productName"><c>Product Name</c></param>
        /// <param name="quantity"><c>Quantity</c></param>
        /// <param name="price"><c>Price</c></param>
        /// <param name="discountAmount"><c>Discount amount</c> by currency</param>
        /// <param name="tax"><c>Tax amount</c>by currency</param>
        /// <returns>Created record Id (<see cref="Guid"/>)</returns>
        public Guid Add(Guid quoteId, string productName, decimal quantity, decimal price, decimal?discountAmount, decimal?tax)
        {
            ExceptionThrow.IfGuidEmpty(quoteId, "quoteId");
            ExceptionThrow.IfNullOrEmpty(productName, "productName");
            ExceptionThrow.IfNegative(quantity, "quantity");
            ExceptionThrow.IfNegative(price, "price");

            var entity = XProduct.Create(this.EntityName, "quote", quoteId, null, null, productName, quantity, price, discountAmount, tax);

            return(this.OrganizationService.Create(entity));
        }
        /// <summary>
        /// Add a <c>Quote product</c> to <c>Quote</c> with existing <c>Product</c>.
        /// </summary>
        /// <param name="quoteId"><c>Quote</c> Id</param>
        /// <param name="productId"><c>Product</c> Id</param>
        /// <param name="uomId"><c>UoM</c> Id</param>
        /// <param name="quantity"><c>Quantity</c></param>
        /// <param name="price"><c>Price</c></param>
        /// <param name="discountAmount"><c>Discount amount</c> by currency</param>
        /// <param name="tax"><c>Tax amount</c>by currency</param>
        /// <returns>Created record Id (<see cref="Guid"/>)</returns>
        public Guid Add(Guid quoteId, Guid productId, Guid uomId, decimal quantity, decimal?price, decimal?discountAmount, decimal?tax)
        {
            ExceptionThrow.IfGuidEmpty(quoteId, "quoteId");
            ExceptionThrow.IfGuidEmpty(productId, "productId");
            ExceptionThrow.IfGuidEmpty(uomId, "uomId");
            ExceptionThrow.IfNegative(quantity, "quantity");

            var entity = XProduct.Create(this.EntityName, "quote", quoteId, productId, uomId, "", quantity, price, discountAmount, tax);

            return(this.OrganizationService.Create(entity));
        }
Ejemplo n.º 10
0
        /// <summary>
        /// <c>Qualify</c> a <c>Lead</c> and create an account, contact, or opportunity records that are linked to the originating lead.
        /// <para>
        /// For more information look at https://msdn.microsoft.com/en-us/library/microsoft.crm.sdk.messages.qualifyleadrequest(v=crm.8).aspx
        /// </para>
        /// </summary>
        /// <param name="id"><c>Lead</c> Id</param>
        /// <param name="qualifyTo">Lead qualified to entity type</param>
        /// <param name="existingRecordType">Existing record entity type</param>
        /// <param name="existingRecordId">If you qualify with existing record (account or contact) set record Id</param>
        /// <param name="currencyId">
        /// If you want create an <c>Opportunity</c> set <c>TransactionCurrency Id</c>, otherwise leave NULL.
        /// <para>
        /// If you want create an <c>Opportunity</c> and do not know / sure <c>TransactionCurrency Id</c> leave NULL, this method will find <c>TransactionCurrency Id</c>
        /// </para>
        /// </param>
        /// <param name="campaignId"></param>
        /// <param name="status"><see cref="LeadQualifiedStatusCode"/> status code</param>
        /// <param name="customStatusCode">If you're using your custom statuscodes set this, otherwise you can set "0 (zero)" or null</param>
        /// <returns>Resturns created entities after qualification in <see cref="QualifyLeadResponse.CreatedEntities"/> property.</returns>
        public QualifyLeadResponse Qualify(Guid id, QualifyLeadTo qualifyTo, ExistingEntityType?existingRecordType, Guid?existingRecordId, Guid?currencyId, Guid?campaignId, LeadQualifiedStatusCode status = LeadQualifiedStatusCode.Qualified, int customStatusCode = 0)
        {
            ExceptionThrow.IfGuidEmpty(id, "id");
            ExceptionThrow.IfNegative((int)qualifyTo, "qualifyTo");

            int statusCode = (int)status;

            if (status == LeadQualifiedStatusCode.CustomStatusCode)
            {
                ExceptionThrow.IfNegative(customStatusCode, "customStatusCode");
                statusCode = customStatusCode;
            }

            bool isAccount     = (qualifyTo.HasFlag(QualifyLeadTo.Account) || qualifyTo.HasFlag(QualifyLeadTo.AccountAndContact) || qualifyTo.HasFlag(QualifyLeadTo.OpportunityWithAccountAndContact)) && !qualifyTo.HasFlag(QualifyLeadTo.None);
            bool isContact     = (qualifyTo.HasFlag(QualifyLeadTo.Contact) || qualifyTo.HasFlag(QualifyLeadTo.AccountAndContact) || qualifyTo.HasFlag(QualifyLeadTo.OpportunityWithContact) || qualifyTo.HasFlag(QualifyLeadTo.OpportunityWithAccountAndContact)) && !qualifyTo.HasFlag(QualifyLeadTo.None);
            bool isOpportunity = (qualifyTo.HasFlag(QualifyLeadTo.OpportunityWithContact) || qualifyTo.HasFlag(QualifyLeadTo.OpportunityWithAccountAndContact) || qualifyTo.HasFlag(QualifyLeadTo.OpportunityWithExistingRecord)) && !qualifyTo.HasFlag(QualifyLeadTo.None);

            QualifyLeadRequest request = new QualifyLeadRequest()
            {
                LeadId            = new EntityReference(this.EntityName.ToLower(), id),
                CreateAccount     = isAccount,
                CreateContact     = isContact,
                CreateOpportunity = isOpportunity,
                Status            = new OptionSetValue(statusCode)
            };

            if (campaignId.HasValue)
            {
                ExceptionThrow.IfGuid(campaignId.Value, "campaignId");

                request.SourceCampaignId = new EntityReference("campaign", campaignId.Value);
            }

            if (isOpportunity)
            {
                var currencyEntityReference = currencyId.HasValue && !currencyId.Value.IsGuidEmpty() ? new EntityReference("transactioncurrency", currencyId.Value) : GetTransactionCurrency("lead", id);

                ExceptionThrow.IfNull(currencyEntityReference, "OpportunityCurrency");
                ExceptionThrow.IfGuidEmpty(currencyEntityReference.Id, "OpportunityCurrency.Id");

                request.OpportunityCurrencyId = currencyEntityReference;

                if (qualifyTo.HasFlag(QualifyLeadTo.OpportunityWithExistingRecord))
                {
                    ExceptionThrow.IfNull(existingRecordType, "existingRecordType");
                    ExceptionThrow.IfGuidEmpty(existingRecordId.Value, "existingRecordId");

                    request.OpportunityCustomerId = new EntityReference(existingRecordType.Description(), existingRecordId.Value);
                }
            }

            return((QualifyLeadResponse)this.OrganizationService.Execute(request));
        }
Ejemplo n.º 11
0
        /// <summary>
        /// Recurrence with <c>occurence(s)</c>.
        /// </summary>
        /// <param name="occurence"></param>
        /// <returns></returns>
        public XrmRecurringAppointment EndAfterXOccurences(int occurence)
        {
            ExceptionThrow.IfNegative(occurence, "occurence");
            ExceptionThrow.IfEquals(occurence, "occurence", 0);

            SetEndPattern();

            _recurrenceEndPattern = RecurrenceEndPatternType.Occurrences;
            _occurence            = occurence;

            return(this);
        }
Ejemplo n.º 12
0
        /// <summary>
        /// <c>Daily</c> recurrence with <c>every X days</c>.
        /// Please note that this includes alldays (weekdays and weekend).
        /// </summary>
        /// <param name="interval"><c>every X days</c> interval value.</param>
        /// <returns></returns>
        public XrmRecurringAppointment Daily(int interval)
        {
            ExceptionThrow.IfEquals(interval, "interval", 0);
            ExceptionThrow.IfNegative(interval, "interval");

            SetRecurrence();

            _recurrencePattern = RecurrencePatternType.Daily;
            _interval          = interval;

            return(this);
        }
Ejemplo n.º 13
0
        public static Entity Create(string entityName, string relatedEntityName, Guid relatedEntityId, Guid?productId, Guid?uomId, string productName, decimal quantity, decimal?price, decimal?discountAmount, decimal?tax)
        {
            ExceptionThrow.IfNullOrEmpty(entityName, "entityName");
            ExceptionThrow.IfNullOrEmpty(relatedEntityName, "relatedEntityName");
            ExceptionThrow.IfGuidEmpty(relatedEntityId, "relatedEntityId");
            ExceptionThrow.IfNegative(quantity, "quantity");

            Entity entity = new Entity(entityName.ToLower().Trim());

            entity[string.Format("{0}id", relatedEntityName.Trim())] = new EntityReference(relatedEntityName.Trim(), relatedEntityId);
            entity["quantity"] = quantity;

            if (string.IsNullOrEmpty(productName))
            {
                ExceptionThrow.IfNull(productId, "productId");
                ExceptionThrow.IfNull(uomId, "uomId");
                ExceptionThrow.IfGuidEmpty(productId.Value, "productId");
                ExceptionThrow.IfGuidEmpty(uomId.Value, "uomId");

                entity["productid"] = new EntityReference("product", productId.Value);
                entity["uomid"]     = new EntityReference("uom", uomId.Value);
            }
            else
            {
                entity["isproductoverridden"] = true;
                entity["productdescription"]  = productName;
            }

            if (price.HasValue)
            {
                ExceptionThrow.IfNegative(price.Value, "price");

                entity["priceperunit"]      = new Money(price.Value);
                entity["ispriceoverridden"] = true;
            }

            if (discountAmount.HasValue)
            {
                ExceptionThrow.IfNegative(discountAmount.Value, "discountAmount");

                entity["manualdiscountamount"] = new Money(discountAmount.Value);
            }

            if (tax.HasValue)
            {
                ExceptionThrow.IfNegative(tax.Value, "tax");

                entity["tax"] = new Money(tax.Value);
            }

            return(entity);
        }
Ejemplo n.º 14
0
        /// <summary>
        /// <c>Weekly</c> recurrence.
        /// </summary>
        /// <param name="interval"></param>
        /// <param name="daysOfWeek"></param>
        /// <returns></returns>
        public XrmRecurringAppointment Weekly(int interval, DayOfWeek daysOfWeek)
        {
            ExceptionThrow.IfEquals(interval, "interval", 0);
            ExceptionThrow.IfNegative(interval, "interval");

            SetRecurrence();

            _recurrencePattern = RecurrencePatternType.Weekly;
            _interval          = interval;
            _dayOfWeeksValue   = (int)daysOfWeek;

            return(this);
        }
Ejemplo n.º 15
0
        /// <summary>
        /// <c>Monthly</c> recurrence.
        /// </summary>
        /// <param name="option"></param>
        /// <param name="day"></param>
        /// <param name="interval"></param>
        /// <returns></returns>
        public XrmRecurringAppointment Monthly(MonthlyOption option, DayOfWeek day, int interval)
        {
            ExceptionThrow.IfEquals(interval, "interval", 0);
            ExceptionThrow.IfNegative(interval, "interval");

            SetRecurrence();

            _recurrencePattern = RecurrencePatternType.Monthly;
            _monthlyOption     = option;
            _interval          = interval;
            _dayOfWeeksValue   = (int)day;

            return(this);
        }
Ejemplo n.º 16
0
        /// <summary>
        /// Create a <c>Campaign</c>.
        /// </summary>
        /// <param name="name">Name</param>
        /// <param name="code">Code.
        /// If you don't provide this data, MS CRM gives an automated number
        /// </param>
        /// <param name="typeCode"><see cref="CampaignTypeCode"/></param>
        /// <param name="description"></param>
        /// <param name="transactioncurrencyId"></param>
        /// <param name="actualStart">Actual Start date</param>
        /// <param name="actualEnd">Actual End date</param>
        /// <param name="proposedStart">Propesed Start date</param>
        /// <param name="proposedEnd">Proposed End date</param>
        /// <param name="status"><see cref="CampaignActiveStatusCode"/> status code</param>
        /// <param name="customStatusCode">If you're using your custom statuscodes set this, otherwise you can set "0 (zero)" or null</param>
        /// <returns>
        /// Created record Id (<see cref="Guid"/>)
        /// </returns>
        public Guid Create(string name, string code, CampaignTypeCode typeCode, string description, Guid transactioncurrencyId, DateTime?actualStart, DateTime?actualEnd, DateTime?proposedStart, DateTime?proposedEnd, CampaignActiveStatusCode status, int customStatusCode = 0)
        {
            ExceptionThrow.IfNullOrEmpty(name, "name");
            ExceptionThrow.IfGuidEmpty(transactioncurrencyId, "transactioncurrencyId");

            int statusCode = (int)status;

            if (status == CampaignActiveStatusCode.CustomStatusCode)
            {
                ExceptionThrow.IfNegative(customStatusCode, "customStatusCode");
                statusCode = customStatusCode;
            }

            Entity entity = new Entity(this.EntityName);

            entity["name"]     = name;
            entity["typecode"] = new OptionSetValue((int)typeCode);
            entity["transactioncurrencyid"] = new EntityReference("transactioncurrency", transactioncurrencyId);
            entity["istemplate"]            = false;
            entity["description"]           = description;
            entity["statuscode"]            = new OptionSetValue(statusCode);

            if (!string.IsNullOrEmpty(code))
            {
                entity["codename"] = code;
            }

            if (actualStart.HasValue && actualStart.Value != DateTime.MinValue)
            {
                entity["actualstart"] = actualStart.Value;
            }

            if (actualEnd.HasValue && actualEnd.Value != DateTime.MinValue)
            {
                entity["actualend"] = actualEnd.Value;
            }

            if (proposedStart.HasValue && proposedStart.Value != DateTime.MinValue)
            {
                entity["proposedstart"] = proposedStart.Value;
            }

            if (proposedEnd.HasValue && proposedEnd.Value != DateTime.MinValue)
            {
                entity["proposedend"] = proposedEnd.Value;
            }

            return(this.OrganizationService.Create(entity));
        }
Ejemplo n.º 17
0
        /// <summary>
        /// <c>Yearly</c> recurrence with exact date.
        /// </summary>
        /// <param name="month"></param>
        /// <param name="day"></param>
        /// <param name="interval"><c>Recur every X years</c> interval.</param>
        /// <returns></returns>
        public XrmRecurringAppointment Yearly(Month month, int day, int interval)
        {
            ExceptionThrow.IfEquals(day, "day", 0);
            ExceptionThrow.IfNegative(day, "day");

            SetRecurrence();

            _isFirstOption     = true;
            _recurrencePattern = RecurrencePatternType.Yearly;
            _interval          = interval;
            _dayNumber         = day;
            _month             = month;

            return(this);
        }
Ejemplo n.º 18
0
        /// <summary>
        /// <c>Monthly</c> recurrence with exact day.
        /// </summary>
        /// <param name="onDay">Excat day number</param>
        /// <param name="interval"><c>Every X months</c> interval value.</param>
        /// <returns></returns>
        public XrmRecurringAppointment Monthly(int onDay, int interval)
        {
            ExceptionThrow.IfEquals(onDay, "onDay", 0);
            ExceptionThrow.IfNegative(onDay, "onDay");
            ExceptionThrow.IfEquals(interval, "interval", 0);
            ExceptionThrow.IfNegative(interval, "interval");

            SetRecurrence();

            _isFirstOption     = true;
            _recurrencePattern = RecurrencePatternType.Monthly;
            _interval          = interval;
            _dayNumber         = onDay;

            return(this);
        }
Ejemplo n.º 19
0
        /// <summary>
        /// Change <c>Invoice</c> status to <c>Cancelled</c>.
        /// <para>
        /// For more information look at https://msdn.microsoft.com/en-us/library/microsoft.crm.sdk.messages.setstaterequest(v=crm.7).aspx
        /// </para>
        /// </summary>
        /// <param name="id"><c>Invoice</c> Id</param>
        /// <param name="status"><see cref="InvoiceCanceledStatusCode"/> status code</param>
        /// <param name="customStatusCode">If you're using your custom statuscodes set this, otherwise you can set "0 (zero)" or null</param>
        public void Canceled(Guid id, InvoiceCanceledStatusCode status, int customStatusCode = 0)
        {
            ExceptionThrow.IfGuidEmpty(id, "id");

            int statusCode = (int)status;

            if (status == InvoiceCanceledStatusCode.CustomStatusCode)
            {
                ExceptionThrow.IfNegative(customStatusCode, "customStatusCode");
                statusCode = customStatusCode;
            }

            CommonHelper commonHelper = new CommonHelper(this.OrganizationService);

            commonHelper.UpdateState(id, this.EntityName, 3, statusCode);
        }
Ejemplo n.º 20
0
        /// <summary>
        /// <c>Disqualify</c> a <c>Lead</c> and set state to passive.
        /// <para>
        /// For more information look at https://msdn.microsoft.com/en-us/library/microsoft.crm.sdk.messages.setstaterequest(v=crm.8).aspx
        /// </para>
        /// </summary>
        /// <param name="id"><c>Lead</c> Id</param>
        /// <param name="status"><see cref="LeadDisqualifiedStatusCode"/> status code</param>
        /// <param name="customStatusCode">If you're using your custom statuscodes set this, otherwise you can set "0 (zero)" or null</param>
        public void Disqualify(Guid id, LeadDisqualifiedStatusCode status, int customStatusCode = 0)
        {
            ExceptionThrow.IfGuidEmpty(id, "id");

            int statusCode = (int)status;

            if (status == LeadDisqualifiedStatusCode.CustomStatusCode)
            {
                ExceptionThrow.IfNegative(customStatusCode, "customStatusCode");
                statusCode = customStatusCode;
            }

            CommonHelper entityHelper = new CommonHelper(this.OrganizationService);

            entityHelper.UpdateState(id, this.EntityName, 2, statusCode);
        }
Ejemplo n.º 21
0
        /// <summary>
        /// Change <c>Quote</c> status to <c>Closed</c>.
        /// <para>
        /// For more information look at https://msdn.microsoft.com/en-us/library/microsoft.crm.sdk.messages.closequoterequest(v=crm.7).aspx
        /// </para>
        /// </summary>
        /// <param name="id"><c>Quote</c> Id</param>
        /// <param name="status"><see cref="QuoteClosedStatusCode"/> status code</param>
        /// <param name="customStatusCode">If you're using your custom statuscodes set this, otherwise you can set "0 (zero)" or null</param>
        /// <param name="quotecloseSubject"><c>QuoteClose</c> subject</param>
        /// <param name="quotecloseDescription"><c>QuoteClose</c> description</param>
        /// <param name="quotecloseActualEnd"><c>QuoteClose</c> actual end date</param>
        /// <returns><see cref="CloseQuoteResponse"/></returns>
        public CloseQuoteResponse Close(Guid id, QuoteClosedStatusCode status, int customStatusCode = 0, string quotecloseSubject = "", string quotecloseDescription = "", DateTime?quotecloseActualEnd = null)
        {
            ExceptionThrow.IfGuidEmpty(id, "id");

            int statusCode = (int)status;

            if (status == QuoteClosedStatusCode.CustomStatusCode)
            {
                ExceptionThrow.IfNegative(customStatusCode, "CustomStatusCode");
                statusCode = customStatusCode;
            }

            var quoteEntity = this.Get(id, "quotenumber");

            if (string.IsNullOrEmpty(quotecloseSubject))
            {
                switch (status)
                {
                case QuoteClosedStatusCode.Lost:
                    quotecloseSubject = string.Format("Quote Close (Lost) - {0}", quoteEntity.GetAttributeValue <string>("quotenumber"));
                    break;

                case QuoteClosedStatusCode.Cancelled:
                    quotecloseSubject = string.Format("Quote Close (Cancelled) - {0}", quoteEntity.GetAttributeValue <string>("quotenumber"));
                    break;

                case QuoteClosedStatusCode.Revised:
                    quotecloseSubject = string.Format("Quote Close (Revised) - {0}", quoteEntity.GetAttributeValue <string>("quotenumber"));
                    break;
                }
            }

            CloseQuoteRequest request = new CloseQuoteRequest()
            {
                QuoteClose = PrepareQuoteCloseEntity(id, quotecloseSubject, quotecloseDescription, quotecloseActualEnd),
                Status     = new OptionSetValue(statusCode)
            };

            return((CloseQuoteResponse)this.OrganizationService.Execute(request));
        }
Ejemplo n.º 22
0
        /// <summary>
        /// Cancel a <c>Contract</c>.
        /// <para>
        /// For more information look at https://msdn.microsoft.com/en-us/library/microsoft.crm.sdk.messages.cancelcontractrequest(v=crm.8).aspx
        /// </para>
        /// </summary>
        /// <param name="id"><c>Conract</c> Id</param>
        /// <param name="cancellationDate">
        /// Contract cancellation date.
        /// You can pass <c>null</c> value, default value is <see cref="DateTime.UtcNow"/> or <see cref="DateTime.Now"/> depend on <c>useUtc</c> parameter on constructor.
        /// </param>
        /// <param name="status">
        /// <see cref="ContractCanceledStatusCode"/> status code
        /// </param>
        /// <param name="customStatusCode">If you're using your custom statuscodes set this, otherwise you can set "0 (zero)" or null</param>
        /// <returns>
        /// <see cref="CancelContractResponse"/>
        /// </returns>
        public CancelContractResponse Cancel(Guid id, DateTime?cancellationDate, ContractCanceledStatusCode status, int customStatusCode = 0)
        {
            ExceptionThrow.IfGuidEmpty(id, "id");

            DateTime now        = this._useUtc ? DateTime.UtcNow : DateTime.Now;
            int      statusCode = (int)status;

            if (status == ContractCanceledStatusCode.CustomStatusCode)
            {
                ExceptionThrow.IfNegative(customStatusCode, "customStatusCode");
                statusCode = customStatusCode;
            }

            CancelContractRequest request = new CancelContractRequest()
            {
                ContractId = id,
                Status     = new OptionSetValue(statusCode),
                CancelDate = cancellationDate.HasValue ? cancellationDate.Value : now
            };

            return((CancelContractResponse)this.OrganizationService.Execute(request));
        }
Ejemplo n.º 23
0
        /// <summary>
        /// <c>Lose</c> an opportunity.
        /// <para>
        /// For more information look at https://msdn.microsoft.com/en-us/library/microsoft.crm.sdk.messages.loseopportunityrequest(v=crm.7).aspx
        /// </para>
        /// </summary>
        /// <param name="id"><c>Opportunity</c> Id</param>
        /// <param name="competitorId">Competitor</param>
        /// <param name="status"><see cref="OpportunityLostStatusCode"/> status code</param>
        /// <param name="customStatusCode">If you're using your custom statuscodes set this, otherwise you can set "0 (zero)" or null</param>
        /// <param name="opportunitycloseSubject"><c>OpportunityClose</c> subject</param>
        /// <param name="opportunitycloseDescription"><c>OpportunityClose</c> description</param>
        /// <param name="opportunitycloseActualEnd"><c>OpportunityClose</c> actual end date. Default value is <c>DateTime.UtcNow</c> or <c>DateTime.Now</c> depend on <c>useUtc</c> parameter on constructor</param>
        /// <param name="opportunitycloseActualRevenue"><c>OpportunityClose</c> actual revenue. Mostly this parameter's value is 0 (zero) when you lost an opportunity</param>
        /// <returns><see cref="LoseOpportunityResponse"/></returns>
        public LoseOpportunityResponse Lose(Guid id, Guid?competitorId, OpportunityLostStatusCode status, int customStatusCode = 0, string opportunitycloseSubject = "", string opportunitycloseDescription = "", DateTime?opportunitycloseActualEnd = null, decimal opportunitycloseActualRevenue = 0)
        {
            ExceptionThrow.IfGuidEmpty(id, "id");

            int statusCode = (int)status;

            opportunitycloseSubject = !string.IsNullOrEmpty(opportunitycloseSubject) ? opportunitycloseSubject.Trim() : "Opportunity Close - Lose";

            if (status == OpportunityLostStatusCode.CustomStatusCode)
            {
                ExceptionThrow.IfNegative(customStatusCode, "customStatusCode");
                statusCode = customStatusCode;
            }

            LoseOpportunityRequest request = new LoseOpportunityRequest()
            {
                OpportunityClose = PrepareOpportunityCloseEntity(id, opportunitycloseSubject, opportunitycloseDescription, competitorId, opportunitycloseActualEnd, opportunitycloseActualRevenue),
                Status           = new OptionSetValue(statusCode)
            };

            return((LoseOpportunityResponse)this.OrganizationService.Execute(request));
        }
Ejemplo n.º 24
0
        /// <summary>
        /// Validate <see cref="XrmRecurringAppointment"/> required fields by patterns and throws exception if values not expected.
        /// </summary>
        public void Validate()
        {
            ExceptionThrow.IfEquals(_startTime, "StartTime", DateTime.MinValue);
            ExceptionThrow.IfEquals(_endTime, "EndTime", DateTime.MinValue);
            ExceptionThrow.IfEquals(_startRangeDate, "StartRange", DateTime.MinValue);

            #region | Validate Recurrence Pattern |

            switch (_recurrencePattern)
            {
            case RecurrencePatternType.Daily:

                if (_isEveryWeekday)
                {
                    ExceptionThrow.IfEquals(_dayOfWeeksValue, "Days Of Week", 0);
                    ExceptionThrow.IfNegative(_dayOfWeeksValue, "Days Of Week");
                    ExceptionThrow.IfNotExpectedValue(_dayOfWeeksValue, "Days Of Week", 62);
                }
                else
                {
                    ExceptionThrow.IfEquals(_interval, "Interval", 0);
                    ExceptionThrow.IfNegative(_interval, "Interval");
                }

                break;

            case RecurrencePatternType.Weekly:
                ExceptionThrow.IfEquals(_dayOfWeeksValue, "Days Of Week", 0);
                ExceptionThrow.IfNegative(_dayOfWeeksValue, "Days Of Week");
                ExceptionThrow.IfGreaterThan(_dayOfWeeksValue, "Days Of Week", 127);
                ExceptionThrow.IfEquals(_interval, "Interval", 0);
                ExceptionThrow.IfNegative(_interval, "Interval");

                break;

            case RecurrencePatternType.Monthly:
                ExceptionThrow.IfEquals(_interval, "Interval", 0);
                ExceptionThrow.IfNegative(_interval, "Interval");

                if (_isFirstOption)
                {
                    ExceptionThrow.IfEquals(_dayNumber, "Day", 0);
                    ExceptionThrow.IfNegative(_dayNumber, "Day");
                }
                else
                {
                    ExceptionThrow.IfEquals(_dayOfWeeksValue, "Days Of Week", 0);
                    ExceptionThrow.IfNegative(_dayOfWeeksValue, "Days Of Week");
                    ExceptionThrow.IfGreaterThan(_dayOfWeeksValue, "Days Of Week", 127);
                }

                break;

            case RecurrencePatternType.Yearly:

                ExceptionThrow.IfEquals(_interval, "Interval", 0);
                ExceptionThrow.IfNegative(_interval, "Interval");
                ExceptionThrow.IfEquals((int)_month, "Month", 0);
                ExceptionThrow.IfNegative((int)_month, "Month");

                if (_isFirstOption)
                {
                    ExceptionThrow.IfEquals(_dayNumber, "Day", 0);
                    ExceptionThrow.IfNegative(_dayNumber, "Day");
                }
                else
                {
                    ExceptionThrow.IfEquals(_dayOfWeeksValue, "Days Of Week", 0);
                    ExceptionThrow.IfNegative(_dayOfWeeksValue, "Days Of Week");
                    ExceptionThrow.IfGreaterThan(_dayOfWeeksValue, "Days Of Week", 127);
                }

                break;
            }

            #endregion

            #region | Validate Recurrence End Pattern |

            switch (_recurrenceEndPattern)
            {
            case RecurrenceEndPatternType.NoEndDate:
                break;

            case RecurrenceEndPatternType.Occurrences:
                ExceptionThrow.IfNegative(_occurence, "Occurence");
                ExceptionThrow.IfEquals(_occurence, "Occurence", 0);

                break;

            case RecurrenceEndPatternType.WithEnddate:
                ExceptionThrow.IfEquals(_endRangeDate, "EndRange", DateTime.MinValue);

                break;
            }

            #endregion
        }