public async Task <IActionResult> Edit(int id, [Bind("Id,PaymentName,PaymentMonth,ActuialPaymentMonth,DataCreatedDate,DataUpdateDate,Memo,MoneyAmount")] PaymentHeader paymentHeader)
        {
            if (id != paymentHeader.PaymentHeaderId)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(paymentHeader);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!PaymentHeaderExists(paymentHeader.PaymentHeaderId))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            return(View(paymentHeader));
        }
示例#2
0
    public void Edit(
        DateTime date,
        string invoiceNo,
        IEnumerable <PaymentDetailViewModel> detail)
    {
        var invoice = ctx.InvoiceHeaders.SingleOrDefault(inv => inv.InvoiceNo == invoiceNo);

        if (invoice != null)
        {
            PaymentHeader h = ctx.PaymentHeaders.SingleOrDefault(pay => pay.InvoiceID == invoice.ID);
            if (h != null)
            {
                ctx.PaymentDetails.DeleteAllOnSubmit(
                    ctx.PaymentDetails.Where(pay => pay.PaymentID == h.ID));

                h.Date      = date;
                h.InvoiceID = invoice.ID;
                EntityHelper.SetAuditFieldForInsert(h, HttpContext.Current.User.Identity.Name);
                foreach (var model in detail)
                {
                    PaymentDetail d = new PaymentDetail();
                    d.CreditCardTypeID = model.CreditCardTypeID;
                    d.PaymentTypeID    = model.PaymentTypeID;
                    d.Amount           = model.Amount;
                    d.ApprovalCode     = model.ApprovalCode;
                    h.PaymentDetails.Add(d);
                    ctx.PaymentHeaders.InsertOnSubmit(h);
                }

                autoNumberProvider.Increment("PM", invoice.BranchID, date.Year);
                ctx.SubmitChanges();
            }
        }
    }
示例#3
0
        public string Update(PaymentHeader entity)
        {
            var originalEntity = this.Context.PaymentHeaders.Find(entity.Id);

            this.Context.Entry(originalEntity).CurrentValues.SetValues(entity);
            this.Context.Entry(originalEntity).State = EntityState.Modified;
            this.Commit();
            return(entity.Id.ToString());
        }
示例#4
0
        /// <summary>
        /// Work out the changes when a Payment is edited
        /// </summary>
        protected override void calculatePaymentChanges(PaymentDocument json, decimal amount, out decimal changeInDocumentAmount, out decimal changeInOutstanding)
        {
            PaymentHeader document = json.header;
            PaymentHeader original = getDocument(document);

            changeInDocumentAmount = document.DocumentAmount - original.DocumentAmount;
            changeInOutstanding    = document.DocumentOutstanding - original.DocumentOutstanding;
            Utils.Check(document.DocumentOutstanding == document.Remaining, "Remaining {0:0.00} does not agree with outstanding {1:0.00}",
                        document.Remaining, document.DocumentOutstanding);
        }
