コード例 #1
0
        /// <summary>
        /// Метод пытается изменить основной контакт на клиенте
        /// </summary>
        /// <param name="accountViewModel"></param>
        /// <param name="errors"></param>
        /// <returns></returns>
        public bool TryChangePrimaryContact(AccountViewModel accountViewModel, Account account, ModelStateDictionary modelState)
        {
            Dictionary <string, string> errors = validator.ChangePrimaryContactCheck(accountViewModel, account);

            if (errors.Count > 0)
            {
                errors.Keys.ToList().ForEach(error => modelState.AddModelError(error, errors[error]));
                return(false);
            }

            // В зависимости от типа клиента
            switch (account.AccountType)
            {
            // Для физических лиц основной контакт является обязательным
            case AccountType.Individual:
                Guid           primaryContactId = Guid.Parse(accountViewModel.PrimaryContactId);
                AccountContact primaryContact   = context.AccountContacts.FirstOrDefault(i => i.Id == primaryContactId);
                account.PrimaryContactId = primaryContactId;
                account.Name             = primaryContact.GetFullName();
                break;

            // Для остальных типов клиентов основной контакт может отсутствовать
            case AccountType.IndividualEntrepreneur:
                account.PrimaryContactId = string.IsNullOrEmpty(accountViewModel.PrimaryContactId) ? Guid.Empty : Guid.Parse(accountViewModel.PrimaryContactId);
                break;
            }

            context.Accounts.Update(account);
            context.SaveChanges();
            return(true);
        }
コード例 #2
0
 private void BindAccountContact()
 {
     try
     {
         AccountContact accountContact = AccountContact.GetAccountContactByAccountContactId(this.accountContactId);
         TextBoxFirstName.Text     = accountContact.FirstName;
         TextBoxLastName.Text      = accountContact.LastName;
         TextBoxContactNumber.Text = accountContact.ContactNumber;
         TextBoxEmail.Text         = accountContact.Email;
         TextBoxPosition.Text      = accountContact.Position;
     }
     catch (System.Data.SqlClient.SqlException sqlEx)
     {
         for (int i = 0; i < sqlEx.Errors.Count; i++)
         {
             LabelError.Text += (sqlEx.Errors[i].Message + "<br />");
         }
         PanelError.Visible = true;
     }
     catch (Exception exception)
     {
         LabelError.Text   += (exception.Message + "<br />");
         PanelError.Visible = true;
     }
 }
コード例 #3
0
        /// <summary>
        /// Метод выполняет проверки, необходимые при изенении основного контакта на клиенте
        /// </summary>
        /// <param name="accountViewModel"></param>
        /// <returns></returns>
        public Dictionary <string, string> ChangePrimaryContactCheck(AccountViewModel accountViewModel, Account account)
        {
            // Для физических лиц основной контакт является обязательным
            if (account.AccountType == AccountType.Individual && string.IsNullOrEmpty(accountViewModel.PrimaryContactId))
            {
                errors.Add("PrimaryIndividualContactIsRequired", resManager.GetString("PrimaryIndividualContactIsRequired"));
                return(errors);
            }

            // Для остальных типов клиентов основной контакт не является обязательным, поэтому осуществляется возврат из метода
            if (account.AccountType != AccountType.Individual && string.IsNullOrEmpty(accountViewModel.PrimaryContactId))
            {
                return(errors);
            }

            // Если не получается распарсить строку с контактом, возвращается ошибка
            if (!Guid.TryParse(accountViewModel.PrimaryContactId, out Guid primaryContactId))
            {
                errors.Add("AccountContactNotFound", resManager.GetString("AccountContactNotFound"));
                return(errors);
            }

            // Если контак не найден, также возвращается ошибка
            AccountContact accountContact = account.AccountContacts.FirstOrDefault(i => i.Id == primaryContactId);

            if (accountContact == null)
            {
                errors.Add("AccountContactNotFound", resManager.GetString("AccountContactNotFound"));
                return(errors);
            }
            return(errors);
        }
        public async Task Update(AccountContact contact)
        {
            Contacts.Attach(contact);

            var entry = Entry(contact);

            entry.State = EntityState.Modified;

            await SaveChangesAsync();
        }
        public async Task DeleteContact(Guid id)
        {
            var contact = new AccountContact {
                Id = id
            };

            Contacts.Attach(contact);
            Contacts.Remove(contact);
            await SaveChangesAsync();
        }
