public virtual IEnumerable CheckForDuplicates(PXAdapter adapter) { foreach (BAccount rec in adapter.Get()) { Contact defContact = DefContact.View.SelectSingleBound(new object[] { rec }) as Contact; if (defContact != null && (adapter.ExternalCall || defContact.DuplicateStatus == DuplicateStatusAttribute.NotValidated)) { DefContact.Current = defContact; DefContact.Current.DuplicateFound = true; Duplicates.View.Clear(); var result = Duplicates.Select(); DefContact.Current.DuplicateFound = (result != null && result.Count > 0); Contact contact = (Contact)DefContact.Cache.CreateCopy(defContact); contact.DuplicateStatus = DuplicateStatusAttribute.Validated; Decimal?score = 0; foreach (PXResult <CRDuplicateRecord, BAccount, Contact, CRLeadContactValidationProcess.Contact2> r in result) { CRLeadContactValidationProcess.Contact2 duplicate = r; CRDuplicateRecord contactScore = r; if (duplicate.ContactType == ContactTypesAttribute.BAccountProperty && duplicate.ContactID < contact.ContactID) { contact.DuplicateStatus = DuplicateStatusAttribute.PossibleDuplicated; if (contactScore.Score > score) { score = contactScore.Score; } } } if (defContact.DuplicateStatus != contact.DuplicateStatus) { DefContact.Update(contact); } if (DefContact.Current.DuplicateFound == false && adapter.ExternalCall) { BAccount.Cache.RaiseExceptionHandling <BAccount.status>(rec, null, new PXSetPropertyException( Messages.NoPossibleDuplicates, PXErrorLevel.Warning)); } } yield return(rec); } if (DefContact.Cache.IsDirty) { Save.Press(); } }
public virtual IEnumerable CheckForDuplicates(PXAdapter adapter) { foreach (Contact rec in adapter.Get()) { Contact.Current = rec; Contact contact = rec; if (adapter.ExternalCall || rec.DuplicateStatus == DuplicateStatusAttribute.NotValidated) { Contact.Current.DuplicateFound = true; Duplicates.View.Clear(); var result = Duplicates.Select(); Contact.Current.DuplicateFound = (result != null && result.Count > 0); contact = Contact.Cache.CreateCopy(Contact.Current) as Contact; contact.DuplicateStatus = DuplicateStatusAttribute.Validated; Decimal?score = 0; foreach (PXResult <CRDuplicateRecord, Contact, CRLeadContactValidationProcess.Contact2> r in result) { CRLeadContactValidationProcess.Contact2 duplicate = r; CRDuplicateRecord contactScore = r; int duplicateWeight = GetContactWeight(duplicate); int currentWeight = GetContactWeight(Contact.Current); if (duplicateWeight > currentWeight || (duplicateWeight == currentWeight && duplicate.ContactID < Contact.Current.ContactID)) { contact.DuplicateStatus = DuplicateStatusAttribute.PossibleDuplicated; if (contactScore.Score > score) { score = contactScore.Score; } } } contact = Contact.Update(contact); if (Contact.Current.DuplicateFound == false && adapter.ExternalCall) { Contact.Cache.RaiseExceptionHandling <Contact.duplicateStatus>(contact, null, new PXSetPropertyException( Messages.NoPossibleDuplicates, PXErrorLevel.Warning)); } } yield return(contact); } if (Contact.Cache.IsDirty) { Save.Press(); } }
private static void ProcessValidation(ValidationFilter filter, Contact record) { BusinessAccountMaint graph = PXGraph.CreateInstance <BusinessAccountMaint>(); PXView view = graph.BAccount.View; int startRow = 0, totalRows = 0; BAccount baccount = null; Contact contact = null; if (record.ContactType == ContactTypesAttribute.BAccountProperty && record.BAccountID != null) { List <object> list_baccount = view.Select(null, null, new object[] { record.BAccountID }, new string[] { typeof(BAccount.bAccountID).Name }, null, null, ref startRow, 1, ref totalRows); if (list_baccount != null && list_baccount.Count >= 1) { baccount = PXResult.Unwrap <BAccount>(list_baccount[0]); } } if (baccount == null || baccount.DefContactID != record.ContactID) { throw new PXException(Messages.ContactNotFound); } contact = graph.DefContact.Current = graph.DefContact.SelectWindowed(0, 1); contact.DuplicateFound = true; PXView viewDuplicates = graph.Duplicates.View; if (viewDuplicates == null) { throw new PXException(Messages.DuplicateViewNotFound); } viewDuplicates.Clear(); List <object> duplicates = viewDuplicates.SelectMulti(); contact = (Contact)graph.DefContact.Cache.CreateCopy(contact); contact.DuplicateStatus = DuplicateStatusAttribute.Validated; Decimal?score = 0; foreach (PXResult <CRDuplicateRecord, Contact, CRLeadContactValidationProcess.Contact2> r in duplicates) { CRLeadContactValidationProcess.Contact2 duplicate = r; CRDuplicateRecord contactScore = r; int duplicateWeight = ContactMaint.GetContactWeight(duplicate); int currentWeight = ContactMaint.GetContactWeight(contact); if (duplicateWeight > currentWeight || (duplicateWeight == currentWeight && duplicate.ContactID < contact.ContactID)) { contact.DuplicateStatus = DuplicateStatusAttribute.PossibleDuplicated; if (contactScore.Score > score) { score = contactScore.Score; } } } graph.DefContact.Cache.Update(contact); graph.DefContact.Cache.RestoreCopy(record, contact); graph.Actions.PressSave(); }