示例#5
0
        protected override void calculatePaymentChanges(PaymentDocument json, decimal amount, out decimal changeInDocumentAmount, out decimal changeInOutstanding)
        {
            PaymentHeader document = json.header;
            PaymentHeader original = getDocument(document);

            changeInDocumentAmount = -(document.DocumentAmount - original.DocumentAmount);
            changeInOutstanding    = 0;
            Utils.Check(-changeInDocumentAmount == amount, "Change in document amount {0:0.00} does not agree with payments {1:0.00}",
                        -changeInDocumentAmount, amount);
        }
        public async Task <IActionResult> Create([Bind("Id,PaymentName,PaymentMonth,ActuialPaymentMonth,DataCreatedDate,DataUpdateDate,Memo,MoneyAmount")] PaymentHeader paymentHeader)
        {
            if (ModelState.IsValid)
            {
                _context.Add(paymentHeader);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            return(View(paymentHeader));
        }
示例#7
0
        public int ProcessBillingUnpaidInvoice(string fileName)
        {
            // accepted
            List <BillingAcceptedViewModel> acceptedInvoices = ReadBillingUnpaidAcceptedFile(fileName).ToList();

            foreach (BillingAcceptedViewModel acceptedInvoice in acceptedInvoices)
            {
                InvoiceHeader invoice = context.InvoiceHeaders.SingleOrDefault(ih => ih.InvoiceNo == acceptedInvoice.InvoiceNo);
                if (invoice != null)
                {
                    Customer cust = invoice.Customer;

                    var payments = invoice.PaymentHeaders.Where(ph => !ph.VoidDate.HasValue);
                    foreach (var payment in payments)
                    {
                        payment.VoidDate = DateTime.Today;
                        //payment.VoidReason = "AUTO PAY DECLINED: " + acceptedInvoice.DeclineCode;
                    }

                    string paymentNo = autoNumberProvider.Generate(invoice.BranchID, "PM", DateTime.Today.Month, DateTime.Today.Year);

                    var h = new PaymentHeader();
                    h.Date      = DateTime.Today;
                    h.InvoiceID = invoice.ID;
                    h.PaymentNo = paymentNo;
                    h.VoidDate  = null;
                    EntityHelper.SetAuditFieldForInsert(h, principal.Identity.Name);

                    var d = new PaymentDetail();
                    d.CreditCardTypeID = cust.CreditCardTypeID;
                    d.PaymentTypeID    = 4; // credit  card
                    d.Amount           = invoice.InvoiceDetails.Sum(inv => (inv.Quantity * inv.UnitPrice) - (inv.Discount / 100 * (inv.Quantity * inv.UnitPrice)));
                    d.ApprovalCode     = acceptedInvoice.VerificationCode;
                    h.PaymentDetails.Add(d);
                    context.Add(h);

                    autoNumberProvider.Increment("PM", invoice.BranchID, DateTime.Today.Year);

                    var status = new CustomerStatusHistory();
                    status.Customer         = invoice.Customer;
                    status.Date             = DateTime.Today;
                    status.CustomerStatusID = 1; // OK
                    status.Notes            = "AUTO PAY ACCEPTED FOR INVOICE " + invoice.InvoiceNo;
                    status.StartDate        = DateTime.Today;
                    EntityHelper.SetAuditFieldForInsert(status, principal.Identity.Name);
                }
            }

            context.SaveChanges();

            return(acceptedInvoices.Count);
        }
示例#8
0
        public static void Update(PaymentViewModel payment)
        {
            PaymentHeader entity = getEntityByModel(payment);

            string result = string.Empty;

            if (entity.IsValid())
            {
                if (payment.Id > 0)
                {
                    result = service.Update(entity);
                }
                else
                {
                    result = service.Insert(entity);
                }

                if (!string.IsNullOrEmpty(result))
                {
                    var savedLines = getpaymentLinesbyPaymentId(result);
                    if (savedLines.Count() > payment.PaymentInvoiceLines.Count())
                    {
                        var tobeDeleted = savedLines.Take(savedLines.Count() - payment.PaymentInvoiceLines.Count());
                        foreach (var item in tobeDeleted)
                        {
                            service.DeleteLine(item.Id, AuthenticationHelper.CompanyId.Value);
                        }
                        savedLines = getpaymentLinesbyPaymentId(result);
                    }

                    foreach (var line in payment.PaymentInvoiceLines)
                    {
                        PaymentInvoiceLines lineEntity = getEntityByModel(line);
                        if (lineEntity.IsValid())
                        {
                            lineEntity.PaymentId = Convert.ToInt64(result);
                            if (savedLines.Count() > 0)
                            {
                                lineEntity.Id = savedLines.FirstOrDefault().Id;
                                savedLines.Remove(savedLines.FirstOrDefault(rec => rec.Id == lineEntity.Id));
                                service.Update(lineEntity);
                            }
                            else
                            {
                                service.Insert(lineEntity);
                            }
                        }
                    }
                }
            }
        }
        /// <summary>
        /// Instantiates the payment service and injects a PaymentHeader
        /// </summary>
        /// <returns>PaymentService</returns>
        protected PaymentService Initialize()
        {
            PaymentHeader header = new PaymentHeader();

            header.APIVersion    = _apiVersion;
            header.MerchantEmail = _merchantEmail;
            header.MerchantKey   = _merchantKey;
            header.SvcType       = _serviceType;
            header.UseIntMode    = _integrationMode;

            PaymentService service = new PaymentService();

            service.PaymentHeaderValue = header;
            return(service);
        }
示例#10
0
        private void LoadPayment(string paymentNo)
        {
            PaymentHeader pay = PaymentService.GetPayment(paymentNo);
            IList <PaymentDetailViewModel> paymentDetail = null;

            if (pay != null)
            {
                lblPaymentNo.Text     = pay.PaymentNo;
                lblPaymentDate.Text   = pay.Date.ToString("dddd, dd MMMM yyyy");
                lblStatusPayment.Text = pay.VoidDate.HasValue ? "Void" : "Active";
                paymentDetail         = PaymentService.GetDetail(pay.InvoiceHeader.InvoiceNo);
                lblTotalPayment.Text  = (paymentDetail.Any() ? paymentDetail.Sum(payment => payment.Amount) : 0).ToString("###,##0.00");
                gvwPayment.DataSource = paymentDetail;
                gvwPayment.DataBind();
            }
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!String.IsNullOrEmpty(Request.QueryString["InvoiceNo"]))
            {
                string        invoiceNo = Request.QueryString["InvoiceNo"];
                PaymentHeader pay       = PaymentService.GetPaymentOfInvoice(invoiceNo);
                if (pay != null)
                {
                    LoadInvoice(invoiceNo);
                    LoadPayment(pay.PaymentNo);
                }
            }

            btnPrint.Visible = Request.QueryString["HidePrint"] == null;
            btnClose.Visible = Request.QueryString["HidePrint"] != null;
        }
