예제 #1
0
 public void AddPaymentItem(PaymentItem item)
 {
     if (Installments.Count() <= 0 && PayInSlips.Count() <= 0)
     {
         PaymentItems.Add(item);
     }
 }
예제 #2
0
 /// <summary>
 /// Request a direct payment session
 /// </summary>
 /// <param name="credentials">PagSeguro credentials</param>
 /// <returns><c cref="T:Uol.PagSeguro.CancelRequestResponse">Result</c></returns>
 public static Installments GetInstallments(Credentials credentials, Decimal amount, String cardBrand, Int32 maxInstallmentNoInterest)
 {
     PagSeguroTrace.Info(String.Format(CultureInfo.InvariantCulture, "InstallmentService.GetInstallments() - begin"));
     try
     {
         using (var response = HttpURLConnectionUtil.GetHttpGetConnection(
                    BuildInstallmentURL(credentials, amount, cardBrand, maxInstallmentNoInterest)))
         {
             using (XmlReader reader = XmlReader.Create(response.Content.ReadAsStreamAsync().Result))
             {
                 Installments result = new Installments();
                 InstallmentsSerializer.Read(reader, result);
                 PagSeguroTrace.Info(String.Format(CultureInfo.InvariantCulture, "InstallmentService.Register({0}) - end", result.ToString()));
                 return(result);
             }
         }
     }
     catch (ArgumentException exception)
     {
         PagSeguroServiceException pse = new PagSeguroServiceException(exception.Message);
         PagSeguroTrace.Error(String.Format(CultureInfo.InvariantCulture, "InstallmentService.Register() - error {0}", exception.Message));
         throw pse;
     }
     catch (System.Exception exception)
     {
         PagSeguroServiceException pse = HttpURLConnectionUtil.CreatePagSeguroServiceException(exception);
         PagSeguroTrace.Error(String.Format(CultureInfo.InvariantCulture, "InstallmentService.Register() - error {0}", pse));
         throw pse;
     }
 }
예제 #3
0
 /// <summary>
 /// Request a direct payment session
 /// </summary>
 /// <param name="credentials">PagSeguro credentials</param>
 /// <param name="amount"></param>
 /// <param name="cardBrand"></param>
 /// <param name="maxInstallmentNoInterest"></param>
 /// <returns><c cref="T:Uol.PagSeguro.CancelRequestResponse">Result</c></returns>
 public static Installments GetInstallments(Credentials credentials, decimal amount, string cardBrand, int maxInstallmentNoInterest)
 {
     PagSeguroTrace.Info(string.Format(CultureInfo.InvariantCulture, "InstallmentService.GetInstallments() - begin"));
     try
     {
         using (var response = HttpUrlConnectionUtil.GetHttpGetConnection(
                    BuildInstallmentUrl(credentials, amount, cardBrand, maxInstallmentNoInterest)))
         {
             using (var reader = XmlReader.Create(response.GetResponseStream()))
             {
                 var result = new Installments();
                 InstallmentsSerializer.Read(reader, result);
                 PagSeguroTrace.Info(string.Format(CultureInfo.InvariantCulture, "InstallmentService.Register({0}) - end", result.ToString()));
                 return(result);
             }
         }
     }
     catch (ArgumentException exception)
     {
         var pse = new PagSeguroServiceException(exception.Message);
         PagSeguroTrace.Error(string.Format(CultureInfo.InvariantCulture, "InstallmentService.Register() - error {0}", exception.Message));
         throw pse;
     }
     catch (WebException exception)
     {
         var pse = HttpUrlConnectionUtil.CreatePagSeguroServiceException((HttpWebResponse)exception.Response);
         PagSeguroTrace.Error(string.Format(CultureInfo.InvariantCulture, "InstallmentService.Register() - error {0}", pse));
         throw pse;
     }
 }