コード例 #6
0
        protected void ButtonSave_Click(object sender, EventArgs e)
        {
            if (Page.IsValid)
            {
                AccountContact accountContact = new AccountContact();
                accountContact.AccountContactId = this.accountContactId;
                accountContact.FirstName        = TextBoxFirstName.Text;
                accountContact.LastName         = TextBoxLastName.Text;
                accountContact.ContactNumber    = TextBoxContactNumber.Text;
                accountContact.Email            = TextBoxEmail.Text;
                accountContact.Position         = (TextBoxPosition.Text.Length == 0) ? "" : TextBoxPosition.Text;
                accountContact.ModifiedUser     = Context.User.Identity.GetUserName();

                try
                {
                    accountContact.Save();
                    int accountContactId = accountContact.AccountContactId;

                    if (this.accountId != 0)
                    {
                        AccountContactLink accountContactLink = new AccountContactLink();
                        accountContactLink.AccountContactId = accountContact.AccountContactId;
                        accountContactLink.AccountId        = this.accountId;
                        accountContactLink.ModifiedUser     = Context.User.Identity.GetUserName();
                        accountContactLink.Save();

                        BindAccountContactGridView();
                    }

                    Button clickedButton = (Button)sender;
                    switch (clickedButton.ID)
                    {
                    case "ButtonSave":
                        Response.Redirect("AccountContactList.aspx");
                        break;

                    case "ButtonSaveNew":
                        Response.Redirect("AccountContactEdit.aspx");
                        break;

                    case "ButtonSaveLink":
                        Response.Redirect(String.Format("AccountContactEdit.aspx?AccountContactId={0}&AccountId={1}", 0, this.accountId));
                        break;
                    }
                }
                catch (System.Data.SqlClient.SqlException sqlEx)
                {
                    LabelError.Text = "";
                    for (int i = 0; i < sqlEx.Errors.Count; i++)
                    {
                        ErrorMessage.Text += (sqlEx.Errors[i].Message + "<br />");
                    }
                }
            }
        }
コード例 #7
0
        public void AssociateAccountToContact(List <AccountContactModel> accountcontactlist, int createdBy)
        {
            List <AccountContact> accountContactList = new List <AccountContact>();

            foreach (var accountcontact in accountcontactlist)
            {
                AccountContact acccontact = new AccountContact();
                acccontact.AccountId   = accountcontact.AccountId;
                acccontact.ContactId   = accountcontact.ContactId;
                acccontact.CreatedBy   = createdBy;
                acccontact.CreatedDate = DateTime.UtcNow;
                accountContactList.Add(acccontact);
            }
            accountcontactRepository.InsertAll(accountContactList);
        }
コード例 #8
0
        public override Dictionary <string, string> DeleteCheck(Guid id)
        {
            AccountContact accountContact = context.AccountContacts.FirstOrDefault(i => i.Id == id);

            if (accountContact == null)
            {
                errors.Add("AccountContactNotFound", resManager.GetString("AccountContactNotFound"));
            }

            Account account = context.Accounts.FirstOrDefault(i => i.Id == accountContact.AccountId);

            if (account == null)
            {
                errors.Add("AccountContactNotFound", resManager.GetString("AccountContactNotFound"));
            }

            if (account.PrimaryContactId == accountContact.Id && account.AccountType == AccountType.Individual)
            {
                errors.Add("PrimaryIndividualContactIsReadonly", resManager.GetString("PrimaryIndividualContactIsReadonly"));
            }

            return(errors);
        }
コード例 #9
0
 private void BindAccountContactGridView()
 {
     GridViewResult.DataSource = AccountContact.GetAccountContactListByAccountId(this.accountId);
     GridViewResult.DataBind();
 }
コード例 #10
0
 /// <remarks/>
 public System.IAsyncResult BeginmodifyAccountContact(AccountContact contact, System.AsyncCallback callback, object asyncState)
 {
     return(this.BeginInvoke("modifyAccountContact", new object[] {
         contact
     }, callback, asyncState));
 }
コード例 #11
0
 public void modifyAccountContact(AccountContact contact)
 {
     this.Invoke("modifyAccountContact", new object[] {
         contact
     });
 }
コード例 #12
0
 public void addAccountContact(AccountContact contact)
 {
     this.Invoke("addAccountContact", new object[] {
         contact
     });
 }
コード例 #13
0
 public static string GetFullName(this AccountContact accountContact)
 => $"{accountContact.LastName} {accountContact.FirstName} {accountContact.MiddleName}";
コード例 #14
0
        public override Account OnModelCreate(AccountViewModel accountViewModel)
        {
            // Поля клиента и список контактов
            string name             = string.Empty;
            string kpp              = string.Empty;
            string okpo             = string.Empty;
            string ogrn             = string.Empty;
            Guid   newAccountId     = Guid.NewGuid();
            Guid   primaryContactId = Guid.Empty;
            List <AccountContact> accountContacts = new List <AccountContact>();

            // В зависимости от типа клиента инициализация переменных разными значениями
            AccountType accountType = (AccountType)Enum.Parse(typeof(AccountType), accountViewModel.AccountType);

            switch (accountType)
            {
            // Физическое лицо
            case AccountType.Individual:
                name = accountViewModel.GetIndividualFullName();
                AccountContact accountContact = GetNewAccountContact(accountViewModel, newAccountId);
                primaryContactId = accountContact.Id;
                accountContacts.Add(accountContact);
                context.AccountContacts.Add(accountContact);
                break;

            // ИП
            case AccountType.IndividualEntrepreneur:
                name = accountViewModel.Name;
                kpp  = accountViewModel.KPP;
                break;

            // Юридическое лицо
            case AccountType.LegalEntity:
                name = accountViewModel.Name;
                kpp  = accountViewModel.KPP;
                okpo = accountViewModel.OKPO;
                ogrn = accountViewModel.OGRN;
                break;
            }

            // Создание адреса - при любом типе клиента
            List <AccountAddress> accountAddresses = new List <AccountAddress>();
            AccountAddress        accountAddress   = GetNewAccountAddress(accountViewModel, newAccountId);
            Guid legalAddressId = accountAddress.Id;

            accountAddresses.Add(accountAddress);
            context.AccountAddresses.Add(accountAddress);

            // Привязка существующего сотрудника организации как основного менеджера по клиенту и добавление его в список "accountManagers"
            List <AccountManager> accountManagers = new List <AccountManager>();
            AccountManager        accountManager  = GetNewAccountManager(accountViewModel, newAccountId);
            Guid primaryManagerId = accountManager.Id;

            accountManagers.Add(accountManager);
            context.AccountManagers.Add(accountManager);

            return(new Account()
            {
                Id = newAccountId,
                Name = name,
                INN = accountViewModel.INN,
                KPP = kpp,
                OKPO = okpo,
                OGRN = ogrn,
                AccountStatus = AccountStatus.Active,
                AccountType = accountType,
                OrganizationId = currentUser.PrimaryOrganizationId,
                ParentAccountId = Guid.Empty,
                PrimaryContactId = primaryContactId,
                LegalAddressId = legalAddressId,
                PrimaryManagerId = primaryManagerId,
                AccountContacts = accountContacts,
                AccountAddresses = accountAddresses,
                AccountManagers = accountManagers
            });
        }
コード例 #15
0
        public int AddContact(ContactModel contactModel)
        {
            Contact contact = new Contact();

            AutoMapper.Mapper.Map(contactModel, contact);
            contact.CreatedDate  = DateTime.UtcNow;
            contact.ModifiedBy   = contactModel.ModifiedBy;
            contact.CreatedBy    = contactModel.CreatedBy;
            contact.ModifiedDate = DateTime.UtcNow;
            contact.Address      = null;
            contact.User         = null;

            contact.Address = ValidateAddress(contact.Address, contactModel.AddressModel);

            if (contactModel.AccountId > 0)
            {
                AccountContact accountcontact = new AccountContact();
                accountcontact.AccountId = contactModel.AccountId;

                accountcontact.CreatedBy   = contactModel.CreatedBy;
                accountcontact.CreatedDate = DateTime.UtcNow;
                contact.AccountContacts.Add(accountcontact);
            }
            if (contactModel.LeadId > 0)
            {
                LeadContact leadcontact = new LeadContact();
                leadcontact.LeadId = contactModel.LeadId.Value;

                leadcontact.CreatedBy   = contactModel.CreatedBy;
                leadcontact.CreatedDate = DateTime.UtcNow;
                contact.LeadContacts.Add(leadcontact);
            }
            contactRepository.Insert(contact);
            List <int> lisTagIds = new List <int>();

            if (!string.IsNullOrEmpty(contactModel.ContactTagIds))
            {
                string[] arrTagIds = contactModel.ContactTagIds.Split(',');
                int      tagId     = 0;
                for (int i = 0; i < arrTagIds.Length; i++)
                {
                    tagId = arrTagIds[i].Decrypt();

                    lisTagIds.Add(tagId);
                }
            }

            if (!string.IsNullOrEmpty(contactModel.NewTagNames))
            {
                List <int> lisNewAddedTagIds = new List <int>();
                lisNewAddedTagIds = AddTagsToSystem(contactModel.NewTagNames, contactModel.CompanyId, contactModel.CreatedBy);

                if (lisNewAddedTagIds.Count > 0)
                {
                    lisTagIds = lisTagIds.Concat(lisNewAddedTagIds).ToList();
                }
            }


            //Associate Tagids to contact
            if (lisTagIds.Count > 0)
            {
                ContactTag contactTag;
                for (int i = 0; i < lisTagIds.Count; i++)
                {
                    contactTag           = new ContactTag();
                    contactTag.ContactId = contact.ContactId;
                    contactTag.TagId     = lisTagIds[i];
                    contactTagRepository.Insert(contactTag);
                }
            }


            return(contact.ContactId);
        }
コード例 #16
0
        public ServiceResponse AddEditContact(UserModel userModel, int accountId)
        {
            currentLoginCompanyId = GetLoginUserCompanyId();
            loginUserId           = GetLoginUserId();
            IdentityResult result    = new IdentityResult();
            var            user      = new User();
            var            existUser = _unitOfWork.userRespository.Get(m => m.Email == userModel.Email && m.Id != userModel.Id).FirstOrDefault();

            if (userModel.Id > 0 && existUser == null)
            {
                user = _unitOfWork.userRespository.Get(c => c.Id == userModel.Id).FirstOrDefault();
                var accountContactInfo = _unitOfWork.accountContactRespository.Get(c => c.UserId == userModel.Id).FirstOrDefault();
                Mapper.Map(userModel, user);
                user.BusinessName = null;
                user.UpdatedBy    = loginUserId;
                user.CompanyId    = currentLoginCompanyId;
                if (accountContactInfo != null && accountContactInfo.AccountId != accountId)
                {
                    var accountContact = new AccountContact()
                    {
                        AccountId = accountId
                    };
                    user.AccountContact = new List <AccountContact> {
                        accountContact
                    };
                }
                _unitOfWork.userRespository.Update(user);
            }
            else
            {
                var DeleteUser = UserManager.FindByEmail(userModel.Email);
                if (DeleteUser != null && existUser == null)
                {
                    DeleteUser.IsDeleted = false;
                    Mapper.Map(DeleteUser, user);
                    Mapper.Map(userModel, user);
                    user.UpdatedBy = loginUserId;
                    user.CompanyId = currentLoginCompanyId;
                    var accountContact = new AccountContact()
                    {
                        AccountId = accountId
                    };
                    user.AccountContact = new List <AccountContact> {
                        accountContact
                    };
                    _unitOfWork.userRespository.Update(user);
                }
                else
                {
                    if (existUser == null)
                    {
                        Mapper.Map(userModel, user);

                        var accountContact = new AccountContact()
                        {
                            AccountId = accountId
                        };
                        user.AccountContact = new List <AccountContact> {
                            accountContact
                        };
                        user.CreatedBy = loginUserId;
                        user.CompanyId = currentLoginCompanyId;
                        _unitOfWork.userRespository.Insert(user);
                    }
                    else
                    {
                        return(new ServiceResponse {
                            Data = userModel, Message = "Sorry, it looks like <b>" + userModel.Email + " </b> belongs to an existing account", Success = false
                        });
                    }
                }
            }
            _unitOfWork.Save();
            Mapper.Map(user, userModel);
            return(new ServiceResponse()
            {
                Data = userModel, Message = "Success", Success = true
            });
        }
