/// <summary>
        /// This method is used to add or edit purchase invoice
        /// </summary>
        /// <param name="invoiceData"></param>
        /// <returns></returns>
        public int AddUpdateInvoice(PurchaseInvoiceForm invoiceData)
        {
            int autoId = 0;
            //Add purchase invoice
            BusinessExpens obj = new BusinessExpens();

            obj.ID     = invoiceData.Invoice.ID;
            obj.Sup_Id = invoiceData.Invoice.SupplierID;

            obj.PI_Date         = invoiceData.Invoice.InvoiceDate;
            obj.PI_GST_Amt      = Convert.ToDecimal(invoiceData.Invoice.TotalTax);
            obj.PI_No           = invoiceData.Invoice.InvoiceNo;
            obj.PI_TandC        = invoiceData.Invoice.TermsAndConditions;
            obj.PI_Tot_aft_Tax  = Convert.ToDecimal(invoiceData.Invoice.TotalAfterTax);
            obj.PI_Tot_bef_Tax  = Convert.ToDecimal(invoiceData.Invoice.TotalBeforeTax);
            obj.Our_PO_No       = invoiceData.Invoice.OurPONo;
            obj.PI_Pmt_Due_Date = invoiceData.Invoice.PaymentDueDate;
            obj.Exc_Inc_GST     = invoiceData.Invoice.ExcIncGST;
            obj.PI_Status       = Convert.ToByte(PI_Status.UnPaid);
            obj.IsDeleted       = false;

            try
            {
                using (SASEntitiesEDM entities = new SASEntitiesEDM())
                {
                    if (entities.PurchaseInvoices.AsNoTracking().FirstOrDefault(x => x.ID == invoiceData.Invoice.ID) == null)
                    {
                        //obj.CreatedBy = invoiceData.PIModel.CreatedBy;
                        obj.CreatedDate = DateTime.Now;
                        entities.BusinessExpenses.Add(obj);
                        entities.SaveChanges();
                        autoId = obj.ID;
                    }
                    else
                    {
                        // obj.ModifiedBy = invoiceData.PIModel.ModifiedBy;
                        obj.ModifiedDate          = DateTime.Now;
                        entities.Entry(obj).State = EntityState.Modified;
                        autoId = entities.SaveChanges();
                    }

                    invoiceData.Invoice.ID = autoId;
                    CreateDebitNote(invoiceData);

                    if (autoId > 0)
                    {
                        BusinessExpensesDetail PIDetails;
                        if (invoiceData.BEInvoiceDetails != null)
                        {
                            foreach (PurchaseInvoiceBEDetailsEntity beDetailEntity in invoiceData.BEInvoiceDetails)
                            {
                                PIDetails       = new BusinessExpensesDetail();
                                PIDetails.PI_ID = autoId;
                                PIDetails.Bus_Expenses_Acc_Name = beDetailEntity.AccountName;

                                PIDetails.PI_Amount = beDetailEntity.PQAmount;
                                PIDetails.GST_Code  = beDetailEntity.GSTCode;
                                PIDetails.GST_Rate  = beDetailEntity.GSTRate;

                                PIDetails.Bus_Expenses_Desc = beDetailEntity.Description;
                                if (entities.PurchaseInvoiceDetails.AsNoTracking().FirstOrDefault(x => x.ID == beDetailEntity.ID) == null)
                                {
                                    entities.BusinessExpensesDetails.Add(PIDetails);
                                    entities.SaveChanges();
                                }
                                else
                                {
                                    entities.Entry(PIDetails).State = EntityState.Modified;
                                    entities.SaveChanges();
                                }
                            }
                        }
                    }
                }
                return(autoId);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public int UpdationInvoice(PurchaseInvoiceForm invoiceData)
        {
            try
            {
                using (SASEntitiesEDM entities = new SASEntitiesEDM())
                {
                    BusinessExpens obj = entities.BusinessExpenses.Where(e => e.PI_No == invoiceData.Invoice.InvoiceNo
                                                                         ).SingleOrDefault();
                    if (obj != null)
                    {
                        //obj.ID = invoiceData.Invoice.ID;
                        obj.Sup_Id = invoiceData.Invoice.SupplierID;

                        obj.PI_Date         = Convert.ToDateTime(invoiceData.Invoice.InvoiceDateStr);
                        obj.PI_GST_Amt      = Convert.ToDecimal(invoiceData.Invoice.TotalTax);
                        obj.PI_No           = invoiceData.Invoice.InvoiceNo;
                        obj.PI_TandC        = invoiceData.Invoice.TermsAndConditions;
                        obj.PI_Tot_aft_Tax  = Convert.ToDecimal(invoiceData.Invoice.TotalAfterTax);
                        obj.PI_Tot_bef_Tax  = Convert.ToDecimal(invoiceData.Invoice.TotalBeforeTax);
                        obj.PI_Pmt_Due_Date = Convert.ToDateTime(invoiceData.Invoice.PaymentDueDateStr);
                        obj.Our_PO_No       = invoiceData.Invoice.OurPONo;
                        obj.Exc_Inc_GST     = invoiceData.Invoice.ExcIncGST;
                        obj.ModifiedDate    = DateTime.Now;
                        entities.SaveChanges();
                    }

                    invoiceData.Invoice.ID = obj.ID;
                    CreateDebitNote(invoiceData);

                    var objPurchase = entities.PurchaseInvoiceDetails.Where
                                          (e => e.PI_ID == obj.ID && e.Type == "BE").ToList();
                    if (objPurchase != null)
                    {
                        foreach (var item in objPurchase)
                        {
                            entities.PurchaseInvoiceDetails.Remove(item);
                            entities.SaveChanges();
                        }
                    }
                    BusinessExpensesDetail PIDetails;

                    if (invoiceData.BEInvoiceDetails != null)
                    {
                        foreach (PurchaseInvoiceBEDetailsEntity beDetailEntity in invoiceData.BEInvoiceDetails)
                        {
                            PIDetails       = new BusinessExpensesDetail();
                            PIDetails.PI_ID = obj.ID;
                            PIDetails.Bus_Expenses_Acc_Name = beDetailEntity.AccountName;

                            PIDetails.PI_Amount = beDetailEntity.PQAmount;
                            PIDetails.GST_Code  = beDetailEntity.GSTCode;
                            PIDetails.GST_Rate  = beDetailEntity.GSTRate;

                            PIDetails.Bus_Expenses_Desc = beDetailEntity.Description;
                            entities.BusinessExpensesDetails.Add(PIDetails);
                            entities.SaveChanges();
                        }
                    }
                    return(obj.ID);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }