Пример #1
0
        public SalePayment GetOne([FromBody] SalePayment input)
        {
            try
            {
                if (input != null)
                {
                    Expression <Func <Sale, object> >[] exp = new Expression <Func <Sale, object> >[] { x => x.SalePayments, x => x.SaleDetails, x => x.Customer };
                    var predicate = PredicateBuilder.True <Sale>();
                    predicate = predicate.And(x => !x.IsDeleted);

                    if (!string.IsNullOrWhiteSpace(input.BillId))
                    {
                        predicate = predicate.And(x => x.BillId.ToUpper().Trim() == input.BillId.ToUpper().Trim());
                    }

                    if (input.FK_SaleId > 0)
                    {
                        predicate = predicate.And(x => x.Id == input.FK_SaleId);
                    }

                    var result = _saleOpp.GetAllUsingExpression(out int totalCount, 1, 0, predicate, null, null, exp).FirstOrDefault();

                    if (result != null)
                    {
                        if (result.SalePayments != null)
                        {
                            foreach (var each in result.SalePayments)
                            {
                                result.TotalPaid = result.TotalPaid + each.Amount;
                            }
                        }

                        result.Due = Math.Round(result.RoundOffTotal - result.TotalPaid, 2);
                        //nullifying to avoid object chain
                        if (result.SalePayments != null)
                        {
                            result.SalePayments.ForEach(x => x.Sale = null);
                        }

                        if (result.Customer != null)
                        {
                            result.Customer.Sales = null;
                        }

                        if (result.SaleDetails != null)
                        {
                            result.SaleDetails.ForEach(x => x.Sale = null);
                        }

                        input.Sale = result;
                    }
                }
            }
            catch (Exception ex)
            {
                input.IsFailure = true;
                input.Msg       = "";
            }
            return(input);
        }
        public void Pay(int posTransactionID, decimal amountTendered, DateTime paymentDate)
        {
            using (var db = new DataContext())
            {
                var posTransaction = db.Sales.Find(posTransactionID);

                if (paymentDate.Date < posTransaction.SaleDate.Date)
                {
                    throw new InvalidFieldException("Payment Date");
                }

                // used on first payment transaction
                var totalPaymentsOnCash = GetTotalCashOnlyAmount(posTransactionID);


                var receivable    = GetReceivableAmount(posTransactionID);
                var totalPurchase = GetTotalPurchaseAmount(posTransactionID);


                // add new payment
                var posPayment = new SalePayment();
                posPayment.Amount              = amountTendered;
                posPayment.PaymentDate         = paymentDate;
                posPayment.SaleID              = posTransactionID;
                posPayment.IsReceivablePayment = receivable > 0 ? true : false;
                db.SalePayments.Add(posPayment);



                //total payment on cash with 0 value indicates first payment
                //for first payments, compute the receivable by subtracting the totalPurchase to amount tendered.
                if (totalPaymentsOnCash == 0)
                {
                    var initialReceivables = totalPurchase - amountTendered;
                    var isFullyPaid        = initialReceivables > 0 ? false : true;
                    // update isFinish of Pos Transaction for first payment

                    posTransaction.IsFinished = true;
                    //posTransaction.DateFinished = DateTime.Now;
                    posTransaction.IsFullyPaid          = isFullyPaid;
                    posTransaction.HasReceivablePayment = isFullyPaid ? false :true;
                }
                else
                {
                    // if receivables and amount tender are equal, this means that the transaction is fully paid
                    posTransaction.IsFullyPaid = receivable == amountTendered ? true : false;
                }
                db.Entry(posTransaction).State = EntityState.Modified;

                // update isPaid of products on transaction products
                var transactionProducts = db.SaleProducts.Where(x => x.SaleID == posTransactionID && x.IsToPay == true && x.IsPaid == false);
                foreach (var item in transactionProducts)
                {
                    item.IsPaid = true;

                    db.Entry(item).State = EntityState.Modified;
                }
                db.SaveChanges();
            }
        }