示例#12
0
    private void LoadPayment(string paymentNo)
    {
        IEnumerable <PaymentDetailViewModel> paymentDetail = null;
        PaymentHeader pay = paymentProvider.GetPayment(paymentNo);

        if (pay != null)
        {
            lblPaymentNo.Text     = pay.PaymentNo;
            lblPaymentDate.Text   = pay.Date.ToString("dddd, dd MMMM yyyy");
            lblStatusPayment.Text = pay.VoidDate.HasValue ? "Void" : "Active";
            paymentDetail         = paymentProvider.GetDetail(pay.InvoiceHeader.InvoiceNo);
            gvwPayment.DataSource = paymentDetail;
            gvwPayment.DataBind();

            lblTotalPayment.Text = (paymentDetail.Any() ? paymentDetail.Sum(inv => inv.Amount) : 0M).ToString("###,##0.00");
        }
    }
示例#13
0
 public PaymentModel(PaymentHeader entity)
 {
     this.Id            = entity.Id;
     this.Amount        = entity.Amount;
     this.BankAccountId = entity.BankAccountId;
     this.BankId        = entity.BankId;
     this.CreateBy      = entity.CreateBy;
     this.CreateDate    = entity.CreateDate;
     this.PaymentDate   = entity.PaymentDate;
     this.PaymentNo     = entity.PaymentNo;
     this.PeriodId      = entity.PeriodId;
     this.SOBId         = entity.SOBId;
     this.Status        = entity.Status;
     this.UpdateBy      = entity.UpdateBy;
     this.UpdateDate    = entity.UpdateDate;
     this.VendorId      = entity.VendorId;
     this.VendorSiteId  = entity.VendorSiteId;
 }
示例#14
0
        /// <summary>
        /// Retrieve a payment, or prepare a new one
        /// </summary>
        PaymentDocument getPayment(int?id)
        {
            PaymentHeader header = getDocument <PaymentHeader>(id);

            if (header.idDocument == null)
            {
                header.DocumentTypeId     = (int)PaymentDoc;
                header.DocumentDate       = Utils.Today;
                header.DocumentName       = "";
                header.DocumentIdentifier = "Payment";
                if (GetParameters["acct"].IsInteger())
                {
                    header.DocumentAccountId = int.Parse(GetParameters["acct"]);
                }
                else if (Settings.DefaultBankAccount > 0)
                {
                    header.DocumentAccountId = (int)Settings.DefaultBankAccount;
                }
                if (GetParameters["name"].IsInteger())
                {
                    JObject name = Database.QueryOne("*", "WHERE idNameAddress = " + GetParameters["name"], "NameAddress");
                    if (name != null)
                    {
                        checkNameType(name.AsString("Type"), NameType);
                        header.DocumentNameAddressId = name.AsInt("idNameAddress");
                        header.DocumentAddress       = name.AsString("Address");
                        header.DocumentName          = name.AsString("Name");
                    }
                }
            }
            else
            {
                checkDocType(header.DocumentTypeId, PaymentDoc);
                checkNameType(header.DocumentNameAddressId, NameType);
            }
            PaymentDocument previous = new PaymentDocument()
            {
                header = header,
                detail = PaymentListing(header.idDocument, header.DocumentNameAddressId).ToList()
            };

            return(previous);
        }
示例#15
0
        public string Create(
            DateTime date,
            string invoiceNo,
            IEnumerable <PaymentDetailViewModel> detail)
        {
            string paymentNo = String.Empty;

            var invoice = context.InvoiceHeaders.SingleOrDefault(inv => inv.InvoiceNo == invoiceNo);

            if (invoice != null)
            {
                paymentNo = autoNumberProvider.Generate(invoice.BranchID, "PM", date.Month, date.Year);

                PaymentHeader h = new PaymentHeader();
                h.Date      = date;
                h.InvoiceID = invoice.ID;
                h.PaymentNo = paymentNo;
                h.VoidDate  = (DateTime?)null;
                context.Add(h);

                EntityHelper.SetAuditFieldForInsert(h, principal.Identity.Name);
                foreach (var model in detail)
                {
                    PaymentDetail d = new PaymentDetail();
                    d.CreditCardTypeID = model.CreditCardTypeID;
                    d.PaymentTypeID    = model.PaymentTypeID;
                    d.Amount           = model.Amount;
                    d.ApprovalCode     = model.ApprovalCode;
                    d.PaymentHeader    = h;
                    context.Add(d);
                }

                autoNumberProvider.Increment("PM", invoice.BranchID, date.Year);
                context.SaveChanges();
            }

            return(paymentNo);
        }
示例#16
0
        private static PaymentHeader getEntityByModel(PaymentViewModel model)
        {
            if (model == null)
            {
                return(null);
            }

            PaymentHeader entity = new PaymentHeader();

            if (model.Id == 0)
            {
                entity.CreateBy   = AuthenticationHelper.UserId;
                entity.CreateDate = DateTime.Now;
                entity.CompanyId  = AuthenticationHelper.CompanyId.Value;
            }
            else
            {
                entity.CreateBy   = model.CreateBy;
                entity.CreateDate = model.CreateDate;
                entity.CompanyId  = AuthenticationHelper.CompanyId.Value; //Not exist.. have to do this..
            }

            entity.Amount        = model.Amount;
            entity.BankId        = model.BankId;
            entity.Id            = model.Id;
            entity.PaymentDate   = model.PaymentDate;
            entity.PaymentNo     = model.PaymentNo;
            entity.Status        = model.Status;
            entity.SOBId         = model.SOBId;
            entity.BankAccountId = model.BankAccountId;
            entity.VendorId      = model.VendorId;
            entity.PeriodId      = model.PeriodId;
            entity.VendorSiteId  = model.VendorSiteId;
            entity.UpdateBy      = AuthenticationHelper.UserId;
            entity.UpdateDate    = DateTime.Now;
            return(entity);
        }
示例#17
0
    public InvoiceHeader CreateExistingMemberInvoiceForBilling(
        int branchID,
        DateTime date,
        string customerCode,
        int employeeID,
        string notes,
        decimal discountValue,
        IEnumerable <InvoiceDetailViewModel> detail,
        IEnumerable <PaymentDetailViewModel> paymentDetail)
    {
        Customer cust = ctx.Customers.SingleOrDefault(c => c.Barcode == customerCode);

        if (cust != null)
        {
            InvoiceHeader header = new InvoiceHeader();
            header.InvoiceNo     = autoNumberProvider.Generate(branchID, "OR", date.Month, date.Year);
            header.BranchID      = branchID;
            header.Date          = date;
            header.Customer      = cust;
            header.EmployeeID    = employeeID;
            header.InvoiceType   = EXISTING_MEMBER_INVOICE;
            header.Notes         = notes;
            header.DiscountValue = discountValue;
            EntityHelper.SetAuditFieldForInsert(header, HttpContext.Current.User.Identity.Name);
            foreach (var model in detail)
            {
                InvoiceDetail d = new InvoiceDetail();
                d.InvoiceID = model.InvoiceID;
                d.ItemID    = model.ItemID;
                d.Quantity  = model.Quantity;
                d.UnitPrice = model.UnitPrice;
                d.Discount  = model.Discount;
                d.IsTaxable = model.IsTaxable;
                header.InvoiceDetails.Add(d);
                ctx.InvoiceDetails.InsertOnSubmit(d);
            }

            PaymentHeader pay = new PaymentHeader();
            pay.Date          = date;
            pay.InvoiceHeader = header;
            pay.PaymentNo     = autoNumberProvider.Generate(branchID, "PM", date.Month, date.Year);
            pay.VoidDate      = null;
            EntityHelper.SetAuditFieldForInsert(pay, HttpContext.Current.User.Identity.Name);

            foreach (var payDetail in paymentDetail)
            {
                PaymentDetail payd = new PaymentDetail();
                payd.Amount           = payDetail.Amount;
                payd.CreditCardTypeID = payDetail.CreditCardTypeID;
                payd.PaymentTypeID    = payDetail.PaymentTypeID;
                payd.ApprovalCode     = payDetail.ApprovalCode;
                payd.Notes            = payDetail.Notes;
                pay.PaymentDetails.Add(payd);
                ctx.PaymentDetails.InsertOnSubmit(payd);
            }

            autoNumberProvider.Increment("OR", header.BranchID, date.Year);
            autoNumberProvider.Increment("PM", header.BranchID, date.Year);

            return(header);
        }

        return(null);
    }
 public string Insert(PaymentHeader entity)
 {
     return(this.repository.Insert(entity));
 }
示例#19
0
 public string Insert(PaymentHeader entity)
 {
     this.Context.PaymentHeaders.Add(entity);
     this.Commit();
     return(entity.Id.ToString());
 }
 public string Update(PaymentHeader entity)
 {
     return(this.repository.Update(entity));
 }
示例#21
0
    public string CreateFreshMemberInvoice(
        int branchID,
        string contractNo,
        DateTime purchasedate,
        int employeeID,
        string notes,
        decimal discountValue,
        IEnumerable <PackageDetailViewModel> detail,
        IEnumerable <PaymentDetailViewModel> paymentDetail)
    {
        Contract contract = ctx.Contracts.SingleOrDefault(con => con.ContractNo == contractNo);

        if (contract != null)
        {
            InvoiceHeader header = new InvoiceHeader();
            header.InvoiceNo     = autoNumberProvider.Generate(branchID, "OR", purchasedate.Month, purchasedate.Year);
            header.BranchID      = branchID;
            header.Contract      = contract;
            header.Date          = purchasedate;
            header.EmployeeID    = employeeID;
            header.InvoiceType   = FRESH_MEMBER_INVOICE;
            header.Notes         = notes;
            header.DiscountValue = discountValue;
            header.CustomerID    = contract.CustomerID;
            header.VoidDate      = (DateTime?)null;
            EntityHelper.SetAuditFieldForInsert(header, HttpContext.Current.User.Identity.Name);
            foreach (var model in detail)
            {
                InvoiceDetail d = new InvoiceDetail();
                d.ItemID    = model.ItemID;
                d.Quantity  = model.Quantity;
                d.UnitPrice = model.UnitPrice;
                d.Discount  = model.Discount;
                d.IsTaxable = model.IsTaxed;
                header.InvoiceDetails.Add(d);
                ctx.InvoiceDetails.InsertOnSubmit(d);
            }

            PaymentHeader pay = new PaymentHeader();
            pay.Date          = purchasedate;
            pay.InvoiceHeader = header;
            pay.PaymentNo     = autoNumberProvider.Generate(branchID, "PM", purchasedate.Month, purchasedate.Year);
            pay.VoidDate      = (DateTime?)null;
            EntityHelper.SetAuditFieldForInsert(pay, HttpContext.Current.User.Identity.Name);

            foreach (var payDetail in paymentDetail)
            {
                PaymentDetail payd = new PaymentDetail();
                payd.Amount           = payDetail.Amount;
                payd.CreditCardTypeID = payDetail.CreditCardTypeID;
                payd.PaymentTypeID    = payDetail.PaymentTypeID;
                payd.ApprovalCode     = payDetail.ApprovalCode;
                payd.Notes            = payDetail.Notes;
                pay.PaymentDetails.Add(payd);
                ctx.PaymentDetails.InsertOnSubmit(payd);
            }



            //CustomerStatusHistory custStatusHist = new CustomerStatusHistory();
            //custStatusHist.Customer = cust;
            //custStatusHist.CustomerStatusID =

            contract.PurchaseDate = purchasedate;
            //contract.ActiveDate = DateTime.Now;
            contract.Status = FitnessManagement.Providers.ContractStatus.PAID;

            autoNumberProvider.Increment("OR", header.BranchID, purchasedate.Year);
            autoNumberProvider.Increment("PM", header.BranchID, purchasedate.Year);



            ctx.SubmitChanges();

            return(header.InvoiceNo);
        }

        return(null);
    }
示例#22
0
        public AjaxReturn PaymentSave(PaymentDocument json)
        {
            decimal amount = 0;

            Database.BeginTransaction();
            PaymentHeader document = json.header;

            checkDocType(document.DocumentTypeId, PaymentDoc);
            checkNameType(document.DocumentNameAddressId, NameType);
            checkAccountIsAcctType(document.DocumentAccountId, AcctType.Bank, AcctType.CreditCard);
            if (document.idDocument == null)
            {
                allocateDocumentIdentifier(document);
            }
            PaymentDocument oldDoc = getPayment(document.idDocument);
            int             sign   = -SignFor(PaymentDoc);

            // Update the outstanding on the paid documents
            foreach (PaymentLine payment in json.detail)
            {
                Utils.Check(!SecurityOn || !Settings.RequireAuthorisation || Authorise || NameType != "S" || payment.Authorised > 0,
                            "Cannot pay unauthorised document");
                decimal     a   = payment.AmountPaid;
                PaymentLine old = oldDoc.PaymentFor(payment.idDocument);
                if (old != null)
                {
                    a -= old.AmountPaid;                        // reduce update by the amount paid last time it was saved
                }
                int?docId = payment.idDocument;
                if (a != 0)
                {
                    Database.Execute("UPDATE Journal SET Outstanding = Outstanding - " + sign * a
                                     + " WHERE DocumentId = " + Database.Quote(docId) + " AND AccountId = " + (int)LedgerAccount);
                    amount += a;
                }
            }
            json.detail = json.detail.Where(l => l.AmountPaid != 0).ToList();
            document.DocumentOutstanding = json.header.Remaining;
            decimal changeInDocumentAmount;
            decimal changeInOutstanding;

            // Virtual method, as calculation is different for customers and suppliers
            calculatePaymentChanges(json, amount, out changeInDocumentAmount, out changeInOutstanding);
            document.DocumentTypeId = (int)PaymentDoc;
            Database.Update(document);
            // Now delete the old cross reference records, and replace with new
            Database.Execute("DELETE FROM Payments WHERE idPayment = " + document.idDocument);
            foreach (PaymentLine payment in json.detail)
            {
                if (payment.AmountPaid != 0)
                {
                    Database.Execute("INSERT INTO Payments (idPayment, idPaid, PaymentAmount) VALUES("
                                     + document.idDocument + ", " + payment.idDocument + ", " + payment.AmountPaid + ")");
                }
            }
            // Journal between bank account and sales/purchase ledger
            Journal journal = Database.Get(new Journal()
            {
                DocumentId = (int)document.Id,
                JournalNum = 1
            });

            journal.DocumentId    = (int)document.idDocument;
            journal.JournalNum    = 1;
            journal.NameAddressId = document.DocumentNameAddressId;
            journal.Memo          = document.DocumentMemo;
            journal.AccountId     = document.DocumentAccountId;
            journal.Amount       += changeInDocumentAmount;
            journal.Outstanding  += changeInOutstanding;
            Database.Update(journal);
            journal = Database.Get(new Journal()
            {
                DocumentId = (int)document.Id,
                JournalNum = 2
            });
            journal.DocumentId    = (int)document.idDocument;
            journal.JournalNum    = 2;
            journal.NameAddressId = document.DocumentNameAddressId;
            journal.Memo          = document.DocumentMemo;
            journal.AccountId     = (int)LedgerAccount;
            journal.Amount       -= changeInDocumentAmount;
            journal.Outstanding  -= changeInOutstanding;
            Database.Update(journal);
            Line line = Database.Get(new Line()
            {
                idLine = journal.idJournal
            });

            line.idLine      = journal.idJournal;
            line.LineAmount += PaymentDoc == DocType.BillPayment ? -changeInDocumentAmount : changeInDocumentAmount;
            Database.Update(line);
            oldDoc = PaymentGetAudit(document.idDocument);
            Database.AuditUpdate("Payment", document.idDocument, oldDoc == null ? null : oldDoc.ToJObject(), json.ToJObject());
            Database.Commit();
            return(new AjaxReturn()
            {
                message = "Payment saved", id = document.idDocument
            });
        }
