public bool NewClassAttendance(int nPackageID, string strMemberShipID, int nClassInstance, int nType, string strBranchCode, DateTime classDate, DateTime startTime, DateTime endTime, bool isRefunded) { if (!isRefunded) { ACMSDAL.TblReceipt sqlReceipt = new ACMSDAL.TblReceipt(); DataTable receipttable = sqlReceipt.GetToDayForgetCardReceipt(strMemberShipID, 17); if (receipttable == null || receipttable.Rows.Count == 0) { throw new Exception("You have yet to pay the forget card deposit today."); } } TblClassAttendance classAttendance = new TblClassAttendance(); bool isPostFromOtherRecord = false; bool needtoAddBackOneDayExpiryDate = false; bool BalanceStatus = true; DataTable memberPackageTable = null; if (nType != 1) { DataRow classAttendanceRow = null; bool isAttendedNow = classAttendance.IsAttendedThisClass(nClassInstance, strMemberShipID, ref classAttendanceRow); if (isAttendedNow) { int nStatusID = ACMS.Convert.ToInt32(classAttendanceRow["nStatusID"]); if (nStatusID == 1) { // Process throw new Exception("Member already been marked in this class."); } else { //Forfeit and need to change to process if (classAttendanceRow != null) { int nClassAttendanceID = ACMS.Convert.ToInt32(classAttendanceRow["nAttendanceID"]); classAttendance.NAttendanceID = nClassAttendanceID; classAttendance.SelectOne(); isPostFromOtherRecord = true; nPackageID = classAttendance.NPackageID.Value; isRefunded = classAttendance.FRefunded.IsNull ? true : classAttendance.FRefunded.Value; // this only true if the package is unlimited one memberPackageTable = myMemberPackage.GetMemberPackage(nPackageID); if (ACMS.Convert.ToInt32(memberPackageTable.Rows[0]["nMaxSession"]) == 9999) needtoAddBackOneDayExpiryDate = true; } } } else if (classAttendanceRow != null && nType == 0) { int nClassAttendanceID = ACMS.Convert.ToInt32(classAttendanceRow["nAttendanceID"]); classAttendance.NAttendanceID = nClassAttendanceID; classAttendance.SelectOne(); isPostFromOtherRecord = true; nPackageID = classAttendance.NPackageID.Value; isRefunded = classAttendance.FRefunded.IsNull ? true : classAttendance.FRefunded.Value; } } if (memberPackageTable == null) { myMemberPackage.NPackageID = nPackageID; memberPackageTable = myMemberPackage.GetMemberPackage(nPackageID); } if (memberPackageTable == null || memberPackageTable.Rows.Count == 0) throw new Exception("Failed to create new class attendance. Member Package with npackageID = " + nPackageID.ToString() + "has been deleted"); classAttendance.NPackageID = nPackageID; classAttendance.StrMembershipID = strMemberShipID; classAttendance.NClassInstanceID = nClassInstance; classAttendance.NTypeID = nType; classAttendance.StrBranchCode = strBranchCode; classAttendance.DtDate = classDate; classAttendance.DtStartTime = startTime; classAttendance.DtEndTime = endTime; classAttendance.DtLastEditDate = DateTime.Now; classAttendance.NEmployeeID = ACMSLogic.User.EmployeeID; //indicated free class or not TblClassInstance classInstance = new TblClassInstance(); DataTable Instance = classInstance.LoadData("Select fFree from tblClassInstance Where nClassInstanceID = @nClassInstanceID", new string[] { "@nClassInstanceID" }, new object[] { nClassInstance }); if (Instance.Rows[0][0].ToString() == "True") classAttendance.NStatusID = 4; else classAttendance.NStatusID = 1; classAttendance.FRefunded = isRefunded;// System.Data.SqlTypes.SqlBoolean. //UnLinked is for temporary only if (memberPackageTable.Rows[0]["strPackageCode"].ToString() != "Unlinked") { CalculateMemberPackageBalance(memberPackageTable.Rows[0]["strPackageCode"].ToString(), strMemberShipID, memberPackageTable); DataRow masterRow = memberPackageTable.Rows[0]; // if (ACMS.Convert.ToDBInt32(memberPackageTable.Rows[0]["Balance"])<999 && ACMS.Convert.ToDBInt32(memberPackageTable.Rows[0]["nAdjust"])>=1) // { // memberPackageTable.Rows[0]["Balance"]=ACMS.Convert.ToDBInt32(memberPackageTable.Rows[0]["Balance"])- ACMS.Convert.ToDBInt32(memberPackageTable.Rows[0]["nAdjust"]); // } if (ACMS.Convert.ToInt32(memberPackageTable.Rows[0]["Balance"]) <= 0) { throw new Exception("Balance is zero"); masterRow["nBalance"] = false; BalanceStatus = false; } if (masterRow["fGiro"].ToString() != "1") { if ((masterRow["dtStartDate"] == DBNull.Value && masterRow["dtExpiryDate"] == DBNull.Value) || (masterRow["dtStartDate"] != DBNull.Value && Convert.ToDateTime(masterRow["dtStartDate"]) > classDate)) { // Means new class Attendance gonna insert TblPackage package = new TblPackage(); package.StrPackageCode = masterRow["strPackageCode"].ToString(); package.SelectOne(); //if (package.NPackageDuration.Value == 0 && package.NPackageDay.Value > 0) //{ // masterRow["dtStartDate"] = classDate; // masterRow["dtExpiryDate"] = classDate.AddDays(package.NPackageDay.Value - 1); //} //else //{ // masterRow["dtStartDate"] = classDate; // masterRow["dtExpiryDate"] = classDate.AddMonths(package.NPackageDuration.Value).AddDays(-1); //} //jackie Start 05042012 masterRow["dtStartDate"] = classDate; if (package.NPackageDuration.Value == 0) { string txt = package.StrPackageCode.ToString(); if (txt == "FTRIAL") { masterRow["dtExpiryDate"] = classDate.AddDays(1).AddDays(0); } else { string strduration; int cstarts = txt.IndexOf("(") + 1; int len = txt.IndexOf(")") - cstarts; txt = txt.Substring(cstarts, len); if (string.IsNullOrEmpty(txt)) { strduration = string.Empty; } else { int lens = txt.Length; strduration = txt.Substring(txt.Length - 1, 1); } if (strduration == "D") { strduration = txt.Replace("D", ""); int iduration = Int32.Parse(strduration); masterRow["dtExpiryDate"] = classDate.AddDays(iduration - 1).AddDays(0); } if (strduration == "W") { strduration = txt.Replace("W", ""); int iduration = Int32.Parse(strduration); iduration = iduration * 7; masterRow["dtExpiryDate"] = classDate.AddDays(iduration - 1).AddDays(0); } } } else { int iduration = package.NPackageDuration.Value; if (package.StrDurationUnit.ToString().Trim() == "DAY") masterRow["dtExpiryDate"] = classDate.AddDays(iduration - 1).AddDays(0); else if (package.StrDurationUnit.ToString().Trim() == "WEEK") { iduration = iduration * 7; masterRow["dtExpiryDate"] = classDate.AddDays(iduration - 1).AddDays(0); } else if (package.StrDurationUnit.ToString().Trim() == "MONTH") masterRow["dtExpiryDate"] = classDate.AddMonths(package.NPackageDuration.Value).AddDays(-1); } //jackie END 2/02/2012 } else { // Kean Yiap string strPackageCode = masterRow["strPackageCode"].ToString(); CalculateMemberPackageBalance(strPackageCode, strMemberShipID, memberPackageTable); DateTime memberPackageStartDate = ACMS.Convert.ToDateTime(masterRow["DtStartDate"]); DateTime memberPackageExpiryDate = ACMS.Convert.ToDateTime(masterRow["dtExpiryDate"]); //if (memberPackageStartDate > classDate) //{ //jackie why must change ExpiryDate 26042012 // masterRow["dtExpiryDate"] = memberPackageExpiryDate.Subtract(memberPackageStartDate.Subtract(classDate)); //} } } if (ACMS.Convert.ToInt32(memberPackageTable.Rows[0]["Balance"]) <= 1) { if (masterRow["strPackageCode"].ToString() == "FTRIAL") { memberPackageTable.Rows[0]["nBalance"] = 1; } else { memberPackageTable.Rows[0]["nBalance"] = 0; } } } ACMSDAL.ConnectionProvider connProvider = new ConnectionProvider(); try { myMemberPackage.MainConnectionProvider = connProvider; classAttendance.MainConnectionProvider = connProvider; connProvider.OpenConnection(); connProvider.BeginTransaction("SaveClassAttendance"); if (needtoAddBackOneDayExpiryDate && memberPackageTable.Rows[0]["fGIRO"].ToString() != "1") { memberPackageTable.Rows[0]["dtExpiryDate"] = ACMS.Convert.ToDateTime(memberPackageTable.Rows[0]["dtExpiryDate"]).AddDays(1); } myMemberPackage.SaveData(memberPackageTable); if (BalanceStatus) { if (!isPostFromOtherRecord) classAttendance.Insert(); else classAttendance.Update(); connProvider.CommitTransaction(); } return true; } catch (Exception) { connProvider.RollbackTransaction("SaveClassAttendance"); throw new Exception("Failed to save Class Attendance"); } finally { if (connProvider.CurrentTransaction != null) connProvider.CurrentTransaction.Dispose(); if (connProvider.DBConnection != null) { if (connProvider.DBConnection.State == ConnectionState.Open) connProvider.DBConnection.Close(); } myMemberPackage.MainConnactionIsCreatedLocal = true; classAttendance.MainConnactionIsCreatedLocal = true; } }