예제 #4
0
        public List<Installments> DeleteDeleteInstallment(long Id, long bulkBuyID)
        {
            List<Installments> lstinstallments = new List<Installments>();
            using (ShopDevEntities db = new ShopDevEntities())
            {
                try
                {
                    BulkBuyInstallment installment = GetInstallment(db, Id);
                    var bulkbuy = db.BulkBuys.Where(m => m.BulkBuyID == bulkBuyID).FirstOrDefault();
                    var outstandingAmount = bulkbuy.OustandingAmont;
                    bulkbuy.OustandingAmont = outstandingAmount == null ? installment.Amount : outstandingAmount + installment.Amount;
                    var interstableAmount = bulkbuy.InterstableAmount;
                    bulkbuy.InterstableAmount = interstableAmount == null ? installment.Amount : interstableAmount + installment.Amount;
                   

                    db.BulkBuyInstallments.Remove(installment);
                    db.SaveChanges();
                    var lstproducts = db.BulkBuyInstallments.Where(m => m.BulkBuyID == bulkBuyID).ToList();
                    foreach (var cusprod in lstproducts)
                    {
                        Installments objInstallments = new Installments();
                        cusprod.CopyProperties(objInstallments);
                        lstinstallments.Add(objInstallments);
                    }
                }
                catch (Exception)
                {

                }
                return lstinstallments;
            }
        }
예제 #5
0
        public async Task <ActionResult <Installments> > PostInstallments(Installments installments)
        {
            _context.Installments.Add(installments);
            await _context.SaveChangesAsync();

            return(CreatedAtAction("GetInstallments", new { id = installments.InstallmentId }, installments));
        }
예제 #6
0
        static void Main(string[] args)
        {
            bool isSandbox = false;

            EnvironmentConfiguration.ChangeEnvironment(isSandbox);

            Decimal amount                   = 1000.00m;
            String  creditCardBrand          = "visa";
            Int32   maxInstallmentNoInterest = 5;

            try
            {
                AccountCredentials credentials = PagSeguroConfiguration.GetAccountCredentials(isSandbox);

                Installments result = InstallmentService.GetInstallments(credentials, amount, creditCardBrand, maxInstallmentNoInterest);


                foreach (Installment installment in result.Get())
                {
                }
            }
            catch (PagSeguroServiceException exception)
            {
                foreach (ServiceError element in exception.Errors)
                {
                }
            }
        }
예제 #7
0
        public Installments GetInstallmentsPagSeguro(Decimal amount, string creditCardBrand, int maxInstallmentNoInterest)
        {
            PagSeguroConfiguration.UrlXmlConfiguration = this.configuration;

            bool isSandbox = true;

            EnvironmentConfiguration.ChangeEnvironment(isSandbox);

            try
            {
                AccountCredentials credentials = PagSeguroConfiguration.Credentials(isSandbox);

                Installments result = InstallmentService.GetInstallments(credentials, amount, creditCardBrand, maxInstallmentNoInterest);

                return(result);
            }
            catch (PagSeguroServiceException exception)
            {
                return(new Installments());
                //foreach (ServiceError element in exception.Errors)
                //{

                //}
            }
            catch (Exception ex)
            {
                return(new Installments());
            }
        }
예제 #8
0
        static void Main(string[] args)
        {
            bool isSandbox = false;

            EnvironmentConfiguration.ChangeEnvironment(isSandbox);

            Decimal amount          = 1000.00m;
            String  creditCardBrand = "visa";

            try
            {
                AccountCredentials credentials = PagSeguroConfiguration.Credentials(isSandbox);

                Installments result = InstallmentService.GetInstallments(credentials, amount, creditCardBrand);

                Console.WriteLine("Começando listagem de parcelas - \n");
                foreach (Installment installment in result.Get())
                {
                    Console.WriteLine(installment.ToString());
                }
                Console.WriteLine(" - Terminando listagem de parcelas ");

                Console.ReadKey();
            }
            catch (PagSeguroServiceException exception)
            {
                Console.WriteLine(exception.Message + "\n");

                foreach (ServiceError element in exception.Errors)
                {
                    Console.WriteLine(element + "\n");
                }
                Console.ReadKey();
            }
        }
예제 #9
0
        public void AddInstallments(string installedBy, params Installment[] installments)
        {
            if (string.IsNullOrEmpty(installedBy))
            {
                throw new ApplicationException("MISSING_UPDATE_BY");
            }
            if (installments == null || installments.Length < 1)
            {
                throw new ApplicationException("AT_LEAST_ONE_ITEM_REQUIRED");
            }

            UpdatedBy   = installedBy;
            UpdatedDate = DateTime.Now;

            foreach (var installment in installments)
            {
                Installments.Add(installment);
                var remaining = RemainingAmount();

                if (remaining == 0)
                {
                    Status = PaymentStatusEnum.PAID.ToString();
                }
                else if (remaining <= 0)
                {
                    Status = PaymentStatusEnum.OVERPAID.ToString();
                    installment.CustomerCredits.Add(new CustomerCredit("System", Math.Abs(remaining), installment.Id,
                                                                       CustomerIdmPartyId, CustomerName, CustomerAddress));
                }
            }
        }
