Example #1
0
    protected void btnAddMember_Click(object sender, EventArgs e)
    {
        try
        {
            int userID  = 0;
            var context = MyDBContext;

            if (context.UserDetails.Where(x => x.Username.ToLower() == txtUsername.Text.ToLower()).FirstOrDefault() == null)
            {
                var refer = context.UserDetails.Where(x => x.Username.ToLower() == txtReferBY.Text.ToLower()).ToList().FirstOrDefault();

                if (refer != null)
                {
                    var    percentage = 0.0M;
                    string fileName;
                    SaveImage(out fileName);
                    decimal.TryParse(txtPercentageOfSale.Text, out percentage);
                    var user = new UserDetail();
                    user.FirstName        = txtFirstName.Text;
                    user.LastName         = txtLastName.Text;
                    user.Email            = txtEmail.Text;
                    user.Username         = txtUsername.Text;
                    user.Password         = txtUsername.Text;
                    user.ReferrerID       = refer.ID;
                    user.ImagePath        = fileName;
                    user.CNIC             = txtCNIC.Text;
                    user.FatherName       = txtFatherName.Text;
                    user.IsActive         = true;
                    user.IsSuperAdmin     = false;
                    user.UserType         = ddlUserType.SelectedValue;
                    user.ContactNo        = txtPhone.Text;
                    user.ContactNo2       = txtPhone2.Text;
                    user.PercentageOfSale = percentage;
                    user.CreatedBy        = Utils.GetUserName();
                    user.CreatedOn        = DateTime.Now;
                    context.UserDetails.Add(user);

                    if (context.SaveChanges() > 0)
                    {
                        if (ddlProduct.SelectedValue != "0")
                        {
                            var productID = int.Parse(ddlProduct.SelectedValue);
                            var objUser   = context.UserDetails.Where(x => x.Username.ToLower() == txtUsername.Text.ToLower()).OrderByDescending(x => x.ID).FirstOrDefault();
                            var up        = new UserProduct();

                            AssignDefaultPages(objUser.ID);

                            userID          = objUser.ID;
                            hdnUserID.Value = objUser.ID.ToString();
                            up.Quantity     = int.Parse(txtQuantity.Text);
                            up.UserID       = objUser.ID;
                            up.ProductID    = int.Parse(ddlProduct.SelectedValue);
                            up.IsActive     = true;
                            up.CreatedBy    = Utils.GetUserName();
                            up.CreatedOn    = DateTime.Now;

                            context.UserProducts.Add(up);
                            context.SaveChanges();

                            var product = context.Products.Where(x => x.ID == productID).FirstOrDefault();

                            if (product != null)
                            {
                                var productNth = context.ProductLevels.Where(x => x.ProductID == product.ID).OrderBy(x => x.LevelNumber).ToList();

                                foreach (var p in productNth)
                                {
                                    var userNth = new UserNthLevel();
                                    userNth.IsActive    = true;
                                    userNth.LevelNumber = p.LevelNumber;
                                    userNth.Percentage  = p.Percentage;
                                    userNth.CreatedBy   = Utils.GetUserName();
                                    userNth.TimeStamp   = DateTime.Now;
                                    userNth.UserID      = objUser.ID;
                                    context.UserNthLevels.Add(userNth);
                                }

                                context.SaveChanges();

                                var firstLevel = context.UserNthLevels.Where(x => x.UserID == refer.ID && x.LevelNumber == 1).FirstOrDefault();

                                if (firstLevel != null)
                                {
                                    //var count = context.UserSales.Where(x => x.AddedOn.Value.Date == DateTime.Now.Date).ToList().Count();
                                    var totalPrice      = product.FinalSalePrice * int.Parse(txtQuantity.Text);
                                    var comissionAmount = firstLevel.Percentage * (totalPrice / 100);
                                    var us = new UserSale();

                                    // count++;
                                    us.UserID              = refer.ID;
                                    us.ReferredUserID      = objUser.ID;
                                    us.Quantity            = int.Parse(txtQuantity.Text);
                                    us.ProductPrice        = product.FinalSalePrice;
                                    us.SaleProductID       = product.ID;
                                    us.ComissionPercentage = firstLevel.Percentage;
                                    us.ComissionAmount     = comissionAmount;
                                    us.TotalPrice          = product.FinalSalePrice * int.Parse(txtQuantity.Text);
                                    us.IsActive            = true;
                                    us.AddedOn             = DateTime.Now;
                                    us.SalesNo             = DateTime.Now.ToString("yyyyMMddhhmmss");// + "-" + count.ToString();

                                    context.UserSales.Add(us);
                                    context.SaveChanges();

                                    var userSale = context.UserSales.OrderByDescending(x => x.ID).FirstOrDefault();
                                    var nthLevel = new SalesComissionNthLevel();

                                    nthLevel.IsActive            = true;
                                    nthLevel.IsCheckOut          = false;
                                    nthLevel.UserSaleID          = userSale.ID;
                                    nthLevel.BeneficierUserID    = refer.ID;
                                    nthLevel.AddedOn             = DateTime.Now;
                                    nthLevel.ComissionAmount     = comissionAmount;
                                    nthLevel.ComissionPercentage = firstLevel.Percentage;
                                    context.SalesComissionNthLevels.Add(nthLevel);
                                    context.SaveChanges();

                                    var referenceID = context.SalesComissionNthLevels.OrderByDescending(x => x.ID).FirstOrDefault().ID;
                                    Utils.AddEntryInCustomerLedger(refer.ID, comissionAmount.Value, referenceID, Utils.AdjustmentType.DebitAdjustment, String.Empty);

                                    var admins = context.UserDetails.Where(x => x.IsActive && x.UserType.ToLower().Contains("admin")).ToList();

                                    foreach (var admin in admins)
                                    {
                                        var adminComm = new SalesComissionNthLevel();

                                        var refCommAmount = (admin.PercentageOfSale.HasValue ? admin.PercentageOfSale.Value : 0) * (totalPrice / 100);
                                        adminComm.IsActive            = true;
                                        adminComm.IsCheckOut          = false;
                                        adminComm.UserSaleID          = userSale.ID;
                                        adminComm.BeneficierUserID    = admin.ID;
                                        adminComm.AddedOn             = DateTime.Now;
                                        adminComm.ComissionAmount     = refCommAmount;
                                        adminComm.ComissionPercentage = admin.PercentageOfSale;
                                        context.SalesComissionNthLevels.Add(adminComm);
                                        context.SaveChanges();

                                        var adminReferenceID = context.SalesComissionNthLevels.OrderByDescending(x => x.ID).FirstOrDefault().ID;
                                        Utils.AddEntryInCustomerLedger(admin.ID, refCommAmount.Value, adminReferenceID, Utils.AdjustmentType.DebitAdjustment, String.Empty);
                                    }



                                    if (refer.ReferrerID.HasValue)
                                    {
                                        var lastReffererID = refer.ReferrerID.Value;
                                        int index          = 2;

                                        do
                                        {
                                            var referrer = context.UserDetails.Where(x => x.ID == lastReffererID && x.IsActive).FirstOrDefault();

                                            if (referrer != null)
                                            {
                                                var referrerNthLevel = context.UserNthLevels.Where(x => x.UserID == objUser.ID && x.LevelNumber == index).FirstOrDefault();

                                                if (referrerNthLevel != null)
                                                {
                                                    var referrerComm = new SalesComissionNthLevel();

                                                    var refCommAmount = referrerNthLevel.Percentage * (totalPrice / 100);
                                                    referrerComm.IsActive            = true;
                                                    referrerComm.IsCheckOut          = false;
                                                    referrerComm.UserSaleID          = userSale.ID;
                                                    referrerComm.BeneficierUserID    = referrer.ID;
                                                    referrerComm.AddedOn             = DateTime.Now;
                                                    referrerComm.ComissionAmount     = refCommAmount;
                                                    referrerComm.ComissionPercentage = referrerNthLevel.Percentage;
                                                    context.SalesComissionNthLevels.Add(referrerComm);
                                                    context.SaveChanges();

                                                    var scReferenceID = context.SalesComissionNthLevels.OrderByDescending(x => x.ID).FirstOrDefault().ID;
                                                    Utils.AddEntryInCustomerLedger(referrer.ID, refCommAmount.Value, scReferenceID, Utils.AdjustmentType.DebitAdjustment, String.Empty);
                                                }

                                                lastReffererID = referrer.ReferrerID.HasValue ? referrer.ReferrerID.Value : 0;

                                                if (!referrer.ReferrerID.HasValue)
                                                {
                                                    break;
                                                }
                                            }

                                            index++;
                                        }while (index < 15);
                                    }
                                }

                                var desc = "Dear super admin, \n\r Please add a number of " + txtQuantity.Text + " " + ddlProduct.SelectedItem.Text + " on my account.";
                                var req  = new UserRequest();
                                req.RequestByUserID    = Utils.GetUserData().ID;
                                req.RequestTitle       = "Add Product";
                                req.RequestDescription = desc;
                                req.RequestType        = "User";
                                req.CreatedOn          = DateTime.Now;
                                req.Status             = "Approved";
                                req.TransactionID      = txtTransactionID.Text;
                                req.ProductID          = int.Parse(ddlProduct.SelectedValue);
                                req.Quantity           = int.Parse(txtQuantity.Text);

                                context.UserRequests.Add(req);
                                context.SaveChanges();
                            }
                        }
                    }

                    var levels = context.UserNthLevels.Where(x => x.UserID == userID).ToList();
                    rptLevels.DataSource = levels;
                    rptLevels.DataBind();
                    Session["MemberLevels"] = levels;
                    lblLevel.Text           = (rptLevels.Items.Count + 1).ToString();
                    divLevels.Visible       = true;
                    divAddMember.Visible    = false;
                    Utils.ShowAlert(this, "Success", "User added successfully. Please adjust commission levels.", true);
                }

                else
                {
                    Utils.ShowAlert(this, "Error", "Referrer not found. Please enter a valid referrer.", false);
                }
            }

            else
            {
                Utils.ShowAlert(this, "Error", "User already exists.", false);
            }
        }
        catch (Exception ex)
        {
            Utils.ShowAlert(this, "Error", ex.Message, false);
        }
    }
