protected virtual void Contact_RowSelected(PXCache sender, PXRowSelectedEventArgs e) { Contact row = e.Row as Contact; if (row == null) { return; } PXUIFieldAttribute.SetEnabled <Contact.contactID>(sender, row, true); CRContactClass leadClass = row.ClassID. With(_ => (CRContactClass)PXSelectReadonly <CRContactClass, Where <CRContactClass.classID, Equal <Required <CRContactClass.classID> > > > . Select(this, _)); if (leadClass != null) { Activities.DefaultEMailAccountId = leadClass.DefaultEMailAccountID; } if (row.DuplicateStatus == DuplicateStatusAttribute.PossibleDuplicated || row.DuplicateFound == true) { sender.RaiseExceptionHandling <Contact.duplicateStatus>(row, null, new PXSetPropertyException(Messages.LeadHavePossibleDuplicates, PXErrorLevel.Warning, row.ContactID)); } }
protected virtual void AccountsFilter_AccountClass_FieldDefaulting(PXCache sender, PXFieldDefaultingEventArgs e) { Contact contact = sender.Graph.Caches <Contact>().Current as Contact; if (contact == null) { return; } CRContactClass ctcls = PXSelect <CRContactClass, Where <CRContactClass.classID, Equal <Required <Contact.classID> > > > .Select(this, contact.ClassID); if (ctcls != null) { if (ctcls.TargetBAccountClassID == null) { CRCustomerClass cls = PXSelect <CRCustomerClass, Where <CRCustomerClass.cRCustomerClassID, Equal <Required <Contact.classID> > > > .Select(this, contact.ClassID); if (cls != null) { e.NewValue = cls.CRCustomerClassID; } } else { e.NewValue = ctcls.TargetBAccountClassID; } } }
public virtual void AddOpportunity() { var row = ContactCurrent.Current; if (row == null || row.ContactID == null) { return; } CRContactClass ctcls = PXSelect <CRContactClass, Where <CRContactClass.classID, Equal <Required <Contact.classID> > > > .Select(this, row.ClassID); var graph = PXGraph.CreateInstance <OpportunityMaint>(); var newOpportunity = graph.Opportunity.Insert(); newOpportunity.BAccountID = row.BAccountID; if (ctcls != null && ctcls.TargetOpportunityClassID != null) { newOpportunity.CROpportunityClassID = ctcls.TargetOpportunityClassID; } newOpportunity.ContactID = row.ContactID; graph.Opportunity.Update(newOpportunity); if (!this.IsContractBasedAPI) { PXRedirectHelper.TryRedirect(graph, PXRedirectHelper.WindowMode.NewWindow); } graph.Save.Press(); }
public override object Evaluate(PXCache cache, object item, Dictionary <Type, object> pars) { string classID = (string)pars[typeof(ClassID)]; CRContactClass cls = PXSelect <CRContactClass, Where <CRContactClass.classID, Equal <Required <CRContactClass.classID> > > > .Select(cache.Graph, classID); if (cls == null) { return(null); } PXSelectBase <EPCompanyTreeMember> cmd = new PXSelectJoin <EPCompanyTreeMember, InnerJoin <EPCompanyTreeH, On <EPCompanyTreeMember.workGroupID, Equal <EPCompanyTreeH.workGroupID> > >, Where <EPCompanyTreeMember.userID, Equal <Required <EPCompanyTreeMember.userID> > > >(cache.Graph); if (cls.DefaultWorkgroupID != null && cls.OwnerIsCreatedUser != true) { return(cls.DefaultWorkgroupID); } else if (cls.DefaultWorkgroupID != null && cls.OwnerIsCreatedUser == true) { cmd.WhereAnd <Where <EPCompanyTreeH.parentWGID, Equal <Required <EPCompanyTreeH.parentWGID> > > >(); EPCompanyTreeMember m = cmd.SelectSingle(cache.Graph.Accessinfo.UserID, cls.DefaultWorkgroupID); return(m.With(_ => _.WorkGroupID)); } else if (cls.DefaultWorkgroupID == null && cls.OwnerIsCreatedUser == true && cls.DefaultOwnerWorkgroup == true) { EPCompanyTreeMember m = cmd.SelectSingle(cache.Graph.Accessinfo.UserID); return(m.With(_ => _.WorkGroupID)); } else { return(null); } }
public override void Verify(PXCache cache, object item, List <object> pars, ref bool?result, ref object value) { string classID = (string)Calculate <ClassID>(cache, item); CRContactClass cls = PXSelect <CRContactClass, Where <CRContactClass.classID, Equal <Required <CRContactClass.classID> > > > .Select(cache.Graph, classID); if (cls == null) { return; } PXSelectBase <EPCompanyTreeMember> cmd = new PXSelectJoin <EPCompanyTreeMember, InnerJoin <EPCompanyTreeH, On <EPCompanyTreeMember.workGroupID, Equal <EPCompanyTreeH.workGroupID> > >, Where <EPCompanyTreeMember.userID, Equal <Required <EPCompanyTreeMember.userID> > > >(cache.Graph); if (cls.DefaultWorkgroupID != null && cls.OwnerIsCreatedUser != true) { value = cls.DefaultWorkgroupID; } else if (cls.DefaultWorkgroupID != null && cls.OwnerIsCreatedUser == true) { cmd.WhereAnd <Where <EPCompanyTreeH.parentWGID, Equal <Required <EPCompanyTreeH.parentWGID> > > >(); EPCompanyTreeMember m = cmd.SelectSingle(cache.Graph.Accessinfo.UserID, cls.DefaultWorkgroupID); value = m.With(_ => _.WorkGroupID); } else if (cls.DefaultWorkgroupID == null && cls.OwnerIsCreatedUser == true && cls.DefaultOwnerWorkgroup == true) { EPCompanyTreeMember m = cmd.SelectSingle(cache.Graph.Accessinfo.UserID); value = m.With(_ => _.WorkGroupID); } else { value = null; } }
public virtual IEnumerable ConvertToOpportunity(PXAdapter adapter) { bool isOpportunityAutoNumberOn = this.IsNumberingAutonumbered(Setup.Current.OpportunityNumberingID); List <Contact> contacts = new List <Contact>(adapter.Get().Cast <Contact>()); foreach (Contact lead in contacts) { OpportunityMaint opportunityMaint = PXGraph.CreateInstance <OpportunityMaint>(); CROpportunity opportunity = (CROpportunity)opportunityMaint.Opportunity.Cache.CreateInstance(); if (!isOpportunityAutoNumberOn) { if (OpportunityInfo.AskExt() != WebDialogResult.OK || !OpportunityInfo.VerifyRequired()) { return(contacts); } CROpportunity existing = PXSelect <CROpportunity, Where <CROpportunity.opportunityID, Equal <Required <CROpportunity.opportunityID> > > > .SelectSingleBound(this, null, OpportunityInfo.Current.OpportunityID); if (existing != null) { OpportunityInfo.Cache.RaiseExceptionHandling <OpportunityFilter.opportunityID>(OpportunityInfo.Current, OpportunityInfo.Current.OpportunityID, new PXSetPropertyException(Messages.OpportunityAlreadyExists, OpportunityInfo.Current.OpportunityID)); return(contacts); } object cd = OpportunityInfo.Current.OpportunityID; opportunityMaint.Opportunity.Cache.RaiseFieldUpdating <CROpportunity.opportunityID>(null, ref cd); opportunity.OpportunityID = (string)cd; } PXLongOperation.StartOperation(this, delegate() { CRContactClass cls = PXSelect <CRContactClass, Where <CRContactClass.classID, Equal <Current <Contact.classID> > > > .SelectSingleBound(this, new object[] { lead }); if (cls != null && cls.OwnerToOpportunity == true) { opportunity.WorkgroupID = lead.WorkgroupID; opportunity.OwnerID = lead.OwnerID; } if (lead.BAccountID != null) { opportunity.BAccountID = lead.BAccountID; } opportunity.ContactID = lead.ContactID; opportunity = (CROpportunity)opportunityMaint.Opportunity.Cache.Insert(opportunity); ContactMaint contactGraph = PXGraph.CreateInstance <ContactMaint>(); lead.ContactType = ContactTypesAttribute.Person; contactGraph.Contact.Update(lead); contactGraph.Save.Press(); opportunityMaint.Opportunity.Search <CROpportunity.opportunityID>(opportunity.OpportunityID); throw new PXRedirectRequiredException(opportunityMaint, "Opportunity", true); }); } return(contacts); }
public virtual void AddOpportunityForContact() { var row = CampaignCurrent.Current; if (row == null || row.CampaignID == null) { return; } var member = CampaignMembers.Current; if (member == null || member.ContactID == null) { return; } var contact = (Contact)ContactByContactId.Select(member.ContactID); var graph = PXGraph.CreateInstance <OpportunityMaint>(); var newOpportunity = (CROpportunity)graph.Opportunity.Cache.CreateInstance(); newOpportunity = graph.Opportunity.Insert(newOpportunity); newOpportunity.CampaignSourceID = row.CampaignID; newOpportunity.BAccountID = contact?.BAccountID; if (contact?.ContactType != ContactTypesAttribute.BAccountProperty) { newOpportunity.ContactID = member.ContactID; } CRContactClass cls = PXSelect <CRContactClass, Where <CRContactClass.classID, Equal <Current <Contact.classID> > > > .SelectSingleBound(this, new object[] { contact }); if (cls?.OwnerToOpportunity == true) { newOpportunity.WorkgroupID = contact?.WorkgroupID; newOpportunity.OwnerID = contact?.OwnerID; } if (cls?.TargetOpportunityClassID != null) { newOpportunity.ClassID = cls.TargetOpportunityClassID; } if (row.ProjectID != null) { newOpportunity.ProjectID = row.ProjectID; } newOpportunity = graph.Opportunity.Update(newOpportunity); newOpportunity.ContactID = member.ContactID; PXRedirectHelper.TryRedirect(graph, PXRedirectHelper.WindowMode.NewWindow); }
protected virtual void Contact_ClassID_FieldVerifying(PXCache sender, PXFieldVerifyingEventArgs e) { Contact row = (Contact)e.Row; CRContactClass cc = (CRContactClass)PXSelectorAttribute.Select <Contact.classID>(sender, row, e.NewValue); this.doCopyClassSettings = false; if (cc != null) { this.doCopyClassSettings = true; if (sender.GetStatus(row) != PXEntryStatus.Inserted) { if (e.ExternalCall && Lead.Ask(Messages.Warning, Messages.ContactClassChangeWarning, MessageButtons.YesNo) == WebDialogResult.No) { this.doCopyClassSettings = false; } } } }
public override object Evaluate(PXCache cache, object item, Dictionary <Type, object> pars) { string classID = (string)pars[typeof(ClassID)]; CRContactClass cls = PXSelect <CRContactClass, Where <CRContactClass.classID, Equal <Required <CRContactClass.classID> > > > .Select(cache.Graph, classID); if (cls == null) { return(null); } var rec = (PXResult <Users, Contact, BAccountR>) PXSelectJoin <Users, InnerJoin <Contact, On <Contact.userID, Equal <Users.pKID> >, InnerJoin <BAccountR, On <Contact.contactID, Equal <BAccountR.defContactID>, And <Contact.bAccountID, Equal <BAccountR.parentBAccountID> > > > >, Where <Users.pKID, Equal <Current <AccessInfo.userID> > > > .SelectSingleBound(cache.Graph, null, null); BAccountR bAccount = rec; return(bAccount != null && !string.IsNullOrEmpty(bAccount.AcctCD) && cls.OwnerIsCreatedUser == true ? bAccount.AcctCD : null); }
public static void ConvertToAccount(Contact contact, AccountsFilter param) { BusinessAccountMaint accountMaint = CreateInstance <BusinessAccountMaint>(); object cd = param.BAccountID; accountMaint.BAccount.Cache.RaiseFieldUpdating <BAccount.acctCD>(null, ref cd); BAccount account = new BAccount { AcctCD = (string)cd, AcctName = param.AccountName, Type = BAccountType.ProspectType, ClassID = param.AccountClass, ParentBAccountID = contact.ParentBAccountID }; #region Set Contact and Address fields CRContactClass cls = PXSelect <CRContactClass, Where <CRContactClass.classID, Equal <Current <Contact.classID> > > > .SelectSingleBound(accountMaint, new object[] { contact }); if (cls != null && cls.OwnerToBAccount == true) { account.WorkgroupID = contact.WorkgroupID; account.OwnerID = contact.OwnerID; } try { object newValue = account.OwnerID; accountMaint.BAccount.Cache.RaiseFieldVerifying <BAccount.ownerID>(account, ref newValue); } catch (PXSetPropertyException) { account.OwnerID = null; } account = accountMaint.BAccount.Insert(account); accountMaint.Answers.CopyAllAttributes(account, contact); Contact defContact = PXCache <Contact> .CreateCopy(PXSelect <Contact, Where <Contact.contactID, Equal <Current <BAccount.defContactID> > > > .SelectSingleBound(accountMaint, new object[] { account })); var defContactNoteID = defContact.NoteID; PXCache <Contact> .RestoreCopy(defContact, contact); defContact.ContactType = ContactTypesAttribute.BAccountProperty; defContact.FullName = account.AcctName; defContact.ContactID = account.DefContactID; defContact.BAccountID = account.BAccountID; defContact.DuplicateStatus = DuplicateStatusAttribute.NotValidated; defContact.DuplicateFound = false; defContact.WorkgroupID = null; defContact.OwnerID = null; defContact.NoteID = defContactNoteID; defContact = accountMaint.DefContact.Update(defContact); Address contactAddress = PXSelect <Address, Where <Address.addressID, Equal <Required <Contact.defAddressID> > > > .Select(accountMaint, contact.DefAddressID); if (contactAddress == null) { throw new PXException(Messages.DefAddressNotExists, contact.DisplayName); } contactAddress.BAccountID = account.BAccountID; accountMaint.AddressCurrent.Cache.Clear(); defContact.DefAddressID = contactAddress.AddressID; defContact = accountMaint.DefContact.Update(defContact); contactAddress = accountMaint.AddressCurrent.Update(contactAddress); account.DefAddressID = contactAddress.AddressID; accountMaint.BAccount.Update(account); contact.BAccountID = account.BAccountID; contact.DuplicateStatus = DuplicateStatusAttribute.NotValidated; contact.DuplicateFound = false; if (contact.QualificationDate == null) { contact.QualificationDate = PXTimeZoneInfo.Now; } accountMaint.Contacts.Cache.SetStatus(contact, PXEntryStatus.Updated); CR.Location location = accountMaint.DefLocation.Select(); location.DefAddressID = contactAddress.AddressID; accountMaint.DefLocation.Update(location); account.NoteID = PXNoteAttribute.GetNoteID <CRActivity.noteID>(accountMaint.CurrentBAccount.Cache, account); foreach (CRPMTimeActivity a in PXSelect <CRPMTimeActivity, Where <CRPMTimeActivity.refNoteID, Equal <Required <Contact.noteID> > > > .Select(accountMaint, contact.NoteID)) { a.BAccountID = account.BAccountID; accountMaint.Activities.Cache.Update(a); } #endregion // Copy Note text and Files references CRSetup setup = PXSetupOptional <CRSetup> .Select(accountMaint); PXNoteAttribute.CopyNoteAndFiles(accountMaint.Contacts.Cache, contact, accountMaint.CurrentBAccount.Cache, account, setup); throw new PXRedirectRequiredException(accountMaint, "Business Account"); }
public virtual IEnumerable ConvertToOpportunity(PXAdapter adapter) { Save.Press(); bool isOpportunityAutoNumberOn = this.IsNumberingAutonumbered(Setup.Current.OpportunityNumberingID); List <Contact> contacts = new List <Contact>(adapter.Get().Cast <Contact>()); foreach (Contact l in contacts) { OpportunityMaint opportunityMaint = CreateInstance <OpportunityMaint>(); CROpportunity opportunity = (CROpportunity)opportunityMaint.Opportunity.Cache.Insert(); if (!isOpportunityAutoNumberOn) { if (OpportunityInfo.AskExt() != WebDialogResult.OK || !OpportunityInfo.VerifyRequired()) { return(contacts); } CROpportunity existing = PXSelect <CROpportunity, Where <CROpportunity.opportunityID, Equal <Required <CROpportunity.opportunityID> > > > .SelectSingleBound(this, null, OpportunityInfo.Current.OpportunityID); if (existing != null) { OpportunityInfo.Cache.RaiseExceptionHandling <OpportunityFilter.opportunityID>(OpportunityInfo.Current, OpportunityInfo.Current.OpportunityID, new PXSetPropertyException(Messages.OpportunityAlreadyExists, OpportunityInfo.Current.OpportunityID)); return(contacts); } object cd = OpportunityInfo.Current.OpportunityID; opportunityMaint.Opportunity.Cache.RaiseFieldUpdating <CROpportunity.opportunityID>(null, ref cd); opportunity.OpportunityID = (string)cd; } Contact lead = l; PXLongOperation.StartOperation(this, delegate() { CRContactClass cls = PXSelect <CRContactClass, Where <CRContactClass.classID, Equal <Current <Contact.classID> > > > .SelectSingleBound(this, new object[] { lead }); if (cls != null && cls.OwnerToOpportunity == true) { opportunity.WorkgroupID = lead.WorkgroupID; opportunity.OwnerID = lead.OwnerID; } if (cls != null && cls.TargetOpportunityClassID != null) { opportunity.CROpportunityClassID = cls.TargetOpportunityClassID; } if (lead.BAccountID != null) { opportunity.BAccountID = lead.BAccountID; } if (lead.ParentBAccountID != null) { opportunity.ParentBAccountID = lead.ParentBAccountID; } if (lead.CampaignID != null) { opportunity.CampaignSourceID = lead.CampaignID; } opportunity.ContactID = lead.ContactID; opportunity.ConvertedLeadID = lead.ContactID; opportunity.OpportunityName = string.IsNullOrEmpty(lead.FullName) ? lead.DisplayName : lead.FullName; opportunity = (CROpportunity)opportunityMaint.Opportunity.Cache.Update(opportunity); ContactMaint contactGraph = CreateInstance <ContactMaint>(); lead.ContactType = ContactTypesAttribute.Person; lead.QualificationDate = PXTimeZoneInfo.Now; lead.ConvertedBy = Accessinfo.UserID; lead = contactGraph.Contact.Update(lead); opportunityMaint.Opportunity.Search <CROpportunity.opportunityID>(opportunity.OpportunityID); lead = opportunityMaint.Leads.Update(lead); // Copy Note text and Files references CRSetup setup = PXSetupOptional <CRSetup> .Select(opportunityMaint); PXNoteAttribute.CopyNoteAndFiles(opportunityMaint.Leads.Cache, lead, opportunityMaint.OpportunityCurrent.Cache, opportunity, setup); throw new PXRedirectRequiredException(opportunityMaint, "Opportunity", true); }); } return(contacts); }
protected virtual void Contact_RowSelected(PXCache sender, PXRowSelectedEventArgs e) { Contact row = e.Row as Contact; if (row == null) { return; } var isNotInserted = sender.GetStatus(row) != PXEntryStatus.Inserted; Contact.AllowDelete = row.ContactType == ContactTypesAttribute.Person; PXUIFieldAttribute.SetEnabled <Contact.isActive>(Contact.Cache, row, row.ContactType == ContactTypesAttribute.Person); PXUIFieldAttribute.SetEnabled <Contact.classID>(Contact.Cache, row, row.ContactType == ContactTypesAttribute.Person); PXUIFieldAttribute.SetEnabled <Contact.isAddressSameAsMain>(Contact.Cache, row, row.ContactType == ContactTypesAttribute.Person); copyBAccountContactInfo.SetEnabled(row.ContactType == ContactTypesAttribute.Person); Answers.Cache.AllowInsert = row.ContactType == ContactTypesAttribute.Person; Answers.Cache.AllowUpdate = row.ContactType == ContactTypesAttribute.Person; Answers.Cache.AllowDelete = row.ContactType == ContactTypesAttribute.Person; Activities.Cache.AllowInsert = row.ContactType == ContactTypesAttribute.Person; Activities.Cache.AllowUpdate = row.ContactType == ContactTypesAttribute.Person; Activities.Cache.AllowDelete = row.ContactType == ContactTypesAttribute.Person; Relations.Cache.AllowInsert = row.ContactType == ContactTypesAttribute.Person && isNotInserted; Relations.Cache.AllowUpdate = row.ContactType == ContactTypesAttribute.Person; Relations.Cache.AllowDelete = row.ContactType == ContactTypesAttribute.Person; Opportunities.Cache.AllowInsert = row.ContactType == ContactTypesAttribute.Person && isNotInserted; Opportunities.Cache.AllowUpdate = row.ContactType == ContactTypesAttribute.Person; Opportunities.Cache.AllowDelete = row.ContactType == ContactTypesAttribute.Person; Cases.Cache.AllowInsert = row.ContactType == ContactTypesAttribute.Person && isNotInserted; Cases.Cache.AllowUpdate = row.ContactType == ContactTypesAttribute.Person; Cases.Cache.AllowDelete = row.ContactType == ContactTypesAttribute.Person; Members.Cache.AllowInsert = row.ContactType == ContactTypesAttribute.Person && isNotInserted; Members.Cache.AllowUpdate = row.ContactType == ContactTypesAttribute.Person; Members.Cache.AllowDelete = row.ContactType == ContactTypesAttribute.Person; Subscriptions.Cache.AllowInsert = row.ContactType == ContactTypesAttribute.Person && isNotInserted; Subscriptions.Cache.AllowUpdate = row.ContactType == ContactTypesAttribute.Person; Subscriptions.Cache.AllowDelete = row.ContactType == ContactTypesAttribute.Person; NWatchers.Cache.AllowInsert = row.ContactType == ContactTypesAttribute.Person && isNotInserted; NWatchers.Cache.AllowUpdate = row.ContactType == ContactTypesAttribute.Person; NWatchers.Cache.AllowDelete = row.ContactType == ContactTypesAttribute.Person; User.Cache.AllowInsert = row.ContactType == ContactTypesAttribute.Person; User.Cache.AllowUpdate = row.ContactType == ContactTypesAttribute.Person; User.Cache.AllowDelete = row.ContactType == ContactTypesAttribute.Person; User.Cache.AllowSelect = row.ContactType == ContactTypesAttribute.Person; User.Cache.ClearQueryCache(); Roles.Cache.AllowInsert = row.ContactType == ContactTypesAttribute.Person; Roles.Cache.AllowUpdate = row.ContactType == ContactTypesAttribute.Person; Roles.Cache.AllowDelete = row.ContactType == ContactTypesAttribute.Person; Roles.Cache.AllowSelect = row.ContactType == ContactTypesAttribute.Person; Roles.Cache.ClearQueryCache(); UserRoles.Cache.AllowInsert = row.ContactType == ContactTypesAttribute.Person; UserRoles.Cache.AllowUpdate = row.ContactType == ContactTypesAttribute.Person; UserRoles.Cache.AllowDelete = row.ContactType == ContactTypesAttribute.Person; UserRoles.Cache.AllowSelect = row.ContactType == ContactTypesAttribute.Person; UserRoles.Cache.ClearQueryCache(); var bAccount = row.BAccountID. With <int?, BAccount>(_ => (BAccount)PXSelect <BAccount, Where <BAccount.bAccountID, Equal <Required <BAccount.bAccountID> > > > . Select(this, _)); var isCustomerOrProspect = bAccount == null || bAccount.Type == BAccountType.CustomerType || bAccount.Type == BAccountType.ProspectType || bAccount.Type == BAccountType.CombinedType; addOpportunity.SetEnabled(isNotInserted && isCustomerOrProspect); addCase.SetEnabled(isNotInserted && isCustomerOrProspect); PXUIFieldAttribute.SetEnabled <Contact.contactID>(sender, row, true); PXUIFieldAttribute.SetEnabled <Contact.bAccountID>(sender, row, row.ContactType == ContactTypesAttribute.Person); CRContactClass contactClass = row.ClassID. With(_ => (CRContactClass)PXSelectReadonly <CRContactClass, Where <CRContactClass.classID, Equal <Required <CRContactClass.classID> > > > . Select(this, _)); if (contactClass != null) { Activities.DefaultEMailAccountId = contactClass.DefaultEMailAccountID; } bool isUserInserted = row.UserID == null || User.Cache.GetStatus(User.Current) == PXEntryStatus.Inserted; bool hasLoginType = isUserInserted && User.Current != null && User.Current.LoginTypeID != null; PXUIFieldAttribute.SetEnabled <Users.loginTypeID>(User.Cache, User.Current, isUserInserted && row.IsActive == true); PXUIFieldAttribute.SetEnabled <Users.username>(User.Cache, User.Current, this.IsContractBasedAPI || hasLoginType); PXUIFieldAttribute.SetEnabled <Users.generatePassword>(User.Cache, User.Current, this.IsContractBasedAPI || hasLoginType); PXUIFieldAttribute.SetEnabled <Users.password>(User.Cache, User.Current, this.IsContractBasedAPI || (hasLoginType && User.Current.GeneratePassword != true)); var employeeHasUserAttached = row.ContactType == ContactTypesAttribute.Employee && User.Current != null; PXDefaultAttribute.SetPersistingCheck <Contact.eMail>(sender, row, employeeHasUserAttached || (hasLoginType && User.Current.Username != null) ? PXPersistingCheck.NullOrBlank : PXPersistingCheck.Nothing); PXUIFieldAttribute.SetRequired <Contact.eMail>(sender, employeeHasUserAttached || (hasLoginType && User.Current.Username != null)); User.Current = (Users)User.View.SelectSingleBound(new[] { e.Row }); if (row.DuplicateStatus == DuplicateStatusAttribute.PossibleDuplicated || row.DuplicateFound == true) { sender.RaiseExceptionHandling <Contact.duplicateStatus>(row, null, new PXSetPropertyException(Messages.ContactHavePossibleDuplicates, PXErrorLevel.Warning, row.ContactID)); } }