예제 #10
0
 public void Update(Entities.Transactions.Transaction transaction)
 {
     TransactionDate    = transaction.TransactionDate;
     ApprovedDate       = transaction.ApprovedDate;
     ReprovedDate       = transaction.ReprovedDate;
     StatusAnticipation = transaction.Anticipation;
     Confirmation       = transaction.Confirmation;
     GrossValue         = transaction.GrossValue;
     NetValue           = transaction.NetValue;
     FixedTax           = transaction.FixedTax;
     NumberParcel       = transaction.NumberParcel;
     CreditCardSuffix   = transaction.CreditCardSuffix;
     if (Installments.Any())
     {
         foreach (var installment in transaction.Installments)
         {
             foreach (var i in Installments)
             {
                 if (i.Id == installment.Id)
                 {
                     i.Update(installment);
                 }
             }
         }
     }
 }
예제 #11
0
        public async Task <IActionResult> PutInstallments(int id, Installments installments)
        {
            if (id != installments.InstallmentId)
            {
                return(BadRequest());
            }

            _context.Entry(installments).State = EntityState.Modified;

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!InstallmentsExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(NoContent());
        }
예제 #12
0
 // First Installment always occurs on PaymentPlan creation date
 private void InitializeInstallments()
 {
     for (int interval = 0; interval < InstallmentCount; interval++)
     {
         Installments.Add(new Installment(OriginationDate.AddDays(interval * InstallmentIntervalDays), InstallmentAmount));
     }
     Installments.OrderBy(i => i.Date);
 }
예제 #13
0
        // Installments are paid in order by Date
        public Installment NextInstallment()
        {
            var next = Installments.Where(i => i.IsPending)
                       .OrderBy(i => i.Date)
                       .FirstOrDefault();

            return(next);
        }
예제 #14
0
        public BulkBuyViewModel GetBulk(long? bulkID)
        {
            BulkBuyViewModel bulkmodel = new BulkBuyViewModel();
            using (ShopDevEntities db = new ShopDevEntities())
            {
                try
                {
                    var bulkBuycustomerInfo = db.BulkBuys.Where(m => m.BulkBuyID == bulkID).FirstOrDefault();
                    var lstproducts = db.BulkBuyProducts.Where(m => m.BulkBuyID == bulkID).ToList();
                    var AllInstallments = db.BulkBuyInstallments.Where(m => m.BulkBuyID == bulkID).ToList();
                    var Allvendors = db.VendorDetails.Where(m => m.BulkByID == bulkID).ToList();

                    BulkBuyModel bbModel = new BulkBuyModel();
                    bulkBuycustomerInfo.CopyProperties(bbModel);

                    List<BulkBuyProductsModel> lstcsproducts = new List<BulkBuyProductsModel>();
                    foreach (var cusprod in lstproducts)
                    {
                        BulkBuyProductsModel objcsproduct = new BulkBuyProductsModel();
                        cusprod.CopyProperties(objcsproduct);
                        lstcsproducts.Add(objcsproduct);
                    }
                    List<VendorDetailsModel> lstvendors = new List<VendorDetailsModel>();
                    foreach (var cusprod in Allvendors)
                    {
                        VendorDetailsModel objcsproduct = new VendorDetailsModel();
                        cusprod.CopyProperties(objcsproduct);
                        lstvendors.Add(objcsproduct);
                    }

                    List<Installments> lstInstallments = new List<Installments>();
                    foreach (var cusprod in AllInstallments)
                    {
                        Installments objcsproduct = new Installments();
                        cusprod.CopyProperties(objcsproduct);
                        lstInstallments.Add(objcsproduct);
                    }

                    bulkmodel.bulkBuyModel = bbModel;
                    bulkmodel.Products = new BulkBuyProductsModel();
                    bulkmodel.lstbulkBuyProducts = new List<BulkBuyProductsModel>();
                    bulkmodel.lstbulkBuyProducts.AddRange(lstcsproducts);

                    bulkmodel.Vendors = new VendorDetailsModel();
                    bulkmodel.lstVendors = new List<VendorDetailsModel>();
                    bulkmodel.lstVendors.AddRange(lstvendors);

                    bulkmodel.installments = new Installments();
                    bulkmodel.lstinstallments = new List<Installments>();
                    bulkmodel.lstinstallments.AddRange(lstInstallments);

                   

                }
                catch (Exception) { }
            }
            return bulkmodel;
        }