コード例 #17
0
        public LeadModel UpdateLeadStage(LeadModel leadModel)
        {
            //LeadModel leadModel = new LeadModel();
            int  leadId, stageId, modifyBy;
            bool isClosedWin;

            leadId      = leadModel.LeadId;
            stageId     = (int)leadModel.StageId;
            isClosedWin = (bool)leadModel.IsClosedWin;
            modifyBy    = (int)leadModel.ModifiedBy;
            RatingModel ratingModel = new RatingModel();
            Stage       stage       = new Stage();

            stage             = stageRepository.SingleOrDefault(r => r.StageId == stageId && r.RecordDeleted == false);
            leadModel.LeadId  = leadId;
            leadModel.StageId = stageId;
            int?ratingId = stage.DefaultRatingId;

            leadModel.RatingId = ratingId;
            ratingModel        = ratingBusiness.GetRatingByRatingId((int)(leadModel.RatingId == null ? 0 : leadModel.RatingId));
            bool?isLastStage = stage.IsLastStage == null ? false : stage.IsLastStage;

            leadModel        = Update(leadModel, (bool)isLastStage);
            leadModel.Rating = ratingModel;
            if (isLastStage == true)
            {
                Lead lead = leadRepository.SingleOrDefault(r => r.LeadId == leadModel.LeadId);

                if (isClosedWin == true && lead.AccountId == null)
                {//Code for Converting lead to Account as the lead is closed with win status
                    using (TransactionScope tscope = new TransactionScope(TransactionScopeOption.RequiresNew))
                    {
                        int     leadModuleId    = Convert.ToInt32(Utility.Enums.Module.Lead);
                        int     accountModuleId = Convert.ToInt32(Utility.Enums.Module.Account);
                        Account account         = new Account();
                        account.AccountName    = lead.LeadCompanyName ?? lead.Title;
                        account.AccountOwnerId = lead.LeadOwnerId.Value;
                        account.CompanyId      = lead.CompanyId;
                        accountRepository.Insert(account);
                        account.CreatedBy   = modifyBy;
                        account.CreatedDate = DateTime.UtcNow;
                        int accountId = account.AccountId;


                        //Code to Create Sale order automatically just after creating new order

                        SalesOrder saleaOrder = new SalesOrder();
                        saleaOrder.Subject      = lead.Title;
                        saleaOrder.AccountId    = account.AccountId;
                        saleaOrder.CompanyId    = account.CompanyId;
                        saleaOrder.OwnerId      = account.CreatedBy;
                        saleaOrder.OrderAmount  = lead.Amount;
                        saleaOrder.GrandTotal   = lead.Amount;
                        saleaOrder.CreatedBy    = account.CreatedBy;
                        saleaOrder.CreatedDate  = DateTime.UtcNow;
                        saleaOrder.ModifiedBy   = account.ModifiedBy;
                        saleaOrder.ModifiedDate = DateTime.UtcNow;
                        salesOrderRepository.Insert(saleaOrder);

                        //salesOrderRepository
                        //code for saving leadcontact to account contact
                        List <AccountContact>     accountContactList = new List <AccountContact>();
                        AccountContact            accountcontact     = new AccountContact();
                        ICollection <LeadContact> leadContacts       = new List <LeadContact>();
                        leadContacts = lead.LeadContacts;
                        foreach (var leadcontact in leadContacts)
                        {
                            accountcontact.AccountId   = accountId;
                            accountcontact.ContactId   = leadcontact.ContactId;
                            accountcontact.CreatedDate = DateTime.UtcNow;
                            accountcontact.CreatedBy   = modifyBy;
                            accountContactList.Add(accountcontact);
                        }

                        accountcontactRepository.InsertAll(accountContactList);
                        //code for saving leadDocument TO accountDocument
                        List <FileAttachment> fileAttacmentList = new List <FileAttachment>();
                        fileAttacmentList = fileAttachmentrepository.GetAll(r => r.LeadId == leadId).ToList();
                        foreach (FileAttachment file in fileAttacmentList)
                        {
                            file.AccountId = accountId;
                        }
                        fileAttachmentrepository.UpdateAll(fileAttacmentList);
                        //Code for Converting LeadActivity to account Activity
                        List <TaskItem> activityList = new List <TaskItem>();
                        activityList = taskItemRepository.GetAll(r => r.AssociatedModuleId == leadModuleId && r.AssociatedModuleValue == leadId).ToList();
                        List <TaskItem> listActivityToAdd = new List <TaskItem>();
                        foreach (TaskItem task in activityList)
                        {
                            TaskItem taskObj = new TaskItem();
                            taskObj.CompanyId             = task.CompanyId;
                            taskObj.AssociatedModuleId    = accountModuleId;
                            taskObj.AssociatedModuleValue = accountId;
                            taskObj.Description           = task.Description;
                            taskObj.DueDate     = task.DueDate;
                            taskObj.EndDate     = task.EndDate;
                            taskObj.CreatedDate = task.CreatedDate;
                            taskObj.CreatedBy   = task.CreatedBy;
                            taskObj.Subject     = task.Subject;
                            taskObj.Status      = task.Status;
                            taskObj.OwnerId     = task.OwnerId;
                            listActivityToAdd.Add(taskObj);
                        }
                        taskItemRepository.InsertAll(listActivityToAdd);
                        //Associating Lead TO NewLy created account
                        lead.AccountId   = accountId;
                        lead.ClosingDate = DateTime.UtcNow;
                        lead.IsLeadConvertedToAccount = true;
                        lead.RatingId     = ratingId;
                        lead.StageId      = stageId;
                        lead.ModifiedBy   = modifyBy;
                        lead.ModifiedDate = DateTime.UtcNow;
                        lead.IsClosed     = true;
                        leadRepository.Update(lead);
                        tscope.Complete();
                    }
                    leadModel.Rating.Icons = CommonFunctions.GetRatingImage("", true, true);
                }
                else
                {
                    leadModel.Rating.Icons        = CommonFunctions.GetRatingImage("", true, false);
                    lead.ClosingDate              = DateTime.UtcNow;
                    lead.IsLeadConvertedToAccount = false;
                    lead.RatingId     = ratingId;
                    lead.StageId      = stageId;
                    lead.ModifiedBy   = modifyBy;
                    lead.ModifiedDate = DateTime.UtcNow;
                    lead.LeadStatusId = (int?)Utility.Enums.LeadStatus.Lost;    //5 is set for lost  lead
                    lead.IsClosed     = true;
                    leadRepository.Update(lead);
                }
            }
            return(leadModel);
        }
 public async Task Add(AccountContact contact)
 {
     Contacts.Add(contact);
     await SaveChangesAsync();
 }