Example #2
0
    protected void btnAddProduct_Click(object sender, EventArgs e)
    {
        try
        {
            var context   = MyDBContext;
            var productID = int.Parse(ddlProduct.SelectedValue);
            var up        = new UserProduct();
            int userID    = int.Parse(hdnUserID.Value);
            var objUser   = context.UserDetails.Where(x => x.ID == userID).FirstOrDefault();

            if (objUser != null)
            {
                var refer = context.UserDetails.Where(x => x.ID == objUser.ReferrerID).ToList().FirstOrDefault();
                up.Quantity  = int.Parse(txtQuantity.Text);
                up.UserID    = userID;
                up.ProductID = int.Parse(ddlProduct.SelectedValue);
                up.IsActive  = true;
                up.CreatedBy = Utils.GetUserName();
                up.CreatedOn = DateTime.Now;

                context.UserProducts.Add(up);
                context.SaveChanges();

                var product = context.Products.Where(x => x.ID == productID).FirstOrDefault();

                if (product != null)
                {
                    var firstLevel = context.UserNthLevels.Where(x => x.UserID == refer.ID && x.LevelNumber == 1).FirstOrDefault();

                    if (firstLevel != null)
                    {
                        //var count = context.UserSales.Where(x => x.AddedOn.Value.Date == DateTime.Now.Date).ToList().Count();
                        var totalPrice      = product.FinalSalePrice * int.Parse(txtQuantity.Text);
                        var comissionAmount = firstLevel.Percentage * (totalPrice / 100);
                        var us = new UserSale();

                        // count++;
                        us.UserID              = refer.ID;
                        us.ReferredUserID      = userID;
                        us.Quantity            = int.Parse(txtQuantity.Text);
                        us.ProductPrice        = product.FinalSalePrice;
                        us.SaleProductID       = product.ID;
                        us.ComissionPercentage = firstLevel.Percentage;
                        us.ComissionAmount     = comissionAmount;
                        us.TotalPrice          = product.FinalSalePrice * int.Parse(txtQuantity.Text);
                        us.IsActive            = true;
                        us.AddedOn             = DateTime.Now;
                        us.SalesNo             = DateTime.Now.ToString("yyyyMMddhhmmss");// + "-" + count.ToString();

                        context.UserSales.Add(us);
                        context.SaveChanges();

                        var userSale = context.UserSales.OrderByDescending(x => x.ID).FirstOrDefault();
                        var nthLevel = new SalesComissionNthLevel();

                        nthLevel.IsActive            = true;
                        nthLevel.IsCheckOut          = false;
                        nthLevel.UserSaleID          = userSale.ID;
                        nthLevel.BeneficierUserID    = userID;
                        nthLevel.AddedOn             = DateTime.Now;
                        nthLevel.ComissionAmount     = comissionAmount;
                        nthLevel.ComissionPercentage = firstLevel.Percentage;
                        context.SalesComissionNthLevels.Add(nthLevel);
                        context.SaveChanges();

                        var refID = context.SalesComissionNthLevels.OrderByDescending(x => x.ID).FirstOrDefault().ID;
                        Utils.AddEntryInCustomerLedger(userID, comissionAmount.Value, refID, Utils.AdjustmentType.DebitAdjustment, String.Empty);


                        var admins = context.UserDetails.Where(x => x.IsActive && x.UserType.ToLower().Contains("admin")).ToList();

                        foreach (var admin in admins)
                        {
                            var adminComm = new SalesComissionNthLevel();

                            var refCommAmount = (admin.PercentageOfSale.HasValue ? admin.PercentageOfSale : 0) * (totalPrice / 100);
                            adminComm.IsActive            = true;
                            adminComm.IsCheckOut          = false;
                            adminComm.UserSaleID          = userSale.ID;
                            adminComm.BeneficierUserID    = admin.ID;
                            adminComm.AddedOn             = DateTime.Now;
                            adminComm.ComissionAmount     = refCommAmount;
                            adminComm.ComissionPercentage = admin.PercentageOfSale;
                            context.SalesComissionNthLevels.Add(adminComm);
                            context.SaveChanges();

                            var adminRefID = context.SalesComissionNthLevels.OrderByDescending(x => x.ID).FirstOrDefault().ID;
                            Utils.AddEntryInCustomerLedger(admin.ID, refCommAmount.Value, adminRefID, Utils.AdjustmentType.DebitAdjustment, String.Empty);
                        }



                        if (refer.ReferrerID.HasValue)
                        {
                            var lastReffererID = refer.ReferrerID.Value;
                            int index          = 2;

                            do
                            {
                                var referrer = context.UserDetails.Where(x => x.ID == lastReffererID && x.IsActive).FirstOrDefault();

                                if (referrer != null)
                                {
                                    var referrerNthLevel = context.UserNthLevels.Where(x => x.UserID == referrer.ID && x.LevelNumber == index).FirstOrDefault();

                                    if (referrerNthLevel != null)
                                    {
                                        var referrerComm = new SalesComissionNthLevel();

                                        var refCommAmount = referrerNthLevel.Percentage * (totalPrice / 100);
                                        referrerComm.IsActive            = true;
                                        referrerComm.IsCheckOut          = false;
                                        referrerComm.UserSaleID          = userSale.ID;
                                        referrerComm.BeneficierUserID    = referrer.ID;
                                        referrerComm.AddedOn             = DateTime.Now;
                                        referrerComm.ComissionAmount     = refCommAmount;
                                        referrerComm.ComissionPercentage = referrerNthLevel.Percentage;
                                        context.SalesComissionNthLevels.Add(referrerComm);
                                        context.SaveChanges();

                                        var referrerComID = context.SalesComissionNthLevels.OrderByDescending(x => x.ID).FirstOrDefault().ID;
                                        Utils.AddEntryInCustomerLedger(referrer.ID, refCommAmount.Value, referrerComID, Utils.AdjustmentType.DebitAdjustment, String.Empty);
                                    }

                                    lastReffererID = referrer.ReferrerID.HasValue ? referrer.ReferrerID.Value : 0;

                                    if (!referrer.ReferrerID.HasValue)
                                    {
                                        break;
                                    }
                                }

                                index++;
                            }while (index < 15);
                        }
                    }

                    Utils.ShowAlert(this, "Product added successfully.");
                }
            }
        }
        catch (Exception ex)
        {
            Utils.ShowAlert(this, "Error", ex.Message, false);
        }
    }
