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(); } }
public decimal AddPayment(SalePayment payment) { if (sale.PaymentList == null) { sale.PaymentList = new ObservableCollection <SalePayment>(); } sale.PaymentList.Add(payment); return(GetOutstandingAmount()); }
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 { } }
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); }
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 }); }
private void detach_SalePayments(SalePayment entity) { this.SendPropertyChanging("SalePayments"); entity.SaleSellitem = null; }