示例#23
0
        public string CreateExistingMemberInvoice(
            int branchID,
            DateTime date,
            string customerCode,
            int employeeID,
            string notes,
            decimal discountValue,
            IEnumerable <InvoiceDetailViewModel> detail,
            IEnumerable <PaymentDetailViewModel> paymentDetail)
        {
            Customer cust = context.Customers.SingleOrDefault(c => c.Barcode == customerCode);

            var header = new InvoiceHeader();

            header.InvoiceNo = autoNumberProvider.Generate(branchID, "OR", date.Month, date.Year);
            header.BranchID  = branchID;
            header.Date      = date;
            if (cust == null)
            {
                header.Customer     = null;
                header.CustomerName = customerCode;
            }
            else
            {
                header.Customer     = cust;
                header.CustomerName = null;
            }

            header.EmployeeID    = employeeID;
            header.InvoiceType   = InvoiceConstants.EXISTING_MEMBER_INVOICE;
            header.Notes         = notes;
            header.DiscountValue = discountValue;
            EntityHelper.SetAuditFieldForInsert(header, principal.Identity.Name);
            foreach (var model in detail)
            {
                var d = new InvoiceDetail();
                d.InvoiceID     = model.InvoiceID;
                d.ItemID        = model.ItemID;
                d.Quantity      = model.Quantity;
                d.UnitName      = model.UnitName;
                d.UnitPrice     = model.UnitPrice;
                d.Discount      = model.Discount;
                d.IsTaxable     = model.IsTaxable;
                d.InvoiceHeader = header;
                context.Add(d);

                if (cust != null)
                {
                    CreateTrainingSession(branchID, model.ItemID, cust.ID, header, d);
                }
            }

            var payments = paymentDetail.ToList();

            if (payments.Count > 0)
            {
                var pay = new PaymentHeader();
                pay.Date          = date;
                pay.InvoiceHeader = header;
                pay.PaymentNo     = autoNumberProvider.Generate(branchID, "PM", date.Month, date.Year);
                pay.VoidDate      = null;
                EntityHelper.SetAuditFieldForInsert(pay, principal.Identity.Name);

                foreach (var payDetail in payments)
                {
                    var payd = new PaymentDetail();
                    payd.Amount           = payDetail.Amount;
                    payd.CreditCardTypeID = payDetail.CreditCardTypeID;
                    payd.PaymentTypeID    = payDetail.PaymentTypeID;
                    payd.ApprovalCode     = payDetail.ApprovalCode;
                    payd.Notes            = payDetail.Notes;
                    payd.PaymentHeader    = pay;
                    context.Add(payd);
                }
                autoNumberProvider.Increment("PM", header.BranchID, date.Year);

                context.Add(pay);
            }

            context.Add(header);

            autoNumberProvider.Increment("OR", header.BranchID, date.Year);

            context.SaveChanges();

            return(header.InvoiceNo);
        }