Ejemplo n.º 1
0
        protected virtual void RowSelected(Events.RowSelected <PaymentTransactionDetail> e)
        {
            e.Cache.AllowInsert = false;
            e.Cache.AllowUpdate = false;
            e.Cache.AllowDelete = false;
            PaymentTransactionDetail row = e?.Row;

            if (row != null)
            {
                IEnumerable <ICCPaymentTransaction> storedTrans = GetProcTrans();
                if (e.Row.TranStatus == CCTranStatusCode.HeldForReview)
                {
                    ICCPaymentTransaction searchTran = CCProcTranHelper.FindOpenForReviewTran(storedTrans);
                    if (searchTran != null && searchTran.TranNbr == row.TranNbr)
                    {
                        PaymentTransaction.Cache.RaiseExceptionHandling <CCProcTran.tranNbr>(row, row.TranNbr,
                                                                                             new PXSetPropertyException(TranHeldwarnMsg, PXErrorLevel.RowWarning));
                    }
                }
                IEnumerable <ICCPaymentTransaction> activeAuthCapture = CCProcTranHelper.FindAuthCaptureActiveTrans(storedTrans);
                if (activeAuthCapture.Count() > 1 && activeAuthCapture.Where(i => i.TranNbr == row.TranNbr).Any())
                {
                    PaymentTransaction.Cache.RaiseExceptionHandling <CCProcTran.tranNbr>(row, row.TranNbr,
                                                                                         new PXSetPropertyException(AR.Messages.CCProcessingARPaymentMultipleActiveTranWarning, PXErrorLevel.RowWarning));
                }
            }
        }
        public virtual void SyncPaymentTransactionById(TPrimary doc, IEnumerable <string> tranIds)
        {
            if (!IsFeatureSupported(SelectedProcessingCenter, CCProcessingFeature.PaymentHostedForm))
            {
                return;
            }
            ICCPayment pDoc = GetPaymentDoc(doc);

            using (PXTransactionScope scope = new PXTransactionScope())
            {
                foreach (string tranId in tranIds)
                {
                    IEnumerable <PaymentTransactionDetail> existsTran = base.PaymentTransaction.Select().RowCast <PaymentTransactionDetail>();
                    PaymentTransactionDetail storedTran = existsTran.FirstOrDefault(i => i.PCTranNumber == tranId);
                    if (storedTran != null && storedTran.TranStatus == CCTranStatusCode.Approved)
                    {
                        continue;
                    }
                    var tranData = GetTranData(tranId);
                    if (storedTran != null && CCTranStatusCode.GetCode(V2Converter.ConvertTranStatus(tranData.TranStatus)) == storedTran.TranStatus)
                    {
                        continue;
                    }
                    if (tranData?.CustomerId != null && !SuitableCustomerProfileId(tranData?.CustomerId))
                    {
                        continue;
                    }

                    try
                    {
                        PXTrace.WriteInformation($"Synchronize tran. TranId = {tranData.TranID}, TranType = {tranData.TranType}, DocNum = {tranData.DocNum}, " +
                                                 $"SubmitTime = {tranData.SubmitTime}, Amount = {tranData.Amount}, PCCustomerID = {tranData.CustomerId}, PCCustomerPaymentID = {tranData.PaymentId}");
                    }
                    catch (Exception ex)
                    {
                        var v = ex;
                    }
                    V2.CCTranType tranType = tranData.TranType.Value;

                    if (tranType == V2.CCTranType.Void)
                    {
                        RemoveSyncLock(doc);
                        RecordVoid(pDoc, tranData);
                    }

                    if (tranType == V2.CCTranType.AuthorizeOnly)
                    {
                        if (tranData.TranStatus == V2.CCTranStatus.Approved)
                        {
                            GetOrCreatePaymentProfilrByTran(tranData, pDoc);
                        }
                        RemoveSyncLock(doc);
                        RecordAuth(pDoc, tranData);
                    }

                    if (tranType == V2.CCTranType.AuthorizeAndCapture)
                    {
                        if (tranData.TranStatus == V2.CCTranStatus.Approved)
                        {
                            GetOrCreatePaymentProfilrByTran(tranData, pDoc);
                        }
                        RemoveSyncLock(doc);
                        RecordCapture(pDoc, tranData);
                    }

                    if (tranType == V2.CCTranType.CaptureOnly)
                    {
                        if (tranData.TranStatus == V2.CCTranStatus.Approved)
                        {
                            GetOrCreatePaymentProfilrByTran(tranData, pDoc);
                        }
                        RemoveSyncLock(doc);
                        RecordCapture(pDoc, tranData);
                    }
                    scope.Complete();
                }
            }
        }