Advertisement
jmawebtech

order ms dynamics

May 14th, 2013
500
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 11.03 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using JMA.Plugin.CRM.MSDynamics.DTO;
  6. using Microsoft.Xrm.Sdk;
  7. using Microsoft.Xrm.Sdk.Messages;
  8. using Xrm;
  9.  
  10. namespace JMA.Plugin.CRM.MSDynamics
  11. {
  12.     public class Orders
  13.     {
  14.         #region private variables
  15.  
  16.         XrmServiceContext _serviceContext;
  17.         JMASettings _dynamicsCrmSettings;
  18.         PriceLevel _PriceLevel;
  19.         UoM _UoM;
  20.  
  21.         #endregion
  22.  
  23.         #region public properties
  24.  
  25.         public PriceLevel PriceLevel
  26.         {
  27.             get
  28.             {
  29.                 if (_PriceLevel == null)
  30.                 {
  31.                     _PriceLevel = (from c in _serviceContext.PriceLevelSet
  32.                                    //where c.Name == _dynamicsCrmSettings.MSDynamicsPriceLevel
  33.                                    select c).FirstOrDefault();
  34.  
  35.                     if (_PriceLevel == null)
  36.                     {
  37.                         _PriceLevel = new PriceLevel();
  38.                         _PriceLevel.Id = new Guid();
  39.                         _PriceLevel.Name = "Default";
  40.                         _serviceContext.AddObject(_PriceLevel);
  41.                         _serviceContext.SaveChanges();
  42.                     }
  43.  
  44.                     return _PriceLevel;
  45.  
  46.                 }
  47.                 return _PriceLevel;
  48.             }
  49.             set { _PriceLevel = value; }
  50.         }
  51.  
  52.         public UoM Uom
  53.         {
  54.             get
  55.             {
  56.                 //TO DO UOM
  57.                 //where c.Name == _dynamicsCrmSettings.MSDynamicsUom
  58.                 if (_UoM == null)
  59.                 {
  60.                     _UoM = (from c in _serviceContext.UoMSet
  61.                             select c).FirstOrDefault();
  62.                 }
  63.                 return _UoM;
  64.             }
  65.             set { _UoM = value; }
  66.         }
  67.  
  68.         #endregion
  69.  
  70.         public Orders(XrmServiceContext serviceContext, JMASettings dynamicsCrmSettings)
  71.         {
  72.             _serviceContext = serviceContext;
  73.             _dynamicsCrmSettings = dynamicsCrmSettings;
  74.         }
  75.  
  76.         public string CreateOrder(JMAOrder order)
  77.         {
  78.             var salesOrder = (from c in _serviceContext.SalesOrderSet
  79.                               where c.Id == order.OrderGuid
  80.                               select c).FirstOrDefault();
  81.  
  82.             if (salesOrder == null)
  83.             {
  84.                 Contact contact = (from a in _serviceContext.ContactSet
  85.                                    where a.EMailAddress1 == order.BillingAddress.Email
  86.                                    select a).FirstOrDefault();
  87.  
  88.  
  89.                 if (contact == null)
  90.                 {
  91.                     Contacts cots = new Contacts(_serviceContext, _dynamicsCrmSettings);
  92.                     contact = new Contact
  93.                     {
  94.                         FirstName = order.BillingAddress.FirstName,
  95.                         LastName = order.BillingAddress.LastName,
  96.                         Address1_Line1 = order.BillingAddress.Address1,
  97.                         Address1_City = order.BillingAddress.City,
  98.                         Address1_StateOrProvince = order.BillingAddress.RegionName,
  99.                         Address1_PostalCode = order.BillingAddress.PostalCode,
  100.                         Telephone1 = order.BillingAddress.PhoneNumber,
  101.                         EMailAddress1 = order.BillingAddress.Email
  102.                     };
  103.  
  104.                     _serviceContext.AddObject(contact);
  105.                     _serviceContext.SaveChanges();
  106.                 }
  107.  
  108.                 salesOrder = CreateSalesOrder(contact, order);
  109.  
  110.                 foreach (var orderProductVariant in order.OrderDetails)
  111.                 {
  112.                     CreateProduct(orderProductVariant.Product);
  113.                     var salesOrderDetail = CreateSalesOrderDetail(salesOrder, orderProductVariant);
  114.                 }
  115.  
  116.                 _serviceContext.SaveChanges();
  117.                 return "OK";
  118.             }
  119.  
  120.             return String.Format("Sales Order {0} already exists in MS Dynamics.", order.Id);
  121.         }
  122.  
  123.         private SalesOrder CreateSalesOrder(Contact contact, JMAOrder jo)
  124.         {
  125.             var salesOrder = new SalesOrder() { Id = jo.OrderGuid };
  126.             salesOrder.CustomerId = contact.ToEntityReference();
  127.             salesOrder.Name = jo.Id.ToString();
  128.             salesOrder.OrderNumber = jo.Id.ToString();
  129.             salesOrder.OverriddenCreatedOn = jo.CreationDate;
  130.                 salesOrder.PriceLevelId = PriceLevel.ToEntityReference();
  131.  
  132.             SetOrderFields(salesOrder, jo);
  133.             if (!_serviceContext.IsAttached(contact)) _serviceContext.Attach(contact);
  134.             _serviceContext.AddRelatedObject(contact, new Relationship("contactorders_association"), salesOrder);
  135.             return salesOrder;
  136.         }
  137.  
  138.         private void SetOrderFields(SalesOrder salesOrder, JMAOrder jo)
  139.         {
  140.             if (!String.IsNullOrEmpty(jo.ShippingMethod))
  141.             {
  142.                 InsertOptionValueRequest request = new InsertOptionValueRequest();
  143.                 request.EntityLogicalName = "salesorder";
  144.                 request.AttributeLogicalName = "shippingmethodcode";
  145.                 request.Label = new Label(jo.ShippingMethod, 1036);
  146.                 request.Value = jo.ShippingMethodId;
  147.  
  148.                 InsertOptionValueResponse response = (InsertOptionValueResponse)_serviceContext.Execute(request);
  149.                 //_log.Information(string.Format("ShippingMethod '{0}' has been added to list", jo.ShippingMethod));
  150.                 //Use the local cache
  151.                 //_ShippingMethods.Add(jo.ShippingMethod, shippingMethodId);
  152.                 salesOrder.ShippingMethodCode = jo.ShippingMethodId;
  153.             }
  154.  
  155.             if (jo.BillingAddress != null)
  156.             {
  157.                 salesOrder.BillTo_ContactName = jo.BillingAddress.FirstName + " " + jo.BillingAddress.LastName;
  158.                 salesOrder.BillTo_Line1 = jo.BillingAddress.Address1;
  159.                 salesOrder.BillTo_Line2 = jo.BillingAddress.Address2;
  160.                 salesOrder.BillTo_PostalCode = jo.BillingAddress.PostalCode;
  161.                 salesOrder.BillTo_City = jo.BillingAddress.City;
  162.                 salesOrder.BillTo_StateOrProvince = jo.BillingAddress.RegionName;
  163.                 salesOrder.BillTo_Country = jo.BillingAddress.CountryName;
  164.                 salesOrder.BillTo_Fax = jo.BillingAddress.FaxNumber;
  165.                 salesOrder.BillTo_Telephone = jo.BillingAddress.PhoneNumber;
  166.             }
  167.  
  168.             if (jo.ShippingAddress != null)
  169.             {
  170.                 //salesOrder.ShipTo_AddressTypeCode = new OptionSetValue(1);//Envoi
  171.                 salesOrder.ShipTo_Line1 = jo.ShippingAddress.FirstName + " " + jo.ShippingAddress.LastName;
  172.                 salesOrder.ShipTo_Line1 = jo.ShippingAddress.Address1;
  173.                 salesOrder.ShipTo_Line2 = jo.ShippingAddress.Address2;
  174.                 salesOrder.ShipTo_PostalCode = jo.ShippingAddress.PostalCode;
  175.                 salesOrder.ShipTo_City = jo.ShippingAddress.City;
  176.                 salesOrder.ShipTo_StateOrProvince = jo.ShippingAddress.RegionName;
  177.                 salesOrder.ShipTo_Country = jo.ShippingAddress.CountryName;
  178.                 salesOrder.ShipTo_Fax = jo.ShippingAddress.FaxNumber;
  179.                 salesOrder.ShipTo_Telephone = jo.ShippingAddress.PhoneNumber;
  180.             }
  181.  
  182.             salesOrder.SubmitDate = jo.CreationDate;
  183.  
  184.             salesOrder.DiscountAmount = jo.DiscountInclTax;
  185.             salesOrder.FreightAmount = jo.ShippingInclTax;
  186.             //salesOrder.Attributes["new_shippingstatus"] = jo.ShippingStatus.ToString();
  187.             //var a = jo.Shipments.LastOrDefault();
  188.             //if (a != null)
  189.             //{
  190.             //    salesOrder.Attributes["new_trackingnumber"] = a.TrackingNumber;
  191.             //    if (a.ShippedDateUtc.HasValue)
  192.             //        salesOrder.DateFulfilled = a.ShippedDateUtc.Value.ToLocalTime();
  193.             //}
  194.  
  195.             //salesOrder.Attributes["new_paymentstatus"] = jo.PaymentStatus.ToString();
  196.             //salesOrder.Attributes["new_paymentmethod"] = jo.PaymentMethodSystemName.Replace("Payments.", "");
  197.             //if (jo.PaidDateUtc.HasValue)
  198.             //{
  199.             //    salesOrder.Attributes["new_paiddate"] = jo.PaidDateUtc.Value.ToLocalTime();
  200.             //}
  201.  
  202.             //salesOrder.Attributes["new_orderstatus"] = jo.OrderStatus.ToString();
  203.  
  204.             //salesOrder.Attributes["new_backofficeurl"] = string.Format("{0}Admin/Order/Edit/{1}", EngineContext.Current.Resolve<Nop.Core.Domain.StoreInformationSettings>().StoreUrl, jo.Id);
  205.  
  206.         }
  207.  
  208.         public void CreateProduct(JMAProduct jp)
  209.         {
  210.             Product p = (from a in _serviceContext.ProductSet
  211.                         where a.Id == jp.ProductGuid
  212.                         select a).FirstOrDefault();
  213.  
  214.             if (p == null)
  215.             {
  216.                 p = new Product();
  217.                 p.Id = jp.ProductGuid;
  218.                 p.Price = jp.PurchaseCost;
  219.                 p.Name = jp.Name;
  220.                 p.ProductNumber = jp.Sku;
  221.                 p.QuantityDecimal = 4;
  222.                 p.DefaultUoMScheduleId =
  223.                     new Microsoft.Xrm.Client.CrmEntityReference(_serviceContext.UoMScheduleSet.FirstOrDefault().LogicalName, _serviceContext.UoMScheduleSet.FirstOrDefault().Id);
  224.                 p.DefaultUoMId =
  225.                     new Microsoft.Xrm.Client.CrmEntityReference(_serviceContext.UoMSet.FirstOrDefault().LogicalName, _serviceContext.UoMSet.FirstOrDefault().Id);
  226.                 _serviceContext.AddObject(p);
  227.                 _serviceContext.SaveChanges();
  228.             }
  229.         }
  230.  
  231.         private SalesOrderDetail CreateSalesOrderDetail(SalesOrder salesOrder, JMAOrderDetail od)
  232.         {
  233.             var salesOrderDetail = new SalesOrderDetail();
  234.             salesOrderDetail.SalesOrderId = salesOrder.ToEntityReference();
  235.  
  236.             //if (od.Sku == null)
  237.             //    throw new ApplicationException(string.Format("Product SKU is empty on ProductVariantId {0}, please fill it", od.Id));
  238.             //if (!Products.TryGetValue(joProductVariant.ProductVariant.Sku, out productId))
  239.             //    throw new ApplicationException(string.Format("Product SKU {0} have not equivalent in CRM, please add it", joProductVariant.ProductVariant.Sku));
  240.  
  241.  
  242.             salesOrderDetail.ProductId = new EntityReference("product", od.Product.ProductGuid);
  243.                 salesOrderDetail.UoMId = Uom.ToEntityReference();
  244.            
  245.             salesOrderDetail.IsPriceOverridden = true;
  246.             salesOrderDetail.Quantity = od.Quantity;
  247.             salesOrderDetail.PricePerUnit = Math.Round(od.PriceExclTax, 2);
  248.             //The tax is not a unit tax!
  249.             salesOrderDetail.Tax = Math.Round(od.PriceInclTax - od.PriceExclTax, 2);
  250.             if (!_serviceContext.IsAttached(salesOrder)) _serviceContext.Attach(salesOrder);
  251.             _serviceContext.AddRelatedObject(salesOrder, new Relationship("order_details"), salesOrderDetail);
  252.             return salesOrderDetail;
  253.         }
  254.  
  255.  
  256.     }
  257. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement