コード例 #1
0
        public dynamic LimitPaymentDate(Int64 CompanyID)
        {
            ClsCommon clsCommon = new ClsCommon();
            DateTime  paymentDate;
            int?      statusPending = Convert.ToInt32(ClsConstants.Status.Pending);
            var       Invoices      = (from data in finocartEntities.Invoice where data.AnchorCompID == CompanyID && data.Discount != null && data.InvoiceStatus == statusPending select data).ToList();

            foreach (var invoice in Invoices)
            {
                paymentDate = clsCommon.GetNextDate(Convert.ToDouble(invoice.InvoiceApprovePayDays));
                int     differenceDays = Convert.ToInt32((Convert.ToDateTime(invoice.PaymentDueDate).Date - Convert.ToDateTime(invoice.PaymentDate).Date).TotalDays);
                decimal discountAmount;
                if (differenceDays > 0)
                {
                    invoice.Earning = Math.Round(Convert.ToDecimal((differenceDays * invoice.Discount * invoice.ApprovedAmt) / 36500));
                }
                else
                {
                    discountAmount = 0;
                }

                invoice.AmountPaid = Math.Round(Convert.ToDecimal(invoice.ApprovedAmt - invoice.Earning));
            }
            var PaymentDate = (from data in Invoices where data.AnchorCompID == CompanyID orderby data.Earning descending select data).ToList();

            return(PaymentDate);
        }
コード例 #2
0
        public decimal?InvoiceLimitApproval(Int64?AnchorID, Int64?InvoiceID, double?NoOfDays, decimal?totalApprovalAmt)
        {
            //Console.WriteLine("line3");
            //Console.ReadKey();
            try
            {
                //getting list of all anchors
                var anchors = (from data in finocartEntities.Company
                               where data.CompanyID == AnchorID
                               select data).ToList();
                //Console.WriteLine("line4");
                //Console.ReadKey();
                var PercentageRate = anchors[0].PercentageRate;
                //decimal? totalApprovalAmt = 0;
                DateTime  paymentDate;
                double    noOfDays;
                int?      statusPending = Convert.ToInt32(ClsConstants.Status.Pending);
                ClsCommon clsCommon     = new ClsCommon();
                if (NoOfDays != null)
                {
                    noOfDays = Convert.ToDouble(NoOfDays);
                }
                else
                {
                    noOfDays = 2;
                }

                //getting last day of payment for anchor
                paymentDate = clsCommon.GetNextDate(noOfDays);
                //getting all invoices of anchor
                var invoices = (from data in finocartEntities.Invoice
                                join invoiceBucket in finocartEntities.InvoiceBucket on data.InvoiceID equals invoiceBucket.InvoiceID
                                join bucket in finocartEntities.BucketManagement on invoiceBucket.BucketID equals bucket.BucketID
                                //where data.Discount >= anchor.PercentageRate && data.InvoiceStatus == statusPending
                                where data.Discount != null && data.InvoiceStatus == statusPending
                                //&& data.Discount >= PercentageRate
                                && data.AnchorCompID == AnchorID && data.InvoiceID == InvoiceID
                                orderby bucket.Discount
                                select new
                {
                    data.InvoiceID,
                    data.ApprovedAmt,
                    data.PaymentDueDate,
                    data.Discount,
                    bucket.ValidUptoDate,
                    data.VendorID,
                    data.PaymentDate
                }).ToList();

                //Console.WriteLine("line5");
                //Console.ReadKey();
                bool    sendNotification = false;
                bool?   IsUnLimited      = anchors[0].IsLimitUnlimited;
                decimal?totalAvailAmount = 0;
                if (anchors[0].BankLimit == null)
                {
                    totalAvailAmount = anchors[0].InvoiceLimitAmt;
                }
                else
                {
                    totalAvailAmount = anchors[0].InvoiceLimitAmt + anchors[0].BankLimit;
                }
                if (invoices.ElementAt(0).Discount >= PercentageRate)
                {
                    var rates = (from data in invoices orderby data.Discount select data.Discount).Distinct();
                    foreach (var rate in rates)
                    {
                        var rateInvoice = (from data in invoices where data.Discount == rate orderby data.ApprovedAmt select data).ToList();
                        foreach (var invoice in rateInvoice)
                        {
                            int     differenceDays = Convert.ToInt32((Convert.ToDateTime(invoice.PaymentDueDate).Date - Convert.ToDateTime(paymentDate).Date).TotalDays);
                            decimal discountAmount;
                            if (differenceDays > 0)
                            {
                                discountAmount = Convert.ToDecimal((differenceDays * invoice.Discount * invoice.ApprovedAmt) / 36500);
                            }
                            else
                            {
                                discountAmount = 0;
                            }

                            decimal amtAfterDiscount = Convert.ToDecimal(invoice.ApprovedAmt - discountAmount);

                            if (totalAvailAmount != null)
                            {
                                totalApprovalAmt += Math.Round(amtAfterDiscount);
                                if (totalAvailAmount >= totalApprovalAmt)
                                {
                                    sendNotification = UpdateInvoice(invoice.InvoiceID, amtAfterDiscount, discountAmount, paymentDate, Convert.ToInt32(ClsConstants.Status.Approved), totalAvailAmount, IsUnLimited);
                                }
                                else
                                {
                                    totalApprovalAmt = totalApprovalAmt - Math.Round(amtAfterDiscount);
                                    sendNotification = UpdateInvoice(invoice.InvoiceID, 0, 0, paymentDate, Convert.ToInt32(ClsConstants.Status.Rejected), totalAvailAmount, IsUnLimited);
                                }
                            }



                            //Console.WriteLine("line6");
                            //Console.ReadKey();
                        }
                    }
                }
                else
                {
                    sendNotification = UpdateInvoice(InvoiceID, 0, 0, paymentDate, Convert.ToInt32(ClsConstants.Status.Rejected), totalAvailAmount, IsUnLimited);
                }

                if (sendNotification)
                {
                    clsCommon.SendNotification(Convert.ToInt32(invoices.ElementAt(0).VendorID), "VendorBillApproval", Convert.ToInt32(InvoiceID), 0);
                }
                return(totalApprovalAmt);
            }
            catch (Exception ex)
            {
                logger.WriteLog(ex);
                return(totalApprovalAmt);
            }
        }