예제 #15
0
        public Installment FirstInstallment()
        {
            if (!Installments.Any())
            {
                throw new ApplicationException($"No Installments for Payment Plan Id {Id.ToString()}");
            }

            return(Installments.OrderBy(i => i.Date).FirstOrDefault());
        }
예제 #16
0
        public decimal OustandingBalance()
        {
            var outstandingBalance =
                Installments
                .Where(i => i.IsPending || i.IsDefaulted)
                .Sum(i => i.Amount);

            return(outstandingBalance);
        }
예제 #17
0
        // We only accept payments matching the Installment Amount.
        public void MakePayment(decimal amount, Guid installmentId)
        {
            Installment installment = Installments.First(i => i.Id == installmentId);

            if (amount != installment.Amount)
            {
                throw new ArgumentException();
            }
            installment.SetPaid(Id, DateTime.Now);
        }
예제 #18
0
        public void ProcessContract(Contract contract)
        {
            double valueInstallment = contract.TotalValue / Number;

            for (int i = 1; i <= Number; i++)
            {
                DateTime     newDate     = contract.Date.AddMonths(i);
                double       v           = _paymentService.Tax(valueInstallment, i);
                Installments installment = new Installments(newDate, v);
                contract.AddInstallments(installment);
            }
        }
예제 #19
0
        // We only accept payments matching the Installment Amount.
        public void MakePayment(decimal amount, Guid installmentId)
        {
            var activeAccount = Installments.Where(x => x.Id == installmentId);

            foreach (var singleInstallment in activeAccount)
            {
                if (!singleInstallment.IsPaid && singleInstallment.Amount == amount)
                {
                    singleInstallment.IsPaid = true;
                    break;
                }
            }
        }
예제 #20
0
        public decimal OustandingBalance(Guid installmentId)
        {
            var activeAccount = Installments.Where(x => x.Id == installmentId);
            var balance       = 0M;

            foreach (var singleInstallment in activeAccount)
            {
                if (!singleInstallment.IsPaid && !singleInstallment.AccountClosed)
                {
                    balance = balance + singleInstallment.Amount;
                }
            }
            return(balance);
        }
예제 #21
0
        // Installments are paid in order by Date
        public Installment NextInstallment()
        {
            var activeAccount = Installments.Where(x => x.Id == Id);

            foreach (var singleInstallment in activeAccount)
            {
                if (!singleInstallment.IsPaid)
                {
                    return(singleInstallment);
                }
            }

            return(new Installment());
        }
예제 #22
0
 public Installments GetInstallmentDetails(long Id)
 {
     Installments objModel = new Installments();
     using (ShopDevEntities db = new ShopDevEntities())
     {
         try
         {
             BulkBuyInstallment installment = GetInstallment(db, Id);
             installment.CopyProperties(objModel);
         }
         catch (Exception)
         {
         }
     }
     return objModel;
 }
예제 #23
0
 public void AddPaymentItem(int serviceCode, string serviceName, int quantity, decimal unitAmount, decimal taxOrVat,
                            decimal withHoldingTax, bool isRevenue, bool isLegalPerson, string itemDescription)
 {
     if (Installments.Count() <= 0 && PayInSlips.Count() <= 0)
     {
         PaymentItems.Add(new PaymentItem(
                              //serviceCode,
                              //serviceName,
                              quantity,
                              unitAmount,
                              taxOrVat,
                              withHoldingTax,
                              isRevenue,
                              isLegalPerson,
                              itemDescription));
     }
 }
예제 #24
0
            public List <Installments> CreateInstallmentsStrategy(Debt debt)
            {
                var installmentsList = new List <Installments>();
                var installment      = new Installments
                {
                    Id                = Guid.NewGuid(),
                    CreatedAt         = DateTime.Now,
                    InstallmentNumber = 1,
                    Date              = debt.Date,
                    Status            = Status.NotPaid,
                    PaymentDate       = null,
                    Value             = debt.Value
                };

                installmentsList.Add(installment);

                return(installmentsList);
            }