Пример #3
0
        public decimal AddPayment(SalePayment payment)
        {
            if (sale.PaymentList == null)
            {
                sale.PaymentList = new ObservableCollection <SalePayment>();
            }
            sale.PaymentList.Add(payment);

            return(GetOutstandingAmount());
        }
Пример #4
0
        private void CashPayment(string amount)
        {
            try
            {
                var cashPayment = new SalePayment()
                {
                    PaymentAmount = Convert.ToDecimal(amount)
                };
                cashPayment.Payment = new Payment()
                {
                    PaidAmount  = Convert.ToDecimal(amount),
                    PaymentDate = DateTime.Today,
                    PaymentType = 1
                };
                var outstandingAmount = _saleTransaction.AddPayment(cashPayment);

                if (outstandingAmount < 0)
                {
                    RaiseNotification("Info",
                                      string.Format("Balance amount is {0}", (-1.0m * outstandingAmount)));
                }

                if (outstandingAmount <= 0)
                {
                    CompleteTransaction(outstandingAmount * -1.0m);
                }


                PaymentAmount = outstandingAmount;

                log.Info(String.Format("Cash payment of {0} successfull", amount));
            }
            catch (Exception ex)
            {
                log.Error("Cash payment failed", ex);
            }
            finally
            {
            }
        }
Пример #5
0
        public SalePayment Payment([FromBody] SalePayment input)
        {
            try
            {
                if (input != null)
                {
                    input.Sale = null;

                    if (input.Id <= 0)
                    {
                        input.Id = 0;
                        _salePaymentOpp.Add(input);
                    }

                    input = GetOne(input);
                }
            }
            catch (Exception ex)
            {
                input.Msg       = "";
                input.IsFailure = true;
            }
            return(input);
        }
Пример #6
0
        public IActionResult AddPaymentsFromFile(IFormFile file)
        {
            string file_path = Path.Combine(this._appEnvironment.ContentRootPath, "ExternalFiles");
            string name_file = DateTime.Now.Ticks.ToString() + ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"');
            string file_name = Path.Combine(file_path, name_file);

            using (FileStream fs = System.IO.File.Create(file_name))
            {
                file.CopyTo(fs);
                fs.Flush();
            }


            List <PaymentData> allValues;

            List <bool> indatabase = new List <bool>();

            using (TextReader fileReader = System.IO.File.OpenText(file_name))
            {
                var csv = new CsvReader(fileReader);
                csv.Configuration.IgnoreHeaderWhiteSpace = true;

                allValues = csv.GetRecords <PaymentData>().ToList();
                var customers = this.context.Customers.Select(c => c.FullName)
                                .Distinct().ToDictionary(c => c);


                foreach (var item in allValues)
                {
                    indatabase.Add(customers.ContainsKey(item.CustomerName));
                    if (indatabase[indatabase.Count - 1])
                    {
                        DateTime date;
                        var      can = DateTime.TryParse(item.StatementDate, out date);

                        try
                        {
                            var payment = new SalePayment()
                            {
                                Customer    = this.context.Customers.Where(c => c.FullName == item.CustomerName).First(),
                                AmountPaid  = GetAmount(item.AmountPaid),
                                DatePayment = (can)?date:DateTime.MinValue
                            };
                            this.context.Payments.Add(payment);
                        }
                        catch (Exception e)
                        {
                            indatabase[indatabase.Count - 1] = false;
                        }

                        //if (this.context.Payments.FirstOrDefault() == null)
                        //    this.context.Payments.Add(payment);
                    }
                }
            }

            this.context.SaveChanges();

            ViewBag.data       = true;
            ViewBag.allValues  = allValues;
            ViewBag.indatabase = indatabase;
            return(View("PaymentHistory"));
            //return this.Json(new object[] { allValues, indatabase });
        }
Пример #7
0
 private void detach_SalePayments(SalePayment entity)
 {
     this.SendPropertyChanging("SalePayments");
     entity.SaleSellitem = null;
 }