コード例 #3
0
        /// <summary>
        /// Invoice Autho approval system
        /// Date: 24 June 2019
        /// Developer: Shreyans Khandelwal (0538)
        /// </summary>
        /// <returns></returns>
        //public bool InvoiceAutoApproval()
        //{
        //    //Console.WriteLine("line3");
        //    //Console.ReadKey();
        //    try
        //    {

        //        int? typeAnchor = Convert.ToInt32(ClsConstants.AccessType.Anchor);
        //        int? typeBoth = Convert.ToInt32(ClsConstants.AccessType.Both);
        //        //getting list of all anchors
        //        var anchors = (from data in finocartEntities.Company
        //                       where (data.InterestedAs == typeAnchor
        //                       || data.InterestedAs == typeBoth)
        //                       select data).ToList();
        //        //Console.WriteLine("line4");
        //        //Console.ReadKey();
        //        foreach (var anchor in anchors)
        //        {
        //            decimal? totalApprovalAmt = 0;
        //            DateTime paymentDate;
        //            double noOfDays;
        //            int? statusPending = Convert.ToInt32(ClsConstants.Status.Pending);
        //            ClsCommon clsCommon = new ClsCommon();
        //            if (anchor.NoOfDays != null)
        //                noOfDays = Convert.ToDouble(anchor.NoOfDays);
        //            else
        //                noOfDays = 2;

        //            //getting last day of payment for anchor
        //            paymentDate = clsCommon.GetNextDate(noOfDays);
        //            //getting all invoices of anchor

        //                var invoices = (from data in finocartEntities.Invoice
        //                                join invoiceBucket in finocartEntities.InvoiceBucket on data.InvoiceID equals invoiceBucket.InvoiceID
        //                                join bucket in finocartEntities.BucketManagement on invoiceBucket.BucketID equals bucket.BucketID
        //                                //where data.Discount >= anchor.PercentageRate && data.InvoiceStatus == statusPending
        //                                where data.Discount != null && data.InvoiceStatus == statusPending
        //                                // && DbFunctions.TruncateTime(data.PaymentDate) == DbFunctions.TruncateTime(paymentDate.Date)
        //                                && data.AnchorCompID == anchor.CompanyID && data.FinoLimUnLim != "FinoLim"
        //                                //orderby bucket.Discount
        //                                orderby data.PaymentDate ascending
        //                                select new
        //                                {
        //                                    data.InvoiceID,
        //                                    data.ApprovedAmt,
        //                                    data.PaymentDueDate,
        //                                    data.Discount,
        //                                    bucket.ValidUptoDate,
        //                                    data.VendorID
        //                                }).ToList();

        //                //Console.WriteLine("line5");
        //                //Console.ReadKey();
        //                decimal? totalAvailAmount = anchor.InvoiceLimitAmt;
        //                var rates = (from data in invoices orderby data.Discount select data.Discount).Distinct();
        //                foreach (var rate in rates)
        //                {
        //                    var rateInvoice = (from data in invoices where data.Discount == rate orderby data.ApprovedAmt select data).ToList();
        //                    foreach (var invoice in rateInvoice)
        //                    {
        //                        bool sendNotification = false;
        //                        int differenceDays = Convert.ToInt32((Convert.ToDateTime(invoice.PaymentDueDate).Date - Convert.ToDateTime(paymentDate).Date).TotalDays);
        //                        decimal discountAmount;
        //                        if (differenceDays > 0)

        //                            discountAmount = Convert.ToDecimal((differenceDays * invoice.Discount * invoice.ApprovedAmt) / 36500);
        //                        else
        //                            discountAmount = 0;

        //                        decimal amtAfterDiscount = Convert.ToDecimal(invoice.ApprovedAmt - discountAmount);

        //                        if (totalAvailAmount != null)
        //                        {
        //                            totalApprovalAmt = +amtAfterDiscount;
        //                            if (totalAvailAmount >= totalApprovalAmt)
        //                                sendNotification = UpdateInvoice(invoice.InvoiceID, amtAfterDiscount, discountAmount, paymentDate);
        //                            else
        //                                totalApprovalAmt = totalApprovalAmt - amtAfterDiscount;
        //                        }
        //                        else
        //                            sendNotification = UpdateInvoice(invoice.InvoiceID, amtAfterDiscount, discountAmount, paymentDate);

        //                        if (sendNotification)
        //                            clsCommon.SendNotification(Convert.ToInt32(invoice.VendorID), "VendorBillApproval", Convert.ToInt32(invoice.InvoiceID), amtAfterDiscount);

        //                        //Console.WriteLine("line6");
        //                        //Console.ReadKey();

        //                    }
        //                }
        //        }

        //        return true;
        //    }
        //    catch (Exception ex)
        //    {
        //        logger.WriteLog(ex);
        //        return false;
        //    }
        //}

        public bool InvoiceUnLimApproval(Int64 CompanyID)
        {
            //Console.WriteLine("line3");
            //Console.ReadKey();
            try
            {
                int?typeAnchor = Convert.ToInt32(ClsConstants.AccessType.Anchor);
                int?typeBoth   = Convert.ToInt32(ClsConstants.AccessType.Both);
                //getting list of all anchors

                //Console.WriteLine("line4");
                //Console.ReadKey();
                //decimal? totalApprovalAmt = 0;
                DateTime  paymentDate;
                double    noOfDays;
                int?      statusPending = Convert.ToInt32(ClsConstants.Status.Pending);
                ClsCommon clsCommon     = new ClsCommon();
                noOfDays = Convert.ToDouble((from data in finocartEntities.Company where data.CompanyID == CompanyID select data.PaymentDays).FirstOrDefault());
                if (noOfDays != 0)
                {
                    noOfDays = Convert.ToDouble(noOfDays);
                }
                else
                {
                    noOfDays = 2;
                }

                //getting last day of payment for anchor
                paymentDate = clsCommon.GetNextDate(noOfDays);
                //getting all invoices of anchor

                var invoices = (from data in finocartEntities.Invoice
                                join invoiceBucket in finocartEntities.InvoiceBucket on data.InvoiceID equals invoiceBucket.InvoiceID
                                join bucket in finocartEntities.BucketManagement on invoiceBucket.BucketID equals bucket.BucketID
                                //where data.Discount >= anchor.PercentageRate && data.InvoiceStatus == statusPending
                                where data.Discount != null && data.InvoiceStatus == statusPending
                                //&& data.Discount >= (from data in finocartEntities.Company where data.CompanyID == CompanyID select data.PercentageRate).FirstOrDefault()
                                // && DbFunctions.TruncateTime(data.PaymentDate) == DbFunctions.TruncateTime(paymentDate.Date)
                                && data.AnchorCompID == CompanyID && data.FinoLimUnLim != "FinoLim"
                                //orderby bucket.Discount
                                orderby data.PaymentDate ascending
                                select new
                {
                    data.InvoiceID,
                    data.ApprovedAmt,
                    data.PaymentDueDate,
                    data.Discount,
                    bucket.ValidUptoDate,
                    data.VendorID,
                    data.PaymentDate,
                    data.FinoLimUnLim
                }).ToList();

                //Console.WriteLine("line5");
                //Console.ReadKey();
                decimal?totalAvailAmount = (from data in finocartEntities.Company where data.CompanyID == CompanyID select data.InvoiceLimitAmt).FirstOrDefault();
                bool?   IsUnLimited      = (from data in finocartEntities.Company where data.CompanyID == CompanyID select data.IsLimitUnlimited).FirstOrDefault();
                var     rates            = (from data in invoices orderby data.Discount select data.Discount).Distinct();
                foreach (var rate in rates)
                {
                    var rateInvoice = (from data in invoices where data.Discount == rate orderby data.ApprovedAmt select data).ToList();
                    foreach (var invoice in rateInvoice)
                    {
                        int  differenceDays   = 0;
                        bool sendNotification = false;
                        if (invoice.FinoLimUnLim != null)
                        {
                            differenceDays = Convert.ToInt32((Convert.ToDateTime(invoice.PaymentDueDate).Date - Convert.ToDateTime(invoice.PaymentDate).Date).TotalDays);
                        }
                        else
                        {
                            differenceDays = Convert.ToInt32((Convert.ToDateTime(invoice.PaymentDueDate).Date - Convert.ToDateTime(paymentDate).Date).TotalDays);
                        }
                        decimal discountAmount;
                        if (differenceDays > 0)
                        {
                            discountAmount = Convert.ToDecimal((differenceDays * invoice.Discount * invoice.ApprovedAmt) / 36500);
                        }
                        else
                        {
                            discountAmount = 0;
                        }

                        decimal amtAfterDiscount = Convert.ToDecimal(invoice.ApprovedAmt - discountAmount);

                        //if (totalAvailAmount != null)
                        //{
                        //    totalApprovalAmt = +amtAfterDiscount;
                        //    if (totalAvailAmount >= totalApprovalAmt)
                        //        sendNotification = UpdateInvoice(invoice.InvoiceID, amtAfterDiscount, discountAmount, paymentDate);
                        //    else
                        //        totalApprovalAmt = totalApprovalAmt - amtAfterDiscount;
                        //}
                        //else
                        if (invoice.Discount >= (from data in finocartEntities.Company where data.CompanyID == CompanyID select data.PercentageRate).FirstOrDefault())
                        {
                            sendNotification = UpdateInvoice(invoice.InvoiceID, amtAfterDiscount, discountAmount, paymentDate, Convert.ToInt32(ClsConstants.Status.Approved), totalAvailAmount, IsUnLimited);
                        }
                        else
                        {
                            sendNotification = UpdateInvoice(invoice.InvoiceID, 0, 0, paymentDate, Convert.ToInt32(ClsConstants.Status.Rejected), totalAvailAmount, IsUnLimited);
                        }

                        if (sendNotification)
                        {
                            clsCommon.SendNotification(Convert.ToInt32(invoice.VendorID), "VendorBillApproval", Convert.ToInt32(invoice.InvoiceID), amtAfterDiscount);
                        }

                        //Console.WriteLine("line6");
                        //Console.ReadKey();
                    }
                }

                return(true);
            }
            catch (Exception ex)
            {
                logger.WriteLog(ex);
                return(false);
            }
        }