Example #3
0
    protected void btnApproveRegistration_Click(object sender, EventArgs e)
    {
        try
        {
            GridViewRow gvr     = ((Button)sender).NamingContainer as GridViewRow;
            var         id      = int.Parse((gvr.FindControl("hdnID") as HiddenField).Value);
            var         context = MyDBContext;

            var objUser   = context.UserDetails.Where(x => x.ID == id).FirstOrDefault();
            var refer     = context.UserDetails.Where(x => x.ID == objUser.ReferrerID).ToList().FirstOrDefault();
            var up        = objUser.UserProducts.FirstOrDefault();
            var productID = up.ProductID;
            var product   = context.Products.Where(x => x.ID == productID).FirstOrDefault();

            AssignDefaultPages(objUser.ID);

            if (product != null)
            {
                var productNth = context.ProductLevels.Where(x => x.ProductID == product.ID).OrderBy(x => x.LevelNumber).ToList();

                foreach (var p in productNth)
                {
                    var userNth = new UserNthLevel();
                    userNth.IsActive    = true;
                    userNth.LevelNumber = p.LevelNumber;
                    userNth.Percentage  = p.Percentage;
                    userNth.CreatedBy   = Utils.GetUserName();
                    userNth.TimeStamp   = DateTime.Now;
                    userNth.UserID      = objUser.ID;
                    context.UserNthLevels.Add(userNth);
                }

                context.SaveChanges();

                var ur = context.UserRequests.Where(x => x.ID == objUser.ID && x.Status.ToLower() == "pending").FirstOrDefault();

                if (ur != null)
                {
                    ur.Status = "Approved";
                    context.SaveChanges();
                }

                var firstLevel = context.UserNthLevels.Where(x => x.UserID == refer.ID && x.LevelNumber == 1).FirstOrDefault();

                if (firstLevel != null)
                {
                    //var count = context.UserSales.Where(x => x.AddedOn.Value.Date == DateTime.Now.Date).ToList().Count();
                    var totalPrice      = product.FinalSalePrice * up.Quantity;
                    var comissionAmount = firstLevel.Percentage * (totalPrice / 100);
                    var us = new UserSale();

                    // count++;
                    us.UserID              = refer.ID;
                    us.ReferredUserID      = objUser.ID;
                    us.Quantity            = up.Quantity;
                    us.ProductPrice        = product.FinalSalePrice;
                    us.SaleProductID       = product.ID;
                    us.ComissionPercentage = firstLevel.Percentage;
                    us.ComissionAmount     = comissionAmount;
                    us.TotalPrice          = product.FinalSalePrice * up.Quantity;
                    us.IsActive            = true;
                    us.AddedOn             = DateTime.Now;
                    us.SalesNo             = DateTime.Now.ToString("yyyyMMddhhmmss");// + "-" + count.ToString();

                    context.UserSales.Add(us);
                    context.SaveChanges();

                    var userSale = context.UserSales.OrderByDescending(x => x.ID).FirstOrDefault();
                    var nthLevel = new SalesComissionNthLevel();

                    nthLevel.IsActive            = true;
                    nthLevel.IsCheckOut          = false;
                    nthLevel.UserSaleID          = userSale.ID;
                    nthLevel.BeneficierUserID    = refer.ID;
                    nthLevel.AddedOn             = DateTime.Now;
                    nthLevel.ComissionAmount     = comissionAmount;
                    nthLevel.ComissionPercentage = firstLevel.Percentage;
                    context.SalesComissionNthLevels.Add(nthLevel);
                    context.SaveChanges();

                    var referenceID = context.SalesComissionNthLevels.OrderByDescending(x => x.ID).FirstOrDefault().ID;
                    Utils.AddEntryInCustomerLedger(refer.ID, comissionAmount.Value, referenceID, Utils.AdjustmentType.DebitAdjustment, String.Empty);

                    var admins = context.UserDetails.Where(x => x.IsActive && x.UserType.ToLower().Contains("admin")).ToList();

                    foreach (var admin in admins)
                    {
                        var adminComm = new SalesComissionNthLevel();

                        var refCommAmount = (admin.PercentageOfSale.HasValue ? admin.PercentageOfSale.Value : 0) * (totalPrice / 100);
                        adminComm.IsActive            = true;
                        adminComm.IsCheckOut          = false;
                        adminComm.UserSaleID          = userSale.ID;
                        adminComm.BeneficierUserID    = admin.ID;
                        adminComm.AddedOn             = DateTime.Now;
                        adminComm.ComissionAmount     = refCommAmount;
                        adminComm.ComissionPercentage = admin.PercentageOfSale;
                        context.SalesComissionNthLevels.Add(adminComm);
                        context.SaveChanges();

                        var adminReferenceID = context.SalesComissionNthLevels.OrderByDescending(x => x.ID).FirstOrDefault().ID;
                        Utils.AddEntryInCustomerLedger(admin.ID, refCommAmount.Value, adminReferenceID, Utils.AdjustmentType.DebitAdjustment, String.Empty);
                    }

                    if (refer.ReferrerID.HasValue)
                    {
                        var lastReffererID = refer.ReferrerID.Value;
                        int index          = 2;

                        do
                        {
                            var referrer = context.UserDetails.Where(x => x.ID == lastReffererID && x.IsActive).FirstOrDefault();

                            if (referrer != null)
                            {
                                var referrerNthLevel = context.UserNthLevels.Where(x => x.UserID == referrer.ID && x.LevelNumber == index).FirstOrDefault();

                                if (referrerNthLevel != null)
                                {
                                    var referrerComm = new SalesComissionNthLevel();

                                    var refCommAmount = referrerNthLevel.Percentage * (totalPrice / 100);
                                    referrerComm.IsActive            = true;
                                    referrerComm.IsCheckOut          = false;
                                    referrerComm.UserSaleID          = userSale.ID;
                                    referrerComm.BeneficierUserID    = referrer.ID;
                                    referrerComm.AddedOn             = DateTime.Now;
                                    referrerComm.ComissionAmount     = refCommAmount;
                                    referrerComm.ComissionPercentage = referrerNthLevel.Percentage;
                                    context.SalesComissionNthLevels.Add(referrerComm);
                                    context.SaveChanges();

                                    var scReferenceID = context.SalesComissionNthLevels.OrderByDescending(x => x.ID).FirstOrDefault().ID;
                                    Utils.AddEntryInCustomerLedger(referrer.ID, refCommAmount.Value, scReferenceID, Utils.AdjustmentType.DebitAdjustment, String.Empty);
                                }

                                lastReffererID = referrer.ReferrerID.HasValue ? referrer.ReferrerID.Value : 0;

                                if (!referrer.ReferrerID.HasValue)
                                {
                                    break;
                                }
                            }

                            index++;
                        }while (index < 15);
                    }
                }


                objUser.IsActive = true;
                up.IsActive      = true;
                context.SaveChanges();
                LoadData();
                Utils.ShowAlert(this, "Success", "Approved successfully", true);
            }
        }
        catch (Exception ex)
        {
            Utils.ShowAlert(this, "Error", ex.Message, false);
        }
    }
    private void ApproveProductRequest(int ID)
    {
        ScentaurusEntities2 context = MyDBContext;

        UserRequest userRequest = context.UserRequests.FirstOrDefault(x => x.ID == ID);

        if (userRequest != null && userRequest.ProductID != null)
        {
            int?        productID = userRequest.ProductID;
            UserDetail  objUser   = context.UserDetails.Where(x => x.Username.ToLower() == userRequest.UserDetail.Username.ToLower()).OrderByDescending(x => x.ID).FirstOrDefault();
            int         userID    = userRequest.RequestByUserID;
            UserDetail  refer     = context.UserDetails.Where(x => x.ID == objUser.ReferrerID).ToList().FirstOrDefault();
            UserProduct up        = new UserProduct();

            userID       = objUser.ID;
            up.Quantity  = userRequest.Quantity;
            up.UserID    = objUser.ID;
            up.ProductID = productID;
            up.IsActive  = true;
            up.CreatedBy = Utils.GetUserName();
            up.CreatedOn = DateTime.Now;

            context.UserProducts.Add(up);
            context.SaveChanges();

            Product product = context.Products.Where(x => x.ID == productID).FirstOrDefault();

            if (product != null)
            {
                List <ProductLevel> productNth = context.ProductLevels.Where(x => x.ProductID == product.ID).OrderBy(x => x.LevelNumber).ToList();

                foreach (ProductLevel p in productNth)
                {
                    UserNthLevel userNth = new UserNthLevel
                    {
                        IsActive    = true,
                        LevelNumber = p.LevelNumber,
                        Percentage  = p.Percentage,
                        CreatedBy   = Utils.GetUserName(),
                        TimeStamp   = DateTime.Now,
                        UserID      = objUser.ID
                    };
                    context.UserNthLevels.Add(userNth);
                }

                context.SaveChanges();

                UserNthLevel firstLevel = context.UserNthLevels.Where(x => x.UserID == objUser.ID && x.LevelNumber == 1).FirstOrDefault();

                if (firstLevel != null)
                {
                    decimal? totalPrice      = product.FinalSalePrice * userRequest.Quantity;
                    decimal? comissionAmount = firstLevel.Percentage * (totalPrice / 100);
                    UserSale us = new UserSale
                    {
                        // count++;
                        UserID              = refer.ID,
                        ReferredUserID      = objUser.ID,
                        Quantity            = userRequest.Quantity,
                        ProductPrice        = product.FinalSalePrice,
                        SaleProductID       = product.ID,
                        ComissionPercentage = firstLevel.Percentage,
                        ComissionAmount     = comissionAmount,
                        TotalPrice          = product.FinalSalePrice * userRequest.Quantity,
                        IsActive            = true,
                        AddedOn             = DateTime.Now,
                        SalesNo             = DateTime.Now.ToString("yyyyMMddhhmmss")// + "-" + count.ToString();
                    };

                    context.UserSales.Add(us);
                    context.SaveChanges();

                    UserSale userSale = context.UserSales.OrderByDescending(x => x.ID).FirstOrDefault();
                    SalesComissionNthLevel nthLevel = new SalesComissionNthLevel
                    {
                        IsActive            = true,
                        IsCheckOut          = false,
                        UserSaleID          = userSale.ID,
                        BeneficierUserID    = refer.ID,
                        AddedOn             = DateTime.Now,
                        ComissionAmount     = comissionAmount,
                        ComissionPercentage = firstLevel.Percentage
                    };
                    context.SalesComissionNthLevels.Add(nthLevel);
                    context.SaveChanges();

                    int referenceID = context.SalesComissionNthLevels.OrderByDescending(x => x.ID).FirstOrDefault().ID;
                    Utils.AddEntryInCustomerLedger(refer.ID, comissionAmount.Value, referenceID, Utils.AdjustmentType.DebitAdjustment, string.Empty);

                    List <UserDetail> admins = context.UserDetails.Where(x => x.IsActive && x.UserType.ToLower().Contains("admin")).ToList();

                    foreach (UserDetail admin in admins)
                    {
                        SalesComissionNthLevel adminComm = new SalesComissionNthLevel();

                        decimal?refCommAmount = (admin.PercentageOfSale.HasValue ? admin.PercentageOfSale.Value : 0) * (totalPrice / 100);
                        adminComm.IsActive            = true;
                        adminComm.IsCheckOut          = false;
                        adminComm.UserSaleID          = userSale.ID;
                        adminComm.BeneficierUserID    = admin.ID;
                        adminComm.AddedOn             = DateTime.Now;
                        adminComm.ComissionAmount     = refCommAmount;
                        adminComm.ComissionPercentage = admin.PercentageOfSale;
                        context.SalesComissionNthLevels.Add(adminComm);
                        context.SaveChanges();

                        int adminReferenceID = context.SalesComissionNthLevels.OrderByDescending(x => x.ID).FirstOrDefault().ID;
                        Utils.AddEntryInCustomerLedger(admin.ID, refCommAmount.Value, adminReferenceID, Utils.AdjustmentType.DebitAdjustment, string.Empty);
                    }



                    if (refer.ReferrerID.HasValue)
                    {
                        int lastReffererID = refer.ReferrerID.Value;
                        int index          = 2;

                        do
                        {
                            UserDetail referrer = context.UserDetails.Where(x => x.ID == lastReffererID && x.IsActive).FirstOrDefault();

                            if (referrer != null)
                            {
                                UserNthLevel referrerNthLevel = context.UserNthLevels.Where(x => x.UserID == objUser.ID && x.LevelNumber == index).FirstOrDefault();

                                if (referrerNthLevel != null)
                                {
                                    SalesComissionNthLevel referrerComm = new SalesComissionNthLevel();

                                    decimal?refCommAmount = referrerNthLevel.Percentage * (totalPrice / 100);
                                    referrerComm.IsActive            = true;
                                    referrerComm.IsCheckOut          = false;
                                    referrerComm.UserSaleID          = userSale.ID;
                                    referrerComm.BeneficierUserID    = referrer.ID;
                                    referrerComm.AddedOn             = DateTime.Now;
                                    referrerComm.ComissionAmount     = refCommAmount;
                                    referrerComm.ComissionPercentage = referrerNthLevel.Percentage;
                                    context.SalesComissionNthLevels.Add(referrerComm);
                                    context.SaveChanges();

                                    int scReferenceID = context.SalesComissionNthLevels.OrderByDescending(x => x.ID).FirstOrDefault().ID;
                                    Utils.AddEntryInCustomerLedger(referrer.ID, refCommAmount.Value, scReferenceID, Utils.AdjustmentType.DebitAdjustment, string.Empty);
                                }

                                lastReffererID = referrer.ReferrerID.HasValue ? referrer.ReferrerID.Value : 0;

                                if (!referrer.ReferrerID.HasValue)
                                {
                                    break;
                                }
                            }

                            index++;
                        }while (index < 15);
                    }
                }

                context.SaveChanges();
            }
        }
    }