예제 #25
0
        public IList <Installment> PendingInstallments()
        {
            var intervals = InstallmentIntervalOfDays;

            for (int i = 1; i < CountOfInstallations; i++)
            {
                var pendingInstallment = new Installment()
                {
                    Id     = Install.Id,
                    Amount = Install.Amount * 1 / CountOfInstallations,
                    Date   = Install.Date.AddDays(intervals)
                };

                Installments.Add(pendingInstallment);
                intervals = intervals + InstallmentIntervalOfDays;
            }

            return(Installments);
        }
예제 #26
0
        // First Installment always occurs on PaymentPlan creation date
        private void InitializeInstallments()
        {
            var paymentAmountPerInstallment = TotalAmountDue / NumberOfInstallments;

            //initialize with first payment
            var initialPayment = new Installment(paymentAmountPerInstallment, OriginationDate);

            Installments.Add(initialPayment);

            var paymentDate = OriginationDate;

            //rest of the payments
            for (var i = 1; i < NumberOfInstallments; i++)
            {
                paymentDate = paymentDate.AddDays(InstallmentIntervalDays);
                var installmentPayment = new Installment(paymentAmountPerInstallment, paymentDate);
                Installments.Add(installmentPayment);
            }
        }
예제 #27
0
        // We only accept payments matching the Installment Amount.
        public void MakePayment(decimal amount, Guid installmentId)
        {
            if (!Installments.Any(i => i.Id == installmentId))
            {
                throw new ArgumentException($"No Installment Found for Provided installmentId: {installmentId}", nameof(installmentId));
            }

            var installment = Installments.Where(i => i.Id == installmentId).FirstOrDefault();

            if (installment.Amount != amount)
            {
                throw new ArgumentException($"Payment amount must match installment amount.", nameof(amount));
            }

            //Simulating a third party api call
            var paymentReferenceId = _thirdPartyPaymentService.MakePayment(amount);

            installment.SetStatus(paymentReferenceId);
        }
예제 #28
0
        // We only accept payments matching the Installment Amount.
        public void MakePayment(decimal amount, Guid installmentId)
        {
            if (!Installments.Any(i => i.Id == installmentId))
            {
                throw new ArgumentException($"No Installment Found for Provided installmentId: {installmentId}", nameof(installmentId));
            }

            var installment = Installments.Where(i => i.Id == installmentId).FirstOrDefault();

            if (installment.Amount != amount)
            {
                throw new ArgumentException($"Payment amount must match installment amount.", nameof(amount));
            }

            //we call payment domain logic here, ie. service call or writing to an event stream
            var paymentReferenceId = Guid.NewGuid(); //in this instance, i'm just setting some guid to be the payment reference id,

            //but an actual implementation could call another service i.e 3rd party payment API
            installment.SetPaid(paymentReferenceId.ToString());
        }
        /// <summary>
        /// Read a direct payment session request result
        /// </summary>
        /// <param name="streamReader"></param>
        /// <param name="installments"></param>
        internal static void Read(XmlReader reader, Installments installments)
        {
            if (reader.IsEmptyElement)
            {
                XMLParserUtils.SkipNode(reader);
                return;
            }

            reader.ReadStartElement(SerializerHelper.Installments);
            reader.MoveToContent();

            while (!reader.EOF)
            {
                if (XMLParserUtils.IsEndElement(reader, SerializerHelper.Installments))
                {
                    XMLParserUtils.SkipNode(reader);
                    break;
                }

                if (reader.NodeType == XmlNodeType.Element)
                {
                    switch (reader.Name)
                    {
                    case SerializerHelper.Installment:
                        Installment installment = new Installment();
                        InstallmentSerializer.Read(reader, installment);
                        installments.Add(installment);
                        break;

                    default:
                        XMLParserUtils.SkipElement(reader);
                        break;
                    }
                }
                else
                {
                    XMLParserUtils.SkipNode(reader);
                }
            }
        }
예제 #30
0
        public Installment FirstInstallment()
        {
            if (Install.Amount < 0 || CountOfInstallations < 1)
            {
                throw new ArgumentException();
            }

            var firstInstall = new Installment()
            {
                Id     = Install.Id,
                Amount = Install.Amount * 1 / CountOfInstallations,
                Date   = Install.Date
            };

            if (Install.IsPending)
            {
                Install.IsPending = false;
                Installments.Add(firstInstall);
                PendingInstallments();
            }

            return(firstInstall);
        }