コード例 #1
0
        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);
            };
        }
コード例 #2
0
        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)
            {
            }
        }
コード例 #3
0
        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);
            }
        }
コード例 #4
0
        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);
            }
        }
コード例 #5
0
ファイル: CrmVisitFilter.cs プロジェクト: koma00/GatewayIrbis
        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);
        }
コード例 #6
0
        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;
                }
            }
        }
コード例 #7
0
 public void setIsSent(CrmEvent item)
 {
     item.IsSent = true;
     _repository.UpdateEventAsync(item);
 }
コード例 #8
0
        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);
            }
        }
コード例 #9
0
        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);
            }
        }
コード例 #10
0
        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С");
            }
        }
コード例 #11
0
ファイル: CrmEventArgs.cs プロジェクト: SpotlightUK/Scramjet
 public CrmEventArgs(CrmEvent crmEvent)
 {
     this.crmEvent = crmEvent;
 }