public ActionResult Remove(EmployeeSetupWithRolesModel m, string command)
        {
            var dbcontext = new SemplestModel.Semplest();

            if (command.ToLower() == "cancel") return RedirectToAction("Index");
            if (command.ToLower() == "delete") {

                try
                { 

                var user = dbcontext.Users.ToList().Find(p => p.UserPK == m.EmployeeSetup.UserPK);
                
                //need to add effective date to db ---><><>

                var employee = dbcontext.Employees.ToList().Find(p => p.UsersFK == m.EmployeeSetup.UserPK);
                
                var userrolesassociation = dbcontext.UserRolesAssociations.ToList().Find(p => p.UsersFK == m.EmployeeSetup.UserPK);

                var credential = dbcontext.Credentials.ToList().Find(p => p.UsersFK == m.EmployeeSetup.UserPK);


                var employeecustomerassociation = dbcontext.EmployeeCustomerAssociations.ToList().Find(p => p.EmployeeFK.Equals(m.EmployeeSetup.UserPK));

                if (employeecustomerassociation != null) throw new Exception("Could not delete employee");

                dbcontext.Users.Remove(user);
                dbcontext.Employees.Remove(employee);
                dbcontext.UserRolesAssociations.Remove(userrolesassociation);
                dbcontext.Credentials.Remove(credential);

                dbcontext.SaveChanges();
                TempData["message"] = "Employee " + m.EmployeeSetup.FirstName + " " + m.EmployeeSetup.LastName + " has been successfully deleted.";
                }
                
                catch(Exception ex)
                {
                    TempData["message"] = "Employee " + m.EmployeeSetup.FirstName + " " + m.EmployeeSetup.LastName + " could NOT be deleted."; 
                }



            }
            //return View();
            return RedirectToAction("Index");
        }
        public ActionResult Add(EmployeeSetupWithRolesModel m, string command)
        {

            if (command.ToLower() == "cancel") return RedirectToAction("Index");

            SemplestModel.Semplest dbcontext = new SemplestModel.Semplest();


            //check if userid has been taken by other users

                  var userIDSs = from c in dbcontext.Credentials
                        where c.Username.Equals(m.EmployeeSetup.UserID) //&& !c.UsersFK.Equals(m.EmployeeSetup.UserPK)
                        select c;
                  if (userIDSs.Count() > 0)
                      ModelState.AddModelError("EmployeeSetup.UserID", "This UserID is already taken!!");


                  if (!ModelState.IsValid)
                  {
                      //repopulate 


                      var roles = (from r in dbcontext.Roles select r).ToList().OrderBy(r => r.RoleName);
                      
                      m.Roles = roles.Select(r => new SelectListItem
                      {
                          Value = r.RolePK.ToString(),
                          Text = r.RoleName.ToString()
                      });



                      /////////////////////////////////////////////////////////////////////////////////
                      //for Reportingto dropdown
                      /////////////////////////////////////////////////////////////////////////////////
                      var reportingto = (
                          from e in dbcontext.Employees
                          join u in dbcontext.Users on e.UsersFK equals u.UserPK
                          where u.IsActive.Equals(true)
                          select new ReportingToModel
                          {
                              EmployeePK = e.EmployeePK,
                              FirstName = u.FirstName,
                              LastName = u.LastName
                          }
                          ).ToList().OrderBy(r => r.LastName).ThenBy(r => r.FirstName);
                      



                      //to add exception to dropdownlist - it can be optional, in this case the employee reporting to may be optional
                      List<SelectListItem> sli = new List<SelectListItem>();
                      sli.Add(new SelectListItem { Value = (-1).ToString(), Text = "«« Not Assigned »»" });


                      m.ReportingTo = reportingto.Select(r => new SelectListItem
                      {
                          Value = r.EmployeePK.ToString(),
                          Text = r.FirstName.ToString() + " " + r.LastName.ToString()
                      }).Union(sli);



                      /////////////////////////////////////////////////////////////////////////////////
                      // for employeetype dropdown
                      /////////////////////////////////////////////////////////////////////////////////
                      var employeetypes = (from r in dbcontext.EmployeeTypes select r).ToList();
                      m.EmployeeTypes = employeetypes.Select(r => new SelectListItem
                      {
                          Value = r.EmployeeTypeID.ToString(),
                          Text = r.EmployeeType1.ToString()
                      });


                      return View(m);
                  }


            try
            {

                var u = new User
                            {
                                Customer = null,
                                Email = m.EmployeeSetup.Email,
                                FirstName = m.EmployeeSetup.FirstName,
                                MiddleInitial = m.EmployeeSetup.MiddleInitial,
                                LastName = m.EmployeeSetup.LastName,
                                CustomerFK = null,
                                IsActive = m.EmployeeSetup.isActive,
                                IsRegistered = true //only for admin, force registered=true (Andre)

                            };
                dbcontext.Users.Add(u);
                

                var r= dbcontext.Roles.First(p => p.RolePK   == m.SelectedRoleID );
                var ura = new UserRolesAssociation {Role = r, User = u};
                dbcontext.UserRolesAssociations.Add(ura);

                var et = dbcontext.EmployeeTypes.First(p => p.EmployeeTypeID == m.SelectedEmployeeTypeID);
                var e = new Employee {EmployeeType = et, User = u, HireDate = m.EmployeeSetup.HireDate};
                dbcontext.Employees.Add(e);
                //Credential c = dbcontext.Credentials.Add(new Credential { User = u, Username = m.EmployeeSetup.Email, Password = "******" });

                var cr = new Credential
                             {
                                 User = u,
                                 UsersFK = u.UserPK,
                                 Username = m.EmployeeSetup.UserID,
                                 Password = m.EmployeeSetup.UserPassword
                             };
                dbcontext.Credentials.Add(cr); 


                //BillType bt = dbcontext.BillTypes.First(p => p.BillType1 == "Flat Fee"); // --- feees --- !!!

                //ProductGroupCycleType pgct = dbcontext.ProductGroupCycleTypes.First(p => p.ProductGroupCycleType1 == "Product Group Cycle 30");

                //Customer c = dbcontext.Customers.Add(new Customer { Name = m.CustomerAccount.Customer, BillType = bt, ProductGroupCycleType = pgct });
                //User u = dbcontext.Users.Add(new User
                //{
                //    Customer = c,
                //    Email = m.CustomerAccount.Email,
                //    FirstName = m.CustomerAccount.FirstName,
                //    LastName = m.CustomerAccount.LastName
                //});

                //Credential cr = dbcontext.Credentials.Add(new Credential { User = u, UsersFK = u.UserPK, Username = m.CustomerAccount.Email, Password = "******" }); //-- default password --- !!

                //PhoneType pt = dbcontext.PhoneTypes.First(p => p.PhoneType1 == "Business"); // --- phone types --- !!!!
                //Phone ph = dbcontext.Phones.Add(new Phone { Phone1 = m.CustomerAccount.Phone, PhoneType = pt });
                //CustomerPhoneAssociation cpa = dbcontext.CustomerPhoneAssociations.Add(new CustomerPhoneAssociation { Customer = c, Phone = ph });

                //StateCode sc = dbcontext.StateCodes.First(p => p.StateAbbrPK == m.SelectedStateID);
                //AddressType at = dbcontext.AddressTypes.First(p => p.AddressType1 == "H"); // --- address types --- !!!
                //Address a = dbcontext.Addresses.Add(new Address { Address1 = m.CustomerAccount.Address1, Address2 = m.CustomerAccount.Address2, City = m.CustomerAccount.City, ZipCode = m.CustomerAccount.Zip, StateCode = sc });
                //CustomerAddressAssociation caa = dbcontext.CustomerAddressAssociations.Add(new CustomerAddressAssociation { Address = a, Customer = c, AddressType = at });


                dbcontext.SaveChanges();

            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.TargetSite);
            }


            return RedirectToAction("Index");
        }
        public ActionResult Remove(int id)
        {

            SemplestModel.Semplest dbcontext = new SemplestModel.Semplest();

            var viewModel =
              from e in dbcontext.Employees
              join u in dbcontext.Users on e.UsersFK equals u.UserPK
              join et in dbcontext.EmployeeTypes on e.EmployeeTypeFK equals et.EmployeeTypeID
              join ura in dbcontext.UserRolesAssociations on e.UsersFK equals ura.UsersFK
              join r in dbcontext.Roles on ura.RolesFK equals r.RolePK
              where e.EmployeePK.Equals(id)
              select new EmployeeSetup
              {
                  EmployeePK = e.EmployeePK,
                  EmployeeTypeFK = e.EmployeeTypeFK,
                  EmployeeTypeID = et.EmployeeTypeID,
                  RolesFK = ura.RolesFK,
                  UserPK = u.UserPK,
                  EmployeeType = e.EmployeeType.EmployeeType1,
                  FirstName = u.FirstName,
                  MiddleInitial = u.MiddleInitial,
                  LastName = u.LastName,
                  RoleName = r.RoleName,
                  Email = u.Email,
                  ReportingTo = (e.ReportingTo == null ? -1 : e.ReportingTo.Value),
                  HireDate = e.HireDate,
                  isActive = u.IsActive
              };

            EmployeeSetupWithRolesModel x = new EmployeeSetupWithRolesModel();
            x.EmployeeSetup = viewModel.FirstOrDefault();
            

            return PartialView(x);
            //return RedirectToAction("Index");
        }
        public ActionResult Edit(EmployeeSetupWithRolesModel m, string command)
        {
            if (command.ToLower() == "cancel") return RedirectToAction("Index");

            if (command.ToLower() == "delete") return RedirectToAction("delete", new { id = m.EmployeeSetup.EmployeePK });

            //for cancel redirect to index

            //for delete
            //@Html.RouteLink("Remove Employee", new { Controller = "EmployeeSetup", action = "Remove", id = Model.EmployeeSetup.EmployeePK })

            SemplestModel.Semplest dbcontext = new SemplestModel.Semplest();


            //check if userid has been taken by other users

                  var userIDSs = from c in dbcontext.Credentials
                        where c.Username.Equals(m.EmployeeSetup.UserID) && !c.UsersFK.Equals(m.EmployeeSetup.UserPK)
                        select c;
                  if (userIDSs.Count() > 0)
                      ModelState.AddModelError("EmployeeSetup.UserID", "This UserID is already taken!!");


                  if (!ModelState.IsValid)
                  {
                      //repopulate 

                      /////////////////////////////////////////////////////////////////////////////////
                      //for roles dropdown
                      /////////////////////////////////////////////////////////////////////////////////
                      var roles = (from r in dbcontext.Roles select r).ToList().OrderBy(r => r.RoleName);

                      m.Roles = roles.Select(r => new SelectListItem
                      {
                          Value = r.RolePK.ToString(),
                          Text = r.RoleName.ToString()
                      });


                      /////////////////////////////////////////////////////////////////////////////////
                      //for Reportingto dropdown
                      /////////////////////////////////////////////////////////////////////////////////
                      var reportingto = (
                          from e in dbcontext.Employees
                          join u in dbcontext.Users on e.UsersFK equals u.UserPK
                          where u.IsActive.Equals(true)
                          select new ReportingToModel
                          {
                              EmployeePK = e.EmployeePK,
                              FirstName = u.FirstName,
                              LastName = u.LastName
                          }
                          ).ToList().OrderBy(r => r.LastName).ThenBy(r => r.FirstName);



                      //to add exception to dropdownlist - it can be optional, in this case the employee reporting to may be optional
                      List<SelectListItem> sli = new List<SelectListItem>();
                      sli.Add(new SelectListItem { Value = (-1).ToString(), Text = "Not Assigned" });


                      m.ReportingTo = reportingto.Select(r => new SelectListItem
                      {
                          Value = r.EmployeePK.ToString(),
                          Text = r.FirstName.ToString() + " " + r.LastName.ToString()
                      }).Union(sli);

                      /////////////////////////////////////////////////////////////////////////////////
                      // for employeetype dropdown
                      /////////////////////////////////////////////////////////////////////////////////
                      var employeetypes = (from r in dbcontext.EmployeeTypes select r).ToList();

                      m.EmployeeTypes = employeetypes.Select(r => new SelectListItem
                      {
                          Value = r.EmployeeTypeID.ToString(),
                          Text = r.EmployeeType1.ToString()
                      });

                      return View(m);
                  }
            
            var user = dbcontext.Users.ToList().Find(p => p.UserPK == m.EmployeeSetup.UserPK);
            user.FirstName = m.EmployeeSetup.FirstName;
            user.MiddleInitial = m.EmployeeSetup.MiddleInitial;
            user.LastName = m.EmployeeSetup.LastName;
            user.Email = m.EmployeeSetup.Email;
            user.EditedDate = DateTime.Now;
            user.IsActive = m.EmployeeSetup.isActive;
            UpdateModel(user);
            //need to add effective date to db ---><><>

            var employee = dbcontext.Employees.ToList().Find(p => p.UsersFK == m.EmployeeSetup.UserPK);
            employee.EmployeeTypeFK = m.SelectedEmployeeTypeID;
            employee.ReportingTo = m.SelectedReportingToID == -1 ?  default(int?) : m.SelectedReportingToID;
            employee.HireDate = m.EmployeeSetup.HireDate;
            UpdateModel(employee);

            var userrolesassociation = dbcontext.UserRolesAssociations.ToList().Find(p => p.UsersFK == m.EmployeeSetup.UserPK);
            userrolesassociation.RolesFK = m.SelectedRoleID;
            UpdateModel(userrolesassociation);

            var credentials = dbcontext.Credentials.ToList().Find(p => p.UsersFK == m.EmployeeSetup.UserPK);
            credentials.Username = m.EmployeeSetup.UserID;
            credentials.Password = m.EmployeeSetup.UserPassword;

            UpdateModel(credentials);

            dbcontext.SaveChanges();


            ////repopulate states ddl
            //var states = (from sc in dbcontext.StateCodes select sc).ToList();
            //m.States = states.Select(r => new SelectListItem
            //{
            //    Value = r.StateAbbrPK.ToString(),
            //    Text = r.StateAbbr.ToString()
            //});


            ////repopulate reps ddl
            //var allreps = from e in dbcontext.Employees
            //              join eca in dbcontext.EmployeeCustomerAssociations on e.EmployeePK equals eca.EmployeeFK
            //              join et in dbcontext.EmployeeTypes on e.EmployeeTypeFK equals et.EmployeeTypeID
            //              join u in dbcontext.Users on e.UsersFK equals u.UserPK
            //              where (et.EmployeeType1 == "Rep")
            //              select new EmployeeCustomerAssociaitionModel
            //              {
            //                  AccountNumber = eca.CustomerFK,
            //                  employeePK = e.EmployeePK,
            //                  EmployeeType = et.EmployeeType1,
            //                  EmployeeUserPK = u.UserPK,
            //                  FirstName = u.FirstName,
            //                  LastName = u.LastName
            //              };
            //List<EmployeeCustomerAssociaitionModel> ll1 = allreps.ToList();
            //List<SelectListItem> sl1 = new List<SelectListItem>();
            //foreach (EmployeeCustomerAssociaitionModel s in ll1)
            //{
            //    SelectListItem mylistitem = new SelectListItem();
            //    mylistitem.Text = s.FirstName + " " + s.LastName;
            //    mylistitem.Value = s.EmployeeUserPK.ToString();
            //    sl1.Add(mylistitem);
            //}
            //m.Reps = sl1;

            ////repopulate salepersons ddl
            ////for reps dropdown
            //var allsalespersons = from e in dbcontext.Employees
            //                      join eca in dbcontext.EmployeeCustomerAssociations on e.EmployeePK equals eca.EmployeeFK
            //                      join et in dbcontext.EmployeeTypes on e.EmployeeTypeFK equals et.EmployeeTypeID
            //                      join u in dbcontext.Users on e.UsersFK equals u.UserPK
            //                      where (et.EmployeeType1 == "Sales")
            //                      select new EmployeeCustomerAssociaitionModel
            //                      {
            //                          AccountNumber = eca.CustomerFK,
            //                          employeePK = e.EmployeePK,
            //                          EmployeeType = et.EmployeeType1,
            //                          EmployeeUserPK = u.UserPK,
            //                          FirstName = u.FirstName,
            //                          LastName = u.LastName
            //                      };
            //List<EmployeeCustomerAssociaitionModel> ll2 = allsalespersons.ToList();
            //List<SelectListItem> sl2 = new List<SelectListItem>();
            //foreach (EmployeeCustomerAssociaitionModel s in ll2)
            //{
            //    SelectListItem mylistitem = new SelectListItem();
            //    mylistitem.Text = s.FirstName + " " + s.LastName;
            //    mylistitem.Value = s.EmployeeUserPK.ToString();
            //    sl2.Add(mylistitem);
            //}
            //m.SalesPersons = sl2;

            //return View("index");

            return RedirectToAction("Index"); 

        }
        public ActionResult Add()
        {
            SemplestModel.Semplest dbcontext = new SemplestModel.Semplest();
          

            EmployeeSetupWithRolesModel x = new EmployeeSetupWithRolesModel();
          

            /////////////////////////////////////////////////////////////////////////////////
            //for roles dropdown
            /////////////////////////////////////////////////////////////////////////////////
            var roles = (from r in dbcontext.Roles select r).ToList().OrderBy(r=>r.RoleName);
            x.SelectedRoleID = -1;
            x.Roles = roles.Select(r => new SelectListItem
            {
                Value = r.RolePK.ToString(),
                Text = r.RoleName.ToString()
            });


            /////////////////////////////////////////////////////////////////////////////////
            //for Reportingto dropdown
            /////////////////////////////////////////////////////////////////////////////////
            var reportingto = (
                from e in dbcontext.Employees
                join u in dbcontext.Users on e.UsersFK equals u.UserPK
                where u.IsActive.Equals(true)
                select new ReportingToModel
                {
                    EmployeePK = e.EmployeePK,
                    FirstName = u.FirstName,
                    LastName = u.LastName
                }
                ).ToList().OrderBy(r=>r.LastName).ThenBy(r=>r.FirstName);
            x.SelectedReportingToID = -1;


            //to add exception to dropdownlist - it can be optional, in this case the employee reporting to may be optional
            List<SelectListItem> sli = new List<SelectListItem>();
            sli.Add(new SelectListItem { Value = (-1).ToString(), Text = "«« Not Assigned »»" });


            x.ReportingTo = reportingto.Select(r => new SelectListItem
            {
                Value = r.EmployeePK.ToString(),
                Text = r.FirstName.ToString() + " " + r.LastName.ToString()
            }).Union(sli);

            /////////////////////////////////////////////////////////////////////////////////
            // for employeetype dropdown
            /////////////////////////////////////////////////////////////////////////////////
            var employeetypes = (from r in dbcontext.EmployeeTypes select r).ToList();
            x.SelectedEmployeeTypeID = -1; //viewModel.Select(r => r.EmployeeTypeID).FirstOrDefault();
            x.EmployeeTypes = employeetypes.Select(r => new SelectListItem
            {
                Value = r.EmployeeTypeID.ToString(),
                Text = r.EmployeeType1.ToString()
            });

            //return View(x);
            return View(x);

        }
        public ActionResult Edit(int id)
        {



            SemplestModel.Semplest dbcontext = new SemplestModel.Semplest();
            /*
             select employeePK, EmployeeTypeFK, UserPK, FirstName, LastName, Email, EmployeeTypeID, RolesFK, RoleName, EmployeeType 
                        from Employee e join 
                        dbo.Users u on e.usersFK=u.UserPk
						join dbo.employeetype et on e.employeetypefk= et.employeetypeid
						join dbo.UserRolesAssociation ura on ura.usersFK=e.usersFK
						join dbo.roles r on r.rolePK = ura.rolesFK
             */
            var viewModel =
               from e in dbcontext.Employees
               join u in dbcontext.Users on e.UsersFK equals u.UserPK
               join et in dbcontext.EmployeeTypes on e.EmployeeTypeFK equals et.EmployeeTypeID
               join ura in dbcontext.UserRolesAssociations on e.UsersFK equals ura.UsersFK
               join r in dbcontext.Roles on ura.RolesFK equals r.RolePK
               where u.UserPK.Equals(id)
               select new EmployeeSetup
               {
                   EmployeePK = e.EmployeePK,
                   EmployeeTypeFK = e.EmployeeTypeFK,
                   EmployeeTypeID = et.EmployeeTypeID,
                   RolesFK = ura.RolesFK,
                   UserPK = u.UserPK,
                   EmployeeType = e.EmployeeType.EmployeeType1,
                   FirstName = u.FirstName,
                   MiddleInitial = u.MiddleInitial,
                   LastName = u.LastName,
                   RoleName = r.RoleName,
                   Email = u.Email,
                    ReportingTo=(e.ReportingTo==null?-1:e.ReportingTo.Value),
                    HireDate = e.HireDate, 
                    isActive=u.IsActive 
               };

            EmployeeSetupWithRolesModel x = new EmployeeSetupWithRolesModel();
            x.EmployeeSetup = viewModel.FirstOrDefault(c => c.UserPK.Equals(id));



            //add userid and password to model
            var credential = dbcontext.Credentials.First(r => r.UsersFK.Equals(x.EmployeeSetup.UserPK));
            x.EmployeeSetup.UserID = credential.Username;
            x.EmployeeSetup.UserPassword = credential.Password;


            /////////////////////////////////////////////////////////////////////////////////
            //for roles dropdown
            /////////////////////////////////////////////////////////////////////////////////
            var roles = (from r in dbcontext.Roles select r).ToList().OrderBy(r => r.RoleName);
            x.SelectedRoleID = viewModel.Select(r => r.RolesFK).FirstOrDefault();
            x.Roles = roles.Select(r => new SelectListItem
            {
            Value = r.RolePK.ToString() ,
            Text = r.RoleName.ToString()
            });



            /////////////////////////////////////////////////////////////////////////////////
            //for Reportingto dropdown
            /////////////////////////////////////////////////////////////////////////////////
            var reportingto = (
                from e in dbcontext.Employees
                join u in dbcontext.Users on e.UsersFK equals u.UserPK
                where u.IsActive.Equals(true)
                select new ReportingToModel 
                {
                     EmployeePK =e.EmployeePK,
                     FirstName=u.FirstName,
                     LastName=u.LastName 
                }
                ).ToList().OrderBy(r => r.LastName).ThenBy(r => r.FirstName);
            x.SelectedReportingToID= viewModel.Select(r => r.ReportingTo).FirstOrDefault();


            //to add exception to dropdownlist - it can be optional, in this case the employee reporting to may be optional
            List<SelectListItem> sli = new List<SelectListItem>();
            sli.Add(new SelectListItem { Value = (-1).ToString(), Text = "Not Assigned" });


            x.ReportingTo= reportingto.Select(r => new SelectListItem
            {
                Value = r.EmployeePK.ToString(),
                Text = r.FirstName.ToString() + " " + r.LastName.ToString()
            }).Union(sli);

            /////////////////////////////////////////////////////////////////////////////////
            // for employeetype dropdown
            /////////////////////////////////////////////////////////////////////////////////
            var employeetypes = (from r in dbcontext.EmployeeTypes  select r).ToList();
            x.SelectedEmployeeTypeID  = viewModel.Select(r => r.EmployeeTypeID).FirstOrDefault();
            x.EmployeeTypes = employeetypes.Select(r => new SelectListItem
            {
                Value = r.EmployeeTypeID.ToString(),
                Text = r.EmployeeType1.ToString()
            });

            //return View(x);
            return View(x);
        }
        public ActionResult Add(EmployeeSetupWithRolesModel m)
        {

            try
            {
                SemplestEntities dbcontext = new SemplestEntities();

                User u = dbcontext.Users.Add(new User
                {
                    Customer = null,
                    Email = m.EmployeeSetup.Email,
                    FirstName = m.EmployeeSetup.FirstName,
                    MiddleInitial = m.EmployeeSetup.MiddleInitial,
                    LastName = m.EmployeeSetup.LastName,
                    CustomerFK=null,
                    IsActive=m.EmployeeSetup.isActive 
                });

                Role r= dbcontext.Roles.First(p => p.RolePK   == m.SelectedRoleID );
                UserRolesAssociation ura = dbcontext.UserRolesAssociations.Add(new UserRolesAssociation { Role = r, User = u });

                EmployeeType et = dbcontext.EmployeeTypes.First(p => p.EmployeeTypeID == m.SelectedEmployeeTypeID);
                Employee e = dbcontext.Employees.Add(new Employee { EmployeeType = et, User = u });
                Credential c = dbcontext.Credentials.Add(new Credential { User = u, Username = m.EmployeeSetup.Email, Password = "******" });


                //BillType bt = dbcontext.BillTypes.First(p => p.BillType1 == "Flat Fee"); // --- feees --- !!!

                //ProductGroupCycleType pgct = dbcontext.ProductGroupCycleTypes.First(p => p.ProductGroupCycleType1 == "Product Group Cycle 30");

                //Customer c = dbcontext.Customers.Add(new Customer { Name = m.CustomerAccount.Customer, BillType = bt, ProductGroupCycleType = pgct });
                //User u = dbcontext.Users.Add(new User
                //{
                //    Customer = c,
                //    Email = m.CustomerAccount.Email,
                //    FirstName = m.CustomerAccount.FirstName,
                //    LastName = m.CustomerAccount.LastName
                //});

                //Credential cr = dbcontext.Credentials.Add(new Credential { User = u, UsersFK = u.UserPK, Username = m.CustomerAccount.Email, Password = "******" }); //-- default password --- !!

                //PhoneType pt = dbcontext.PhoneTypes.First(p => p.PhoneType1 == "Business"); // --- phone types --- !!!!
                //Phone ph = dbcontext.Phones.Add(new Phone { Phone1 = m.CustomerAccount.Phone, PhoneType = pt });
                //CustomerPhoneAssociation cpa = dbcontext.CustomerPhoneAssociations.Add(new CustomerPhoneAssociation { Customer = c, Phone = ph });

                //StateCode sc = dbcontext.StateCodes.First(p => p.StateAbbrPK == m.SelectedStateID);
                //AddressType at = dbcontext.AddressTypes.First(p => p.AddressType1 == "H"); // --- address types --- !!!
                //Address a = dbcontext.Addresses.Add(new Address { Address1 = m.CustomerAccount.Address1, Address2 = m.CustomerAccount.Address2, City = m.CustomerAccount.City, ZipCode = m.CustomerAccount.Zip, StateCode = sc });
                //CustomerAddressAssociation caa = dbcontext.CustomerAddressAssociations.Add(new CustomerAddressAssociation { Address = a, Customer = c, AddressType = at });


                dbcontext.SaveChanges();

            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.TargetSite);
            }


            return RedirectToAction("Index");
        }
        public ActionResult Edit(EmployeeSetupWithRolesModel m)
        {

            SemplestEntities dbcontext = new SemplestEntities();
            
            var user = dbcontext.Users.ToList().Find(p => p.UserPK == m.EmployeeSetup.UserPK);
            user.FirstName = m.EmployeeSetup.FirstName;
            user.MiddleInitial = m.EmployeeSetup.MiddleInitial;
            user.LastName = m.EmployeeSetup.LastName;
            user.Email = m.EmployeeSetup.Email;
            user.EditedDate = DateTime.Now;
            user.IsActive = m.EmployeeSetup.isActive;
            UpdateModel(user);
            //need to add effective date to db ---><><>

            var employee = dbcontext.Employees.ToList().Find(p => p.UsersFK == m.EmployeeSetup.UserPK);
            employee.EmployeeTypeFK = m.SelectedEmployeeTypeID;
            employee.ReportingTo = m.SelectedReportingToID == -1 ?  default(int?) : m.SelectedReportingToID;
            UpdateModel(employee);

            var userrolesassociation = dbcontext.UserRolesAssociations.ToList().Find(p => p.UsersFK == m.EmployeeSetup.UserPK);
            userrolesassociation.RolesFK = m.SelectedRoleID;
            UpdateModel(userrolesassociation);
            dbcontext.SaveChanges();


            ////repopulate states ddl
            //var states = (from sc in dbcontext.StateCodes select sc).ToList();
            //m.States = states.Select(r => new SelectListItem
            //{
            //    Value = r.StateAbbrPK.ToString(),
            //    Text = r.StateAbbr.ToString()
            //});


            ////repopulate reps ddl
            //var allreps = from e in dbcontext.Employees
            //              join eca in dbcontext.EmployeeCustomerAssociations on e.EmployeePK equals eca.EmployeeFK
            //              join et in dbcontext.EmployeeTypes on e.EmployeeTypeFK equals et.EmployeeTypeID
            //              join u in dbcontext.Users on e.UsersFK equals u.UserPK
            //              where (et.EmployeeType1 == "Rep")
            //              select new EmployeeCustomerAssociaitionModel
            //              {
            //                  AccountNumber = eca.CustomerFK,
            //                  employeePK = e.EmployeePK,
            //                  EmployeeType = et.EmployeeType1,
            //                  EmployeeUserPK = u.UserPK,
            //                  FirstName = u.FirstName,
            //                  LastName = u.LastName
            //              };
            //List<EmployeeCustomerAssociaitionModel> ll1 = allreps.ToList();
            //List<SelectListItem> sl1 = new List<SelectListItem>();
            //foreach (EmployeeCustomerAssociaitionModel s in ll1)
            //{
            //    SelectListItem mylistitem = new SelectListItem();
            //    mylistitem.Text = s.FirstName + " " + s.LastName;
            //    mylistitem.Value = s.EmployeeUserPK.ToString();
            //    sl1.Add(mylistitem);
            //}
            //m.Reps = sl1;

            ////repopulate salepersons ddl
            ////for reps dropdown
            //var allsalespersons = from e in dbcontext.Employees
            //                      join eca in dbcontext.EmployeeCustomerAssociations on e.EmployeePK equals eca.EmployeeFK
            //                      join et in dbcontext.EmployeeTypes on e.EmployeeTypeFK equals et.EmployeeTypeID
            //                      join u in dbcontext.Users on e.UsersFK equals u.UserPK
            //                      where (et.EmployeeType1 == "Sales")
            //                      select new EmployeeCustomerAssociaitionModel
            //                      {
            //                          AccountNumber = eca.CustomerFK,
            //                          employeePK = e.EmployeePK,
            //                          EmployeeType = et.EmployeeType1,
            //                          EmployeeUserPK = u.UserPK,
            //                          FirstName = u.FirstName,
            //                          LastName = u.LastName
            //                      };
            //List<EmployeeCustomerAssociaitionModel> ll2 = allsalespersons.ToList();
            //List<SelectListItem> sl2 = new List<SelectListItem>();
            //foreach (EmployeeCustomerAssociaitionModel s in ll2)
            //{
            //    SelectListItem mylistitem = new SelectListItem();
            //    mylistitem.Text = s.FirstName + " " + s.LastName;
            //    mylistitem.Value = s.EmployeeUserPK.ToString();
            //    sl2.Add(mylistitem);
            //}
            //m.SalesPersons = sl2;

            //return View("index");

            return RedirectToAction("Index"); 

        }