diff --git a/Backend/Areas/Admin/Controllers/AccountsController.cs b/Backend/Areas/Admin/Controllers/AccountsController.cs index 7df1ad7..bc5d582 100644 --- a/Backend/Areas/Admin/Controllers/AccountsController.cs +++ b/Backend/Areas/Admin/Controllers/AccountsController.cs @@ -60,7 +60,7 @@ public ActionResult ChangePassword(AdminChangePasswordViewModels changePasswordV { var errors = new Dictionary(); var userUpdate = users.Get(changePasswordViewModel.AccountId); - var user = (Accounts) Session["user"]; + var user = (Accounts)Session["user"]; foreach (var k in ModelState.Keys) foreach (var err in ModelState[k].Errors) { @@ -79,10 +79,9 @@ public ActionResult ChangePassword(AdminChangePasswordViewModels changePasswordV if (userUpdate.AccountId == 1 && user.AccountId != 1) { - errors.Add("NewPassword", "Unauthorized"); return Json(new { - data = errors, + data = "Unauthorized", statusCode = 400, message = "Error", }, JsonRequestBehavior.AllowGet); @@ -90,10 +89,9 @@ public ActionResult ChangePassword(AdminChangePasswordViewModels changePasswordV if (userUpdate.RoleId == 1 && user.RoleId != 1) { - errors.Add("NewPassword", "Unauthorized"); return Json(new { - data = errors, + data = "Unauthorized", statusCode = 400, message = "Error", }, JsonRequestBehavior.AllowGet); @@ -131,6 +129,7 @@ public ActionResult Create(AccountViewModel accounts) { var errors = new Dictionary(); var check = true; + var userSession = (Accounts)Session["user"]; if (!ModelState.IsValid) return Json(new { @@ -191,11 +190,12 @@ public ActionResult Create(AccountViewModel accounts) NumberId = accounts.NumberId, Phone = accounts.Phone, AttemptLogin = 0, - RoleId = accounts.RoleId, + RoleId = userSession.AccountId == 1 ? accounts.RoleId : 3, Address = accounts.Address, Birthday = DateTime.Parse(accounts.Birthday), Status = ((int)AccountStatus.Actived) }; + users.Add(account); return Json(new { @@ -220,6 +220,7 @@ public ActionResult Create(AccountViewModel accounts) }, JsonRequestBehavior.AllowGet); } + [HttpPost] public ActionResult Edit(AccountViewModel accounts) { @@ -257,27 +258,32 @@ public ActionResult Edit(AccountViewModel accounts) if (acc1.AccountId == 1 && user.AccountId != 1) { - errors.Add("Status", "Unauthorized"); return Json(new { statusCode = 400, message = "Error", - data = errors - }, JsonRequestBehavior.AllowGet); + data = "Unauthorized" + }, JsonRequestBehavior.AllowGet); ; } - - if (user.RoleId != 1 && acc1.RoleId == 1) + if (acc1.RoleId == 1 && user.RoleId != 1) { - check = false; - errors.Add("Status", "Unauthorized"); return Json(new { statusCode = 400, message = "Error", - data = errors - }, JsonRequestBehavior.AllowGet); + data = "Unauthorized" + }, JsonRequestBehavior.AllowGet); ; } + if (user.AccountId == 1 && accounts.RoleId != 1) + { + return Json(new + { + statusCode = 400, + message = "Error", + data = "You can't change your role!" + }, JsonRequestBehavior.AllowGet); ; + } if (users.CheckDuplicate(x => x.Email == accounts.Email && x.AccountId != acc1.AccountId)) { check = false; @@ -304,7 +310,7 @@ public ActionResult Edit(AccountViewModel accounts) if (ModelState.IsValid && check) { - + var acc3 = users.Get(accounts.AccountId); acc3.Name = accounts.Name; acc3.Email = accounts.Email; @@ -316,7 +322,6 @@ public ActionResult Edit(AccountViewModel accounts) { acc3.RoleId = accounts.RoleId; } - acc3.Status = accounts.Status; acc3.AttemptLogin = accounts.Status == (int)AccountStatus.Actived ? 0 : 3; if (!users.Edit(acc3)) { @@ -363,7 +368,7 @@ public ActionResult Delete(int id) message = "Error" }, JsonRequestBehavior.AllowGet); } - + using (var _context = new ApplicationDbContext()) { var user = _context.Accounts.FirstOrDefault(x => x.AccountId == id); @@ -388,17 +393,8 @@ public ActionResult Delete(int id) message = "Success" }, JsonRequestBehavior.AllowGet); } - - { - return Json(new - { - statusCode = 400, - data = "You cannot delete your own account", - message = "Error" - }, JsonRequestBehavior.AllowGet); - } } - + if (users.Delete(id)) { return Json(new @@ -427,5 +423,71 @@ public ActionResult ProfileAccount(int id) var data = new AccountViewModel(x); return View(data); } + [HttpPost] + public ActionResult ChangeStatus(int id) + { + var userSession = (Accounts)Session["user"]; + if (!CheckValidate(id)) + { + return Json(new + { + statusCode = 400, + message = "Unathorzied", + data = "Unathorzied" + }, JsonRequestBehavior.AllowGet); + } + if (userSession.AccountId == id) + { + return Json(new + { + statusCode = 400, + message = "Unathorzied", + data = "You can't change your status yourself" + }, JsonRequestBehavior.AllowGet); + } + var user = users.Get(id); + if (user.Status == (int)AccountStatus.Actived) + { + user.Status = (int)AccountStatus.Locked; + } + else + { + user.Status = (int)AccountStatus.Actived; + } + if (users.Edit(user)) + { + return Json(new + { + statusCode = 200, + message = "Success" + }, JsonRequestBehavior.AllowGet); + } + return Json(new + { + statusCode = 400, + message = "Error" + }, JsonRequestBehavior.AllowGet); + } + private bool CheckValidate(int id) + { + var userSession = (Accounts)Session["user"]; + var user = users.Get(id); + switch (userSession.RoleId) + { + case 1: + if (user.AccountId == 1) + { + return false; + } + break; + case 2: + if (user.RoleId == 1) + { + return false; + } + break; + } + return true; + } } } \ No newline at end of file diff --git a/Backend/Areas/Admin/Views/Accounts/Index.cshtml b/Backend/Areas/Admin/Views/Accounts/Index.cshtml index 0018296..7b00d19 100644 --- a/Backend/Areas/Admin/Views/Accounts/Index.cshtml +++ b/Backend/Areas/Admin/Views/Accounts/Index.cshtml @@ -103,36 +103,15 @@
- @if (user.RoleId == 1) + @if (user.RoleId == 1 && user.AccountId == 1) { - - -
+
- - -
- -
- -
-
- } - else - { -
- -
- -
-
}
@@ -216,9 +195,6 @@ "RoleId": { required: true }, - "Status": { - required: true - }, }, messages: { Birthday: { @@ -247,7 +223,6 @@ Phone: $("#Phone").val(), NumberId: $("#NumberId").val(), RoleId: $("#RoleId").val(), - Status: parseInt(($("#Status").val())) }; if ($("#type").val() === "EDIT") { user.AccountId = $("#Id").val(); @@ -284,8 +259,8 @@ submitHandler: function () { let account = { AccountId: $("#Id2").val(), - Password: $("#NewPassword").val(), - RePassword: $("#ConfirmPassword").val(), + NewPassword: $("#NewPassword").val(), + ConfirmPassword: $("#ConfirmPassword").val(), }; $.ajax({ type: "POST", @@ -298,7 +273,11 @@ notifySuccess("Success", "Password Change Success"); $("#PasswordChange").modal("hide"); } else { - notifyError("Error", "Password Change Error"); + + if (typeof res.data == "string") { + notifyError("Error", res.data); + $("#PasswordChange").modal("hide"); + } validator2.showErrors(res.data); } } @@ -364,8 +343,34 @@ notifySuccess('Updated Successfully',"Updated Successfully"); $("#myModal").modal("hide"); $('#datatables').DataTable().ajax.reload(); - }else { - validator.showErrors(res.data); + } else { + if (typeof res.data == "string") { + $("#myModal").modal("hide"); + notifyError('Updated Error', res.data); + } else { + validator.showErrors(res.data); + } + + } + } + + }) + }, + put2: function (id) { + $.ajax({ + type: "POST", + url: "@Url.Action("ChangeStatus", "Accounts")", + data: { id :id }, + success: function (res) { + if (res.statusCode === 200) { + notifySuccess('Updated Successfully',"Updated Successfully"); + $("#myModal").modal("hide"); + $('#datatables').DataTable().ajax.reload(); + } else { + if (typeof res.data == "string") { + notifyError('Updated Error', res.data); + } + validator2.showErrors(res.data); } } @@ -446,7 +451,7 @@ "orderable": false, }, { - data: {Status: Status,StatusName:'StatusName'}, + data: {Status: "Status",StatusName:'StatusName'}, render: function (data) { if (data.Status === 0){ return ''+data.StatusName+''; @@ -462,13 +467,15 @@ "orderable": false, }, { - data: {AccountId:'AccountId'}, - "render": function (data) { + data: { AccountId: 'AccountId', Status:"Status"}, + render: function (data) { + let toggle = data.Status === 0 ? "Lock Account" : "Active Account"; let detail = "@Url.Action("ProfileAccount", "Accounts")/"+data.AccountId; return '' } }, @@ -480,8 +487,15 @@ let userId = $(this).data("id"); let a = managerAcc.get(userId); }) + $(document).on("click", ".btn-edit2", function () { + let userId = $(this).data("id"); + let a = managerAcc.put2(userId); + }) $(document).on("click", ".btn-changepass", function () { + validator2.resetForm(); + $("#FormPasswordChange").trigger("reset"); $("#PasswordChange").modal("show"); + let userId = $(this).data("id"); $("#Id2").val(userId); }) diff --git a/Backend/Views/Home/Login.cshtml b/Backend/Views/Home/Login.cshtml index ff946f6..7922a2c 100644 --- a/Backend/Views/Home/Login.cshtml +++ b/Backend/Views/Home/Login.cshtml @@ -109,14 +109,18 @@ } }, }); + }, + invalidHandler: function (form, validator) { + $("#btnLogin").css('display', 'block'); + $("#loading").css('display', 'none'); } + }); $(function () { $(document).on("click", "#btnLogin", function () { $("#btnLogin").css('display', 'none'); $("#loading").css('display', 'block'); }) - $("#forget").click(function () { swal("Please contact admin to get new password"); }) diff --git a/Backend/Web.config b/Backend/Web.config index 3617c9c..cdc1dbb 100644 --- a/Backend/Web.config +++ b/Backend/Web.config @@ -64,7 +64,6 @@ - diff --git a/Diagrams/OnlineBanking-Context.drawio b/Diagrams/OnlineBanking-Context.drawio new file mode 100644 index 0000000..c4023ad --- /dev/null +++ b/Diagrams/OnlineBanking-Context.drawio @@ -0,0 +1 @@ +5VlNc9owEP01PjZjS7bBRwykzUybpmWmaY4arNhqjERlEaC/vhKWP2VSQgMkhOHgXUlr6e2+3bVtweFs9ZGjefKFRTi1gB2tLDiyAHBcACz1t6N1rul5bq6IOYn0pEoxIX+wVtpauyARzhoTBWOpIPOmcsooxVPR0CHO2bI57Z6lzbvOUYwNxWSKUlN7SyKR5No+6FX6T5jESXFnxw/ykRkqJuuTZAmK2LKmgmMLDjljIr+arYY4VeAVuOTrLreMlhvjmIpdFsS3V5fXs7sJRKMf4PEKfvMexAdt5RGlC33gbwtr7FjhwBpAqsDmGzG0+qGaR6whtAYDqo8k1gVOnC1ohNWtHAuGy4QIPJmjqRpdysiQukTMUj2sb4q5wKutp3FKjGRwYTbDgq/lFL2gr1HVYQVdLS8rJzkF8knNQb7WIR0XcWm5gk5eaPSegSQwkLyOraFvhbYGMBgRxQMFYBjQ+OQI+vZrg7BvYIIjSUYtMi4SFjOK0nGlDSvUbClVcz4zNtdY/cJCrHVmQQvBmkjiFRE/1fILv+dp+W4j26CQRyttfyOsa8IN5kQeHnOty0+gtv1cr3CcIkEem+u6INZLbxiRFktvuqDlTQiaJjK24FOsV9XThGHIaRgCXtA0JBCPsTAMDThH69q0uZqQPbVhp3PDVQDlFqtwKsHaP8I8g6RfaUoolroQ0QfSQUtpVdYafBRKlhQsMdmRkv1DUdIxC8RpSQohrJHUubD93tshKewFF4HMu+XPbVNNJp39aAvbBRF6O9H2pZjlm+Uv2fQKgL6qvqFNMWCfuuo5ZufwHf9e4EwYYMljiyYimeDsAQ9ZylRwU0YV3e5JmrZUKCUxleJUwqR4ECoQiWxzB3pgRqIo3Zblmvx9CS/AVuT3TS+4HU4AB3MC7HBCNmdUZv6z9YIL7VfmBXeHakOjgXquUzCmKMvItCtH7JPca6f2Ok5d6P6zBoAiwxeJup1Yds74MHja0IEzvmM2U892VlXXbadn1Ztv/4DNt9ziBuN/NYqnChEYNHnpOnuGCGg/4rX7xEOHiNkVnH1pA+0evuOx+rhJtfcOS1vZrrUj/2Re6J9/aXPboO9b2rygd9rSFrzV0nYq1/s2uGg9zRrFZuc3UNu4eyTvFzngXSVMb4e3wUdNmMB883T2vYPhhMNVLSlWn55y5lQf8OD4Lw== \ No newline at end of file diff --git a/Diagrams/OnlineBanking-ER.drawio b/Diagrams/OnlineBanking-ER.drawio index 4b87e09..f89e67f 100644 --- a/Diagrams/OnlineBanking-ER.drawio +++ b/Diagrams/OnlineBanking-ER.drawio @@ -1 +1 @@ -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 \ No newline at end of file +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 \ No newline at end of file diff --git a/Documents/Installation_Guide.docx b/Documents/Installation_Guide.docx index caa8b9c..62f93f5 100644 Binary files a/Documents/Installation_Guide.docx and b/Documents/Installation_Guide.docx differ diff --git a/Documents/Project_SemIII.docx b/Documents/Project_SemIII.docx index 2099d1b..0d2a8e4 100644 Binary files a/Documents/Project_SemIII.docx and b/Documents/Project_SemIII.docx differ