public void Execute(IServiceProvider serviceProvider) { SqlDataAccess sda = null; sda = new SqlDataAccess(); sda.openConnection(Globals.ConnectionString); try { #region | SERVICE | IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext)); #region | Validate Request | //Target yoksa veya Entity tipinde değilse, devam etme. if (!context.InputParameters.Contains("EntityMoniker") || !(context.InputParameters["EntityMoniker"] is EntityReference)) { return; } #endregion IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory)); IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId); Guid phoneCallId = ((EntityReference)context.InputParameters["EntityMoniker"]).Id; Entity postImage = service.Retrieve("phonecall", phoneCallId, new ColumnSet(true)); #endregion #region | TELEFON GÖRÜŞMESİ SONUCU İLGİLİ İSE YAPILACAKLAR | Directions direction = (bool)postImage["directioncode"] ? Directions.Giden : Directions.Gelen; if (!postImage.Attributes.Contains("to") && postImage["to"] != null || !postImage.Attributes.Contains("from") && postImage["from"] != null) { throw new Exception("Lütfen aranacak kişi ve arama kaynağı bilgisini doldurunuz!"); } EntityReference customer = direction == Directions.Giden ? (EntityReference)((EntityCollection)(postImage["to"])).Entities[0]["partyid"] : (EntityReference)((EntityCollection)(postImage["from"])).Entities[0]["partyid"];; if (postImage.Attributes.Contains("new_activitystatus") && postImage["new_activitystatus"] != null) //activitystatusid si şimdilik { MsCrmResultObject activityStatusResult = ActivityHelper.GetActivityStatusDetail(((EntityReference)postImage["new_activitystatus"]).Id, sda); if (activityStatusResult.Success) { ActivityStatus _activiyStatus = (ActivityStatus)activityStatusResult.ReturnObject; if (_activiyStatus.ActivityStatusCode == ActivityStatusCodes.Ilgili) { bool hasOpenOpportunity = false; Guid ownerId = ((EntityReference)postImage["ownerid"]).Id; Guid opportunityId = Guid.Empty; #region | OPPORTUNITY PROCESS | MsCrmResult opportunityControlResult = OpportunityHelper.HasOpenOpportunityToSalesConsultantAndContact(customer.Id, ownerId, sda); if (opportunityControlResult.Success) { hasOpenOpportunity = true; opportunityId = opportunityControlResult.CrmId; Entity oppEnt = new Entity("opportunity"); oppEnt["opportunityid"] = opportunityId; oppEnt["new_relatedactivitystatusid"] = (EntityReference)postImage["new_activitystatusdetail"]; service.Update(oppEnt); } else { Opportunity opportunity = new Opportunity(); opportunity.Contact = customer; opportunity.ActivityStatusDetail = (EntityReference)postImage["new_activitystatusdetail"]; opportunity.Owner = ((EntityReference)postImage["ownerid"]); MsCrmResult opportunityResult = OpportunityHelper.CreateOrUpdateOpportunity(opportunity, service); if (opportunityResult.Success) { opportunityId = opportunityResult.CrmId; } else { throw new Exception(opportunityResult.Result); } } #endregion #region | SEY ACTIVITY REGARDING OBJECT AS OPPORTUNITY | Entity activity = new Entity("phonecall"); activity.Id = postImage.Id; activity["regardingobjectid"] = new EntityReference("opportunity", opportunityId); service.Update(activity); #endregion #region | OPPORTUNITY PRODUCT PROCESS | MsCrmResultObject activityProductsResult = InterestProductHelper.GetActivityInterestedProjects(postImage.Id, sda); if (activityProductsResult.Success) { List <InterestProduct> relatedProducts = (List <InterestProduct>)activityProductsResult.ReturnObject; #region | FIRSATIN FİYAT LİSTESİ ÜRÜNÜN FİYAT LİSTESİ İLE SET EDİLİR | Entity ent = new Entity("opportunity"); ent.Id = opportunityId; ent["pricelevelid"] = relatedProducts[0].InterestedProduct.PriceList; service.Update(ent); #endregion for (int i = 0; i < relatedProducts.Count; i++) { Product _proc = relatedProducts[i].InterestedProduct; if (hasOpenOpportunity) { MsCrmResult hasProductAddedOppProc = OpportunityHelper.HasOpportunityProduct(opportunityId, _proc.ProductId, sda); if (!hasProductAddedOppProc.Success) { OpportunityHelper.CreateOpportunityProduct(opportunityId, _proc, service); } } else { OpportunityHelper.CreateOpportunityProduct(opportunityId, _proc, service); } } } #endregion } } else { throw new Exception(activityStatusResult.Result); } } #endregion #region | SAHİPLİK İLE İLGİLİ İŞLEMLER | //Eğer kişi ve firma resepsiyonist tarafından oluşturulmuş ise, ilk aktivenin sahibi atanır. Entity ownerEntity = service.Retrieve(customer.LogicalName, customer.Id, new ColumnSet("ownerid")); EntityReference owner = (EntityReference)ownerEntity["ownerid"]; SystemUser su = SystemUserHelper.GetSystemUserInfo(owner.Id, sda); if (su.SystemUserId != null) { if (su.UserType == UserTypes.Resepsiyonist) { AssignRequest assign = new AssignRequest { Assignee = (EntityReference)postImage["ownerid"], Target = customer }; // Execute the Request service.Execute(assign); } } #endregion #region | WEBFORM KAYDI VAR İSE YAPILACAKLAR | //Birden fazla web form kaydı var ise 1. si "Tamamlandı - Temas Kuruldu" olarak diğerleri "Tamamlandı - Başka Bir Temas Nedeniyle" olarak kapatılır. MsCrmResultObject webFormResult = WebFormHelper.GetContactWebForms(customer.Id, sda); if (webFormResult.Success && webFormResult.ReturnObject != null) { List <WebForm> webFormList = (List <WebForm>)webFormResult.ReturnObject; if (webFormList.Count > 0) { WebForm firstForm = webFormList[0]; WebFormHelper.WebFormClose(firstForm.WebFormId, 1, 2, service); //Tamamlandı - Temas Kuruldu if (webFormList.Count > 1) { for (int i = 0; i < webFormList.Count; i++) { WebForm form = webFormList[i]; WebFormHelper.WebFormClose(form.WebFormId, 1, 100000000, service); //Tamamlandı - Başka Bir Temas Nedeniyle } } } } #endregion } catch (Exception ex) { throw new InvalidPluginExecutionException(ex.Message); } finally { if (sda != null) { sda.closeConnection(); } } }
public void Execute(IServiceProvider serviceProvider) { SqlDataAccess sda = null; sda = new SqlDataAccess(); sda.openConnection(Globals.ConnectionString); try { #region | SERVICE | IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext)); #region | Validate Request | //Target yoksa veya Entity tipinde değilse, devam etme. if (!context.InputParameters.Contains("Target") || !(context.InputParameters["Target"] is Entity)) { return; } #endregion IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory)); IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId); #endregion Entity entity = (Entity)context.InputParameters["Target"]; if (entity.Attributes.Contains("new_productid")) { EntityReference createdUser = (EntityReference)entity["ownerid"]; EntityReference proc = (EntityReference)entity["new_productid"]; DateTime optionDate = (DateTime)entity["new_optiondate"]; TimeSpan fark = optionDate - DateTime.Now; Product product = ProductHelper.GetProductDetail(proc.Id, sda); if (product.StatusCode.Value != (int)ProductStatuses.Bos) { throw new Exception("Opsiyon ekleyebilme için konutun durumu BOŞ olmalıdır."); } if (product.Project != null) { QuoteControlSetting control = ProductHelper.GetControlSettingByProject(product.Project.Id, sda); if (control.QuoteControlSettingId != Guid.Empty) { SystemUser su = SystemUserHelper.GetSystemUserInfo(createdUser.Id, sda); if (su.UserType == UserTypes.SatisDanismani) { if (fark.Days > control.ConsultantOptionDay) { throw new Exception("En fazla " + control.ConsultantOptionDay + " gün opsiyonlayabilirsiniz!"); } else { #region | SET PRODUCT STATUS | MsCrmResult productStatusResult = ProductHelper.UpdateHouseStatus(product.ProductId, ProductStatuses.YoneticiOpsiyonlu, service, optionDate); if (!productStatusResult.Success) { throw new Exception(productStatusResult.Result); } #endregion } } else if (su.UserType == UserTypes.SatisMuduru || su.UserType == UserTypes.IsGyoSatisMuduru) { if (fark.Days > control.ManagerOptionDay) { throw new Exception("En fazla " + control.ManagerOptionDay + " gün opsiyonlayabilirsiniz!"); } else { #region | SET PRODUCT STATUS | MsCrmResult productStatusResult = ProductHelper.UpdateHouseStatus(product.ProductId, ProductStatuses.YoneticiOpsiyonlu, service, optionDate); if (!productStatusResult.Success) { throw new Exception(productStatusResult.Result); } #endregion } } else if (su.UserType == UserTypes.SatisDirektoru) { if (fark.Days > control.DirectorOptionDay) { throw new Exception("En fazla " + control.DirectorOptionDay + " gün opsiyonlayabilirsiniz!"); } else { #region | SET PRODUCT STATUS | MsCrmResult productStatusResult = ProductHelper.UpdateHouseStatus(product.ProductId, ProductStatuses.YoneticiOpsiyonlu, service, optionDate); if (!productStatusResult.Success) { throw new Exception(productStatusResult.Result); } #endregion } } else { throw new Exception("Konut opsiyonlama yetkiniz bulunmamaktadır!"); } } } } } catch (Exception ex) { throw new InvalidPluginExecutionException(ex.Message); } finally { if (sda != null) { sda.closeConnection(); } } }
public void Execute(IServiceProvider serviceProvider) { SqlDataAccess sda = null; sda = new SqlDataAccess(); sda.openConnection(Globals.ConnectionString); try { #region | SERVICE | IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext)); #region | Validate Request | //Target yoksa veya Entity tipinde değilse, devam etme. if (!context.InputParameters.Contains("Target") || !(context.InputParameters["Target"] is Entity)) { return; } #endregion IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory)); IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId); #endregion Entity entity = (Entity)context.InputParameters["Target"]; #region | ADD PHONECALL QUEUE | Guid ownerId = entity.Attributes.Contains("ownerid") ? ((EntityReference)entity["ownerid"]).Id : Guid.Empty; if (ownerId != Guid.Empty) { SystemUser user = SystemUserHelper.GetSystemUserInfo(ownerId, sda); if (user.SystemUserId != Guid.Empty) { if (user.UserType != null && user.UserType == UserTypes.CallCenter) //Telefon görüşmesinin sahibi Call Center kullanıcısı ise { MsCrmResultObject callCenterQueueResult = GeneralHelper.GetQueues(QueueTypes.CallCenter, sda); if (callCenterQueueResult.Success) { Queue callCenterQueue = ((List <Queue>)callCenterQueueResult.ReturnObject)[0]; MsCrmResult phoneQueueResult = ActivityHelper.AddPhoneCallToQueue(entity.Id, callCenterQueue.QueueId, service); if (!phoneQueueResult.Success) { throw new Exception(phoneQueueResult.Result); } } } } } if (entity.Attributes.Contains("regardingobjecttypecode")) { } #endregion #region | ADD PHONECALL QUEUE | Kuyruk lookup'ında hangi kuyruk seçilirse create anında kaydı otomatik olarak o kuyruğa atanır. Guid queueId = entity.Attributes.Contains("new_queueid") ? ((EntityReference)entity["new_queueid"]).Id : Guid.Empty; if (queueId != Guid.Empty) { MsCrmResult phoneQueueResult = ActivityHelper.AddPhoneCallToQueue(entity.Id, queueId, service); if (!phoneQueueResult.Success) { throw new Exception(phoneQueueResult.Result); } } #endregion } catch (Exception ex) { throw new InvalidPluginExecutionException(ex.Message); } finally { if (sda != null) { sda.closeConnection(); } } }