private void FixupnpPurchase(Purchase previousValue, bool skipKeys = false)
        {
            if (IsDeserializing)
            {
                return;
            }

            if (previousValue != null && previousValue.npPurchaseProductVariants.Contains(this))
            {
                previousValue.npPurchaseProductVariants.Remove(this);
            }

            if (npPurchase != null)
            {
                if (!npPurchase.npPurchaseProductVariants.Contains(this))
                {
                    npPurchase.npPurchaseProductVariants.Add(this);
                }

                PurchaseID = npPurchase.PurchaseID;
            }
            else if (!skipKeys)
            {
                PurchaseID = null;
            }

            if (ChangeTracker.ChangeTrackingEnabled)
            {
                if (ChangeTracker.OriginalValues.ContainsKey("npPurchase")
                    && (ChangeTracker.OriginalValues["npPurchase"] == npPurchase))
                {
                    ChangeTracker.OriginalValues.Remove("npPurchase");
                }
                else
                {
                    ChangeTracker.RecordOriginalValue("npPurchase", previousValue);
                }
                if (npPurchase != null && !npPurchase.ChangeTracker.ChangeTrackingEnabled)
                {
                    npPurchase.StartTracking();
                }
            }
        }
        /// <summary>
        /// Save Purchase use for both Insert and Update 
        /// </summary>
        /// <param name="purchase">The purchase.</param>
        public void SavePurchase(Purchase purchase)
        {
            Purchase existingData = GetPurchaseByID(purchase.PurchaseID);

            if (existingData == null)
            {
                purchase.CreatedOn = DateTime.Now;
                _context.Purchases.AddObject(purchase);
            }
            else
            {
                existingData.VoucherNumber = purchase.VoucherNumber;
                existingData.Remark = purchase.Remark;
                existingData.ImportLicenseNumber = purchase.ImportLicenseNumber;
                existingData.CustomDutyAmount = purchase.CustomDutyAmount;
                existingData.CommercialTaxAmunt = purchase.CommercialTaxAmunt;
                existingData.AgentFees = purchase.AgentFees;
                existingData.OtherTax = purchase.OtherTax;
                existingData.CustomReleaseDate = purchase.CustomReleaseDate;

                if (!_context.IsAttached(existingData))
                    _context.Purchases.Attach(existingData);
            }
            _context.SaveChanges();
        }