public void DeleteLastExtensionHistory(int nPackageID, int last_nExtensionID) { myMemberPackage.NPackageID = nPackageID; myMemberPackage.SelectOne(); TblPackageExtension packageExt = new TblPackageExtension(); packageExt.NPackageID = nPackageID; DataTable packageExtTable = packageExt.SelectAllWnPackageIDLogic(); if (packageExtTable == null) throw new Exception("This extension row has been deleted by others"); if (packageExtTable.Rows.Count == 0) throw new Exception("This extension row has been deleted by others"); if (packageExtTable.Rows.Count > 0) { DataRow [] rowList = packageExtTable.Select(" nStatusID = 0 AND nExtensionID > " + last_nExtensionID.ToString()); if (rowList.Length > 0) // mean is not last package extension { throw new Exception("Only the most recent package extension can be deleted."); } } DataRow[] deletedDataRowList = packageExtTable.Select("nStatusID = 0 and nExtensionID = " + last_nExtensionID, "nExtensionID", DataViewRowState.CurrentRows); if (deletedDataRowList.Length == 0) throw new Exception("This extension row has been deleted by others"); //deletedDataRowList should be one row deletedDataRowList[0]["nStatusID"] = 1; TimeSpan durationToReverse = TimeSpan.FromDays((double) ACMS.Convert.ToInt32(deletedDataRowList[0]["nDaysExtended"])); DataRow[] tempDataRowList = packageExtTable.Select("nStatusID = 0", "nExtensionID", DataViewRowState.CurrentRows); // now need to use the last row's info to calculate the expriry date. // but if there is the only row in extension package for this member package, i have to use other info to calculate the expiry date for this memberpackage myMemberPackage.DtExpiryDate = myMemberPackage.DtExpiryDate.Value.Subtract(durationToReverse); ACMSDAL.ConnectionProvider connProvider = new ConnectionProvider(); try { myMemberPackage.MainConnectionProvider = connProvider; packageExt.MainConnectionProvider = connProvider; connProvider.OpenConnection(); connProvider.BeginTransaction("SaveExtension"); myMemberPackage.Update(); packageExt.SaveData(packageExtTable); connProvider.CommitTransaction(); } catch (Exception) { connProvider.RollbackTransaction("SaveExtension"); throw new Exception("Failed to Create New Extension"); } finally { if (connProvider.CurrentTransaction != null) connProvider.CurrentTransaction.Dispose(); if (connProvider.DBConnection != null) { if (connProvider.DBConnection.State == ConnectionState.Open) connProvider.DBConnection.Close(); } myMemberPackage.MainConnactionIsCreatedLocal = true; packageExt.MainConnactionIsCreatedLocal = true; } }
//public void SaveExtensionHistory(int nPackageID, DataTable packageExtensionTable, DateTime oldExpiryDate) public void SaveExtensionHistory(int nPackageID, DataTable packageExtensionTable, DateTime oldExpiryDate, bool isGiro, DateTime StartDate, DateTime EndDate, int iReasonID) { // *TO Do -- if dtStartDate is null, no allow extend DataRow packExtRow = packageExtensionTable.Rows[0]; int nReasonID=0; if (iReasonID != 0) nReasonID = iReasonID; else nReasonID = ACMS.Convert.ToInt32(packExtRow["nReasonID"]); if (nReasonID < 0) return; // Assume that nReasonID = 0 is Others TblPackageExtension packageExt = new TblPackageExtension(); ACMSDAL.ConnectionProvider connProvider = new ConnectionProvider(); if (nReasonID > 0) { try { myMemberPackage.MainConnectionProvider = connProvider; packageExt.MainConnectionProvider = connProvider; connProvider.OpenConnection(); connProvider.BeginTransaction("SaveExtension"); DateTime packageExtensionStartDate; DateTime packageExtensionEndDate; if (isGiro == true) { packExtRow["dtStartDate"] = StartDate; packExtRow["dtEndDate"] = EndDate; packageExtensionStartDate = StartDate; packageExtensionEndDate = EndDate; } else { //to support extension for multiple package at once if (StartDate.ToString() != "" && EndDate.ToString() != "") { // C=Leave Start Date packageExtensionStartDate = Convert.ToDateTime(StartDate); // D=Leave End Date packageExtensionEndDate = Convert.ToDateTime(EndDate); } else { // C=Leave Start Date packageExtensionStartDate = ACMS.Convert.ToDateTime(packExtRow["dtStartDate"]); // D=Leave End Date packageExtensionEndDate = ACMS.Convert.ToDateTime(packExtRow["dtEndDate"]); } } //B4 Save, must Check whether the startdate have overlap with previous one or not packageExt.NPackageID = nPackageID; DataTable table = packageExt.SelectAllWnPackageIDLogic(); if (table != null && table.Rows.Count > 0) { // DataRow[] tempRow = table.Select("nStatusID = 0 and dtEndDate > '" + packageExtensionStartDate + "'", "nExtensionID"); // if (tempRow.Length > 0) // throw new Exception("Overlapped date in extension package."); int RowExtention; DateTime e = packageExtensionStartDate; DateTime f = packageExtensionEndDate; for (RowExtention = 0; RowExtention <= table.Rows.Count-1; RowExtention++) { if (e < ACMS.Convert.ToDateTime(table.Rows[RowExtention]["dtEndDate"]) && f >= ACMS.Convert.ToDateTime(table.Rows[RowExtention]["dtStartDate"]) || (f < e)) { throw new Exception("Overlapped date in extension package."); } } } //end checking myMemberPackage.NPackageID = nPackageID; DataTable memberPackageTable = myMemberPackage.SelectOne(); if (myMemberPackage.DtStartDate.IsNull) throw new Exception("Member Package not been used yet."); if (memberPackageTable.Rows[0]["DtStartDate"] == DBNull.Value) return; //bool isGiro = !myMemberPackage.NGIRORefID.IsNull; // A=Member Package Start Date DateTime memberPackageStartDate = myMemberPackage.DtStartDate.Value; // B=Member Package End Date DateTime memberPackageExpiryDate = myMemberPackage.DtExpiryDate.Value; DateTime memberPackagePurchaseDate = myMemberPackage.DtPurchaseDate.Value; //if (packageExtensionStartDate > memberPackageExpiryDate) // throw new Exception("Extension Start Date is not allow to later than Member Package's Expiry Date."); if (isGiro == false) { if (packageExtensionStartDate > memberPackageExpiryDate) throw new Exception("Extension Start Date is not allow to later than Member Package's Expiry Date."); DateTime latestNewExpiryDate = DateTime.MinValue; if ( packageExtensionStartDate > memberPackageStartDate) { DateTime latestExpiryDate = DateTime.ParseExact("2012-04-01", "yyyy'-'MM'-'dd", null); if (memberPackagePurchaseDate > latestExpiryDate && nReasonID != 6) { TimeSpan duration = packageExtensionEndDate.Subtract(packageExtensionStartDate); if (2 > duration.Days )//01042012 Member only can apply extension with a minimun of 3 days { throw new Exception("Extension only can apply for minimun of 3 days."); } else { TimeSpan duration1 = packageExtensionEndDate.Subtract(packageExtensionStartDate); myMemberPackage.DtExpiryDate = myMemberPackage.DtExpiryDate.Value.Add(duration1).AddDays(1); } } else { TimeSpan duration = packageExtensionEndDate.Subtract(packageExtensionStartDate); myMemberPackage.DtExpiryDate = myMemberPackage.DtExpiryDate.Value.Add(duration).AddDays(1); } } else if (packageExtensionStartDate < memberPackageStartDate) { TimeSpan duration = packageExtensionEndDate.Subtract(memberPackageStartDate); myMemberPackage.DtExpiryDate = myMemberPackage.DtExpiryDate.Value.Add(duration).AddDays(1); } myMemberPackage.DtLastEdit = System.DateTime.Now; myMemberPackage.NEmployeeID = User.EmployeeID; } else { //int nGiroRefID = (int)myMemberPackage.NGIRORefID; // if the member package is Giro // then need to make sure all the extension is follow the base one myMemberPackage.NPackageID = nPackageID; DataTable tempTable = myMemberPackage.SelectAllWnGIROPackageIDLogic(); if (tempTable == null) return; if (tempTable.Rows.Count == 0) return; if (tempTable.Rows.Count > 1) { DataRow[] rowList = tempTable.Select("dtStartDate is not null", "nGiroRefID", DataViewRowState.CurrentRows); if (rowList.Length > 0) { DateTime latestNewExpiryDate = DateTime.MinValue; DateTime tempnewExpiryDate = DateTime.MinValue; memberPackageStartDate = ACMS.Convert.ToDateTime(rowList[0]["dtStartDate"]); memberPackageExpiryDate = ACMS.Convert.ToDateTime(rowList[0]["dtExpiryDate"]); if (packageExtensionStartDate > memberPackageStartDate) { TimeSpan duration = packageExtensionEndDate.Subtract(packageExtensionStartDate); tempnewExpiryDate = memberPackageExpiryDate.Add(duration).AddDays(1); } else if (packageExtensionStartDate < memberPackageStartDate) { TimeSpan duration = packageExtensionEndDate.Subtract(memberPackageStartDate); tempnewExpiryDate = memberPackageExpiryDate.Add(duration).AddDays(1); } tempTable.BeginInit(); foreach (DataRow r in rowList) { r["dtExpiryDate"] = tempnewExpiryDate; r["dtLastEdit"] = DateTime.Now; r["nEmployeeID"] = User.EmployeeID; } tempTable.EndInit(); } else return; } else { isGiro = false; myMemberPackage.NPackageID = nPackageID; myMemberPackage.SelectOne(); myMemberPackage.DtLastEdit = System.DateTime.Now; myMemberPackage.NEmployeeID = User.EmployeeID; DateTime latestNewExpiryDate = DateTime.MinValue; if (packageExtensionStartDate > memberPackageStartDate) { TimeSpan duration = packageExtensionEndDate.Subtract(packageExtensionStartDate); myMemberPackage.DtExpiryDate = myMemberPackage.DtExpiryDate.Value.Add(duration).AddDays(1); } else if (packageExtensionStartDate < memberPackageStartDate) { TimeSpan duration = packageExtensionEndDate.Subtract(memberPackageStartDate); myMemberPackage.DtExpiryDate = myMemberPackage.DtExpiryDate.Value.Add(duration).AddDays(1); } } } //To support extension for multiple package at once object dtEndValue = packExtRow["dtEndDate"]; object dtStartDate = packExtRow["dtEndDate"]; if (dtEndValue == DBNull.Value && dtStartDate == DBNull.Value) { packExtRow["dtEndDate"] = EndDate; packExtRow["dtStartDate"] = StartDate; } TimeSpan nDaysExtend = ACMS.Convert.ToDateTime(packExtRow["dtEndDate"]).Subtract(ACMS.Convert.ToDateTime(packExtRow["dtStartDate"])); packExtRow["nDaysExtended"] = nDaysExtend.TotalDays+1; packExtRow["dtOldExpiry"]=oldExpiryDate; packExtRow["dtNewExpiry"]= oldExpiryDate.AddDays(nDaysExtend.TotalDays+1); packExtRow["dtCreateDate"] = System.DateTime.Now; //jackie 14032012 if (nReasonID != 0) packExtRow["nReasonID"] = nReasonID; packExtRow["nDaysExtended"]=(nDaysExtend.TotalDays)+1; #region ====== Added By Albert ====== //To update member package status. If expiry date is greater than today date, change the status to active. DateTime dtExpireDate = Convert.ToDateTime(myMemberPackage.DtExpiryDate.ToString()); if(DateTime.Compare(dtExpireDate,DateTime.Now)>0) myMemberPackage.NStatusID = 0; #endregion myMemberPackage.Update(); packageExt.SaveData(packageExtensionTable); connProvider.CommitTransaction(); } catch (Exception ex) { connProvider.RollbackTransaction("SaveExtension"); throw ex; } finally { if (connProvider.CurrentTransaction != null) connProvider.CurrentTransaction.Dispose(); if (connProvider.DBConnection != null) { if (connProvider.DBConnection.State == ConnectionState.Open) connProvider.DBConnection.Close(); } myMemberPackage.MainConnactionIsCreatedLocal = true; packageExt.MainConnactionIsCreatedLocal = true; } } else { try { myMemberPackage.MainConnectionProvider = connProvider; packageExt.MainConnectionProvider = connProvider; connProvider.OpenConnection(); connProvider.BeginTransaction("SaveExtension"); myMemberPackage.NPackageID = nPackageID; myMemberPackage.SelectOne(); if (myMemberPackage.DtStartDate.IsNull) throw new Exception("Member Package is yet been used. No need to extend"); myMemberPackage.DtExpiryDate = oldExpiryDate; myMemberPackage.DtLastEdit = System.DateTime.Today; myMemberPackage.NEmployeeID = User.EmployeeID; //packageExt packExtRow["dtStartDate"] = myMemberPackage.DtStartDate.Value; packExtRow["dtEndDate"] = myMemberPackage.DtExpiryDate.Value; packExtRow["nDaysExtended"] = myMemberPackage.DtExpiryDate.Value.CompareTo(myMemberPackage.DtStartDate.Value); packageExt.SaveData(packageExtensionTable); myMemberPackage.Update(); connProvider.CommitTransaction(); } catch (Exception ex) { connProvider.RollbackTransaction("SaveExtension"); throw ex; } finally { if (connProvider.CurrentTransaction != null) connProvider.CurrentTransaction.Dispose(); if (connProvider.DBConnection != null) { if (connProvider.DBConnection.State == ConnectionState.Open) connProvider.DBConnection.Close(); } myMemberPackage.MainConnactionIsCreatedLocal = true; packageExt.MainConnactionIsCreatedLocal = true; } } }