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();
            }
        }
Esempio n. 2
0
        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();
            }
        }
Esempio n. 3
0
        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();
        }