public ActionModule(IBusControl busControl) { Get["trigger/{action}/{entity}/{id}", true] = async(parameters, ct) => { var action = parameters.action?.Value; var entity = parameters.entity?.Value; var id = parameters.id?.Value; _logger.Trace($"Received message for event {action} on entity {entity}, record id: {id}"); var guid = Guid.Empty; if (!Guid.TryParse(id, out guid)) { _logger.Error("Failed to parse id, returning status code 400"); return(HttpStatusCode.BadRequest); } var message = new CrmEvent { Scenario = new Scenario(action, entity), TimeStamp = DateTime.UtcNow, RecordId = guid, CorrelationId = Guid.NewGuid().ToString() }; _logger.Trace($"Publishing CrmEvent with correlation ID {message.CorrelationId} to bus"); await busControl.Publish(message).ConfigureAwait(false); _logger.Info($"Successfully published message {message.CorrelationId}, returning statuscode 200"); return(HttpStatusCode.OK); }; }
public async void DoAction(object sender, CrmEvent e) { if (e.Entity != "leads" || String.IsNullOrEmpty(e.EntityId)) { return; } var userActions = new Actions.User1C(database, logger); try { var queryLead = await amoManager.Leads.Get().SetParam(i => i.Id = int.Parse(e.EntityId)).Execute(); var lead = queryLead.FirstOrDefault().Adapt <Lead>(mapper); var queryContact = await amoManager.Contacts.Get().SetParam(i => i.Id = lead.MainContact.Id).Execute(); var contact = queryContact.FirstOrDefault().Adapt <Contact>(mapper); var lkl = await userActions.Create(contact); } catch (Exception ex) { } }
public async void DoAction(object sender, CrmEvent e) { if (e.Entity != "contacts" || String.IsNullOrEmpty(e.EntityId) || e.ContactType != "contact") { return; } IEnumerable <ContactDTO> amoUser = null; Contact contact = null; try { amoUser = await amocrm.Contacts.Get().SetParam(prm => prm.Id = int.Parse(e.EntityId)).Execute(); contact = amoUser.Adapt <IEnumerable <Contact> >(mapper).FirstOrDefault(); logger.Error("Получен контакт - {Name}, {Id}", amoUser.FirstOrDefault().Name, amoUser.FirstOrDefault().Id); } catch (NullReferenceException ex) { logger.Error(ex, "Ошибка в маппинге {@Contacts}, {@AmoUser}", contact, amoUser); } catch (Exception ex) { logger.Error(ex, "Запрос пользователя amoCRM окончился неудачей. Событие - {@Event}, {@AmoUser}, {@Contacts}", e, amoUser, contact); } if (contact != null) { foreach (var phone in contact.Phones()) { if (!(phone.Value == phone.Value.LeaveJustDigits())) { contact.Phones(phone.Key, phone.Value.LeaveJustDigits()); } } } try { if (contact.ChangeValueDelegate != null) { var dto = contact.GetChanges().Adapt <ContactDTO>(mapper); await amocrm.Contacts.Update(dto); logger.Error("Сохранены очищенные телефоны для пользователя {Name}, {Id}", contact.Name, contact.Id); } } catch (Exception ex) { var info = new MessageLocation(this) { Metod = MethodBase.GetCurrentMethod().Name }; logger.Error("Ошибка, {@Message}, {@Location}", ex.Message, info); } }
public async void DoAction(object sender, CrmEvent e) { if (e.Entity != "contacts" || String.IsNullOrEmpty(e.EntityId) || e.ContactType != "contact") { return; } try { var amoUser = amoManager.Contacts.Get().SetParam(prm => prm.Id = int.Parse(e.EntityId)) .Execute() .Result .FirstOrDefault(); var contact = amoUser.Adapt <Contact>(mapper); var hasGuid = contact.Guid(); if (!String.IsNullOrEmpty(hasGuid)) { return; } var guid = await new LookForContact(database, logger).Find(contact); if (!String.IsNullOrEmpty(guid)) { contact.Guid(guid); await amoManager.Contacts.Update( contact.GetChanges().Adapt <ContactDTO>(mapper) ); logger.Information("Обновление Guid - {Guid}, для пользователя Id - {User}", guid, amoUser.Id); } } catch (Exception ex) { var info = new MessageLocation(this) { Metod = MethodBase.GetCurrentMethod().Name }; logger.Error("Ошибка, {@Message}, По адресу - {@Location}", ex.Message, info); } }
private bool _FilterRoutine ( CrmEvent evt ) { switch (EventKind) { case CrmEventKind.AllEvents: return(true); case CrmEventKind.VisitsOnly: return(evt.IsVisit); case CrmEventKind.LoansOnly: return(!evt.IsVisit); } return(false); }
public void GetEvent(CrmEvent item) { foreach (var evnt in item.Events) { switch (evnt.Event) { case "add": eventsType.OnAdd(item); // !!!!! break; case "update": eventsType.OnUpdate(item); break; case "ChangeResponsibleUser": eventsType.OnResponsible(item); break; case "delete": eventsType.OnDelete(item); break; case "note": eventsType.OnNote(item); break; case "status": eventsType.OnStatus(item); break; default: Console.WriteLine("Default case"); break; } } }
public void setIsSent(CrmEvent item) { item.IsSent = true; _repository.UpdateEventAsync(item); }
public async void DoAction(object sender, CrmEvent e) { if (e.Entity != "contacts" || String.IsNullOrEmpty(e.EntityId) || e.ContactType != "contact") { return; } Contact contact = null; try { var idConvert = int.TryParse(e.EntityId, out int id); if (idConvert) { var action = new FindContactActions(crm, currentLogger); var result = await action.LookForContact(id); contact = result?.Adapt <Contact>(mapper); } } catch (Exception ex) { currentLogger.LogError(ex, "Ошибка при поиске контакта в Crm"); return; } if (contact == null) { currentLogger.LogWarning("Контакт [ Id -" + e.EntityId + " ] не найден в CRM"); return; } var hasGuid = contact.Guid(); if (!String.IsNullOrEmpty(hasGuid)) { return; } try { var guid = await new FindGuidAction(database).Find(contact); if (!String.IsNullOrEmpty(guid)) { contact.Guid(guid); await crm.Contacts.Update( contact.GetChanges().Adapt <ContactDTO>(mapper) ); currentLogger.LogInformation("Обновление Guid - {Guid}, для пользователя Id - {User}", guid, contact.Id); } } catch (NullReferenceException ex) { currentLogger.LogDebug(ex, "Ошибка, нулевое значение {@Contacts}", contact); return; } catch (Exception ex) { currentLogger.LogError(ex, "Ошибка обновления пользователя. [{@Id}]", contact.Id); } }
public async void DoAction(object sender, CrmEvent e) { if (e.Entity != "contacts" || String.IsNullOrEmpty(e.EntityId) || e.ContactType != "contact") { return; } IEnumerable <ContactDTO> amoUser = null; Contact contact = null; try { var id = int.Parse(e.EntityId); amoUser = await crm.Contacts.Get().Filter(f => f.Id = id).Execute(); if (amoUser == null) { throw new NullReferenceException("Контакт [ Id -" + e.EntityId + " ] не найден в CRM"); } contact = amoUser.Adapt <IEnumerable <Contact> >(mapper).FirstOrDefault(); } catch (NullReferenceException ex) { currentLogger.LogDebug(ex, "Ошибка, нулевое значение {@Contacts}", contact, amoUser); return; } catch (ArgumentNullException ex) { currentLogger.LogDebug(ex, "Ошибка (int) конвертации ID {@Contact}", contact); return; } catch (Exception ex) { currentLogger.LogDebug(ex, "Запрос пользователя amoCRM окончился неудачей. Событие - {@Event}, {@AmoUser}", e, amoUser, contact); return; } foreach (var phone in contact.Phones()) { if (!(phone.Value == phone.Value.LeaveJustDigits())) { contact.Phones(phone.Key, phone.Value.LeaveJustDigits()); } } try { if (contact.ChangeValueDelegate != null) { var dto = contact.GetChanges().Adapt <ContactDTO>(mapper); await crm.Contacts.Update(dto); currentLogger.LogInformation("Обновление Phone для пользователя Id - {User}", contact.Id); } } catch (Exception ex) { currentLogger.LogDebug(ex, "Ошибка обновления пользователя. [{@Id}]", contact.Id); } }
public async void DoAction(object sender, CrmEvent e) { if (e.Entity != "leads" || String.IsNullOrEmpty(e.EntityId)) { return; } var @event = e.Events.FirstOrDefault(); if (@event.Event != "status" || (@event.CurrentValue != "19368232" & @event.CurrentValue != "142" & @event.CurrentValue != "18855166")) { return; } if (@event.CurrentValue == "142" & @event.Pipeline != "917056") { return; } Lead lead = null; Contact contact = null; var contactGuid = String.Empty; #region Получить сделку try { var queryLead = await crm.Leads.Get().Filter(i => i.Id = int.Parse(e.EntityId)).Execute(); lead = queryLead.FirstOrDefault().Adapt <Lead>(mapper); if (lead == null) { throw new NullReferenceException(); } } catch (NullReferenceException ex) { currentLogger.LogWarning(ex, "Сделка ID - {ID} не найдена", e.EntityId); return; } catch (Exception ex) { currentLogger.LogDebug(ex, "Ошибка при запросе Lead - {ID}", e.EntityId); } #endregion #region Получить контакт if (lead.MainContact != null) { try { var queryContact = await crm.Contacts.Get().Filter(i => i.Id = lead.MainContact.Id).Execute(); contact = queryContact.FirstOrDefault().Adapt <Contact>(mapper); if (contact == null) { throw new NullReferenceException(); } } catch (NullReferenceException ex) { currentLogger.LogWarning(ex, "Контакт ID - {ID} не найден", lead.MainContact.Id); return; } catch (Exception ex) { currentLogger.LogError(ex, "Ошибка при запросе Contact - {ID}", lead.MainContact.Id); } } #endregion contactGuid = contact.Guid(); #region Отправить пользователя в 1С если отсутствует if (String.IsNullOrEmpty(contact.Guid())) { var userActions = new Actions.User1C(database, loggerFactory, mapper); string guid = String.Empty; try { guid = await userActions.Create(contact); if (guid == null) { throw new NullReferenceException(); } } catch (NullReferenceException ex) { currentLogger.LogWarning(ex, "Контакт ID - {ID} не создан в 1С", contact.Id); var note = new NoteDTO() { ElementId = contact.Id, ElementType = (int)ElementTypeEnum.Контакт, NoteType = 25, Params = new NoteParams { Text = "Ошибка сохранения пользователя в 1С.", Service = "WebApi | " } }; var queryCreateTask = await crm.Notes.Add(note); return; } catch (ArgumentException ex) { var exceptionNote = new NoteDTO() { ElementId = contact.Id, ElementType = (int)ElementTypeEnum.Контакт, NoteType = 4, Text = "Ошибка сохранения пользователя в 1С. Сообщение - " + ex.Message }; var queryCreateTask = await crm.Notes.Add(exceptionNote); return; } catch (Exception ex) { currentLogger.LogDebug(ex, "Ошибка при сохранении пользователя в 1С"); return; } contactGuid = guid; var noteSucces = new NoteDTO() { ElementId = contact.Id, ElementType = (int)ElementTypeEnum.Контакт, NoteType = 25, Params = new NoteParams { Text = "Контакт занесен в 1С", Service = "WebApi | " } }; var queryCreateTaskSucces = await crm.Notes.Add(noteSucces); contact.Guid(guid); await crm.Contacts.Update(contact.GetChanges().Adapt <ContactDTO>(mapper)); } #endregion var dto = new SendLeadto1CDTo(); dto.ProgramGuid = lead.Guid(); dto.UserGuid = contactGuid; dto.ContractPrice = lead.Price.Value; dto.ContractTitle = contact.Name; dto.DecreeTitle = contact.Name; if (lead.Pipeline.Id == 917056 || lead.Pipeline.Id == 920008 || lead.Pipeline.Id == 1102975) { dto.ContractEducationStart = lead.SeminarDate().Value; dto.ContractEducationEnd = lead.SeminarDate().Value.AddDays(3); dto.ContractExpire = lead.SeminarDate().Value.AddDays(3); dto.ContractGroup = lead.SeminarDate().Value.ToString("dd.MM.yyyy", CultureInfo.InvariantCulture); } if (lead.Pipeline.Id == 920011 || lead.Pipeline.Id == 1042456) { dto.ContractEducationStart = lead.ProgramStartDate().Value; dto.ContractEducationEnd = lead.ProgramStartDate().Value.AddDays(180); dto.ContractExpire = lead.ContractExpireDate().Value; dto.ContractGroup = "Общая группа"; if (lead.Pipeline.Id == 1042456) { dto.ContractGroup = lead.DistantGroup().Value; } if (lead.Pipeline.Id == 920011) { dto.ContractGroup = lead.FullTimeGroup().Value; } dto.ContractSubGroup = lead.SubGroup()?.Value ?? ""; } var userActions3 = new Actions.User1C(database, loggerFactory, mapper); try { var result = await userActions3.SendLead(dto); var note = new NoteDTO() { ElementId = lead.Id, ElementType = (int)ElementTypeEnum.Сделка, NoteType = 25, Params = new NoteParams { Text = "Сделка успешно отправлена в 1С.", Service = "WebApi | " } }; var queryCreateTask = await crm.Notes.Add(note); currentLogger.LogInformation("Сделка успешно отправлена в 1С. Мероприятие - {Event} [{LeadId}] | Контакт - {Name} [{ContactId}]", lead.Name, lead.Id, contact.Name, contact.Id); lead.IsInService1C(true); await crm.Leads.Update(lead.GetChanges().Adapt <LeadDTO>(mapper)); } catch (ArgumentException ex) { var exceptionNote = new NoteDTO() { ElementId = lead.Id, ElementType = (int)ElementTypeEnum.Сделка, NoteType = 4, Text = "Ошибка ошибка отправки сделки в 1С. Проверьте поля данных или зачислите вручную." }; var queryCreateTask = await crm.Notes.Add(exceptionNote); currentLogger.LogWarning(ex, "Ошибка отправки сделки в 1С"); } catch (Exception ex) { currentLogger.LogWarning(ex, "Ошибка ошибка отправки сделки в 1С"); } }
public CrmEventArgs(CrmEvent crmEvent) { this.crmEvent = crmEvent; }