public long ProcessCustomerInvoice(CustomerInvoiceObject customerInvoice)
        {
            try
            {
                if (customerInvoice == null)
                {
                    return(-2);
                }

                using (var db = _db)
                {
                    var customerInvoices = db.CustomerInvoices.Where(p => p.CustomerId == customerInvoice.CustomerId).ToList();
                    var invoice          = customerInvoices.Any() ? customerInvoices[0] : new CustomerInvoice();

                    if (invoice.Id < 1)
                    {
                        var totalVat  = customerInvoice.TotalVATAmount + invoice.TotalVATAmount;
                        var discount  = customerInvoice.TotalDiscountAmount + invoice.TotalDiscountAmount;
                        var totalDue  = customerInvoice.AmountDue + invoice.TotalAmountDue;
                        var totalPaid = invoice.TotalAmountPaid + customerInvoice.AmountPaid;

                        invoice.InvoiceBalance = ((totalDue - discount) + totalVat) - totalPaid;

                        invoice.CustomerId = customerInvoice.CustomerId;
                        db.CustomerInvoices.Add(invoice);
                        db.SaveChanges();
                    }
                    else
                    {
                        invoice.TotalAmountPaid     += customerInvoice.AmountPaid;
                        invoice.TotalVATAmount      += customerInvoice.TotalVATAmount;
                        invoice.TotalDiscountAmount += customerInvoice.TotalDiscountAmount;
                        invoice.TotalAmountDue      += customerInvoice.AmountDue;


                        invoice.InvoiceBalance = ((invoice.TotalAmountDue - invoice.TotalDiscountAmount) + invoice.TotalVATAmount) - invoice.TotalAmountPaid;

                        db.Entry(invoice).State = EntityState.Modified;
                        db.SaveChanges();
                    }
                    return(5);
                }
            }
            catch (Exception ex)
            {
                ErrorLogger.LogError(ex.StackTrace, ex.Source, ex.Message);
                return(0);
            }
        }
        public long BalanceCustomerInvoice(CustomerInvoiceObject customerInvoice)
        {
            try
            {
                if (customerInvoice == null)
                {
                    return(-2);
                }

                using (var db = _db)
                {
                    var customerInvoices = db.CustomerInvoices.Where(p => p.CustomerId == customerInvoice.CustomerId).ToList();

                    if (!customerInvoices.Any())
                    {
                        return(-2);
                    }

                    var invoice = customerInvoices[0];

                    invoice.TotalAmountPaid     -= customerInvoice.AmountPaid;
                    invoice.TotalAmountDue      -= customerInvoice.AmountDue;
                    invoice.TotalVATAmount      -= customerInvoice.TotalVATAmount;
                    invoice.TotalDiscountAmount -= customerInvoice.TotalDiscountAmount;


                    invoice.InvoiceBalance = ((invoice.TotalAmountDue - invoice.TotalDiscountAmount) + invoice.TotalVATAmount) - invoice.TotalAmountPaid;

                    //if (customerInvoice.TotalAmountDue > customerInvoice.TotalAmountPaid)
                    //{
                    //    invoice.InvoiceBalance -= customerInvoice.TotalAmountDue - customerInvoice.TotalAmountPaid;
                    //}

                    db.Entry(invoice).State = EntityState.Modified;
                    db.SaveChanges();

                    return(5);
                }
            }
            catch (Exception ex)
            {
                ErrorLogger.LogError(ex.StackTrace, ex.Source, ex.Message);
                return(0);
            }
        }
示例#3
0
 public long BalanceCustomerInvoice(CustomerInvoiceObject customerInvoice)
 {
     return(_salePaymentRepository.BalanceCustomerInvoice(customerInvoice));
 }
示例#4
0
 public long ProcessCustomerInvoice(CustomerInvoiceObject customerInvoice)
 {
     return(_salePaymentRepository.ProcessCustomerInvoice(customerInvoice));
 }